Résolution des problèmes de mise à l'échelle des fenêtres avec Linux TCP

8

J'essaie d'améliorer le débit d'un de mes serveurs à l'étranger et après avoir surveillé un transfert entre le serveur et mon ordinateur personnel avec Wireshark, je suis presque sûr que j'ai un problème avec la taille de la fenêtre.

Pour un transfert ftp, j'obtiens une taille de fenêtre de réception de 14720.

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

Ma fenêtre d'envoi ressemble à ce que je l'ai définie:

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

Alors, comment puis-je réparer la fenêtre rwindow? J'ai parcouru les paramètres linux tcp sur mon serveur et tout semble normal. Les horodatages sont activés, les syncookies sont désactivés, la mise à l'échelle est activée, les sacs sont activés, cubique est la méthode de contrôle de la congestion, la taille maximale de la fenêtre de réception et d'envoi est de 3 Mo. J'ai essayé de changer les valeurs par défaut tcp_wmem et tcp_rmem mais cela ne fait rien.

ÉDITER:

Lorsque je désactive l'autoréglage et / ou la mise à l'échelle des fenêtres sur le serveur, la fenêtre se réduit à 14600, ce qui correspond à 10 fois le MSS.

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
incognito2
la source
Voyez-vous la fenêtre se réduire à zéro pendant les transferts? Voyez-vous réellement des retards de paquets pendant qu'un côté attend la disponibilité de la fenêtre? Il serait utile que vous puissiez publier les pcaps (avec des horodatages) que vous pensez confirmer cela afin qu'ils puissent être analysés par la communauté.
polynôme
la fenêtre ne rétrécit pas, je ne pense pas qu'il y ait des retards de paquets juste une taille de fenêtre qui n'augmentera pas.
incognito2

Réponses:

4

À partir du noyau linux 2.6.17 (ou des abouts), le facteur d'échelle par défaut a été augmenté. L'inconvénient est qu'il semble y avoir des routeurs / pare-feu / etc. qui ne traitent pas correctement avec TCP Window Scaling (le rfc a seulement ~ 16 ans). Si vous devez traverser l'un de ces appareils, vous devez désactiver la mise à l'échelle de la fenêtre, sinon les choses deviennent très lentes.

Sur un système Redhat / Redhat, le "correctif" consiste à:

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

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

  /sbin/sysctl -p
gsiems
la source
J'ai vérifié Wireshark et le serveur annonce une fenêtre de 14720, donc je ne pense pas que ce soit à cause d'un routeur. Je semble avoir ce problème avec TOUTES les connexions TCP.
incognito2
0

hmmm. Pourriez-vous nous donner plus d'informations? Tel que ...

TCP libère {Reno, Vegas, etc} Direction du transfert {bureau -> serveur, serveur-> bureau, autre chose} qu'utilisez-vous pour la mesure? iperf? harpon?

Nikolaidis Fotis
la source