Corrigindo problemas de dimensionamento de janelas com o Linux TCP


8

Estou tentando melhorar a taxa de transferência de um dos meus servidores no exterior e depois de monitorar uma transferência entre o servidor e meu computador doméstico com o wireshark, tenho certeza de que tenho um problema com o tamanho da janela.

Para uma transferência ftp, recebo um tamanho de janela de recebimento de 14720.

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

Minha janela de envio se parece com o que eu defini:

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

Então, como faço para corrigir a janela? Passei pelas configurações do linux tcp no meu servidor e tudo parece normal. Os carimbos de data / hora estão ativados, os syncookies estão desativados, a escala está ativada, os sacos estão ativados, cúbico é o método de controle de congestionamento, o tamanho máximo da janela de recebimento e envio é de 3 MB. Eu tentei alterar os valores padrão tcp_wmem e tcp_rmem, mas isso não faz nada.

EDITAR:

Quando desligo o ajuste automático e / ou o dimensionamento de janelas no servidor, a janela diminui para 14600, que é basicamente 10x do 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

Você está vendo a janela encolher para zero durante as transferências? Você está realmente vendo atrasos de pacotes enquanto um lado aguarda a disponibilidade da janela? Seria útil se você pudesse postar os pcaps (com registro de data e hora) que, em sua opinião, confirmam isso para que possam ser analisados ​​pela comunidade.
polinomial

janela não encolher, eu não acho que há atrasos de pacotes apenas um tamanho de janela que não aumentará.
incognito2

Respostas:


4

Começando com o kernel do Linux 2.6.17 (ou mais), o fator de escala padrão foi aumentado. A desvantagem disso é que parece haver roteadores / firewalls / etc. que não lidam corretamente com o TCP Window Scaling (a rfc tem apenas ~ 16 anos). Se você precisar atravessar um desses dispositivos, precisará desativar o redimensionamento da janela ou as coisas ficarão muito lentas.

Em um sistema Redhat / Redhat, o "conserto" é:

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

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

  /sbin/sysctl -p

Eu verifiquei o wireshark e o servidor está anunciando uma janela do 14720, então não acho que seja por causa de um roteador. Parece que tenho esse problema com TODAS as conexões TCP.
incognito2

0

hmmm. Você poderia nos dar mais algumas informações? Tal como ...

O TCP libera {Reno, Vegas, etc.} Direção da transferência {desktop -> servidor, servidor -> desktop, outra coisa} o que você está usando para a medição? iperf? arpão?

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.