Was sind mögliche Nachteile beim Festlegen einer (sehr) großen Initiale für Verbindungen mit hoher Bandbreite?


9

Ich habe mit den TCP-Parametern unter Linux (mit einem 3.5-Kernel) experimentiert. Grundsätzlich zu diesem Zusammenhang:

Server: Gigabit-Uplink im Rechenzentrum. Die tatsächliche Bandbreite (aufgrund der gemeinsamen Nutzung von Uplinks) beträgt etwa 70 MB / s, wenn sie von einem anderen Rechenzentrum aus getestet wird.

Client: Gigabit Local LAN, verbunden mit 200 MBit Glasfaser. Durch das Abrufen einer Testdatei werden tatsächlich 20 MB / s erreicht.

Latenz: ca. 50ms Hin- und Rückfahrt.

Der Remote-Server wird als Dateiserver für Dateien im Bereich von 10 bis 100 MB verwendet. Ich habe festgestellt, dass bei einer Initiierung von 10 die Übertragungszeit für diese Dateien stark vom langsamen Start von TCP beeinflusst wird. Das Laden von 10 MB (Höchstgeschwindigkeit erreicht: 3,3 MB / s) dauert 3,5 Sekunden, da es langsam startet und dann jedoch hochfährt ist beendet, bevor die Höchstgeschwindigkeit erreicht ist. Mein Ziel ist es, die minimalen Ladezeiten dieser Dateien einzustellen (also nicht den höchsten Rohdurchsatz oder die niedrigste Roundtrip-Latenz, ich bin bereit, beide zu opfern, wenn dies die tatsächliche Zeit zum Laden einer Datei verkürzt).

Also habe ich eine einfache Berechnung versucht, um zu bestimmen, wie die ideale Initiale aussehen sollte, wobei andere Verbindungen und mögliche Auswirkungen auf andere ignoriert wurden. Das Bandbreitenverzögerungsprodukt beträgt 200 Mbit / s * 50 ms = 10 Mbit oder 1,310,720 Bytes. Wenn man bedenkt, dass initcwnd in MSS-Einheiten festgelegt ist und angenommen wird, dass die MSS etwa 1400 Byte beträgt, ist eine Einstellung von 1,310,720 / 1400 = 936 erforderlich

Dieser Wert ist sehr weit vom Standardwert entfernt (10 * MSS unter Linux, 64 KB unter Windows), daher ist es keine gute Idee, ihn so festzulegen. Was sind die erwarteten Nachteile einer solchen Konfiguration? Z.B:

  • Betrifft dies andere Benutzer desselben Netzwerks?
  • Könnte dies zu einer inakzeptablen Überlastung anderer Verbindungen führen?
  • Flood Router-Puffer irgendwo auf dem Weg?
  • Erhöhen Sie die Auswirkungen kleiner Mengen an Paketverlust?

1
Können Sie bestätigen, dass Sie Megabyte / s sprechen, wenn Sie sagen, 70 MB/sund nicht Megabit? Ich suche nur nach Klarstellung.
Andy Shinn

Ja, Megabyte / s nicht Megabit.
Tomas

Wenn ich Sie wäre, würde ich versuchen, es mit 2 ein paar Mal zu multiplizieren (10, 20, 40, 80, ...) und zu sehen, wie es Ihre typischen Download-Zeiten verbessert
mvp

Antworten:


1

Was sind die erwarteten Nachteile einer solchen Konfiguration? Z.B:

Will it affect other users of the same network?

Das Ändern der Initiale wirkt sich auf Folgendes aus:

  • Benutzer des Servers mit den Einstellungen ändern sich
  • Wenn diese Benutzer mit der Route übereinstimmen, wird die Änderung der Einstellungen konfiguriert.
Could it create unacceptable congestion for other connections?

Sicher.

Flood router-buffers somewhere on the path?

Nicht irrelevant, aber wenn es sich nicht um Ihre Router handelt, würde ich mich auf die Probleme konzentrieren, die Ihnen näher stehen.

Increase the impact of small amounts of packet-loss?

Sicher, das kann es.

Das Ergebnis ist, dass dies die Kosten für den absichtlichen und unbeabsichtigten Paketverlust erhöht. Ihr Server ist für DOS einfacher, wenn jeder in der Lage ist, den 3-Wege-Handshake durchzuführen (erhebliche Datenmengen für geringe Investitionen (Datenmenge)).

Dies erhöht auch die Wahrscheinlichkeit, dass ein Bündel dieser Pakete erneut übertragen werden muss, da eines der ersten Pakete im Burst verloren geht.


Ok, um es zusammenzufassen: Für einen privaten Server, bei dem initcwnd nur für die richtigen Routen festgelegt ist, ist dies eine gute Verbesserung für die Interaktivität der Benutzer.
Tomas

0

Ich glaube nicht, dass ich vollständig verstehe, wonach Sie fragen. Hier ist ein Versuch zu antworten:

Zunächst einmal macht das, was Sie versuchen, nur auf der sendenden Seite und nicht auf der empfangenden Seite Sinn. Das heißt, Sie müssen den Dateiserver und nicht den Empfänger ändern. Angenommen, Sie tun Folgendes:

Wenn Sie initcwnd auf (z. B.) 10 ändern, werden 10 Pakete sofort gelöscht. Wenn alle ihr Ziel erreichen, kann es sein, dass Sie in der ersten RTT aufgrund des langsamen Starts (des exponentiellen cwnd-Anstiegs) ein viel größeres Fenster haben. Bei Paketverlust wird die cwnd jedoch halbiert, und da Sie mit 10 Paketen platzen, treten bei Ihnen zahlreiche Übertragungen erneut auf, sodass Sie möglicherweise mehr Probleme haben, als Sie denken.

Wenn Sie etwas Aggressiveres ausprobieren und anderen Internetnutzern gegenüber irgendwie "unhöflich" sein möchten, können Sie stattdessen den Algorithmus zur Überlastungskontrolle auf der Serverseite ändern. Verschiedene Algorithmen behandeln cwnd auf unterschiedliche Weise. Beachten Sie, dass dies alle Benutzer betrifft, es sei denn, Ihre serverseitige Software ändert diese Verbindungen pro Verbindung (was ich sehr bezweifle). Der Vorteil hierbei ist, dass der Algorithmus auch nach Paketverlust wirksam bleibt, während initcwnd keine große Rolle spielt.

In / proc / sys / net / ipv4 / tcp_congestion_control ändern Sie den Algorithmus zur Überlastungskontrolle.

FWIW für solche kleinen RTTs (50 ms) und für mittlere oder große Dateien sollte die Initcwnd Ihre Durchschnittsgeschwindigkeit nicht wesentlich beeinflussen. Wenn es keinen Paketverlust gibt, verdoppelt sich cwnd (dh die Fettleitung) bei jeder RTT. Mit RTT = 50 ms auf einer Fettpfeife passen Sie in der ersten Sekunde 20 RTTs an, was bedeutet, dass Sie mit initcwnd = 2 nach 1 Sekunde cwnd = 2 * 2 ^ 20 erhalten, was mehr ist, als Sie können Griff ;-)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.