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):
- Klient odosiela segment s flagou SYN a počiatočným poradovým číslom.
- 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.
- 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
};