Sobes.tech
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):

  1. Klientas siunčia segmentą su SYN žyme ir pradine sekos numeriu.
  2. Serveris gauna SYN, atsako segmentu su SYN ir ACK žymėmis, savo pradiniu sekos numeriu ir patvirtinimo numeriu, lygų client_seq + 1.
  3. 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
};