MTU: почему страницы грузятся наполовину
Браузер показывает заголовок и часть текста, а картинки остаются пустыми рамками. Полоса загрузки замирает на одном и том же месте, сколько ни обновляй страницу. Бывает и так, что файл загружается до сорока процентов и обрывается. Если это повторяется на разных сайтах, стоит проверить MTU: размер пакета, который проходит через подключение целиком.
Что такое MTU
MTU, maximum transmission unit, это предел размера одного пакета на участке сети. Значение считают в байтах вместе со служебными заголовками. У обычного Ethernet он 1500 байт. Заголовок IP занимает 20 байт, заголовок TCP ещё 20, поэтому под данные остаётся 1460. Этот остаток называют MSS, максимальным размером сегмента.
Пока пакет помещается в предел, он идёт как есть. Если не помещается, есть два пути. В IPv4 маршрутизатор может разбить пакет на части, но это лишняя работа, а потеря одного фрагмента губит весь пакет. Поэтому отправитель может поставить флаг DF, don't fragment, и попросить не дробить. Тогда слишком большой пакет отбрасывается, а отправителю уходит служебное сообщение: уменьши размер, дальше предел такой-то.
Так работает автоматическое определение размера, Path MTU Discovery. Оно надёжно, пока служебные сообщения доходят. Если провайдер или роутер их не пропускает, отправитель не узнает о меньшем пределе и будет повторять тот же пакет. Пакет исчезает по дороге, соединение ждёт. Такое называют «чёрной дырой» MTU.
Почему страница загружается наполовину
Браузер начинает с малого. Он открывает соединение с сервером, обменивается короткими служебными пакетами, получает адрес сайта по DNS. Всё это помещается в любой предел, поэтому первые шаги проходят. Потом приходит HTML страницы, и он обычно тоже небольшой.
Дальше браузер запрашивает картинки, стили, шрифты и скрипты. Сервер отправляет их полными сегментами, до 1460 байт данных, то есть пакетами по 1500 байт. Если на пути есть участок с меньшим MTU, а сообщение о пределе не дошло, такие пакеты пропадают. Браузер повторяет запрос, сервер повторяет отправку, страница стоит.
Отсюда и «наполовину». Мелкие ответы и служебные пакеты проходят, крупные нет. Текст появляется, изображения остаются пустыми. Загрузка обрывается на одной и той же отметке, потому что размер пакета не меняется. Другие сайты могут открываться: их серверы отдают данные небольшими порциями или сами ограничивают размер сегмента.
Подозрение легко проверить по признакам:
- страница замирает в одном и том же месте при каждом обновлении;
- текст и меню видны, картинки и часть стилей нет;
- файл обрывается на одной и той же отметке;
- ping и тест скорости проходят, ведь они отправляют мелкие пакеты;
- через мобильный интернет та же страница открывается целиком.
Где MTU бывает меньше 1500
Чаще всего проблема появляется там, где к пакету добавляют служебные байты.
| Подключение | MTU | MSS (IPv4) |
|---|---|---|
| Ethernet, кабель или Wi-Fi до роутера | 1500 | 1460 |
| PPPoE | 1492 | 1452 |
| Туннель (инкапсуляция 20–60 байт) | 1440–1480 | 1400–1440 |
| Мобильный интернет | 1400–1500 | 1360–1460 |
PPPoE добавляет 8 байт: 1500 минус 8 равно 1492. Многие провайдеры выдают именно такое подключение, а роутер по умолчанию может держать 1500. Каждый слой инкапсуляции забирает свои байты, поэтому у туннеля предел опускается до 1440 и ниже. У мобильного интернета значение зависит от оператора и места, его тоже стоит измерять, а не угадывать.
В локальной сети менять MTU обычно не нужно: 1500 на кабеле и Wi-Fi до роутера работают. Правят вход, через который роутер подключён к провайдеру, или настройки устройства, которое само выходит в интернет.
Как найти подходящее значение командой ping
В Windows откройте командную строку и отправьте пакет с запретом дробления. Ключ -f ставит флаг DF, ключ -l задаёт размер данных.
ping -f -l 1472 8.8.8.8
Если в ответе «Ответ от 8.8.8.8: число байт=1472», предел на пути не меньше 1500. Если появилось сообщение о том, что пакет требует фрагментации, а флаг DF не даёт её выполнить, пакет до цели не дошёл. Уменьшайте размер на 8 байт: 1464, 1456, 1448 и так далее, пока ответ не станет успешным.
К рабочему размеру прибавьте 28 байт: столько занимают заголовки IP и ICMP. Получится MTU. Например, 1464 плюс 28 равно 1492.
ping -f -l 1464 8.8.8.8
Ответ от 8.8.8.8: число байт=1464 время=12мс TTL=128
Цифры здесь для примера, это не замер. Проверять лучше до узла, который стабильно отвечает: подойдёт 8.8.8.8, ya.ru или адрес вашего провайдера. Путь до разных адресов может отличаться, поэтому измеряйте до того, который нужен.
В Linux те же ключи называются -M do и -s, в macOS -D и -s.
ping -M do -s 1472 8.8.8.8
ping -D -s 1472 8.8.8.8
Для IPv6 заголовки длиннее: 40 байт вместо 20. Поэтому максимальный размер данных на 20 байт меньше, а команда в Windows выглядит так: ping -6 -f -l 1452 8.8.8.8.
Куда вписать найденное значение
Сначала роутер. Откройте его веб-интерфейс и найдите раздел с подключением к провайдеру: он называется «Интернет», WAN или PPPoE. Там есть поле MTU. Впишите найденное число, сохраните настройки и переподключите соединение. Для PPPoE это обычно 1492. Если в поле стоит «авто», попробуйте задать значение вручную: автоматика полагается на те самые служебные сообщения, которые могут не доходить.
Если компьютер подключён к интернету напрямую или в роутере нет такого поля, значение задают в системе. В Windows командную строку нужно открыть от имени администратора. Сначала посмотрите список интерфейсов и их текущий MTU:
netsh interface ipv4 show subinterfaces
netsh interface ipv4 set subinterface "Беспроводная сеть" mtu=1492 store=persistent
Имя интерфейса берите из списка, оно должно совпадать буквально. Параметр store=persistent сохранит настройку после перезагрузки. В macOS значение задаёт команда networksetup -setMTU "Wi-Fi" 1492, в Linux ip link set dev wlan0 mtu 1492, но она действует до перезагрузки.
После смены повторите ping. Наибольший размер, который проходит, должен быть равен MTU минус 28. Потом откройте страницу, которая ломалась. Если она собралась целиком, дело было в MTU.
Ставить значение меньше 1280 не стоит: это минимальный MTU для IPv6, и часть соединений может перестать работать. Если роутер не даёт поменять MTU, возможно, стоит выбрать другую модель: как смотреть характеристики, разобрано в статье про роутер для квартиры.
Если не помогло
Проверьте, где именно вы поменяли значение. MTU в роутере действует на все устройства, MTU в Windows только на этот компьютер. Если на телефоне страница по-прежнему не открывается, правка в компьютере ничего не исправила.
Если в роутере есть MSS clamping, включите его. Эта настройка ограничивает размер сегмента в начале соединения, и сервер сразу знает, сколько данных можно отправлять. Она выручает, когда служебные сообщения о пределе не доходят. Проверьте и фильтрацию ICMP: если роутер не пропускает сообщения о нужной фрагментации, автоматическое определение размера не работает.
Остальные причины выглядят иначе. Кэш браузера и расширения ломают одну страницу, а не все крупные. DNS даёт ошибку вместо половины картинок. Wi-Fi роняет скорость, но страницы доходят целиком. Если страница замирает в разных местах и только на одном сайте, MTU скорее ни при чём: смотрите DNS, расширения и настройки Wi-Fi.
MTU не влияет на скорость. Он меняет размер одного пакета, а не пропускную способность канала. Меньшее значение добавляет немного служебных байт, но убирает зависания. Ждать от него ускорения не стоит.
Частые вопросы
Почему пинг проходит, а страницы грузятся наполовину?
Команда ping по умолчанию отправляет 32 байта данных, такой пакет помещается в любой предел. Странице нужны полные сегменты до 1460 байт. Именно они не проходят через участок с меньшим MTU, если сообщение о пределе не дошло.
Можно ли просто поставить MTU 1400?
Можно, если соединение идёт через туннель и точное значение искать не хочется. 1400 часто проходит там, где не проходит 1500, но универсального числа нет. Для обычного кабеля это лишние служебные байты, поэтому лучше измерить предел командой ping.
Почему после смены MTU скорость не выросла?
MTU задаёт размер одного пакета, а не пропускную способность. Он убирает зависания и обрывы, но не ускоряет канал. Меньшее значение даже добавляет немного служебных байт, поэтому скорость может остаться прежней или чуть снизиться.
Почему на телефоне сайт открывается, а на компьютере нет?
Устройства могут выходить в интернет по разным путям и с разными настройками. Телефон может идти через мобильную сеть, где MTU другой, а на компьютере стоять своё значение или приложение, которое меняет размер пакетов. Сравните поведение через Wi-Fi и мобильный интернет и проверьте MTU на проблемном устройстве.
Почему загрузка файла обрывается на одном и том же месте?
Большой файл передаётся полными пакетами. Если один размер не проходит, передача встаёт на одной и той же отметке, а после повтора упирается в то же место. Мелкие файлы и текст при этом могут загружаться. Это один из признаков проблемы с MTU.