Sobes.tech
Middle

Pověz mi o transportní vrstvě (transport layer) modelu TCP/IP.

sobes.tech AI

Odpověď od AI

Transportní vrstva TCP/IP zajišťuje spojení mezi procesy spuštěnými na různých hostitelích. Hlavní úkoly:

  • Identifikace aplikací/procesů na hostiteli (přes porty).
  • Poskytování služeb přenosu dat:
    • Spolehlivý, seřazený přenos (TCP).
    • Nespolehlivý, bez záruky přenos (UDP).

Dva hlavní protokoly:

  • Transmission Control Protocol (TCP):
    • Spojení orientované.
    • Zaručuje doručení paketů, zachování pořadí, řízení toku a řízení přetížení.
    • Používá se pro aplikace vyžadující spolehlivý přenos (HTTP, FTP, SMTP).
  • User Datagram Protocol (UDP):
    • Bez spojení.
    • Není zaručeno doručení, pořadí nebo řízení toku.
    • Nízká latence, vhodné pro časově citlivé aplikace, kde je malá ztráta dat přijatelná (DNS, VoIP, streamované video).

Segmenty TCP obsahují pole pro: zdrojové/cílové porty, sekvenční čísla, čísla potvrzení, flagy (SYN, ACK, FIN), kontrolní součet.

Datagramy UDP obsahují pole pro: zdrojové/cílové porty, délku a kontrolní součet.

Porty (ports): 16bitová čísla používaná pro multiplexování/demultiplexování dat mezi procesy.

  • Well-known ports (0-1023): Vyhrazené pro standardní služby (80 pro HTTP, 443 pro HTTPS, 22 pro SSH).
  • Registered ports (1024-49151): Používají se pro soukromé aplikace registrované u IANA.
  • Dynamic/Private ports (49152-65535): Používají je klienti pro odchozí připojení.

Příklad navázání TCP spojení (Three-way Handshake):

  1. Klient odešle segment s flagou SYN a počátečním sekvenčním číslem.
  2. Server obdrží SYN, odpoví segmentem s flagami SYN a ACK, svým počátečním sekvenčním číslem a ACK číslem rovno client_seq + 1.
  3. Klient obdrží SYN+ACK, odpoví segmentem s flagou ACK a ACK číslem rovno server_seq + 1. Spojení je navázáno.
// Příklad struktury hlavičky TCP (zjednodušená)
struct tcp_header {
    unsigned short src_port;       // Zdrojový port
    unsigned short dest_port;      // Cílový port
    unsigned int   seq_num;        // Sekvenční číslo
    unsigned int   ack_num;        // Číslo potvrzení
    unsigned short flags;          // Flagy (SYN, ACK, FIN apod.)
    // další pole...
};
// Příklad struktury hlavičky UDP (zjednodušená)
struct udp_header {
    unsigned short src_port;       // Zdrojový port
    unsigned short dest_port;      // Cílový port
    unsigned short length;         // Délka UDP datagramu
    unsigned short checksum;       // Kontrolní součet
};