как узнать mtu провайдера
Провайдеры и MTU/MSS/PMTU
Предыстория
Значит нужен мне второй канал связи, да этак мегабит 300 в секунду. В моём городе немного провайдеров, по этому выбрать не дали и пришлось подключаться к WiFire (он же NetByNet, MegaFon и так далее). Подключился, потестил, 300 мегабит, балдеж. Решил я значит почитать что нового на своем любимом Хабре и опа: он не открывается, но охотно пингуется.
Диагностика
Ну думаю: что-то тут не так. Сетевое у меня Mikrotik, возможностей уйма, пойду искать причину на своей стороне. Лезу в логи и вижу как посыпался DoH (РКН, приветик) и крайне удивляюсь этому. решил временно отрубить DoH и дать 1.1.1.1. Ситуация не изменилась. Начал резолвить адреса хотя бы чего-нибудь, все через раз. Решил прокинуть трейс до Хабра и смотрю на «потяряшки». Думаю дай звякну в поддержку, вдруг умное чего скажут. Те репу почесали, сказали что не видят мою сеть за роутером (nat >> forward >> change ttl >>+1 😀) и изобразили что-то вроде «Мы ХЗ».
Начал копать дальше. Вспомнил всю балду, которую знаю о пакетах и тут осенило.
Что такое MTU и MSS?
MTU (англ. maximum transmission unit) означает максимальный размер полезного блока данных одного пакета (англ. payload), который может быть передан протоколом без фрагментации.
MSS (англ. Maximum segment size) является параметром протокола TCP и определяет максимальный размер полезного блока данных в байтах для TCP-пакета (сегмента). Таким образом этот параметр не учитывает длину заголовков TCP и IP.
Решение проблемы
Топаем в консоль и пишем:
/ip firewall mangle add chain=forward action=change-mss new-mss=clamp-to-pmtu passthrough=no tcp-flags=syn protocol=tcp out-interface=*название WAN интерфеса* tcp-mss=1300-65535 log=no
/ip firewall mangle add chain=forward action=change-mss new-mss=clamp-to-pmtu passthrough=no tcp-flags=syn protocol=tcp in-interface=*название WAN интерфеса* tcp-mss=1300-65535 log=no
Разбираем что написали:
и бинго, наконец-то открывается Хабр и все что мне нужно.
В сетевой части я не «Ас», по этому сумбурно вышло, да и на Хабре статьи не нашел похожей, может будет кому полезно.
Как узнать значение MTU
Windows
Нажмите комбинащию клавишь Win + R
В появившемся окне введите cmd и нажмите OK
В открывшемся черном окне введите команду:
netsh interface ipv4 show subinterfaces
В первой колонке ответа мы увидим значение MTU:
* в данном примере, значение MTU равно 1500 для сетевого адаптера Ethernet.
Linux
ip address
В более современных системах используется утилита для работы с сетевыми интерфейсами — ip address. Вводим команду:
В полученном результате находим нужный сетевой интерфейс и строчку на подобие:
eth0:
mtu 1500 qdisc pfifo_fast state UP qlen 1000
* то, что мы ищем — mtu 1500.
ifconfig
В более ранних системах или с установленным ifconfig вводим:
* где eth0 — сетевой адаптер, для которого хотим узнать MTU.
В полученном результате находим что-то на вроде:
eth0: flags=4163 mtu 1500
* где mtu 1500 — наше значение.
FreeBSD
В данной системе работаем с уже описанным выше ifconfig:
em0: flags=8843 metric 0 mtu 1500
Провайдера
Чтобы определить оптимальное значение MTU для нашего сетевого адаптера, подключенного к сети Интернет, необходимо узнать значение, используемое на оборудовании поставщика.
Для этого выполняем ping с запретом фрагментации сетевых пакетов (-f) и выставлением определенного размера пакета (-l):
* 1472 будет соответствовать MTU — 1500, так как к пакету мы должны еще прибавить 28 (заголовок).
Наша задача — подобрать значение пакета, при котором будет идти пинг:
Ответ от 90.156.242.197: число байт=1472 время=13мс TTL=56
Ответ от 90.156.242.197: число байт=1472 время=12мс TTL=56
Требуется фрагментация пакета, но установлен запрещающий флаг.
Требуется фрагментация пакета, но установлен запрещающий флаг.
Находим значение, которое стоит на границе с ошибкой и прибавляем к нему заголовок пакета — 28. Так мы получаем наше оптимальное MTU.
На данный момент большинство Интернет провайдеров предоставляет услуги связи с фрагментом в 1500. Старые подключения от Ростелеком или подключения на основе PPPoE могут работать на меньших значениях.
Что такое MTU в настройках роутера
Когда постоянно происходят сбои при подключении к интернету, многие идут на решительные меры. Они меняют роутер, меняют провайдера. Одна из причин возможных неполадок – не корректно выставленное значение MTU. Давайте разберемся, что это такое и как его правильно выставить.
MTU в роутере что это
Значение MTU (Maximum Transmission Unit) указывает, какого максимального размера пакеты отправляет устройство. Измеряется в байтах. То есть, если на роутер пришел блок данных большего размера, то он его нарежет на несколько пакетов (фрагментирует). Эти пакеты будут идти по сети, и если встретится на их пути маршрутизатор, который посчитает их слишком большими, он тоже их нарежет. Когда они достигнут последнего маршрутизатора, он, в свою очередь, перед отправкой на компьютер получателя, будет из фрагментированных пакетов собирать в исходные.
Все эти манипуляции по нарезке и сборке пакетов трудоемки. Соответственно, желательно выставлять оптимальное значение MTU на роутере.
Так как данные в каждом пакете оборачиваются служебными заголовками, то чем более длинные пакеты используются, тем меньше затрат на заголовки. В связи с этим желательно выставлять максимальный размер MTU, при котором пакеты не будут нарезаться на последующих узлах сети.
Какой MTU поставить на роутере
Самый простой способ, это обратиться в службу поддержки провайдера (написать письмо, позвонить). Скорее всего, они подскажут актуальное значение. Но через некоторое время, провайдер может все переконфигурировать. Хотя это случается достаточно редко, но если вдруг начали возникать сбои, вполне вероятно, что следует уточнить правильность выставленного MTU.
Второй вариант, это найти оптимальный размер с помощью команды ping, отправляя пакеты, в которых установлено, что их нельзя фрагментировать. Пинговать следует удаленный ресурс, например, сайт или сервер провайдера.
Можно так же проверить наиболее посещаемые ресурсы в интернете: игровые сервера, сервера с которых смотрите фильмы, используемые IP телефоном.
В итоге, выполнив такую команду, мы определим, требуется ли фрагментация пакета для доставки его к получателю.
Запускаем командную строку (это классическое приложение Windows, найти его можно, например, в поиске набрав «Командная строка»). И выполняем команды.
Здесь значении данных 997 байт, размер пакета 997+28=1025 байт, пакет не может быть доставлен без фрагментации.
Здесь значении данных 996 байт, размер пакета 996+28=1024 байт, пакет доходит до получателя без фрагментации.
Таким образом, изменяя размер отправляемого блока данных, мы можем вычислить DMTU – максимальный размер блока данных, который доставляется без фрагментации. Например, если команда ping проходит без фрагментации со значением 996. При попытке отправить команду со значением 997 получаем ответ: «Требуется фрагментация пакета, но установлен запрещающий флаг». Тогда мы рассчитываем параметр DMTU следующим образом: 996 байт данных + 28 байт IP заголовка = 1024 байта. Максимальный размер блока данных, который не будет фрагментирован, составит 1024 байта. Это значение и следует задать на маршрутизаторе, как размер MTU.
Как поменять MTU на роутере
Подключаемся к маршрутизатору через интернет браузер. Выставляем новый размер MTU. Затем сохраняем настройки.
Например, при использовании TP-Link, заходим в пункт «Сеть», там подпункт «WAN». Не забываем нажать после этого кнопку «Сохранить».
После изменения значений, можно проверить, насколько изменилась скорость скачивания файлов большого размера из интернета.
Настройка MTU на компьютере
Для увеличения производительности, чтобы на маршрутизатор не приходили слишком большие пакеты, возможна настройка MTU на оборудовании. В частности, можно выставить размер MTU на персональном компьютере, требуется воспользоваться командной строкой, запущенной от имени администратора:
После данной установки на компьютере, с него будут отправляться пакеты, у которых максимальный размер на уровне IP будет 1024 байта, но на MAC уровне максимальный отправляемый блок данных будет размером 1038 байт (14 из них для заголовка MAC).
Большего размера пакеты не будут отправляться. То есть, если в настройках роутера рассчитан и правильно выставлен MTU 1024, то точно такой же MTU следует задать в настройках подключенного к нему компьютера.
Автоматическая настройка — PMTU discovery
Существуют режимы работы некоторых устройств, когда размер MTU уточняется во время подключения к удаленному серверу (PMTU discovery). Алгоритм такой же, как и тот, которым пользовались при настройке MTU на роутере. В начале работы устройство отправляет блоки данных разного размера, пытаясь определить максимальный размер пакета, который дойдет без фрагментации.
В этом алгоритме есть одна проблема, называемая «MTU Discovery Black Hole». Она возникает в случае, когда администраторы сетей, чтобы избежать возможных атак на их сервера, запрещая маршрутизаторам передачу ICMP, в частности которые используются при команде ping.
Так конечно не корректно действовать. Устройство, не получив ответа на запрос не может продолжить работать.
Как найти правильный размер MTU для моей сети.
Краткая информация
Один из простых и наиболее точных способов определения оптимального размера MTU – MTU пинг тест. Вы просто отправляете запросы и постепенно снижаете размер пакета до тех пор, пока пакет больше не фрагментируется. Кроме того, этот простой тест подходит для точного тестирования конечных точек, пользователи могут найти более маленький размер MTU более удобным для себя. Внимание: При соединении PPPoE размер MTU должен быть 1492 (или ниже). Более подробная информация о влиянии MTU можно найти здесь.
Внимание:
Определение правильного MTU
Для определения правильного размера MTU для вашей конфигурации, вам необходимо использовать простой MTU пинг тест. Вы отправляете запросы и постепенно снижаете размер пакета до тех пор, пока пакет больше не фрагментируется. Выполните следующие действия :
Шаг 1
Шаг 2
Шаг 3
Уменьшите размер тестового пакета (10 или 12 байт), отправьте запрос опять. Имейте в виду, что пакет должен быть снова фрагментирован (Рисунок 2)
Шаг 4
Снова уменьшите размер тестового пакета, отправьте запрос, итак до тех пор, пока размер отправляемого пакета не нужно будет фрагментировать (Рисунок 3)
Шаг 5
Как только вы отправите пакет, который не будет фрагментирован, увеличьте немного размер пакета и отправьте запрос заново, вы таким образом сможете найти максимальный размер пакеты, который не будет фрагментирован.
Шаг 6
1440 – максимальный размер пакета в пинг-тесте
+ 28 – заголовки IP и ICMP
1468 – оптимальный размер вашего MTU
Проблемы с соединением к VPN или мои приложения зависают, а время истекает.
Вы можете подсоединиться к VPN серверу и зарегистрироваться, но ничего не происходит и приложения зависают, время выходит, или проблема с загрузкой.
— Вы можете подсоединиться и зарегистрироваться, но приложения зависают, время выходит, или проблема с загрузкой. Ваш MTU (максимального размера блока (в байтах), который может быть передан) указан неправильно.
Что такое MTU? Как найти оптимальный размер MTU для домашней сети?
Информация в компьютерных сетях передается в виде небольших сформированных блоков данных (иначе говоря, пакетов). Каждый пакет помимо пересылаемой информации содержит еще и служебные данные, составляющие так называемый заголовок (header) пакета. Эти служебные данные нужны для определения целостности данных, используемой версии сетевых протоколов и т.д. При этом размер полезного блока данных ограничивается определенным количеством байт. Делается это для того, чтобы снизить вероятность потерь информации и уменьшить время повторной пересылки пакета в случае появления проблем с подключением.
MTU – что это?
MTU (от англ. Maximum transmission unit) – это максимальный объем данных, передаваемый по сети без дальнейшего фрагментирования (одним пакетом). Любая информация, объем которой превышает значение MTU, автоматически разбивается на небольшие блоки данных перед отправкой по сети. Возможные значения MTU зависят от используемого типа подключения к сети. Так, при использовании PPoE (в основном с ADSL и подобными технологиями) максимальное значение параметра MTU составляет 1492 байта (стандартные 1500 байт для Ethernet минус восемь байт заголовков), а при использовании Wi-Fi MTU может достигать 2304 байт.
В современных ОС оптимальное значение MTU зачастую вычисляется самой системой или берется из настроек маршрутизатора (обычно значение MTU задается в разделе WAN сетевых настроек устройства). Если проблем с доступом к Интернету не наблюдается, значение MTU лучше не менять. Однако, если возникли проблемы со связью и вы предполагаете, что они могут быть связаны с фрагментацией сетевых пакетов, попробуйте изменить значение MTU.
Сделать это можно не только через изменение соответствующей настройки маршрутизатора, но и средствами операционной системы. Перед тем как менять MTU, необходимо рассчитать оптимальное значение этого параметра. Расскажем, как это делается.
Рассчитываем значение MTU
Найти оптимальное значение MTU можно с помощью старой-доброй команды ping. Предположим, что мы определяем значение этого параметра для проводного подключения. Открываем командную строку Windows и пишем такую команду:
Запомните полученное значение и прибавьте к нему 28 байт (длина служебных заголовков). Получившееся значение – это оптимальное (или близкое к оптимальному) значение MTU для вашей сети.
Устанавливаем значение MTU
Теперь вы знаете, какое значение MTU можно использовать в вашей домашней сети. Укажем операционной системе, что необходимо использовать именно его (дальнейшие примеры иллюстрируют настройку сети IPv4).
В Windows открываем командную строку с правами администратора и выполняем команду:
netsh interface ipv4 show subinterfaces
На экране появится список всех сетевых подключений, их названия и текущий размер MTU. Запоминаем название нужного нам подключения и пишем следующую команду:
netsh interface ipv4 set subinterface Ethernet mtu=1450 store=persistent
Здесь Ethernet – название интерфейса (может быть другим), 1450 – выбранный размер MTU. Если название состоит из нескольких слов, его надо указывать в кавычках.
Для отключения автоматической настройки MTU можно выполнить команду:
netsh int tcp set global autotuninglevel=disabled
Включить автоматическое определение MTU можно той же командой с параметром autotuninglevel=normal.
Если необходимо сбросить настройки к исходному состоянию, выполняем команду:
В Linux настройка MTU осуществляется с помощью команды ip. Посмотрим текущее значение MTU:
А далее установим желаемое значение:
Здесь eth0 – название интерфейса, оно может быть другим на вашем компьютере. Для того чтобы выбранное значение MTU использовалось постоянно при каждом входе в систему, необходимо прописать значение в файл /etc/network/interfaces, либо создать модуль для systemd. Рекомендуем обратиться к документации используемого дистрибутива для получения более подробной информации.
В macOS посмотреть размер MTU для подключения en0, а затем установить значение параметра можно в терминале:
Вы можете указать размер MTU и в настройках маршрутизатора. Во многих моделях роутеров соответствующая настройка находится в разделе WAN. Более подробную информацию можно получить на сайтах производителей сетевого оборудования.
При ручной настройке MTU учитывайте, что слишком маленький размер блока данных устанавливать не рекомендуется, чтобы не создавать дополнительную нагрузку на процессор маршрутизатора. Также напомним еще раз: если ваше сетевое подключение работает нормально, значение MTU менять не стоит. Параметры, установленные провайдером или производителем маршрутизатора, вполне подходят для подавляющего большинства пользователей.