Alternativ för TCP-fönsterskala

  Alternativet TCP-fönsterskala är ett alternativ för att öka mottagarfönstrets storlek som tillåts i Transmission Control Protocol över dess tidigare maximala värde på 65 535 byte. Detta TCP-alternativ, tillsammans med flera andra, definieras i RFC 7323 som handlar om långa fettnätverk (LFN).

TCP-fönster

Genomströmningen av en TCP-kommunikation begränsas av två fönster: överbelastningsfönstret och mottagningsfönstret. Överbelastningsfönstret försöker att inte överskrida nätverkets kapacitet ( överbelastningskontroll) ; mottagningsfönstret försöker att inte överskrida mottagarens kapacitet att bearbeta data ( flödeskontroll) . Mottagaren kan överväldigas av data om den till exempel är mycket upptagen (som en webbserver). Varje TCP-segment innehåller det aktuella värdet för mottagningsfönstret. Om till exempel en avsändare får ett kvitto som bekräftar byte 4000 och specificerar ett mottagningsfönster på 10000 (byte), kommer avsändaren inte att skicka paket efter byte 14000, även om överbelastningsfönstret tillåter det.

Teori

TCP-fönsterskalningsalternativ behövs för effektiv överföring av data när bandbreddsfördröjningsprodukten ( BDP) är större än 64 KB. Till exempel, om en T1- överföringsledning på 1,5 Mbit/sekund användes över en satellitlänk med en 513 millisekunders tur och returtid (RTT), är bandbreddsfördröjningsprodukten bitar eller cirka 96 187 byte. Genom att använda en maximal buffertstorlek på 64 KB kan bufferten endast fyllas till (65 535 / 96 187) = 68 % av den teoretiska maximala hastigheten på 1,5 Mbit/sekund, eller 1,02 Mbit/s.

Genom att använda alternativet för fönsterskala kan mottagarfönstrets storlek ökas upp till ett maximalt värde på byte. Detta görs genom att ange en växlingsräkning på två byte i fältet för huvudalternativ. Den sanna mottagarfönstrets storlek lämnas förskjuten med värdet i skifträkning. Ett maximalt värde på 14 kan användas för skifträkningsvärdet. Detta skulle tillåta en enda TCP-anslutning att överföra data över exempelsatellitlänken med 1,5 Mbit/sekund med användning av all tillgänglig bandbredd.

I huvudsak kan inte mer än ett helt överföringsfönster överföras inom en tidsperiod tur och retur. Alternativet för fönsterskala möjliggör en enda TCP-anslutning för att fullt ut utnyttja en LFN med en BDP på ​​upp till 1 GB, t.ex. en 10 Gbit/s-länk med en tur och returtid på 800 ms.

Möjliga biverkningar

Eftersom vissa brandväggar inte implementerar TCP Window Scaling på rätt sätt, kan det orsaka att en användares Internetanslutning inte fungerar intermittent under några minuter och sedan verkar börja fungera igen utan anledning. Det finns också ett problem om en brandvägg inte stöder TCP-tilläggen.

Konfiguration av operativsystem

Windows

TCP Window Scaling har implementerats i Windows sedan Windows 2000 . Det är aktiverat som standard i Windows Vista / Server 2008 och senare, men kan stängas av manuellt om det behövs. Windows Vista och Windows 7 har en fast standard TCP-mottagningsbuffert på 64 kB, som skalas upp till 16 MB genom "autotuning", vilket begränsar manuell TCP-inställning över långa nätverk .

Linux

Linux-kärnor (från 2.6.8, augusti 2004) har aktiverat TCP Window Scaling som standard. Konfigurationsparametrarna finns i /proc-filsystemet , se pseudofilen /proc/sys/net/ipv4/tcp_window_scaling och dess följeslagare /proc/sys/net/ipv4/tcp_rmem och /proc/sys/net/ipv4/tcp_wmem ( mer information: man tcp , avsnitt sysctl).

Skalning kan stängas av genom att utfärda följande kommando.

 $  sudo sysctl -w  "net.ipv4.tcp_window_scaling=0" 

För att behålla ändringarna efter en omstart, inkludera raden "net.ipv4.tcp_window_scaling=0" i /etc/sysctl.conf (eller /etc/sysctl.d/99-sysctl.conf från och med systemd 207).

FreeBSD, OpenBSD, NetBSD och Mac OS X


Standardinställning för FreeBSD , OpenBSD , NetBSD och Mac OS X är att ha fönsterskalning (och andra funktioner relaterade till RFC 1323) aktiverade. För att verifiera sin status kan en användare kontrollera värdet på variabeln " net.inet.tcp.rfc1323 " via kommandot sysctl :

 $  sysctl net.inet.tcp.rfc1323 

Ett värde på 1 (utgång " net.inet.tcp.rfc1323=1 ") betyder att skalning är aktiverad, 0 betyder "inaktiverad". Om den är aktiverad kan den stängas av genom att utfärda kommandot:

 $  sudo sysctl -w net.inet.tcp.rfc1323  = 0

Den här inställningen går förlorad vid en omstart av systemet. För att säkerställa att den är inställd vid uppstart, lägg till följande rad i /etc/sysctl.conf : net.inet.tcp.rfc1323=0

Men på macOS 10.14 ger detta kommando ett fel

sysctl: okänd oid 'net.inet.tcp.rfc1323'

Källor