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):
- Klient odešle segment s flagou SYN a počátečním sekvenčním číslem.
- 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.
- 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
};