Исправление проблем с масштабированием окна в Linux TCP


8

Я пытаюсь улучшить пропускную способность одного из моих серверов за границей, и после мониторинга передачи между сервером и моим домашним компьютером с помощью wireshark я почти уверен, что у меня есть проблема с размером окна.

Для передачи ftp я получаю окно приема размером 14720.

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

Мое окно отправки выглядит так, как я его установил:

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

Так как мне исправить окно? Я прошел настройки Linux tcp на моем сервере, и все кажется нормальным. Отметки времени включены, синхронизация отключена, масштабирование включено, пакеты включены, кубический - это метод управления перегрузкой, максимальный размер окна приема и отправки - 3 МБ. Я попытался изменить значения по умолчанию tcp_wmem и tcp_rmem, но это ничего не делает.

РЕДАКТИРОВАТЬ:

Когда я отключаю автонастройку и / или масштабирование окна на сервере, окно сжимается до 14600, что в основном в 10 раз превышает 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

Вы видите, как окно сжимается до нуля во время переноса? Вы действительно видите задержки пакетов, пока одна сторона ожидает доступности окна? Было бы полезно, если бы вы могли опубликовать pcaps (с метками времени), которые, по вашему мнению, подтверждают это, чтобы они могли быть проанализированы сообществом.
полином

окно не сжимается, я не думаю, что есть задержки пакета, просто размер окна не будет увеличиваться.
Инкогнито2

Ответы:


4

Начиная с 2.6.17 (или около того) ядра Linux, масштабный коэффициент по умолчанию был увеличен. Недостатком этого является то, что, кажется, есть маршрутизаторы / брандмауэры / и т.д. которые неправильно работают с масштабированием окна TCP (rfc всего ~ 16 лет). Если вам нужно пройти через одно из этих устройств, вам нужно отключить масштабирование окна, иначе все станет очень медленно.

На Redhat / Redhat как система "исправить" заключается в:

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

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

  /sbin/sysctl -p

Я проверил wireshark, и сервер объявляет окно 14720, поэтому я не думаю, что это из-за маршрутизатора. Я, кажется, есть эта проблема со всеми соединениями TCP.
incognito2

0

хммм. Не могли бы вы дать нам больше информации? Такие как ...

TCP выпускает {Reno, Vegas и т. Д.} Направление передачи {рабочий стол -> сервер, сервер -> рабочий стол, что-то еще} что вы используете для измерения? iperf? гарпун?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.