MTU и MSS
MTU — максимальный размер кадра, который проходит через интерфейс, MSS — максимальный размер полезных данных в TCP-сегменте.
Что такое MTU и MSS
MTU (Maximum Transmission Unit) — наибольший размер пакета, который интерфейс может передать одним куском. Для обычного Ethernet это 1500 байт. Всё, что больше, приходится либо фрагментировать, либо отбрасывать.
MSS (Maximum Segment Size) — наибольший объём полезных данных внутри одного TCP-сегмента, без заголовков. Стороны сообщают его друг другу в SYN-пакете при установке соединения.
Связь между ними прямая — MSS равен MTU минус заголовки:
MTU 1500
├─ заголовок IPv4 20 байт
├─ заголовок TCP 20 байт
└─ данные (MSS) 1460 байт ← это и передаёт приложение
Для IPv6 заголовок 40 байт → MSS = 1500 − 40 − 20 = 1440
Типовые значения
| Среда | MTU | MSS (IPv4) |
|---|---|---|
| Ethernet | 1500 | 1460 |
| PPPoE (часть домашних провайдеров) | 1492 | 1452 |
| WireGuard (типично) | 1420 | 1380 |
| VXLAN поверх Ethernet | 1450 | 1410 |
| Jumbo frames | 9000 | 8960 |
| Минимум для IPv6 | 1280 | 1220 |
Каждый уровень туннелирования отъедает свои байты: VPN, VXLAN в оверлейной сети, GRE. Поэтому внутри туннеля MTU всегда меньше, чем снаружи.
Jumbo frames
Jumbo frame — кадр Ethernet больше стандартных 1500 байт, обычно 9000. Смысл в накладных расходах: при MTU 1500 на каждые 1460 байт данных приходится 40 байт заголовков и одно прерывание, при MTU 9000 — те же 40 байт на 8960 данных. Меньше пакетов, меньше работы процессору, выше throughput.
Где это оправдано: сети хранения (iSCSI, NFS), бэкапы, репликация БД, межузловой трафик GPU-кластера — то есть там, где гоняют большие объёмы внутри одного сегмента.
Главное условие: jumbo frames должны быть включены на всех устройствах сегмента — на обоих хостах и на коммутаторе между ними. Если хоть один узел остался на 1500, пакеты будут молча пропадать. В интернет jumbo не выпускают: за пределами вашей сети MTU 1500 и меньше.
Как проявляется неверный MTU
Симптом характерный и обманчивый: пинг идёт, SSH-сессия открывается, но большие страницы, загрузка файлов или git clone зависают намертво. Причина — маленькие пакеты проходят, а полноразмерные отбрасываются, и виноватым обычно считают приложение.
Классика жанра — Path MTU Discovery, сломанный вырезанным ICMP. Роутер на пути должен ответить «пакет слишком велик» сообщением ICMP fragmentation needed; если администратор зарезал ICMP целиком, отправитель не узнает о проблеме и будет вечно переотправлять один и тот же сегмент. Отсюда правило: не блокируйте ICMP полностью на файрволе.
Как найти реальный MTU
Отправляем пакет с запретом фрагментации и уменьшаем размер, пока не пройдёт:
$ ping -M do -s 1472 -c1 example.com
PING example.com (93.184.216.34) 1472(1500) bytes of data.
ping: local error: message too long, mtu=1420
$ ping -M do -s 1392 -c1 example.com
1400 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=41.2 ms
К размеру из -s прибавьте 28 байт (20 IP + 8 ICMP) — получится MTU. Здесь прошло 1392 → MTU 1420, типичный признак туннеля.
$ ip link show eth0 | head -1
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
$ sudo ip link set dev eth0 mtu 9000 # до перезагрузки
Когда исправить MTU по всему пути нельзя, применяют MSS clamping: шлюз сам переписывает MSS в проходящих SYN-пакетах, и стороны сразу договариваются о безопасном размере.
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu
Этот приём — стандартное лекарство для VPN и PPPoE, где иначе часть сайтов открывается, а часть нет.
Связанные термины
- TCP и UDP — MSS согласуется при установке TCP-соединения
- Сетевой адаптер — где выставляется MTU
- Туннелирование — главный источник уменьшения MTU
- throughput — то, что растёт от jumbo frames
- Сетевая диагностика — как ловят проблемы с MTU
- VLAN и коммутация — jumbo включают на коммутаторе целиком
Готовы запустить GPU-задачу?
Запустить GPU-сервер