TCP Zouverlässegkeetstransport
Mir all kennen den TCP-Protokoll als e verlässleche Transportprotokoll, awer wéi garantéiert et d'Zouverlässegkeet vum Transport?
Fir eng zouverlässeg Iwwerdroung z'erreechen, musse vill Faktoren berécksiichtegt ginn, wéi zum Beispill Datenkorruptioun, Datenverloscht, Duplikatioun a Shards, déi net an der Reiefolleg sinn. Wann dës Problemer net geléist kënne ginn, kann keng zouverlässeg Iwwerdroung erreecht ginn.
Dofir benotzt TCP Mechanismen wéi Sequenznummer, Bestätegungsäntwert, Resend-Kontroll, Verbindungsmanagement a Fënsterkontroll fir eng zouverlässeg Iwwerdroung z'erreechen.
An dëser Aarbecht konzentréiere mir eis op d'Sliding Window, d'Flow Control an d'Congestion Control vun TCP. De Retransmissionmechanismus gëtt separat an der nächster Sektioun behandelt.
Netzwierkflusskontroll
Network Flow Control oder bekannt als Network Traffic Control ass eigentlech eng Manifestatioun vun der subtiler Bezéiung tëscht Produzenten a Konsumenten. Dir sidd dësem Szenario wahrscheinlech schonn dacks op der Aarbecht oder an Interviewen begéint. Wann d'Produktiounskapazitéit vum Produzent d'Konsuméierekapazitéit vum Konsument däitlech iwwerschreit, féiert dat dozou, datt d'Warteschlaang onendlech laang gëtt. An engem méi eeschte Fall wësst Dir vläicht, datt wann sech RabbitMQ-Messagen ze vill opstapelen, et zu enger Leeschtungsverschlechterung vum ganze MQ-Server féiere kann. Datselwecht gëllt fir TCP; wann net iwwerpréift gëtt, ginn ze vill Messagen an d'Netzwierk geschéckt, an d'Konsumenten hunn hir Kapazitéit iwwerschratt, während d'Produzenten weider duebel Messagen schécken, wat d'Leeschtung vum Netzwierk staark beaflosst.
Fir dëst Phänomen ze bekämpfen, bitt TCP e Mechanismus fir de Sender, fir d'Quantitéit vun den geschéckten Daten ze kontrolléieren, baséiert op der tatsächlecher Empfangskapazitéit vum Empfänger, wat als Flowkontroll bekannt ass. Den Empfänger behält eng Empfangsfenster, während de Sender eng Sendungsfenster behält. Et sollt een drop hiweisen, datt dës Fënstere nëmme fir eng eenzeg TCP-Verbindung sinn an net all Verbindungen eng Fënster deelen.
TCP suergt fir eng Flowkontroll andeems eng Variabel fir eng Empfangsfenster benotzt gëtt. D'Empfangsfenster gëtt dem Sender en Hiwäis drop, wéi vill Cache-Plaz nach verfügbar ass. De Sender kontrolléiert d'Quantitéit vun den Daten, déi geschéckt ginn, no der tatsächlecher Akzeptanzkapazitéit vum Empfänger.
Den Host vum Empfänger informéiert dem Sender iwwer d'Gréisst vun den Daten, déi e kann empfänken, an de Sender schéckt bis zu dëser Limit. Dës Limit ass d'Fënstergréisst, erënnert Dir Iech un den TCP-Header? Et gëtt e Feld fir d'Empfängerfënster, dat benotzt gëtt fir d'Zuel vu Bytes unzeginn, déi den Empfänger empfänke kann oder bereet ass ze empfänken.
Den Host vum Sender schéckt periodesch e Window-Probe-Paket, deen benotzt gëtt fir festzestellen, ob den Host vum Empfänger nach ëmmer fäeg ass, Daten z'akzeptéieren. Wann de Puffer vum Empfänger a Gefor ass ze iwwerfëllen, gëtt d'Fënstergréisst op e méi klenge Wäert gesat, fir de Sender z'instruéieren, d'Quantitéit vun den geschéckten Daten ze kontrolléieren.
Hei ass en Diagramm vun engem Netzwierkflusskontroll:
Netzwierkverstoppungskontroll
Ier mer d'Stauungskontroll aféieren, musse mer verstoen, datt et nieft dem Empfangsfenster an dem Sendefënster och e Stauungsfenster gëtt, deen haaptsächlech benotzt gëtt fir d'Problem ze léisen, mat wéi enger Geschwindegkeet den Sender ufänkt Daten an d'Empfangsfenster ze schécken. Dofir gëtt d'Stauungsfenster och vum TCP-Sender ënnerhalen. Mir brauchen en Algorithmus fir ze entscheeden, wéi vill Daten ubruecht sinn ze schécken, well ze wéineg oder ze vill Daten ze schécken net ideal ass, dofir de Konzept vun engem Stauungsfenster.
An der viregter Netzwierkflusskontroll hu mir vermeit, datt den Sender de Cache vum Empfänger mat Daten fëllt, awer mir woussten net, wat am Netzwierk geschitt ass. Typesch sinn Computernetzwierker an enger gemeinsamer Ëmfeld. Dofir kann et zu enger Stauung am Netzwierk ginn, well d'Kommunikatioun tëscht aneren Hosten besteet.
Wann d'Netzwierk iwwerlaascht ass a weiderhin eng grouss Zuel vu Paketen geschéckt gëtt, kann dat zu Problemer wéi Verspéidungen a Paketverloscht féieren. Zu dësem Zäitpunkt wäert TCP d'Donnéeën nei iwwerdroen, awer d'Neiiwwerdroung wäert d'Belaaschtung vum Netz erhéijen, wat zu gréissere Verspéidungen a méi Paketverloschter féiert. Dëst kann an e béise Kreeslaf geroden an ëmmer méi grouss ginn.
Dofir kann TCP net ignoréieren, wat am Netz geschitt. Wann den Netz iwwerlaascht ass, opfert TCP sech selwer andeems en d'Quantitéit un Daten reduzéiert, déi e schéckt.
Dofir gëtt eng Stauungskontroll virgeschloen, déi drop abzielt, ze vermeiden, datt dat ganzt Netzwierk mat Daten vum Sender gefëllt gëtt. Fir d'Quantitéit un Daten, déi de Sender schécke soll, ze reguléieren, definéiert TCP e Konzept, dat als Stauungsfenster bezeechent gëtt. Den Algorithmus fir d'Stauungskontroll passt d'Gréisst vun der Stauungsfenster un de Stauungsgrad vum Netzwierk un, fir d'Quantitéit un Daten, déi vum Sender geschéckt ginn, ze kontrolléieren.
Wat ass eng Stauungsfenster? Wat huet dat mat der Sendungsfenster ze dinn?
D'Congestion Window ass eng Zoustandsvariabel, déi vum Sender ënnerhale gëtt a bestëmmt, wéi vill Daten de Sender schécke kann. D'Congestion window ännert sech dynamesch jee no der Congestion-Niveau vum Netz.
D'Sendefenster ass eng tëscht Sender an Empfänger vereinbart Fënstergréisst, déi d'Quantitéit un Daten ugeet, déi den Empfänger empfänke kann. D'Stauungsfenster an d'Sendefenster hänken zesummen; d'Sendefenster ass normalerweis gläich dem Minimum vun der Stauungs- an Empfangsfenster, dat heescht swnd = min(cwnd, rwnd).
D'Stauungsfenster cwnd ännert sech wéi follegt:
Wann et keng Stauung am Netz gëtt, dat heescht, wann kee Retransmission-Timeout optrieden, da klëmmt d'Stauungsfënster.
Wann et Stau am Netz gëtt, reduzéiert sech d'Stauungsfënster.
De Sender bestëmmt ob d'Netzwierk iwwerlaascht ass andeems hien observéiert ob den ACK-Bestätegungspaket bannent der spezifizéierter Zäit empfaange gëtt. Wann de Sender den ACK-Bestätegungspaket net bannent der spezifizéierter Zäit empfänkt, gëllt dat als iwwerlaascht d'Netzwierk.
Nieft dem Stauungsfenster ass et Zäit, den TCP-Stauungskontrollalgorithmus ze diskutéieren. Den TCP-Stauungskontrollalgorithmus besteet aus dräi Haaptdeeler:
Luesen Ufank:Ufanks ass d'Stauungsfenster vum Cwnd relativ kleng, an de Sender erhéicht d'Stauungsfenster exponentiell fir sech séier un d'Kapazitéit vum Netz unzepassen.
Stauvermeidung:Nodeems d'Stauungsfënster e bestëmmte Schwellwäert iwwerschratt huet, erhéicht den Sender d'Stauungsfënster linear, fir d'Wuesstumsquote vun der Stauungsfënster ze verlangsamen an eng Iwwerbelaaschtung vum Netz ze vermeiden.
Schnell Erhuelung:Wann et zu enger Stauung kënnt, halbéiert den Sender d'Stauungsfenster an trëtt an den Zoustand vun der schneller Erhuelung an, fir d'Plaz vun der Netzwierkerhuelung duerch déi empfaangen Duplikater ze bestëmmen, an dann erhéicht hien d'Stauungsfenster weider.
Luesen Ufank
Wann eng TCP-Verbindung opgebaut gëtt, gëtt d'Congestion-Fënster cwnd ufanks op e minimale MSS-Wäert (maximal segment size) gesat. Op dës Manéier ass déi initial Sendrate ongeféier MSS/RTT Bytes/Sekonn. Déi tatsächlech verfügbar Bandbreet ass normalerweis vill méi grouss wéi MSS/RTT, dofir wëll TCP déi optimal Sendrate fannen, déi duerch e luesen Start erreecht ka ginn.
Am Prozess vum luesen Start gëtt de Wäert vum Stauungsfenster cwnd op 1 MSS initialiséiert, an all Kéier wann dat iwwerdroe Paketsegment unerkannt gëtt, gëtt de Wäert vu cwnd ëm eng MSS erhéicht, dat heescht, de Wäert vu cwnd gëtt 2 MSS. Duerno gëtt de Wäert vu cwnd fir all erfollegräich Iwwerdroung vun engem Paketsegment verduebelt, asw. De spezifesche Wuesstemsprozess gëtt an der folgender Figur gewisen.
D'Sendequote kann awer net ëmmer wuessen; de Wuesstem muss iergendwann ophalen. Also, wéini héiert d'Erhéijung vun der Sendequote op? E luesen Ufank beendet typescherweis d'Erhéijung vun der Sendequote op eng vun e puer Weeër:
Déi éischt Method ass de Fall vu Pakettverloscht während dem Sendprozess vum luesen Start. Wann e Pakettverloscht optrieden, setzt TCP d'Stauungsfenster cwnd vum Sender op 1 a start de luesen Startprozess nei. Op dësem Punkt gëtt e Konzept vum luesen Startschwellwäert ssthresh agefouert, deem säin initialen Wäert d'Halschent vum Wäert vu cwnd ass, deen de Pakettverloscht generéiert. Dat heescht, wann Stauung festgestallt gëtt, ass de Wäert vun ssthresh d'Halschent vum Fënsterwäert.
Déi zweet Method ass et direkt mam Wäert vum Schwellenwäert ssthresh fir de luesen Start ze korreléieren. Well de Wäert vun ssthresh d'Halschent vum Fënsterwäert ass, wann eng Stauung festgestallt gëtt, kann et bei all Verdueblung zu Paketverloschter kommen, wann cwnd méi grouss wéi ssthresh ass. Dofir ass et am beschten, cwnd op ssthresh ze setzen, wat dozou féiert, datt TCP op de Stauungskontrollmodus wiesselt an de luesen Start ophält.
Déi lescht Méiglechkeet, wéi e luesen Start ophale kann, ass wann dräi redundant ACKs detektéiert ginn, wouduerch TCP eng séier Retransmissioun duerchféiert an an den Erhuelungszoustand kënnt. (Wann et net kloer ass, firwat et dräi ACK-Päcketen gëtt, gëtt dat separat am Retransmissiounsmechanismus erkläert.)
Stauvermeidung
Wann TCP an de Congestion Control-Zoustand kënnt, gëtt cwnd op d'Halschent vum Congestion Thresh gesat. Dëst bedeit, datt de Wäert vu cwnd net all Kéier verduebelt ka ginn, wann e Paketsegment empfaange gëtt. Amplaz gëtt e relativ konservative Wee ugeholl, bei deem de Wäert vu cwnd ëm nëmmen eng MSS (maximal Paketsegmentlängt) erhéicht gëtt, nodeems all Iwwerdroung ofgeschloss ass. Zum Beispill, och wann 10 Paketsegmenter unerkannt ginn, wäert de Wäert vu cwnd nëmmen ëm eng MSS eropgoen. Dëst ass e lineare Wuestumsmodell an et huet och eng iewescht Grenz vum Wuestum. Wann e Paketverloscht geschitt, gëtt de Wäert vu cwnd an eng MSS geännert, an de Wäert vun ssthresh gëtt op d'Halschent vu cwnd gesat. Oder et stoppt och de Wuestum vun MSS wann 3 redundant ACK-Äntwerten empfaange ginn. Wann nach ëmmer dräi redundant ACKs empfaange ginn, nodeems de Wäert vu cwnd halbéiert gouf, gëtt de Wäert vun ssthresh als d'Halschent vum Wäert vu cwnd opgeholl an de Schnell-Erhuelungszoustand gëtt agaangen.
Schnell Erhuelung
Am Fast Recovery-Zoustand gëtt de Wäert vum Congestion-Fënster cwnd ëm ee MSS fir all empfaangen redundant ACK erhéicht, dat heescht ACK, déi net an der Reiefolleg ukënnt. Dëst ass fir d'Packetsegmenter ze benotzen, déi erfollegräich am Netz iwwerdroe goufen, fir d'Iwwerdroungseffizienz sou vill wéi méiglech ze verbesseren.
Wann eng ACK vum verluerene Paketsegment ukënnt, reduzéiert TCP de Wäert vu cwnd an wiesselt dann an den Zoustand vun der Vermeidung vu Stauung. Dëst ass fir d'Gréisst vum Stauungsfenster ze kontrolléieren an eng weider Erhéijung vun der Netzwierkstauung ze vermeiden.
Wann en Timeout no dem Congestion Control-Zoustand optrieden, gëtt den Netzwierkzoustand méi eescht an den TCP migréiert vum Congestion-Vermeidungszoustand an de Slow-Start-Zoustand. An dësem Fall gëtt de Wäert vun der Congestion-Fënster cwnd op 1 MSS gesat, déi maximal Paketsegmentlängt, an de Wäert vum Slow-Start-Schwellwäert ssthresh gëtt op d'Halschent vu cwnd gesat. Den Zweck dovun ass d'Gréisst vun der Congestion-Fënster graduell erëm ze erhéijen, nodeems d'Netzwierk sech erholl huet, fir d'Iwwerdroungsquote an de Grad vun der Netzwierkcongestion auszegläichen.
Resumé
Als zouverléissegt Transportprotokoll implementéiert TCP zouverléissegen Transport duerch Sequenznummer, Bestätegung, Retransmissionskontroll, Verbindungsmanagement a Fënsterkontroll. Dorënner kontrolléiert de Flowkontrollmechanismus d'Quantitéit vun den Daten, déi vum Sender geschéckt ginn, no der tatsächlecher Empfangskapazitéit vum Empfänger, wat d'Problemer vun der Netzwierkverstoppung an der Leeschtungsverschlechterung vermeit. De Staukontrollmechanismus vermeit d'Optriede vu Netzwierkverstoppung andeems d'Quantitéit vun den Daten, déi vum Sender geschéckt ginn, upasst. D'Konzepter vu Staufenster a Sendefënster si matenee verbonnen, an d'Quantitéit vun den Daten um Sender gëtt kontrolléiert andeems d'Gréisst vun der Staufenster dynamesch ugepasst gëtt. Luesen Ufank, Stauvermeidung a séier Erhuelung sinn déi dräi Haaptdeeler vum TCP Staukontrollalgorithmus, deen d'Gréisst vun der Staufenster duerch verschidde Strategien upasst fir sech un d'Kapazitéit an de Stauungsgrad vum Netzwierk unzepassen.
An der nächster Sektioun wäerte mir de Retransmissiounsmechanismus vum TCP am Detail ënnersichen. De Retransmissiounsmechanismus ass e wichtegen Deel vum TCP fir eng zouverlässeg Iwwerdroung z'erreechen. E garantéiert déi zouverlässeg Iwwerdroung vun Daten andeems verluer, korrupt oder verspéit Daten nei iwwerdroe ginn. De Prinzip vun der Ëmsetzung an d'Strategie vum Retransmissiounsmechanismus ginn an der nächster Sektioun am Detail virgestallt an analyséiert. Bleift drun!
Zäitpunkt vun der Verëffentlechung: 24. Februar 2025