Sobes.tech
Middle

Porozprávaj mi o transportnej vrstve (transport layer) modelu TCP/IP.

sobes.tech AI

Odpoveď od AI

Transportná vrstva TCP/IP zabezpečuje spojenie medzi procesmi spustenými na rôznych hostiteľoch. Hlavné úlohy:

  • Identifikácia aplikácií/procesov na hostiteľovi (cez porty).
  • Poskytovanie služieb prenosu dát:
    • Spoľahlivý, zoradený prenos (TCP).
    • Nespoločný, bez záruky prenosu (UDP).

Dva hlavné protokoly:

  • Transmission Control Protocol (TCP):
    • Spojenie orientované.
    • Zaručuje doručenie paketov, zachovanie poradia, riadenie toku a riadenie preťaženia.
    • Používa sa pre aplikácie vyžadujúce spoľahlivý prenos (HTTP, FTP, SMTP).
  • User Datagram Protocol (UDP):
    • Bez spojenia.
    • Není zaručené doručenie, poradie alebo riadenie toku.
    • Nízka latencia, vhodné pre časovo citlivé aplikácie, kde je malá strata dát prípustná (DNS, VoIP, streamované video).

Segmenty TCP obsahujú polia pre: zdrojové/cieľové porty, sekvenčné čísla, čísla potvrdenia, flagy (SYN, ACK, FIN), kontrolný súčet.

Datagramy UDP obsahujú polia pre: zdrojové/cieľové porty, dĺžku a kontrolný súčet.

Ports (porty): 16-bitové čísla používané pre multiplexovanie/demultiplexovanie dát medzi procesmi.

  • Well-known ports (0-1023): Vyhradené pre štandardné služby (80 pre HTTP, 443 pre HTTPS, 22 pre SSH).
  • Registered ports (1024-49151): Používajú sa pre súkromné aplikácie registrované v IANA.
  • Dynamic/Private ports (49152-65535): Používajú klienti pre odchádzajúce pripojenia.

Príklad nadviazania TCP spojenia (Three-way Handshake):

  1. Klient odosiela segment s flagou SYN a počiatočným poradovým číslom.
  2. Server prijíma SYN, odpovedá segmentom s flagami SYN a ACK, svojím počiatočným poradovým číslom a číslom potvrdenia rovné client_seq + 1.
  3. Klient prijíma SYN+ACK, odpovedá segmentom s flagou ACK a číslom potvrdenia rovné server_seq + 1. Spojenie je nadviazané.
// Príklad štruktúry hlavičky TCP (zjednodušená)
struct tcp_header {
    unsigned short src_port;       // Zdrojový port
    unsigned short dest_port;      // Cieľový port
    unsigned int   seq_num;        // Poradové číslo
    unsigned int   ack_num;        // Číslo potvrdenia
    unsigned short flags;          // Flagy (SYN, ACK, FIN a pod.)
    // ďalšie polia...
};
// Príklad štruktúry hlavičky UDP (zjednodušená)
struct udp_header {
    unsigned short src_port;       // Zdrojový port
    unsigned short dest_port;      // Cieľový port
    unsigned short length;         // Dĺžka UDP datagramu
    unsigned short checksum;       // Kontrolná suma
};