TCP tillförlitlighetstransporter
Vi är alla bekanta med TCP -protokollet som ett pålitligt transportprotokoll, men hur säkerställer det transportens tillförlitlighet?
För att uppnå tillförlitlig överföring måste många faktorer beaktas, såsom datakorruption, förlust, duplicering och skärmar utanför ordningen. Om dessa problem inte kan lösas kan tillförlitlig överföring inte uppnås.
Därför använder TCP mekanismer som sekvensnummer, bekräftelsesvar, återge kontroll, anslutningshantering och fönsterkontroll för att uppnå tillförlitlig överföring.
I det här dokumentet kommer vi att fokusera på skjutfönstret, flödeskontroll och trängselstyrning av TCP. Överföringsmekanismen täcks separat i nästa avsnitt.
Nätverksflödeskontroll
Nätverksflödeskontroll eller känt som nätverkstrafikstyrning är faktiskt en manifestation av det subtila förhållandet mellan producenter och konsumenter. Du har antagligen stött på det här scenariot mycket på jobbet eller i intervjuer. Om producentens förmåga att producera kraftigt överskrider konsumentens förmåga att konsumera kommer det att få kön att växa på obestämd tid. I ett mer allvarligt fall kanske du vet att när RabbitMQ -meddelanden staplas för mycket kan det orsaka prestandaförstöring av hela MQ -servern. Detsamma gäller för TCP; Om det inte är avmarkerat kommer för många meddelanden att läggas in i nätverket, och konsumenterna kommer att ha överskridit sin kapacitet, medan producenterna kommer att fortsätta skicka duplicerade meddelanden, vilket kommer att påverka nätverkets prestanda i hög grad.
För att hantera detta fenomen tillhandahåller TCP en mekanism för avsändaren för att kontrollera mängden data som skickas baserat på mottagarens faktiska mottagningskapacitet, som kallas flödeskontroll. Mottagaren upprätthåller ett mottagningsfönster, medan avsändaren har ett sändningsfönster. Det bör noteras att dessa fönster endast är för en enda TCP -anslutning och inte alla anslutningar delar ett fönster.
TCP tillhandahåller flödeskontroll genom att använda en variabel för ett mottagningsfönster. Mottagningsfönstret ger avsändaren en indikation på hur mycket cache -utrymme som fortfarande är tillgängligt. Avsändaren styr mängden data som skickas enligt mottagarens faktiska acceptanskapacitet.
Mottagarvärdet meddelar avsändaren av storleken på de data som den kan få, och avsändaren skickar upp till denna gräns. Denna gräns är fönsterstorleken, kommer du ihåg TCP -rubriken? Det finns ett mottagningsfönsterfält, som används för att ange antalet byte som mottagaren är kapabel eller villig att ta emot.
Avsändarvärdet kommer regelbundet att skicka ett fönsterprobe -paket, som används för att upptäcka om mottagarvärdet fortfarande kan acceptera data. När mottagarens buffert riskerar att överfyllda är fönsterstorleken inställd på ett mindre värde för att instruera avsändaren att kontrollera mängden som skickas.
Här är ett nätverksflödeskontrolldiagram:
Nätverkskontroll
Innan vi introducerar överbelastningskontroll måste vi förstå att förutom att ta emot fönstret och skicka fönstret finns det också ett trängselfönster, som huvudsakligen används för att lösa problemet med vilken hastighet avsändaren börjar skicka data till mottagningsfönstret. Därför upprätthålls trängselfönstret också av TCP -avsändaren. Vi behöver en algoritm för att bestämma hur mycket data som är lämpligt att skicka, eftersom att skicka för lite eller för mycket data inte är idealiskt, därmed konceptet med ett trängselfönster.
I den tidigare nätverksflödeskontrollen, vad vi undvek var avsändaren som fyllde mottagarens cache med data, men vi visste inte vad som hände i nätverket. Vanligtvis är datornätverk i en delad miljö. Som ett resultat kan det finnas nätverkstockning på grund av kommunikation mellan andra värdar.
När nätverket är överbelastat, om ett stort antal paket fortsätter att skickas, kan det orsaka problem som fördröjning och förlust av paket. Vid denna tidpunkt kommer TCP att skicka om uppgifterna, men vidarebefordningen kommer att öka bördan på nätverket, vilket resulterar i större förseningar och fler paketförluster. Detta kan komma in i en ond cykel och fortsätta bli större.
Således kan TCP inte ignorera vad som händer i nätverket. När nätverket är överbelastat offrar TCP sig genom att minska mängden data som den skickar.
Därför föreslås trängselkontroll, som syftar till att undvika att fylla hela nätverket med data från avsändaren. För att reglera mängden data som avsändaren ska skicka definierar TCP ett koncept som kallas överbelastningsfönstret. Stockningskontrollalgoritmen justerar storleken på trängselfönstret enligt nätverksgraden för nätverket för att kontrollera mängden data som skickas av avsändaren.
Vad är ett trängselfönster? Vad har detta att göra med fönstret Skicka?
Trängselfönstret är en tillståndsvariabel som upprätthålls av avsändaren som bestämmer mängden data som avsändaren kan skicka. Trängselfönstret förändras dynamiskt enligt nätverksnivån i nätverket.
Det sändande fönstret är en överenskomna fönsterstorlek mellan avsändaren och mottagaren som anger mängden data som mottagaren kan få. Trängselfönstret och det sändande fönstret är relaterade; Det sändande fönstret är vanligtvis lika med det minsta av trängseln och mottagningsfönstren, det vill säga SWND = min (CWND, RWND).
Trängselfönstret CWND ändras enligt följande:
Om det inte finns någon trängsel i nätverket, dvs. ingen timeout för vidarebefordran inträffar, ökar trängselfönstret.
Om det finns trängsel i nätverket minskar trängselfönstret.
Avsändaren bestämmer om nätverket är överbelastat genom att observera om ACK -bekräftelsespaketet mottas inom den angivna tiden. Om avsändaren inte får ACK -bekräftelsespaketet inom den angivna tiden anses det att nätverket är överbelastat.
Förutom trängselfönstret är det dags att diskutera TCP -trängselskontrollalgoritmen. TCP -trängselskontrollalgoritm består av tre huvuddelar:
Långsam start:Ursprungligen är CWND -trängselfönstret relativt litet, och avsändaren ökar överbelastningsfönstret exponentiellt för att snabbt anpassa sig till nätverkets kapacitet.
Trängsel undvikande:Efter att trängselfönstret överskrider en viss tröskel ökar avsändaren överbelastningsfönstret på ett linjärt sätt för att bromsa tillväxttakten i trängselfönstret och undvika överbelastning av nätverket.
Snabb återhämtning:Om trängseln inträffar, är avsändaren halvklockningsfönstret och kommer in i det snabba återhämtningstillståndet för att bestämma platsen för nätverksåtervinningen genom de mottagna duplikat ACK: erna och fortsätter sedan att öka trängselfönstret.
Långsam start
När en TCP -anslutning upprättas är trängselfönstret CWND initialt inställt på ett minimum MSS -värde (maximal segmentstorlek). På detta sätt handlar den första sändningshastigheten om MSS/RTT -byte/sekund. Den faktiska tillgängliga bandbredden är vanligtvis mycket större än MSS/RTT, så TCP vill hitta den optimala sändningshastigheten, som kan uppnås med långsam start.
I den långsamma processen kommer värdet på överbelastningsfönstret CWND att initialiseras till 1 MSS, och varje gång det överförda paketet kommer att bekräftas kommer värdet på CWND att ökas med en MSS, det vill säga värdet på CWND kommer att bli 2 MSS. Därefter fördubblas värdet på CWND för varje framgångsrik överföring av ett paketsegment, och så vidare. Den specifika tillväxtprocessen visas i följande figur.
Sändningshastigheten kan dock inte alltid växa; Tillväxten måste avsluta någon gång. Så när ökar den sändningsräntan? Slow-Start avslutar vanligtvis ökningen av sändningshastigheten på ett av flera sätt:
Det första sättet är fallet med paketförlust under sändningsprocessen för långsam start. När en paketförlust inträffar ställer TCP avsändarens överbelastningsfönster med 1 till 1 och startar om långsam startprocess. Vid denna tidpunkt introduceras ett koncept med långsam starttröskel Ssthresh, vars initiala värde är hälften av värdet på CWND som genererar paketförlust. Det vill säga, när trängsel upptäcks är värdet på Ssthresh hälften av fönstervärdet.
Det andra sättet är att direkt korrelera med värdet på den långsamma tröskeln SSTHRESH. Eftersom värdet på Ssthresh är hälften av fönstervärdet när trängsel upptäcks, kan paketförlust uppstå med varje fördubbling när CWND är större än Ssthresh. Därför är det bäst att ställa in CWND till Ssthresh, vilket kommer att få TCP att växla till trängselstyrningsläge och slutar långsam start.
Det sista sättet att långsam start kan avsluta är om tre redundanta ACK: er upptäcks, TCP utför en snabb vidarebefordran och kommer in i återhämtningstillståndet. (Om det inte är klart varför det finns tre ACK -paket, kommer det att förklaras separat i återtagningsmekanismen.)
Överbelastning
När TCP kommer in i trängselstillståndet är CWND inställt på halva tröskeltröskeln SSTHRESH. Detta innebär att värdet på CWND inte kan fördubblas varje gång ett paketsegment tas emot. Istället antas ett relativt konservativt tillvägagångssätt där värdet på CWND ökas med endast en MSS (maximal paketsegmentlängd) efter att varje överföring är klar. Till exempel, även om 10 paketsegment erkänns, kommer värdet på CWND endast att öka med en MSS. Detta är en linjär tillväxtmodell och den har också en övre gräns för tillväxt. När paketförlust inträffar ändras värdet på CWND till en MSS, och värdet på Ssthresh är inställd på hälften av CWND. Eller så kommer det också att stoppa tillväxten av MSS när 3 redundanta ACK -svar tas emot. Om tre redundanta ACK: er fortfarande tas emot efter att ha halverat värdet på CWND, registreras värdet på Ssthresh som hälften av värdet på CWND och det snabba återhämtningstillståndet anges.
Snabb återhämtning
I det snabba återhämtningstillståndet ökas värdet på trängselfönstret med en MSS för varje mottagen redundant ACK, det vill säga ACK som inte anländer i följd. Detta för att använda paketsegmenten som framgångsrikt har överförts i nätverket för att förbättra överföringseffektiviteten så mycket som möjligt.
När en ACK av det förlorade paketet anländer, minskar TCP värdet på CWND och går sedan in i tillståndet för överbelastning. Detta är för att styra storleken på trängselfönstret och undvika att ytterligare öka nätverkets trängsel.
Om en timeout inträffar efter överbelastningstillståndet blir nätverkstillståndet mer allvarligt och TCP migrerar från överbelastningsundvikande tillstånd till långsamstart. I detta fall är värdet på överbelastningsfönstret CWND inställt på 1 MSS, den maximala paketsegmentlängden och värdet på den långsamma tröskeln SSTHRESH är inställd på hälften av CWND. Syftet med detta är att gradvis öka storleken på överbelastningsfönstret efter att nätverket återhämtat sig för att balansera överföringshastigheten och graden av nätverkstoppning.
Sammanfattning
Som ett tillförlitligt transportprotokoll implementerar TCP tillförlitlig transport med sekvensnummer, erkännande, överföringskontroll, anslutningshantering och fönsterkontroll. Bland dem styr flödeskontrollmekanismen mängden data som skickas av avsändaren enligt mottagarens faktiska mottagningskapacitet, vilket undviker problemen med nedbrytning av nätverk och prestandaförstöring. Trängselkontrollmekanismen undviker förekomsten av nätverkstockning genom att justera mängden data som skickas av avsändaren. Begreppen med fönster och sändningsfönster är relaterade till varandra, och mängden data vid avsändaren styrs av dynamiskt justering av storleken på trängselfönstret. Långsam start, undvikande av trängsel och snabb återhämtning är de tre huvuddelarna i TCP -trängselskontrollalgoritmen, som justerar storleken på trängselfönstret genom olika strategier för att anpassa sig till nätverkets kapacitet och trängsel.
I nästa avsnitt kommer vi att undersöka TCP: s vidarebefordringsmekanism i detalj. Överföringsmekanism är en viktig del av TCP för att uppnå tillförlitlig överföring. Det säkerställer tillförlitlig överföring av data genom att vidarebefordra förlorade, skadade eller försenade data. Implementeringsprincipen och strategin för återförsäljningsmekanismen kommer att introduceras och analyseras i detalj i nästa avsnitt. Hålla dig uppdaterad!
Posttid: feb-24-2025