Назад | Перейти на главную страницу

Как правильно временно отключить / включить обнаружение PMTU в системе Linux?

У меня есть несколько файлов pcap, которые содержат пакеты, размер которых превышает стандартный размер MTU Ethernet 1500B. Я искал об этом и нашел ссылки, указывающие на Jumbo Frames. Теперь я понимаю, что, поскольку я нахожусь в сети GBE, которая поддерживает отправку кадров Jumbo (до 9 КБ), стек TCP / IP в моем производном Debian будет автоматически настраиваться и использовать такие огромные размеры кадров (PMTU Discovery). Это действительно здорово!

Однако я хочу иметь некоторый контроль над автоматическим включением этой функции. В частности, я хочу убедиться, что когда я захватываю pcap, он временно отключен, и поэтому все захваченные пакеты имеют размер менее 1500 Байт. Мне нужно убедиться в этом, потому что фреймворк воспроизведения pcap на основе tcpreplay дает сбой, когда он видит кадры Jumbo. У tcpreplay есть запрос на улучшение, Поддержка фрагментов IP-пакетов> MTU чтобы разрешить отправку Jumbo-кадров. Но это запрос с низким приоритетом, и на его разрешение может потребоваться время.

Я читал о способах ручной настройки поведения обнаружения PMTU и обнаружил, что переменная sysctl "ip_no_pmtu_disc" в файловой системе / proc может оказаться полезной. Я включил его как на своих клиентских, так и на серверных системах (хотя я предполагаю, что включения его на любой из них было бы достаточно) и захватил несколько файлов pcap. Но у них все еще есть пакеты размером более 1500Б. MTU по умолчанию на моих сетевых интерфейсах уже установлен на 1500B, и, поскольку обнаружение PMTU отключено, я предполагал, что все будет работать нормально. Но есть кое-что, что мне не хватает. Буду признателен за любые ссылки / указатели.

ПРИМЕЧАНИЕ. Я не перезагружал системы, так как сделанные мной настройки / proc не сохранятся. Я также не могу перезагружать систему каждый раз, когда мне нужно воспроизвести pcaps.

То, что вы видите, не указывает на наличие больших кадров. Вероятно, ваша сетевая карта сегментирует данные на более мелкие пакеты после того, как вы их понюхали. Возможно, вы тестируете виртуальную машину? Linux не будет использовать больший MTU для исходящих пакетов, чем тот, который настроен на интерфейсе. Если у вас MTU 1500, то это максимум.

похоже, что у вас могут быть включены TSO и GSO. Обычно MSS определяется заголовками MTU, и он также объявляется для обеих сторон соединения, что позволяет использовать самый низкий из двух для построения соединения, однако, если у вас включены tso и gso, linux будет игнорировать mtu / mss и отправлять большие куски данных, которые будут фрагментированы.