Как установить максимальный максимальный размер сегмента TCP в Linux? - PullRequest
7 голосов
/ 04 октября 2010

В Linux, как установить максимальный размер сегмента, разрешенный для TCP-соединения? Мне нужно установить это для приложения, которое я не написал (поэтому я не могу использовать setsockopt, чтобы сделать это). Мне нужно установить это выше mtu в сетевом стеке.

У меня два потока, использующих одно и то же сетевое соединение. Каждый периодически отправляет небольшие пакеты, которые требуют абсолютной минимальной задержки. Другой отправляет тонны данных - я использую SCP для имитации этой ссылки.

У меня настроено управление трафиком (tc), чтобы обеспечить высокий приоритет трафика с минимальной задержкой. Однако проблема, с которой я сталкиваюсь, заключается в том, что TCP-пакеты, поступающие из SCP, имеют размеры до 64 Кбайт. Да, они разбиты на более мелкие пакеты на основе mtu, но, к сожалению, это происходит ПОСЛЕ того, как tc устанавливает приоритеты для пакетов. Таким образом, мой пакет с низкой задержкой застревает до 64 Кбайт трафика SCP.

Эта статья указывает, что в Windows вы можете установить это значение.

Что-нибудь в Linux можно установить? Я пробовал ip route и iptables, но они слишком низки в сетевом стеке. Мне нужно ограничить размер пакета TCP до tc, чтобы он мог соответствующим образом расставить приоритеты для пакетов с высоким приоритетом.

Ответы [ 5 ]

7 голосов
/ 31 октября 2012

Используете ли вы разгрузку сегментации tcp в ники?(Вы можете использовать «ethtool -k $ your_network_device», чтобы увидеть настройки разгрузки.) Это единственный способ, насколько я знаю, что вы увидите 64k tcp-пакетов с MTU устройства 1500. Не то чтобы это отвечало на вопрос, ноэто может помочь избежать неправильной диагностики.

3 голосов
/ 05 октября 2010

Верхняя граница объявленного TCP MSS - это MTU маршрута первого перехода. Если вы видите 64 тыс. Сегментов, это указывает на то, что MTU маршрута первого прыжка слишком велик - вы используете петлю или что-то еще для тестирования?

2 голосов
/ 19 марта 2018

ip route команда с опцией advmss помогает установить MSS значение.

ip route add 192.168.1.0/24 dev eth0 advmss 1500
0 голосов
/ 20 июня 2018

MSS = MTU - 40 байтов (стандартная служебная нагрузка TCP / IP 40 байтов [20 + 20])

Если MTU составляет 1500 байтов, тогда MSS будет 1460 байтов.

0 голосов
/ 08 февраля 2011

Вы определенно неправильно диагностируете проблему; как кто-то еще указал, tc не видит TCP-пакеты, он видит IP-пакеты, и они уже были бы кусками в этот момент.

Возможно, вы просто испытываете bufferbloat : вы перегружаете свою исходящую очередь в совершенно отдельном устройстве (возможно, модем DSL или кабельный модем). Единственное исправление состоит в том, чтобы сказать tc ограничить вашу исходящую пропускную способность меньше, чем пропускная способность модема, например. используя TBF.

...