Come funziona il protocollo TCP?
sobes.tech AI
Risposta dell'AI
TCP (Transmission Control Protocol) è un protocollo di livello di trasporto che garantisce una consegna affidabile e orientata alla connessione dei dati.
Aspetti chiave del funzionamento:
-
Handshake a tre vie (Three-way Handshake):
- Il client invia un pacchetto SYN (Synchronize) con un numero di sequenza iniziale (ISN).
- Il server riceve il SYN, invia un SYN-ACK (Synchronize-Acknowledge) contenente il suo ISN e una conferma (ACK) dell'ISN del client (
numero di riconoscimento = client ISN + 1). - Il client riceve il SYN-ACK, invia un ACK che conferma l'ISN del server (
numero di riconoscimento = server ISN + 1). - La connessione è stabilita, e i dati possono essere trasmessi.
-
Trasmissione di flusso di dati: I dati vengono trasmessi come un flusso continuo di byte, non come pacchetti separati. TCP segmenta il flusso di dati in segmenti per la trasmissione.
-
Numerazione di sequenza (Sequence Numbers): Ogni byte nel flusso di dati ha un numero unico. I segmenti contengono il numero del primo byte che contengono (numero di sequenza) e il numero di riconoscimento (acknowledgement number), che indica il prossimo byte che il mittente si aspetta di ricevere.
-
Riconoscimenti (Acknowledgements - ACK): Il destinatario invia un ACK per comunicare al mittente quali dati sono stati ricevuti con successo. Se il mittente non riceve un ACK entro un certo tempo (timeout), reinvia il segmento.
-
Controllo degli errori (Error Control): Vengono utilizzate somme di controllo (checksums) per verificare l'integrità dei dati. Se un segmento è corrotto, viene scartato, e il mittente aspetta un timeout o un ACK duplicato per ritrasmettere.
-
Controllo del flusso (Flow Control): Meccanismo che previene il sovraccarico del buffer del destinatario. Il destinatario informa il mittente della dimensione della sua finestra di ricezione nei pacchetti ACK. Il mittente può inviare solo quanti dati la finestra consente.
-
Controllo della congestione (Congestion Control): Meccanismo per determinare la capacità della rete e regolare dinamicamente la velocità di trasmissione per evitare congestione. Include algoritmi come slow start, congestion avoidance, fast retransmit e fast recovery.
-
Chiusura della connessione: Di solito utilizza un handshake a quattro vie:
- Una parte invia un pacchetto FIN (Finish).
- L'altra parte invia un ACK per il FIN.
- L'altra parte invia il proprio FIN (dopo aver terminato di inviare i propri dati rimanenti).
- La prima parte invia un ACK per questo FIN.
- La connessione viene chiusa.
Struttura del segmento TCP:
| Campo | Dimensione (byte) | Descrizione |
|---|---|---|
| Porta di origine | 2 | Porta del mittente |
| Porta di destinazione | 2 | Porta del destinatario |
| Numero di sequenza | 4 | Numero del primo byte nel segmento |
| Numero di riconoscimento | 4 | Numero del prossimo byte atteso |
| Offset dei dati / Lunghezza dell'intestazione | 4 bit | Lunghezza dell'intestazione TCP |
| Riservato | 6 bit | Riservato |
| Flags (Bit di controllo) | 6 bit | URG, ACK, PSH, RST, SYN, FIN |
| Dimensione della finestra | 2 | Dimensione della finestra del destinatario |
| Checksum | 2 | Somma di controllo dell'intestazione e dei dati |
| Puntatore urgente | 2 | Indica dati urgenti (se URG è impostato) |
| Opzioni | Variabile | Opzioni aggiuntive |
| Padding | Variabile | Per l'allineamento dell'intestazione |
| Dati | Variabile | Dati trasmessi |
// Flags (Bit di controllo):
// URG: Campo del puntatore urgente significativo
// ACK: Campo di riconoscimento significativo
// PSH: Funzione push
// RST: Reset della connessione
// SYN: Sincronizza i numeri di sequenza
// FIN: Nessun altro dato dal mittente