Sobes.tech
Middle

Vorbește despre stratul de transport (transport layer) al modelului TCP/IP.

sobes.tech AI

Răspuns de la AI

Nivelul de transport TCP/IP asigură comunicarea între procesele care rulează pe gazde diferite. Principalele sarcini:

  • Identificarea aplicațiilor/proceselor pe gazdă (prin porturi).
  • Oferirea serviciilor de livrare a datelor:
    • Livrare fiabilă și ordonată (TCP).
    • Livrare nefiabilă, fără garanții (UDP).

Doi protocoale principale:

  • Protocolul de Control al Transmiterii (TCP):
    • Orientat pe conexiune.
    • Garantează livrarea pachetelor, păstrează ordinea, controlează fluxul și gestionează suprasarcina.
    • Folosit pentru aplicații care necesită transmitere fiabilă (HTTP, FTP, SMTP).
  • Protocolul Datagramelor Utilizatorului (UDP):
    • Fără conexiune.
    • Nu garantează livrarea, ordinea sau controlul fluxului.
    • Latenta scăzută, potrivit pentru aplicații sensibile la timp, unde o pierdere mică de date este acceptabilă (DNS, VoIP, streaming video).

Segmentele TCP includ câmpuri pentru: porturi sursă/destinație, numere de secvență, numere de confirmare, steaguri (SYN, ACK, FIN), sumă de verificare.

Datagrammele UDP includ câmpuri pentru: porturi sursă/destinație, lungime și sumă de verificare.

Porturi: numere de 16 biți folosite pentru multiplexare/demultiplexare de date între procese.

  • Porturi bine cunoscute (0-1023): Rezervate pentru servicii standard (80 pentru HTTP, 443 pentru HTTPS, 22 pentru SSH).
  • Porturi înregistrate (1024-49151): Folosite pentru aplicații private înregistrate la IANA.
  • Porturi dinamice/privat (49152-65535): Folosite de clienți pentru conexiuni de ieșire.

Exemplu de stabilire a unei conexiuni TCP (Three-way Handshake):

  1. Clientul trimite un segment cu steagul SYN și un număr de secvență inițial.
  2. Serverul primește SYN, răspunde cu un segment cu steagurile SYN și ACK, cu propriul număr de secvență inițial și un număr de confirmare egal cu client_seq + 1.
  3. Clientul primește SYN+ACK, răspunde cu un segment cu steagul ACK și un număr de confirmare egal cu server_seq + 1. Conexiunea este stabilită.
// Exemplu de structură a antetului TCP (simplificat)
struct tcp_header {
    unsigned short src_port;       // Port sursă
    unsigned short dest_port;      // Port destinație
    unsigned int   seq_num;        // Număr de secvență
    unsigned int   ack_num;        // Număr de confirmare
    unsigned short flags;          // Steaguri (SYN, ACK, FIN etc.)
    // alte câmpuri...
};
// Exemplu de structură a antetului UDP (simplificat)
struct udp_header {
    unsigned short src_port;       // Port sursă
    unsigned short dest_port;      // Port destinație
    unsigned short length;         // Lungimea datagramului UDP
    unsigned short checksum;       // Sumă de verificare
};