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):
- Clientul trimite un segment cu steagul SYN și un număr de secvență inițial.
- 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.
- 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
};