Определение простыми словами
MTU — это потолок объёма IP-пакета на конкретном канале. Если приложение отправит больше, маршрутизатор либо разрежет пакет на куски (фрагментация), либо вернёт ICMP-сообщение «Fragmentation Needed» с просьбой уменьшить размер. От правильного MTU напрямую зависят скорость, потери и стабильность соединения.
Стандартный MTU для Ethernet — 1500 байт. Туннели VPN, GRE, PPPoE и MPLS отъедают от него по 8–80 байт служебных заголовков, поэтому в этих сценариях окно сужается. Несовпадение MTU на участках пути даёт классическую беду: TCP-соединение устанавливается, маленькие пакеты ходят, большие висят — это «PMTU black hole».
Сравнение типичных MTU
| Канал | MTU, байт | Особенности |
|---|---|---|
| Ethernet | 1500 | Стандарт по умолчанию |
| PPPoE (домашний интернет) | 1492 | −8 байт на PPPoE-заголовок |
| OpenVPN UDP | 1450–1472 | Зависит от шифра и сжатия |
| WireGuard | 1420 | −80 байт на туннель |
| Jumbo Frames (DC) | 9000 | Только в локальной сети с поддержкой по всему пути |
Кейсы использования
- Подбор MTU для VPN:
ping -M do -s 1472 8.8.8.8— найти максимум без фрагментации, прибавить 28 байт IP+ICMP-заголовков. - Jumbo Frames между серверами хранения и СУБД в DC — рост пропускной способности iSCSI на 10–20 %.
- Настройка MTU 1380 для туннеля через мобильный 4G, где провайдер режет крупные пакеты.
- Negative: включить Jumbo на одном свитче из десяти — получить блек-холы на длинных соединениях, исходящие SSH тормозят, входящие отваливаются.
- Negative: DROP ICMP «Fragmentation Needed» на фаерволе ломает PMTU Discovery и порождает те же чёрные дыры.
Технические детали
# Узнать текущий MTU интерфейса
ip link show eth0 | awk '{print $5}'
# Найти максимальный MTU без фрагментации до удалённого хоста
ping -M do -s 1472 -c 4 example.com
# Если потери — уменьшать -s по 8 байт, пока не пройдёт
# Установить MTU 1420 для WireGuard
ip link set dev wg0 mtu 1420
# Постоянная настройка через netplan (Ubuntu 22.04+)
cat > /etc/netplan/01-mtu.yaml <<EOF
network:
version: 2
ethernets:
eth0:
mtu: 9000
EOF
netplan apply
# Проверка PMTU до хоста
tracepath example.com
В Linux PMTU кэшируется на 10 минут. Для отладки сбрасывается командой ip route flush cache. Контроль за MSS на TCP делает iptables через --clamp-mss-to-pmtu.
🔥 Где это применяется
Частые вопросы
Как понять, что MTU неправильный?
TCP-соединение устанавливается, мелкие запросы проходят, но загрузка крупных страниц или файлов зависает. Pingом большим пакетом проверяется наличие потерь.
Стоит ли везде включать Jumbo Frames?
Только в изолированной сети, где все коммутаторы и сетевые карты поддерживают 9000. На границе с интернетом использовать стандартные 1500.
Что такое MSS clamping?
Принудительное снижение Maximum Segment Size в SYN-пакетах TCP до значения, гарантированно проходящего через канал с меньшим MTU. Часто включают на NAT-роутерах с PPPoE.