Behebung von Fensterskalierungsproblemen mit Linux TCP


8

Ich versuche, den Durchsatz eines meiner Server in Übersee zu verbessern, und nachdem ich eine Übertragung zwischen dem Server und meinem Heimcomputer mit Wireshark überwacht habe, bin ich mir ziemlich sicher, dass ich ein Problem mit der Fenstergröße habe.

Für eine FTP-Übertragung erhalte ich eine Empfangsfenstergröße von 14720.

Window size value: 115
Calculated window size: 14720
Window size scaling factor: 128

Mein Sendefenster sieht so aus, wie ich es eingestellt habe:

Window size value: 65335
Calculated window size: 261340
Window size scaling factor: 4

Wie repariere ich das Fenster? Ich habe die Linux-TCP-Einstellungen auf meinem Server durchgesehen und alles scheint normal zu sein. Zeitstempel sind eingeschaltet, Syncookies sind ausgeschaltet, Skalierung ist eingeschaltet, Säcke sind eingeschaltet, kubisch ist die Überlastungskontrollmethode, die maximale Empfangs- und Sendefenstergröße beträgt 3 MB. Ich habe versucht, die Standardwerte tcp_wmem und tcp_rmem zu ändern, aber es bewirkt nichts.

BEARBEITEN:

Wenn ich das Autotuning und / oder die Fensterskalierung auf dem Server deaktiviere, wird das Fenster auf 14600 verkleinert, was im Grunde dem 10-fachen des MSS entspricht.

5337    4.268584    2.2.2.2 1.1.1.1 FTP 106 Response: 227 Entering Passive Mode (2,2,2,2,240,15).
5338    4.268640    1.1.1.1 2.2.2.2 TCP 74  59855 > 61455 [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=431721460 TSecr=0 WS=128
5364    4.300368    1.1.1.1 2.2.2.2 TCP 54  57609 > ftp [ACK] Seq=217 Ack=648 Win=15744 Len=0
5480    4.346856    2.2.2.2 1.1.1.1 TCP 66  61455 > 59855 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=128
5481    4.346867    1.1.1.1 2.2.2.2 TCP 54  59855 > 61455 [ACK] Seq=1 Ack=1 Win=14720 Len=0
5482    4.346893    1.1.1.1 2.2.2.2 FTP 70  Request: STOR 100mb.bin
5570    4.428061    2.2.2.2 1.1.1.1 FTP 109 Response: 150 Opening BINARY mode data connection for 100mb.bin
5571    4.428078    1.1.1.1 2.2.2.2 TCP 54  57609 > ftp [ACK] Seq=233 Ack=703 Win=15744 Len=0
5572    4.428155    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5573    4.428166    1.1.1.1 2.2.2.2 FTP-DATA    1514    FTP Data: 1460 bytes
5662    4.505384    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=1461 Win=8832 Len=0
5663    4.505392    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5664    4.505421    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=2921 Win=11776 Len=0
5665    4.505429    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5666    4.505535    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=4381 Win=14720 Len=0
5667    4.505543    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5734    4.583769    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=5841 Win=17536 Len=0
5735    4.583778    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5736    4.583781    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=7301 Win=20480 Len=0
5737    4.583787    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes

Sehen Sie, dass das Fenster während der Übertragung auf Null schrumpft? Sehen Sie tatsächlich Paketverzögerungen, während eine Seite auf die Verfügbarkeit des Fensters wartet? Es wäre hilfreich, wenn Sie die PCCs (mit Zeitstempeln) veröffentlichen könnten, von denen Sie glauben, dass sie dies bestätigen, damit sie von der Community analysiert werden können.
Polynom

Fenster schrumpft nicht, ich glaube nicht, dass es Paketverzögerungen gibt, nur eine Fenstergröße, die nicht zunimmt.
inkognito2

Antworten:


4

Beginnend mit dem Linux-Kernel 2.6.17 (oder so ungefähr) wurde der Standard-Skalierungsfaktor erhöht. Der Nachteil dabei ist, dass es anscheinend Router / Firewalls / etc. Gibt. die nicht richtig mit TCP Window Scaling umgehen (der RFC ist nur ~ 16 Jahre alt). Wenn Sie eines dieser Geräte durchqueren müssen, müssen Sie die Fensterskalierung deaktivieren, sonst wird es sehr langsam.

Auf einem Redhat / Redhat-ähnlichen System lautet der "Fix":

  /bin/cat <<'EOT'>>/etc/sysctl.conf

  # Turn off the tcp_window_scaling
  net.ipv4.tcp_window_scaling = 0
  EOT

  /sbin/sysctl -p

Ich habe Wireshark überprüft und der Server wirbt für ein Fenster von 14720, daher glaube ich nicht, dass es an einem Router liegt. Ich habe anscheinend dieses Problem mit ALLEN TCP-Verbindungen.
inkognito2

0

Hmmm. Könnten Sie uns weitere Informationen geben? Sowie ...

TCP veröffentlicht {Reno, Vegas usw.} Übertragungsrichtung {Desktop -> Server, Server-> Desktop, etwas anderes} Was verwenden Sie für die Messung? iperf? Harpune?

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.