Битлента
Сетевые команды и утилиты4 мин чтения·

Проверка MTU командой ping -f -l: подбор размера пакета без фрагментации

Как подобрать максимальный размер пакета командой ping с запретом фрагментации в Windows, Linux и macOS, и как пересчитать его в MTU.

Кратко

Отправляйте ping с запретом фрагментации (-f в Windows) и уменьшайте размер данных (-l), пока ответы не пойдут. Найденный размер плюс 28 байт даёт MTU пути. Для Ethernet это 1472 и 1500, для PPPoE обычно 1464 и 1492.

Почему MTU нельзя угадать и как его измерить

MTU показывает наибольший пакет, который канал передаёт целиком. У Ethernet он равен 1500 байт, но на реальном маршруте бывают участки с меньшим значением: соединение по PPPoE снижает его до 1492, а некоторые мобильные каналы дают ещё меньше. Если пакет больше допустимого и фрагментация запрещена, устройство отбрасывает его. Небольшие пакеты при этом проходят, отсюда странные симптомы: страницы частично открываются, картинки не грузятся, а маленькие запросы работают.

Измерить MTU можно обычным ping. Мы отправляем запросы с флагом «не фрагментировать» и подбираем размер данных, пока они не начнут проходить. Метод простой и не требует сторонних программ.

Формула запоминается легко: MTU равен размеру данных плюс 28 байт, из которых 20 занимает заголовок IP и 8 заголовок ICMP. Значит, данные 1472 байта дают пакет 1500 байт.

Отдельно отметим, что проблема размера часто проявляется только на конкретных узлах. Сайты, расположенные за участком с уменьшенным MTU, работают нестабильно, а остальные открываются нормально, и причину быстро не найти без измерения. Поэтому ping с запретом фрагментации входит в базовый набор диагностики наряду с проверкой DNS и шлюза.

Команды для Windows, Linux и macOS

Синтаксис отличается в каждой системе, ключи запрета фрагментации разные.

СистемаКомандаКомментарий
Windowsping -f -l 1472 example.com-f запрещает фрагментацию, -l задаёт размер данных
Linuxping -M do -s 1472 example.com-M do включает запрет фрагментации, -s размер данных
macOSping -D -s 1472 example.com-D устанавливает бит запрета фрагментации

В Windows добавьте -n 2, чтобы не ждать четырёх ответов. В Linux и macOS полезен ключ -c 2 с тем же смыслом. Выбирайте для проверки устойчиво отвечающий узел с известным адресом, например адрес шлюза вашего провайдера или собственный сервер. Узел, который сам не отвечает на ping, для теста не подходит.

Признак успеха в Windows: обычные строки «Ответ от…» с указанным числом байт. Признак неудачи: сообщение «Требуется фрагментация пакета, но установлен флаг DF» или тайм-аут, если промежуточное устройство молча отбрасывает пакет без ICMP-уведомления. Второй случай встречается чаще, чем хотелось бы, и его тоже считайте неудачей.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Пошаговый подбор размера

Идея та же, что при поиске числа в игре «больше-меньше». Начинаем с размера, соответствующего Ethernet, и сдвигаем границу.

  1. Запустите ping -f -l 1472 -n 2 example.com. Если ответы пришли, MTU пути не меньше 1500, дальше искать нечего.
  2. При неудаче уменьшите размер: 1464, 1400, 1300. Найдите первый размер, который проходит.
  3. Уточняйте границу шагами в 10, затем в 1 байт между последним неудачным и первым удачным значением.
  4. Прибавьте 28 к наибольшему прошедшему размеру: это и есть MTU на пути.
  5. Повторите проверку с двумя-тремя разными узлами, чтобы исключить особенности одного маршрута.

Пример результата (пример): с размером 1464 ответы приходят, с 1465 сообщение о необходимости фрагментации. Тогда MTU равен 1464 плюс 28, то есть 1492. Это типичный признак PPPoE.

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

Что делать с найденным значением

Если измеренный MTU меньше 1500, а на компьютере или роутере выставлено больше, пакеты будут теряться. Корректировать значение нужно там, где вы управляете настройками: в интерфейсе роутера для соединения с провайдером или на сетевом адаптере компьютера.

В Windows посмотреть текущее значение адаптера можно командой netsh interface ipv4 show subinterfaces, а задать значение командой netsh interface ipv4 set subinterface с указанием интерфейса и параметра mtu. Точные названия интерфейсов зависят от системы, поэтому сверяйтесь с выводом первой команды. В Linux значение меняют командой ip link set dev имя mtu число, а изменение сохраняется только до перезагрузки, если не прописано в настройках сетевой службы.

Учитывайте, что в роутерах величина MTU часто указывается вместе с типом подключения. Для PPPoE провайдеры называют 1492 или меньше, для IPoE обычно оставляют 1500. При сомнениях сверьтесь с инструкцией провайдера. Подробнее о понятии читайте на странице словаря про MTU, а о настройке на домашнем роутере на странице про MTU и MSS.

После изменения MTU повторите измерение и сравните результат с прежним. Если после правки страницы стали открываться полностью, значит, причина была именно в размере пакета. Если ничего не изменилось, верните прежнее значение и ищите проблему в другом месте: слишком низкий MTU снижает эффективность канала без пользы.

Когда результат ping обманывает

Метод удобен, но не универсален. Есть несколько ситуаций, в которых он даёт ложную картину.

  • Узел не отвечает на ICMP или ограничивает его. Тогда неудача не связана с размером.
  • Фильтры на пути отбрасывают ICMP-сообщения о необходимости фрагментации, и вы видите только тайм-ауты. Значение MTU тогда определяется по границе, а не по тексту сообщения.
  • Маршрут может меняться. Два запроса подряд иногда идут разными путями с разным MTU.
  • Обратный путь ответа тоже ограничен. Ping проверяет запрос и ответ вместе, поэтому проблема может быть в обратном направлении.

Для проверки маршрута с определением MTU на каждом участке удобнее tracepath в Linux, если он установлен. Он показывает значение pmtu по мере прохождения узлов. Проверяйте только свои сети и узлы, для которых у вас есть разрешение.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
pingmtuфрагментацияpppoe

Часто задаваемые вопросы

Читайте также