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?
quelle
70 MB/s
und nicht Megabit? Ich suche nur nach Klarstellung.Antworten:
Das Ändern der Initiale wirkt sich auf Folgendes aus:
Sicher.
Nicht irrelevant, aber wenn es sich nicht um Ihre Router handelt, würde ich mich auf die Probleme konzentrieren, die Ihnen näher stehen.
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.
quelle
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 ;-)
quelle