Sobes.tech
Middle

Pastāsti par TCP/IP modeļa transporta slāni (transport layer).

sobes.tech AI

Atbilde no AI

Transporta līmenis TCP/IP nodrošina savienojumu starp procesiem, kas darbojas dažādiem hostiem. Galvenie uzdevumi:

  • Programmu/procesu identificēšana uz hosta (caur portiem).
  • Datu pārraides pakalpojumu nodrošināšana:
    • Uzticama, sakārtota pārraide (TCP).
    • Neuzticama, bez garantijas pārraide (UDP).

Divi galvenie protokoli:

  • Transmission Control Protocol (TCP):
    • Savienojuma orientēts.
    • Garantē paketeņu piegādi, saglabā secību, plūsmas kontroli un pārslodzes vadību.
    • Izmanto lietojumprogrammām, kas prasa uzticamu pārraidi (HTTP, FTP, SMTP).
  • User Datagram Protocol (UDP):
    • Bez savienojuma.
    • Negarantē piegādi, secību vai plūsmas kontroli.
    • Zema latentuma, piemērots laika jutīgām lietojumprogrammām, kur mazs datu zudums ir pieņemams (DNS, VoIP, straumēšanas video).

TCP segmenti satur laukus: avota/galamērķa portus, secības numurus, apstiprinājuma numurus, flagus (SYN, ACK, FIN), kontroles summu.

UDP datgrami satur laukus: avota/galamērķa portus, garumu un kontroles summu.

Porti (ports): 16 bitu skaitļi, kas tiek izmantoti datu daudzplūsmu/multiplūsmu starp procesiem.

  • Well-known ports (0-1023): rezervēti standarta pakalpojumiem (80 HTTP, 443 HTTPS, 22 SSH).
  • Registered ports (1024-49151): lieto privātām lietojumprogrammām, kas reģistrētas IANA.
  • Dynamic/Private ports (49152-65535): lieto klienti izejošiem savienojumiem.

Piemērs, kā izveidot TCP savienojumu (Three-way Handshake):

  1. Klients sūta segmentu ar SYN flag un sākuma secības numuru.
  2. Serveris saņem SYN, atbild ar segmentu ar SYN un ACK flagiem, ar savu sākuma secības numuru un apstiprinājuma numuru, kas ir vienāds ar client_seq + 1.
  3. Klients saņem SYN+ACK, atbild ar segmentu ar ACK flag un apstiprinājuma numuru, kas ir vienāds ar server_seq + 1. Savienojums ir izveidots.
// TCP galvenes piemērs (vienkāršots)
struct tcp_header {
    unsigned short src_port;       // Avota ports
    unsigned short dest_port;      // Galamērķa ports
    unsigned int   seq_num;        // Sekvences numurs
    unsigned int   ack_num;        // Apstiprinājuma numurs
    unsigned short flags;          // Flagus (SYN, ACK, FIN un citi)
    // citi lauki...
};
// UDP galvenes piemērs (vienkāršots)
struct udp_header {
    unsigned short src_port;       // Avota ports
    unsigned short dest_port;      // Galamērķa ports
    unsigned short length;         // UDP datagramma garums
    unsigned short checksum;       // Kontrolsumma
};