MTU и фрагментация: почему сайты открываются наполовину
Одна из самых коварных сетевых проблем: соединение установлено, пинг идёт, маленькие страницы открываются — а большие висят бесконечно. Почти всегда виноват MTU.
Что это такое
MTU — максимальный размер пакета, который можно отправить одним куском. В обычной Ethernet-сети это 1500 байт. Данные больше этого размера приходится резать на части.
Попробуйте бесплатно 3 дня
Без карты и автосписаний. Регистрация на сайте занимает минуту — ссылка подписки появится в личном кабинете сразу.
Откуда проблема в VPN
Туннель добавляет к каждому пакету свои заголовки — от 40 до 80 байт в зависимости от протокола. Если внутрь туннеля положить пакет на все 1500 байт, то наружу выйдет 1560 — больше, чем позволяет канал.
Дальше возможны два сценария. Либо пакет режется на два (фрагментация) — это работает, но снижает скорость. Либо он отбрасывается, и отправителю шлётся служебное сообщение «слишком большой пакет, уменьши».
Вот где ломается
Это служебное сообщение передаётся по протоколу ICMP. А ICMP многие администраторы блокируют целиком — «на всякий случай, для безопасности». В результате отправитель не узнаёт, что пакет не прошёл, и продолжает слать такие же большие.
Получается знаменитый «чёрный дыра MTU»: мелкие пакеты проходят, крупные молча исчезают. Пинг работает (он маленький), заголовки страницы приходят, а картинки и тяжёлые ответы — нет.
Как распознать
- Сайты открываются частично или «висят» на загрузке
- Маленькие страницы работают, тяжёлые — нет
- SSH подключается, но зависает при выводе большого объёма
- Скачивание обрывается на одном и том же месте
Как подобрать значение
Отправляем пакеты фиксированного размера с запретом фрагментации и ищем границу:
# Linux / macOS
ping -M do -s 1472 -c 2 8.8.8.8
# Windows
ping -f -l 1472 8.8.8.8
Если проходит — увеличиваем, если «Packet needs to be fragmented» — уменьшаем. К найденному размеру добавьте 28 байт (заголовки IP и ICMP) — получите рабочий MTU.
Типичные значения
| Канал | MTU |
|---|---|
| Обычный Ethernet | 1500 |
| PPPoE (многие домашние провайдеры) | 1492 |
| WireGuard поверх IPv4 | 1420 |
| WireGuard в мобильной сети | 1280–1380 |
В конфигурации WireGuard это строка MTU = 1420 в секции Interface. Если на мобильном интернете что-то работает странно — попробуйте 1280, это безопасное значение почти для любой сети.
У нас
В VLESS-конфигурациях подбирать ничего не нужно: трафик идёт поверх TCP, а он сам договаривается о размере сегментов. Проблема актуальна в основном для WireGuard — и если вы столкнулись, напишите нам, подскажем значение под вашего оператора.
Нужен VPN, который не отваливается?
49 конфигураций в 11 странах, три протокола на выбор. Заведите аккаунт на сайте и проверьте три дня бесплатно.
Читайте также
Anycast, CDN и маршрутизация: почему один адрес ведёт в разные места
Как работает раздача контента по всему миру, что такое Anycast и почему через VPN некоторые сайты вд…
СетиЧто происходит за ту секунду, пока VPN подключается
Пошаговый разбор: от нажатия кнопки до первого загруженного байта. DNS, рукопожатие, аутентификация …
О сервисеКак мы узнаём о проблеме раньше, чем вы напишете
Что именно проверяет наш мониторинг, почему простого пинга недостаточно и как устроена реакция на бл…