Как правильно временно отключить / включить PMTU Discovery в Linux?
У меня есть несколько pcaps, которые содержат пакеты больше, чем стандартный размер Ethernet MTU 1500B. Я искал об этом и нашел ссылки, указывающие на Jumbo Frames. Теперь я понимаю, что, поскольку я нахожусь в сети GBE, которая поддерживает отправку Jumbo-фреймов (до 9 Кб), стек TCP/IP в моем производном Debian будет автоматически подстраиваться и использовать такие огромные размеры фреймов ( PMTU Discovery). Это действительно круто!
Тем не менее, я хочу иметь некоторый контроль над автоматическим включением этой функции. В частности, я хочу убедиться, что когда я перехватываю pcap, он временно отключается, и поэтому все захваченные пакеты меньше 1500B. Мне нужно убедиться в этом, потому что основанная на tcpreplay инфраструктура воспроизведения pcap у меня не получается, когда он видит Jumbo-кадры. Tcpreplay имеет запрос улучшения, Поддержка фрагментов IP-пакетов> MTU, чтобы включить отправку Jumbo-фреймов. Но это билет с низким приоритетом и может потребоваться время, чтобы его решить.
Я прочитал о способах ручной настройки поведения обнаружения PMTU и обнаружил, что переменная sysctl "ip_no_pmtu_disc" в файловой системе /proc может быть полезной. Я включил его как в своей клиентской, так и в серверной системах (хотя я полагаю, что его было бы достаточно для любой из них) и набрал несколько ппс. Но у них все еще есть пакеты больше 1500B. MTU по умолчанию на моих сетевых интерфейсах уже установлен на 1500B, и поскольку обнаружение PMTU отключено, я предположил, что все будет работать нормально. Но я кое-что упускаю. Буду признателен за любые ссылки / указатели.
ПРИМЕЧАНИЕ. Я не перезагружал системы, поскольку сделанные мной изменения /proc не будут сохраняться. Я также не в состоянии перезапускать системы каждый раз, когда мне нужно воспроизвести pcaps.
2 ответа
То, что вы видите, не является показателем для больших кадров. Возможно, ваша сетевая карта сегментирует данные на более мелкие пакеты после того, как вы их прослушали. Возможно, вы тестируете на ВМ? Linux не будет использовать больший MTU для исходящих пакетов, чем тот, который настроен на интерфейсе. Если у вас MTU 1500, то это максимум.
Похоже, у вас есть TSO и GSO. Обычно MSS определяется MTU - заголовками и также объявляется по обеим сторонам соединения, что позволяет использовать наименьшее из двух значений для наращивания соединения, однако, если у вас включены tso и gso, linux будет игнорировать mtu/mss и отправлять большие фрагменты данных, которые будут фрагментированы.