Trasportu di Affidabilità TCP
Tutti cunniscimu u protocolu TCP cum'è un protocolu di trasportu affidabile, ma cumu assicura l'affidabilità di u trasportu?
Per ottene una trasmissione affidabile, parechji fattori devenu esse presi in cunsiderazione, cum'è a corruzzione di dati, a perdita, a duplicazione è i frammenti fora di ordine. Sè sti prublemi ùn ponu esse risolti, ùn si pò ottene una trasmissione affidabile.
Dunque, TCP impiega meccanismi cum'è u numeru di sequenza, a risposta di ricunniscenza, u cuntrollu di rinviu, a gestione di cunnessione è u cuntrollu di finestra per ottene una trasmissione affidabile.
In questu articulu, ci cuncentreremu nantu à a finestra scorrevole, u cuntrollu di u flussu è u cuntrollu di a congestione di TCP. U mecanismu di ritrasmissione hè trattatu separatamente in a prossima sezione.
Cuntrollu di u flussu di rete
U Cuntrollu di u Flussu di a Rete, o cunnisciutu cum'è Cuntrollu di u Trafficu di a Rete, hè in realtà una manifestazione di a relazione suttile trà i pruduttori è i cunsumatori. Probabilmente avete scontru stu scenariu assai à u travagliu o in interviste. Se a capacità di u pruduttore di pruduce supera assai a capacità di u cunsumadore di cunsumà, questu farà cresce a coda indefinitamente. In un casu più seriu, pudete sapè chì quandu i missaghji RabbitMQ si accumulanu troppu, questu pò causà una degradazione di e prestazioni di tuttu u servitore MQ. U listessu hè veru per TCP; se ùn hè micca verificatu, troppi missaghji saranu messi in a rete, è i cunsumatori averanu superatu a so capacità, mentre chì i pruduttori continueranu à mandà missaghji duplicati, ciò chì influenzerà assai e prestazioni di a rete.
Per risolve stu fenomenu, TCP furnisce un mecanismu per chì u mittente possa cuntrullà a quantità di dati mandati in basa à a capacità di ricezione attuale di u destinatariu, ciò chì hè cunnisciutu cum'è cuntrollu di flussu. U destinatariu mantene una finestra di ricezione, mentre chì u mittente mantene una finestra di inviu. Ci vole à nutà chì ste finestre sò solu per una sola cunnessione TCP è micca tutte e cunnessione spartenu una finestra.
TCP furnisce u cuntrollu di u flussu aduprendu una variabile per una finestra di ricezione. A finestra di ricezione dà à u mittente una indicazione di quantu spaziu di cache hè sempre dispunibule. U mittente cuntrolla a quantità di dati mandati secondu a capacità d'accettazione attuale di u destinatariu.
L'ospite di u ricevitore notifica à u mittente a dimensione di i dati ch'ellu pò riceve, è u mittente manda finu à questu limite. Questu limite hè a dimensione di a finestra, vi ricordate l'intestazione TCP? Ci hè un campu di finestra di ricezione, chì hè adupratu per indicà u numeru di byte chì u ricevitore hè capace o dispostu à riceve.
L'ospite chì manda periodicamente manda un pacchettu di sonda di finestra, chì hè adupratu per rilevà se l'ospite di u ricevitore hè sempre capace di accettà dati. Quandu u buffer di u ricevitore hè in periculu di traboccamentu, a dimensione di a finestra hè impostata à un valore più chjucu per urdinà à u mittente di cuntrullà a quantità di dati mandati.
Eccu un diagrama di cuntrollu di flussu di rete:
Cuntrollu di a Congestione di a Rete
Prima di introduce u cuntrollu di a congestione, ci vole à capisce chì, in più di a finestra di ricezione è di a finestra di spedizione, ci hè ancu una finestra di congestione, chì hè principalmente aduprata per risolve u prublema di a velocità à quale u mittente principia à mandà dati à a finestra di ricezione. Dunque, a finestra di congestione hè ancu mantenuta da u mittente TCP. Avemu bisognu di un algoritmu per decide quanti dati sò apprupriati da mandà, postu chì mandà troppu pochi o troppu dati ùn hè micca ideale, da quì u cuncettu di una finestra di congestione.
In u cuntrollu di flussu di rete precedente, ciò chì avemu evitatu era chì u mittente riempissi a cache di u destinatariu cù dati, ma ùn sapemu micca ciò chì stava succedendu in a rete. Tipicamente, e rete di computer sò in un ambiente spartutu. Di cunsiguenza, ci pò esse una congestione di rete per via di a cumunicazione trà altri host.
Quandu a rete hè congestionata, se un gran numeru di pacchetti cuntinueghja à esse mandati, pò causà prublemi cum'è ritardu è perdita di pacchetti. À questu puntu, TCP ritrasmetterà i dati, ma a ritrasmissione aumenterà u pesu nantu à a rete, risultendu in ritardi più grandi è più perdite di pacchetti. Questu pò entre in un circulu viziosu è cuntinuà à cresce.
Cusì, TCP ùn pò micca ignurà ciò chì accade nantu à a rete. Quandu a rete hè congestionata, TCP si sacrifica riducendu a quantità di dati chì manda.
Dunque, si pruponi un cuntrollu di congestione, chì hà per scopu di evità di riempie tutta a rete cù dati da u mittente. Per regulà a quantità di dati chì u mittente deve mandà, TCP definisce un cuncettu chjamatu finestra di congestione. L'algoritmu di cuntrollu di congestione aghjusterà a dimensione di a finestra di congestione secondu u gradu di congestione di a rete, in modu da cuntrullà a quantità di dati mandati da u mittente.
Chì ghjè una finestra di congestione ? Chì hà da fà cù a finestra d'inviu ?
A Finestra di Congestione hè una variabile di statu mantenuta da u mittente chì determina a quantità di dati chì u mittente pò mandà. A finestra di congestione cambia dinamicamente secondu u livellu di congestione di a rete.
A Finestra di Trasmissione hè una dimensione di finestra concordata trà u trasmettitore è u destinatariu chì indica a quantità di dati chì u destinatariu pò riceve. A finestra di congestione è a finestra di trasmissione sò correlate; a finestra di trasmissione hè generalmente uguale à u minimu di e finestre di congestione è di ricezione, vale à dì, swnd = min(cwnd, rwnd).
A finestra di congestione cwnd cambia cusì:
S'ellu ùn ci hè micca congestione in a rete, vale à dì, ùn si verifica micca un timeout di ritrasmissione, a finestra di congestione aumenta.
S'ellu ci hè una congestione in a rete, a finestra di congestione diminuisce.
U mittente determina se a rete hè congestionata osservendu se u pacchettu di ricunniscenza ACK hè ricevutu in u tempu specificatu. Se u mittente ùn riceve micca u pacchettu di ricunniscenza ACK in u tempu specificatu, si cunsidereghja chì a rete hè congestionata.
In più di a finestra di congestione, hè ora di discute l'algoritmu di cuntrollu di congestione TCP. L'algoritmu di cuntrollu di congestione TCP hè custituitu da trè parti principali:
Partenza lenta:Inizialmente, a finestra di congestione cwnd hè relativamente chjuca, è u mittente aumenta a finestra di congestione in modu esponenziale per adattassi rapidamente à a capacità di a rete.
Evitazione di a congestione:Dopu chì a finestra di congestione supera una certa soglia, u mittente aumenta a finestra di congestione in modu lineare per rallentà u ritmu di crescita di a finestra di congestione è evità di sovraccaricà a rete.
Recuperazione rapida:Sè si verifica una congestione, u mittente dimezza a finestra di congestione è entra in u statu di ricuperazione rapida per determinà a locu di a ricuperazione di a rete attraversu l'acks duplicati ricevuti, è dopu cuntinueghja à aumentà a finestra di congestione.
Principiu lentu
Quandu una cunnessione TCP hè stabilita, a finestra di congestione cwnd hè inizialmente impostata à un valore minimu MSS (dimensione massima di segmentu). In questu modu, a velocità di trasmissione iniziale hè di circa MSS/RTT byte/secondu. A larghezza di banda dispunibule hè generalmente assai più grande di MSS/RTT, dunque TCP vole truvà a velocità di trasmissione ottimale, chì pò esse ottenuta per mezu di un avviamentu lentu.
In u prucessu di partenza lenta, u valore di a finestra di congestione cwnd serà inizializatu à 1 MSS, è ogni volta chì u segmentu di pacchettu trasmessu hè ricunnisciutu, u valore di cwnd serà aumentatu di un MSS, vale à dì, u valore di cwnd diventerà 2 MSS. Dopu à quessa, u valore di cwnd hè radduppiatu per ogni trasmissione riescita di un segmentu di pacchettu, è cusì via. U prucessu di crescita specificu hè mostratu in a figura seguente.
Tuttavia, a velocità di trasmissione ùn pò micca sempre cresce; a crescita deve finisce qualchì volta. Dunque, quandu finisce l'aumentu di a velocità di trasmissione? L'iniziu lentu finisce tipicamente l'aumentu di a velocità di trasmissione in unu di parechji modi:
U primu modu hè u casu di perdita di pacchetti durante u prucessu di spedizione di partenza lenta. Quandu si verifica una perdita di pacchetti, TCP imposta a finestra di congestione cwnd di u mittente à 1 è riavvia u prucessu di partenza lenta. À questu puntu, hè introduttu un cuncettu di soglia di partenza lenta ssthresh, chì u so valore iniziale hè a metà di u valore di cwnd chì genera a perdita di pacchetti. Vale à dì, quandu si detecta una congestione, u valore di ssthresh hè a metà di u valore di a finestra.
U secondu modu hè di currelà direttamente cù u valore di a soglia di partenza lenta ssthresh. Siccomu u valore di ssthresh hè a mità di u valore di a finestra quandu a congestione hè rilevata, a perdita di pacchetti pò accade cù ogni radduppiu quandu cwnd hè più grande di ssthresh. Dunque, hè megliu impostà cwnd à ssthresh, ciò chì farà chì TCP passi in modalità di cuntrollu di congestione è finisca a partenza lenta.
L'ultimu modu in cui un principiu lentu pò finisce hè se trè acks ridondanti sò rilevati, TCP esegue una ritrasmissione rapida è entra in u statu di ripresa. (S'ellu ùn hè micca chjaru perchè ci sò trè pacchetti ACK, serà spiegatu separatamente in u mecanismu di ritrasmissione.)
Evitazione di a congestione
Quandu TCP entra in u statu di cuntrollu di congestione, cwnd hè impostu à a mità di a soglia di congestione ssthresh. Questu significa chì u valore di cwnd ùn pò esse radduppiatu ogni volta chì un segmentu di pacchettu hè ricevutu. Invece, si aduttà un approcciu relativamente cunservatore in u quale u valore di cwnd hè aumentatu solu di un MSS (lunghezza massima di u segmentu di pacchettu) dopu chì ogni trasmissione hè cumpletata. Per esempiu, ancu s'è 10 segmenti di pacchettu sò ricunnisciuti, u valore di cwnd aumenterà solu di un MSS. Questu hè un mudellu di crescita lineare è hà ancu un limite superiore per a crescita. Quandu si verifica una perdita di pacchetti, u valore di cwnd hè cambiatu in un MSS, è u valore di ssthresh hè impostu à a mità di cwnd. Oppure fermerà ancu a crescita di MSS quandu si ricevenu 3 risposte ACK ridondanti. Se trè acks ridondanti sò sempre ricevuti dopu avè dimezzatu u valore di cwnd, u valore di ssthresh hè registratu cum'è a mità di u valore di cwnd è si entra in u statu di ripresa rapida.
Recuperazione Rapida
In u statu di Recuperazione Rapida, u valore di a finestra di congestione cwnd hè aumentatu di un MSS per ogni ACK ridondante ricevutu, vale à dì, ACK chì ùn ghjunghje micca in sequenza. Questu hè per fà usu di i segmenti di pacchetti chì sò stati trasmessi cù successu in a rete per migliurà l'efficienza di trasmissione u più pussibule.
Quandu ghjunghje un ACK di u segmentu di pacchettu persu, TCP diminuisce u valore di cwnd è dopu entra in u statu di evitazione di congestione. Questu hè per cuntrullà a dimensione di a finestra di congestione è evità di aumentà ulteriormente a congestione di a rete.
Sè si verifica un timeout dopu à u statu di cuntrollu di congestione, a cundizione di a rete diventa più seria è TCP migra da u statu di evitazione di a congestione à u statu di partenza lenta. In questu casu, u valore di a finestra di congestione cwnd hè impostu à 1 MSS, a lunghezza massima di u segmentu di pacchettu, è u valore di a soglia di partenza lenta ssthresh hè impostu à a metà di cwnd. U scopu di questu hè di aumentà gradualmente a dimensione di a finestra di congestione dopu chì a rete si hè ripresa per equilibrà a velocità di trasmissione è u gradu di congestione di a rete.
Riassuntu
Cum'è un protocolu di trasportu affidabile, TCP implementa un trasportu affidabile per numeru di sequenza, ricunniscenza, cuntrollu di ritrasmissione, gestione di cunnessione è cuntrollu di finestra. Frà questi, u mecanismu di cuntrollu di flussu cuntrolla a quantità di dati mandati da u mittente secondu a capacità di ricezione effettiva di u destinatariu, ciò chì evita i prublemi di congestione di a rete è di degradazione di e prestazioni. U mecanismu di cuntrollu di congestione evita l'occorrenza di congestione di a rete aghjustendu a quantità di dati mandati da u mittente. I cuncetti di finestra di congestione è finestra d'inviu sò ligati trà di elli, è a quantità di dati à u mittente hè cuntrullata aghjustendu dinamicamente a dimensione di a finestra di congestione. Partenza lenta, evitazione di a congestione è ripresa rapida sò e trè parti principali di l'algoritmu di cuntrollu di congestione TCP, chì aghjustanu a dimensione di a finestra di congestione attraversu diverse strategie per adattassi à a capacità è à u gradu di congestione di a rete.
In a prossima sezione, esamineremu in dettagliu u mecanismu di ritrasmissione di TCP. U mecanismu di ritrasmissione hè una parte impurtante di TCP per ottene una trasmissione affidabile. Assicura a trasmissione affidabile di dati ritrasmettendu dati persi, currutti o ritardati. U principiu d'implementazione è a strategia di u mecanismu di ritrasmissione seranu introdutti è analizati in dettagliu in a prossima sezione. Restate sintonizzati!
Data di publicazione: 24 di ferraghju 2025