Trasporto di affidabilità TCP
Conosciamo tutti il protocollo TCP come protocollo di trasporto affidabile, ma in che modo garantisce l'affidabilità del trasporto?
Per ottenere una trasmissione affidabile, è necessario considerare molti fattori, come corruzione dei dati, perdita, duplicazione e frammenti fuori servizio. Se questi problemi non possono essere risolti, la trasmissione affidabile non può essere raggiunta.
Pertanto, TCP impiega meccanismi come il numero di sequenza, la risposta di riconoscimento, il controllo di nuovamentele, la gestione della connessione e il controllo della finestra per ottenere una trasmissione affidabile.
In questo documento, ci concentreremo sulla finestra scorrevole, sul controllo del flusso e sul controllo della congestione di TCP. Il meccanismo di ritrasmissione è coperto separatamente nella sezione successiva.
Controllo del flusso di rete
Il controllo del flusso di rete o conosciuto come controllo del traffico di rete è in realtà una manifestazione della sottile relazione tra produttori e consumatori. Probabilmente ti sei imbattuto in questo scenario molto al lavoro o nelle interviste. Se la capacità del produttore di produrre supera notevolmente la capacità del consumatore di consumare, causerà la crescita indefinita della coda. In un caso più grave, potresti sapere che quando i messaggi di RabbitMQ si accumulano troppo, possono causare il degrado delle prestazioni dell'intero server MQ. Lo stesso vale per TCP; Se non controllati, troppi messaggi verranno inseriti nella rete e i consumatori avranno superato la loro capacità, mentre i produttori continueranno a inviare messaggi duplicati, il che influenzerà notevolmente le prestazioni della rete.
Per affrontare questo fenomeno, TCP fornisce un meccanismo per il mittente per controllare la quantità di dati inviati in base alla capacità di ricezione effettiva del ricevitore, che è nota come controllo del flusso. Il ricevitore mantiene una finestra di ricezione, mentre il mittente mantiene una finestra di invio. Va notato che queste finestre sono solo per una singola connessione TCP e non tutte le connessioni condividono una finestra.
TCP fornisce il controllo del flusso utilizzando una variabile per una finestra di ricezione. La finestra di ricezione fornisce al mittente un'indicazione di quanto spazio della cache è ancora disponibile. Il mittente controlla l'importo dei dati inviati in base alla capacità di accettazione effettiva del ricevitore.
L'host del ricevitore notifica al mittente delle dimensioni dei dati che può ricevere e il mittente invia a questo limite. Questo limite è la dimensione della finestra, ricordi l'intestazione TCP? C'è un campo di finestra di ricezione, che viene utilizzato per indicare il numero di byte che il ricevitore è in grado o disposto a ricevere.
L'host del mittente invierà periodicamente un pacchetto di sonda per finestre, che viene utilizzato per rilevare se l'host del ricevitore è ancora in grado di accettare i dati. Quando il buffer del ricevitore è in pericolo di traboccamento, la dimensione della finestra è impostata su un valore inferiore per istruire il mittente di controllare l'importo dei dati inviati.
Ecco un diagramma di controllo del flusso di rete:
Controllo della congestione della rete
Prima di introdurre il controllo della congestione, dobbiamo capire che oltre alla finestra di ricezione e alla finestra di invio, esiste anche una finestra di congestione, che viene utilizzata principalmente per risolvere il problema a quale tariffa il mittente inizia a inviare dati alla finestra di ricezione. Pertanto, la finestra di congestione è anche mantenuta dal mittente TCP. Abbiamo bisogno di un algoritmo per decidere quanti dati sono appropriati da inviare, poiché inviare troppo o troppi dati non è l'ideale, quindi il concetto di finestra di congestione.
Nel precedente controllo del flusso di rete, ciò che abbiamo evitato era il mittente che riempieva la cache del ricevitore con i dati, ma non sapevamo cosa stesse succedendo nella rete. In genere, le reti di computer si trovano in un ambiente condiviso. Di conseguenza, potrebbe esserci una congestione della rete dovuta alla comunicazione tra altri host.
Quando la rete è congestionata, se viene continuato un gran numero di pacchetti, può causare problemi come il ritardo e la perdita di pacchetti. A questo punto, TCP ritrasmetterà i dati, ma la ritrasmissione aumenterà l'onere sulla rete, con conseguenti ritardi e più perdite di pacchetti. Questo può entrare in un circolo vizioso e continuare a diventare più grandi.
Pertanto, il TCP non può ignorare ciò che sta accadendo sulla rete. Quando la rete è congestionata, TCP si sacrifica riducendo la quantità di dati che invia.
Pertanto, viene proposto il controllo della congestione, che mira a evitare di riempire l'intera rete con i dati del mittente. Per regolare la quantità di dati che il mittente dovrebbe inviare, TCP definisce un concetto chiamato finestra di congestione. L'algoritmo di controllo della congestione regolerà le dimensioni della finestra di congestione in base al grado di congestione della rete, in modo da controllare la quantità di dati inviati dal mittente.
Cos'è una finestra di congestione? Cosa c'entra questo con la finestra di invio?
La finestra di congestione è una variabile di stato gestita dal mittente che determina l'importo dei dati che il mittente può inviare. La finestra di congestione cambia dinamicamente in base al livello di congestione della rete.
La finestra di invio è una dimensione della finestra concordata tra il mittente e il ricevitore che indica l'importo dei dati che il ricevitore può ricevere. La finestra di congestione e la finestra di invio sono correlate; La finestra di invio è generalmente uguale al minimo della congestione e della ricezione di finestre, cioè Swnd = min (CWND, RWND).
La finestra di congestione cambia come segue:
Se non vi è alcuna congestione nella rete, cioè non si verifica timeout di ritrasmissione, la finestra di congestione aumenta.
In caso di congestione nella rete, la finestra di congestione diminuisce.
Il mittente determina se la rete è congestionata osservando se il pacchetto di riconoscimento ACK viene ricevuto entro il tempo specificato. Se il mittente non riceve il pacchetto di riconoscimento ACK entro il tempo specificato, si considera che la rete sia congestionata.
Oltre alla finestra di congestione, è tempo di discutere l'algoritmo di controllo della congestione TCP. L'algoritmo di controllo della congestione TCP è costituito da tre parti principali:
Inizio lento:Inizialmente, la finestra di congestione CWND è relativamente piccola e il mittente aumenta esponenzialmente la finestra di congestione per adattarsi rapidamente alla capacità della rete.
Evitamento della congestione:Dopo che la finestra di congestione ha superato una certa soglia, il mittente aumenta la finestra di congestione in modo lineare per rallentare il tasso di crescita della finestra di congestione ed evitare di sovraccaricare la rete.
Recupero veloce:Se si verifica la congestione, il mittente dimezza la finestra di congestione ed entra nello stato di recupero veloce per determinare la posizione del recupero della rete attraverso le ACK duplicate ricevute, quindi continua ad aumentare la finestra di congestione.
Inizio lento
Quando viene stabilita una connessione TCP, la finestra di congestione CWND viene inizialmente impostata su un valore MSS minimo (dimensione massima del segmento). In questo modo, la tariffa di invio iniziale riguarda i byte MSS/RTT/secondo. La larghezza di banda disponibile effettiva è generalmente molto più grande di MSS/RTT, quindi TCP vuole trovare la velocità di invio ottimale, che può essere raggiunta mediante lento.
Nel processo di avvio lento, il valore della finestra di congestione CWND verrà inizializzato in 1 MSS e ogni volta che il segmento dei pacchetti trasmessi viene riconosciuto, il valore di CWND sarà aumentato da un MSS, ovvero il valore di CWND diventerà 2 MSS. Successivamente, il valore di CWND viene raddoppiato per ogni trasmissione riuscita di un segmento di pacchetti e così via. Il processo di crescita specifico è mostrato nella figura seguente.
Tuttavia, il tasso di invio non può sempre crescere; La crescita deve terminare qualche volta. Quindi, quando aumenta il tasso di invio? Slow-Start in genere termina l'aumento della velocità di invio in uno dei vari modi:
Il primo modo è il caso della perdita di pacchetti durante il processo di invio di inizio lento. Quando si verifica una perdita di pacchetti, TCP imposta la finestra di congestione del mittente CWND a 1 e riavvia il processo di avvio lento. A questo punto, viene introdotto un concetto di sshresh a soglia di avvio lento, il cui valore iniziale è la metà del valore di CWND che genera perdita di pacchetti. Cioè, quando viene rilevata la congestione, il valore di SSThresh è la metà del valore della finestra.
Il secondo modo è correlare direttamente con il valore della soglia rallentata SSThresh. Poiché il valore di SSThresh è la metà del valore della finestra quando viene rilevata la congestione, la perdita di pacchetti può verificarsi con ogni raddoppio quando CWND è maggiore di SSThresh. Pertanto, è meglio impostare CWND su SSThresh, che farà passare il TCP alla modalità di controllo della congestione e la fine del rallentamento.
L'ultimo modo in cui l'inizio lento può terminare è se vengono rilevati tre ACK ridondanti, TCP esegue una rapida ritrasmissione ed entra nello stato di recupero. (Se non è chiaro perché ci siano tre pacchetti ACK, verrà spiegato separatamente nel meccanismo di ritrasmissione.)
Evitamento della congestione
Quando il TCP entra nello stato di controllo della congestione, CWND è impostato a metà della soglia di congestione SSThresh. Ciò significa che il valore di CWND non può essere raddoppiato ogni volta che viene ricevuto un segmento di pacchetti. Invece, viene adottato un approccio relativamente conservativo in cui il valore di CWND viene aumentato di un solo MSS (lunghezza massima del segmento dei pacchetti) dopo il completamento di ciascuna trasmissione. Ad esempio, anche se sono riconosciuti 10 segmenti di pacchetti, il valore di CWND aumenterà solo di un MSS. Questo è un modello di crescita lineare e ha anche un limite superiore alla crescita. Quando si verifica la perdita di pacchetti, il valore di CWND viene modificato in un MSS e il valore di SSThresh è impostato alla metà di CWND. Oppure fermerà anche la crescita di MSS quando vengono ricevute 3 risposte ACK ridondanti. Se vengono ancora ricevute tre ACK ridondanti dopo aver dimezzato il valore di CWND, il valore di SSThresh viene registrato come metà del valore di CWND e lo stato di recupero veloce.
Recupero veloce
Nello stato di recupero veloce, il valore della finestra di congestione CWND è aumentato di un MSS per ogni ACK ridondante ricevuto, ovvero ACK che non arriva in sequenza. Questo per utilizzare i segmenti di pacchetti che sono stati trasmessi con successo nella rete per migliorare l'efficienza di trasmissione il più possibile.
Quando arriva un ACK del segmento dei pacchetti persi, TCP riduce il valore di CWND e quindi entra nello stato di evitamento della congestione. Questo per controllare le dimensioni della finestra di congestione ed evitare ulteriormente l'aumento della congestione della rete.
Se si verifica un timeout dopo lo stato di controllo della congestione, la condizione di rete diventa più grave e il TCP migra dallo stato di evitamento della congestione allo stato lento. In questo caso, il valore della finestra di congestione CWND è impostato su 1 MSS, la lunghezza massima del segmento dei pacchetti e il valore della soglia di avvio lento SSThresh è impostato su metà di CWND. Lo scopo è quello di aumentare in modo reagito le dimensioni della finestra di congestione dopo che la rete si riprende per bilanciare il tasso di trasmissione e il grado di congestione della rete.
Riepilogo
Come protocollo di trasporto affidabile, TCP implementa il trasporto affidabile per numero di sequenza, riconoscimento, controllo di ritrasmissione, gestione della connessione e controllo delle finestre. Tra questi, il meccanismo di controllo del flusso controlla la quantità di dati inviati dal mittente in base alla capacità di ricezione effettiva del ricevitore, che evita i problemi della congestione della rete e del degrado delle prestazioni. Il meccanismo di controllo della congestione evita il verificarsi della congestione della rete regolando la quantità di dati inviati dal mittente. I concetti di finestra di congestione e finestra di invio sono correlati tra loro e la quantità di dati sul mittente è controllata regolando dinamicamente le dimensioni della finestra di congestione. Inizio lento, evitamento della congestione e recupero rapido sono le tre parti principali dell'algoritmo di controllo della congestione TCP, che regolano le dimensioni della finestra di congestione attraverso diverse strategie per adattarsi alla capacità e al grado di congestione della rete.
Nella prossima sezione, esamineremo in dettaglio il meccanismo di ritrasmissione di TCP. Il meccanismo di ritrasmissione è una parte importante del TCP per ottenere una trasmissione affidabile. Garantisce la trasmissione affidabile dei dati ritrasmettendo dati persi, corrotti o ritardati. Il principio di attuazione e la strategia del meccanismo di ritrasmissione saranno introdotti e analizzati in dettaglio nella sezione successiva. Rimani sintonizzato!
Tempo post: febbraio-24-2025