Проверка MTU

Описание

MTU (Maximum Transmission Unit) — максимальный размер пакета данных, который может быть передан по сети без фрагментации. Проверка MTU помогает диагностировать проблемы с сетевым подключением, особенно при работе с VPN, туннелями или специфическими сетевыми конфигурациями.

Проверка MTU на разных операционных системах

macOS

На macOS используйте команду:

ping -D -s 8184 [destinationIP]

Примечание: В более новых версиях macOS (начиная с версии 11.x и 12.x) максимальный размер фрейма для ping должен быть следующим: {.is-info}

ping -D -s 8164 [destinationIP]

Параметры:

  • -D — установить флаг “Don’t Fragment” (не фрагментировать)
  • -s 8184 (или 8164) — размер пакета данных (без учета заголовков IP и ICMP)
  • [destinationIP] — IP-адрес или имя хоста назначения

Linux

На Linux используйте команду:

ping -M do -s 8972 [destinationIP]

Параметры:

  • -M do — установить флаг “Don’t Fragment” (не фрагментировать)
  • -s 8972 — размер пакета данных (без учета заголовков IP и ICMP)
  • [destinationIP] — IP-адрес или имя хоста назначения

Windows

На Windows используйте команду:

ping -f -l 9000 [destinationIP]

Параметры:

  • -f — установить флаг “Don’t Fragment” (не фрагментировать)
  • -l 9000 — размер пакета данных (без учета заголовков IP и ICMP)
  • [destinationIP] — IP-адрес или имя хоста назначения

Как интерпретировать результаты

Успешная проверка

Если пакет успешно доставлен без фрагментации, вы увидите ответ от удаленного хоста:

$$64 bytes from [destinationIP]: icmp_seq=0 ttl=64 time=1.234 ms$$

Это означает, что MTU поддерживает размер пакета, который вы тестируете.

Неудачная проверка

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

Linux/macOS:

$$ping: local error: Message too long, mtu=1500$$

Windows:

$$Packet needs to be fragmented but DF set.$$

В этом случае нужно уменьшить размер пакета и повторить проверку.

Методика определения оптимального MTU

  1. Начните с максимального размера пакета для вашей ОС (см. команды выше).
  2. Если пакет не проходит, уменьшайте размер на 28 байт (размер заголовков IP и ICMP) и повторяйте проверку.
  3. Продолжайте до тех пор, пока пакет не пройдет успешно.
  4. Оптимальный MTU = размер успешного пакета + 28 байт (заголовки).

Примеры использования

Проверка MTU до удаленного сервера

# Linux
ping -M do -s 8972 <IP_адрес>

# macOS (старые версии)
ping -D -s 8184 <IP_адрес>

# macOS (новые версии 11.x+)
ping -D -s 8164 <IP_адрес>

# Windows
ping -f -l 9000 <IP_адрес>

Примечание: Замените <IP_адрес> на IP-адрес сервера, до которого нужно проверить MTU. {.is-info}

Поиск оптимального MTU (Linux)

# Начните с большого размера
ping -M do -s 8972 <IP_адрес>

# Если не проходит, уменьшите на 28
ping -M do -s 8944 <IP_адрес>

# Продолжайте уменьшать до успешного результата
ping -M do -s 8916 <IP_адрес>

Примечание: Замените <IP_адрес> на IP-адрес сервера, до которого нужно проверить MTU. {.is-info}

Важные замечания

Важно: Размер, указанный в параметре -s (Linux/macOS) или -l (Windows), — это размер данных пакета без учета заголовков. Реальный размер пакета будет больше на 28 байт (20 байт IP-заголовок + 8 байт ICMP-заголовок). {.is-warning}

Примечание: Стандартный MTU для Ethernet составляет 1500 байт. Для проверки стандартного MTU используйте размер пакета 1472 байта (1500 - 28 = 1472). {.is-info}