“Правильный MTU — это не магическая константа, а результат измерений в конкретной сети. Слишком большой — пакеты фрагментируются и теряются, слишком маленький — вы платите накладными расходами за заголовки и теряете в производительности. В реальных сетях стандартный Ethernet MTU в 1500 байт часто оказывается мифом, и причина — в наложенных технологиях вроде PPPoE, VPN или туннелей.”
Как определяется максимальный размер пакета (MTU)
Maximum Transmission Unit (MTU) — это технический лимит, который определяет, каков самый большой блок данных может быть передан по сетевому интерфейсу или через соединение целиком, без необходимости его разбиения на фрагменты. Этот параметр включает в себя и служебные заголовки протоколов (IP, TCP/UDP), и непосредственно полезные данные (payload).
Эмпирический поиск с помощью ping
Вместо того чтобы полагаться на предположения, точное значение MTU для пути до конкретного узла можно найти экспериментально. Для этого используется утилита ping с ключами, запрещающими фрагментацию пакета.
Принцип прост: вы отправляете пакет указанного размера с флагом «не фрагментировать». Если пакет проходит — размер можно увеличивать. Если маршрутизатор на пути требует его разбить, а флаг это запрещает, вы получаете ошибку. Пороговое значение и будет указывать на максимально допустимый размер полезных данных.
ping 84.252.74.247 -f -l 1470
В этом примере отправляется 1470 байт данных. Успешный ответ означает, что этот размер допустим.
ping 84.252.74.247 -f -l 1473
При отправке 1473 байт приходит сообщение об ошибке: Packet needs to be fragmented but DF set. Это указывает на предельное значение.
Откуда берётся итоговое число 1500? К объёму полезных данных (1472 байта — найденный порог для этого примера) добавляются служебные заголовки:
- 20 байт — заголовок IP
- 8 байт — заголовок ICMP (протокол, который использует ping)
Итого: 1472 + 28 = 1500 байт. Это и есть MTU для данного сетевого пути.
Настройка MTU на сетевых устройствах
После определения оптимального значения его необходимо зафиксировать в конфигурации сетевого интерфейса. Команды различаются в зависимости от операционной системы или оборудования.
Windows
Используется утилита netsh. Укажите имя интерфейса, которое можно посмотреть командой netsh interface ipv4 show subinterfaces.
netsh interface ipv4 set subinterface "Ethernet" mtu=1470 store=persistent
Изменения применяются сразу, но для надёжности перезапустите сетевой адаптер.
Linux
Изменить MTU можно динамически или прописать в конфигурационном файле для сохранения после перезагрузки.
sudo ip link set dev eth0 mtu 1470
Для постоянной настройки в Debian/Ubuntu (файл /etc/network/interfaces):
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
mtu 1470
Оборудование Cisco (IOS)
Настройка производится в конфигурационном режиме интерфейса.
enable
configure terminal
interface GigabitEthernet0/1
mtu 1470
exit
write memory
Алгоритм выбора оптимального значения
Выбор MTU — это не разовая процедура «установил и забыл». Значение может меняться при смене маршрута или типа подключения (например, переход с Ethernet на VPN).
Шаг 1: Измерение реального MTU пути
- Выберите стабильный удалённый хост, например, публичный DNS-сервер (
8.8.8.8). - Начните с размера полезных данных 1400 байт и отправьте ping с флагом
-f(Windows) или-M do(Linux). - Постепенно увеличивайте размер (скажем, на 10-20 байт), пока не получите сообщение о необходимости фрагментации.
- Затем точнее определите порог, уменьшая шаг до 1 байта. Максимальный прошедший размер — ваше значение X.
Шаг 2: Расчёт и применение MTU интерфейса
MTU = X + 28 байт (20 байт IP-заголовок + 8 байт ICMP-заголовок). Настройте это значение на своём основном сетевом интерфейсе, как показано выше.
Шаг 3: Верификация
После настройки снова выполните ping с размером, соответствующим найденному X. Все пакеты должны проходить без потерь и ошибок фрагментации. Дополнительно можно проверить скорость и стабильность соединения.
Учёт специфики сетевых технологий
Стандартное значение 1500 байт редко работает везде из-за инкапсуляции. Вот типичные сценарии:
| Технология | Рекомендуемый MTU | Причина |
|---|---|---|
| Чистый Ethernet | 1500 | Стандарт IEEE 802.3. |
| PPPoE (часто используется провайдерами) | 1492 или 1480 | Добавляет 8-байтовый заголовок PPPoE поверх кадра Ethernet, «съедая» полезное пространство. |
| VPN (IPsec, OpenVPN) | ~1400-1420 | Значительные накладные расходы на криптографические заголовки, инкапсуляцию и, возможно, туннелирование. |
| Сети с туннелями (GRE, VXLAN) | На 40-100 байт меньше 1500 | Каждый уровень инкапсуляции добавляет свой заголовок. |
Практические примеры расчёта
Пример 1: Подключение по Ethernet к интернету.
Если команда ping 8.8.8.8 -f -l 1472 успешна, то MTU пути = 1472 + 28 = 1500. Устанавливайте 1500.
Пример 2: Подключение через PPPoE.
Здесь успешным окажется, например, размер 1452 байта. Тогда MTU = 1452 + 28 = 1480. Именно 1480 (а не 1492) может оказаться рабочим значением у некоторых провайдеров из-за дополнительных служебных полей.
Пример 3: Работа поверх VPN.
Максимальный проходящий размер может упасть до 1372 байт. Тогда MTU = 1372 + 28 = 1400. Установка такого значения на интерфейсе предотвратит фрагментацию на стороне VPN-клиента.
Последствия неправильного выбора MTU
- Слишком большое значение: Пакеты будут фрагментироваться на промежуточных узлах (если флаг DF не установлен). Это увеличивает нагрузку на процессоры маршрутизаторов, задержки и может приводить к потерям — если один фрагмент теряется, не доходит весь оригинальный пакет. Некоторые сервисы (например, IPsec) могут работать некорректно или отказаться устанавливать соединение.
- Слишком маленькое значение: Вы платите «налог на заголовки». Значительная часть пропускной способности канала тратится на передачу служебной информации, а не полезных данных. Это может снизить реальную скорость закачки, особенно заметно на быстрых соединениях.
Оптимальный MTU — это компромисс, найденный для вашей конкретной сетевой конфигурации. Регулярная проверка, особенно после изменений в сети или подключения к VPN, помогает поддерживать стабильное и производительное соединение.