Nach meiner Erfahrung sind TCP Windowing- Fehler ( RFC1323, Abschnitt 2 ) die Hauptursache für abnormale Latenz in ansonsten fehlerfreien Hochgeschwindigkeitsnetzwerken, wobei Fehler in Bezug auf TCP Delayed Acks ( RFC1122, Abschnitt 4.2.3.2 ) eine eng verwandte Sekunde sind . Beide Methoden sind Verbesserungen von TCP für eine bessere Handhabung von Hochgeschwindigkeitsnetzwerken. Wenn sie brechen, fallen die Geschwindigkeiten auf sehr langsame Werte. Fehler in diesen Fällen wirken sich auf große Übertragungen aus (denken Sie an Backup-Streams), bei denen extrem kleiner Transaktionsverkehr (durchschnittliche Datenübertragung liegt unter der MTU-Größe und es gibt eine Menge Hin- und Herbewegungen) weniger davon betroffen ist.
Wieder habe ich die größten Probleme mit diesen beiden Problemen gesehen, wenn zwei verschiedene TCP / IP-Stapel sprechen. Wie Windows / Linux, 2.4-Linux / 2.6-Linux, Windows / NetWare, Linux / BSD. Like to like funktioniert sehr, sehr gut. Microsoft hat den Windows-TCP / IP-Stack in Server 2008 neu geschrieben, wodurch Linux-Interoperabilitätsprobleme aufgetreten sind, die mit Server 2003 nicht bestanden haben (ich glaube, diese sind behoben, aber ich bin mir nicht 100% sicher).
Meinungsverschiedenheiten über die genaue Methode der verzögerten oder selektiven Bestätigung können zu folgenden Fällen führen:
192.168.128.5 -> 192.168.128.20: 1500b Nutzlast, SEQ 1562
192.168.128.5 -> 192.168.128.20: 1500b Nutzlast, SEQ 9524
[200ms vorbei]
192.168.128.20 -> 192.168.128.5: ACK 1562
192.168.128.5 -> 192.168.128.20: 1500b Nutzlast, SEQ 12025
192.168.128.5 -> 192.168.128.20: 1500b Nutzlast, SEQ 13824
[200ms vorbei]
192.168.128.20 -> 192.168.128.5: ACK 12025
Der Durchsatz geht aufgrund aller Zeitüberschreitungen von 200 ms durch den Boden (Windows verwendet standardmäßig den Timer für verzögerte Bestätigung auf 200 ms). In diesem Fall konnten beide Seiten der Konversation TCP Delayed Ack nicht verarbeiten.
TCP-Fensterfehler sind schwerer zu bemerken, da ihre Auswirkungen weniger offensichtlich sein können. In extremen Fällen schlägt das Fenster vollständig fehl und Sie erhalten Paket-> Bestätigung-> Paket-> Bestätigung-> Paket-> Bestätigung, was sehr langsam ist, wenn Sie etwas übertragen, das deutlich größer als etwa 10 KB ist, und die grundlegende Latenz auf der Verbindung vergrößert . Der schwer zu erkennende Modus ist, wenn beide Seiten ihre Fenstergröße ständig neu aushandeln und eine Seite (der Absender) die Aushandlung nicht beachtet, für deren Verarbeitung einige Pakete erforderlich sind, bevor die Daten weiter übertragen werden können. Diese Art von Fehler wird in rot blinkenden Lichtern in Wireshark-Spuren angezeigt, zeigt sich jedoch als geringerer Durchsatz als erwartet.
Wie ich bereits erwähnt habe, neigen die oben genannten dazu, große Transfers zu plagen. Verkehr wie das Streamen von Videos oder Backup-Streams kann von ihnen wirklich erfasst werden, ebenso wie das einfache Herunterladen sehr großer Dateien (wie Linux-Distribution-ISO-Dateien). TCP Windowing wurde entwickelt, um grundlegende Latenzprobleme zu umgehen, da es das Pipelining von Daten ermöglicht. Sie müssen nicht für jedes gesendete Paket auf die Umlaufzeit warten. Sie können einfach einen großen Block senden und auf eine einzelne ACK warten, bevor Sie weitere senden.
Bestimmte Netzwerkmuster profitieren jedoch nicht von diesen Problemumgehungen. Hohe Transaktionsraten und kleine Übertragungen, wie sie beispielsweise von Datenbanken generiert werden, leiden am meisten unter der normalen Latenz auf der Leitung. Wenn die RTT hoch ist, leiden diese Workloads stark, während große Streaming-Workloads viel weniger leiden.