Оглавление:
Статья последний раз была обновлена 19.12.2024
Как быть, и при чем здесь MTU?
Постановка проблемы
Сайты успешно пингуются, но в браузере не открываются. Попробовал для очистки совести на разных браузерах – история та же, сайты не грузятся. Команда ping успешно пинговала как по имени сайта, так и по IP-адресу. Трассировка tracert также успешно показывала все промежуточные точки. Гипотеза о том, что во всем виноваты dns-сервера, отпала. Беглый поиск выдал рекомендацию копать в сторону MTU.
Поиски решения
В разных статьях, на форумах и сервисах вопросов-ответов попадались самые разные варианты решения, я начал методично перебирать каждое из них.
Первое, что предлагалось – зайти в веб-интерфейс роутера и пошаманить с настройками. Решил отложить на самый конец.
Следом шли советы залезть в реестр и ручками внести изменения в несколько веток. В частности, вот на этой странице указано, как изменить параметры MTU в реестре. Попробовал — не взлетело.
Итоговое решение – изменить MTU через командную строку, в моем случает это cmd.
Что такое MTU?
MTU (Maximum Transmission Unit) — максимальный размер полезного блока данных одного пакета. Если размер блока превышает MTU, то он может быть передан протоколом с использованием фрагментации. Основные значения MTU в байтах:
- Ethernet — 1500
- 16 Mbps Token Ring — 17914
- 4 Mbps Token Ring — 4464
- FDDI — 4352
- IEEE 802.3/802.2 — 1492
- PPPoE (WAN Miniport) — 1480
- X.25 — 576
Зачем менять MTU?
В некоторых случаях, когда значение MTU на компьютере больше, чем на роутере, из-за фрагментации пакетов сеть может тормозить, например, при передаче потокового видео или аудио. Или, как в моем случае, вообще отказываться загружать страницы, при том что пинг проходит.
Как узнать текущие настройки MTU?
Следует запустить командную строку cmd и вбить следующую команду: netsh interface ipv4 show subinterfaces.
Может быть несколько сетевых подключений (беспроводное или Ethernet), и у каждого можно отдельно настроить значение MTU.
Как подобрать оптимальное значение MTU?
Вычислить оптимальное MTU можно при помощи команды ping, в которой следует указать два параметра:
- -f запрещает фрагментировать пакеты,
- -l указывает размер пакета.
Например, команда может выглядеть так: ping yandex.ru -f -l 1500.
p>Если пинг с указанным размером MTU не проходит — уменьшаем размер пакета пока не найдем максимальный, при котором адрес пингуется. Например, при 1500 ping возвращает «превышен интервал ожидания для запроса», а при значении 1400 — ответ приходит. Начинаем постепенно увеличивать значение. Например, получили 1422. Следует прибавить 28 байт (8 байт ICMP заголовок и 20 байт IP). Получим 1422+28=1450. Оптимальное значение будет MTU 1450.
Как установить MTU для конкретного сетевого подключения?
У меня это интерфейс «Ethernet 1». В командной строке нужно набрать команду: netsh interface ipv4 set subinterface «Ethernet 1» mtu=1450 store=persistent.
И да, каждый сетевой интерфейс в Windows мы можем именовать как угодно, а значит указывать его надо в кавычках со всеми пробелами (если имеются), экранировать ничего не надо. После изменений компьютер нужно перезагрузить!
Если по какой-то причине нужно вернуть настройки по-умолчанию, в cmd пишем: netsh interface ipv4 reset, и снова перезагружаем компьютер.
Вместо заключения
MTU — это одна из распространенных настроек при решении подобных задачь, но не единственная. Легко может быть так, что в вашем случае совсем другая проблема. Просто будьте к этому готовы.
- Поднимаем веб-сервер на Ubuntu - 16.09.2024
- Переадресация домена на другой домен - 08.08.2023
- Как установить и удалить GNOME? - 31.07.2023