Middle
Papasakokite apie TCP/IP modelio transporto sluoksnį (transport layer).
sobes.tech AI
Atsakymas iš AI
Transporto sluoksnis TCP/IP užtikrina ryšį tarp procesų, paleistų skirtinguose hostuose. Pagrindiniai uždaviniai:
- Programų/procesų identifikavimas host'e (per prievadus).
- Duomenų perdavimo paslaugų teikimas:
- Patikimas, tvarkingas perdavimas (TCP).
- Nepatikimas, be garantijos perdavimas (UDP).
Du pagrindiniai protokolai:
- Transmission Control Protocol (TCP):
- Ryšio orientuotas.
- Garantuoja paketų pristatymą, tvarką, srauto valdymą ir perkrovos valdymą.
- Naudojamas patikimam perdavimui reikalaujančioms programoms (HTTP, FTP, SMTP).
- User Datagram Protocol (UDP):
- Be ryšio.
- Neužtikrina pristatymo, tvarkos ar srauto valdymo.
- Žemas delsas, tinkamas laiko jautrioms programoms, kur mažas duomenų praradimas yra priimtinas (DNS, VoIP, srautinis vaizdo įrašas).
TCP segmentai apima laukus: šaltinio/taikinio prievadus, sekos numerius, patvirtinimo numerius, žymes (SYN, ACK, FIN), kontrolinę sumą.
UDP datagramai apima laukus: šaltinio/taikinio prievadus, ilgį ir kontrolinę sumą.
Prievadai (ports): 16 bitų skaičiai, naudojami duomenų multiplexingui/demultiplexingui tarp procesų.
- Well-known ports (0-1023): rezervuoti standartinėms paslaugoms (80 HTTP, 443 HTTPS, 22 SSH).
- Registered ports (1024-49151): naudojami privačioms programoms, įregistruotoms IANA.
- Dynamic/Private ports (49152-65535): naudojami klientų išeinantiems ryšiams.
Pavyzdys, kaip nustatyti TCP ryšį (Three-way Handshake):
- Klientas siunčia segmentą su SYN žyme ir pradine sekos numeriu.
- Serveris gauna SYN, atsako segmentu su SYN ir ACK žymėmis, savo pradiniu sekos numeriu ir patvirtinimo numeriu, lygų client_seq + 1.
- Klientas gauna SYN+ACK, atsako segmentu su ACK žyme ir patvirtinimo numeriu, lygų server_seq + 1. Ryšys yra nustatytas.
// TCP antraštės pavyzdys (supaprastintas)
struct tcp_header {
unsigned short src_port; // Šaltinio prievadas
unsigned short dest_port; // Tikslo prievadas
unsigned int seq_num; // Sekos numeris
unsigned int ack_num; // Patvirtinimo numeris
unsigned short flags; // Žymės (SYN, ACK, FIN ir kt.)
// kiti laukai...
};
// UDP antraštės pavyzdys (supaprastintas)
struct udp_header {
unsigned short src_port; // Šaltinio prievadas
unsigned short dest_port; // Tikslo prievadas
unsigned short length; // UDP datagramo ilgis
unsigned short checksum; // Kontrolinė suma
};