Информация в компьютерных сетях передается в виде небольших сформированных блоков данных (иначе говоря, пакетов). Каждый пакет помимо пересылаемой информации содержит еще и служебные данные, составляющие так называемый заголовок (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 и пишем такую команду:

ping www.google.com -f -l 1472

В Linux команда обычно имеет вид ping -M do -s 1472 www.google.com, а в macOS ping -D -s 1472 www.google.com (в некоторых версиях систем ключи могут отличаться, рекомендуем обратиться к man ping, если команда не работает). В данном случае мы отправляем по адресу www.google.com пакеты размером 1472 байта и запрещаем фрагментировать данные. Если пакеты такого размера не могут быть отправлены, команда сообщит, что необходима фрагментация пакета. Перезапустите эту команду несколько раз, постепенно уменьшая размер пакета на 8–10 байт. В итоге после нескольких попыток вы подберете значение размера, при котором отсылка данных состоится. Помните: если используется беспроводное подключение, размер пакета может быть больше 1500 байт.

Запомните полученное значение и прибавьте к нему 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.

Если необходимо сбросить настройки к исходному состоянию, выполняем команду:

netsh interface ipv4 reset

В Linux настройка MTU осуществляется с помощью команды ip. Посмотрим текущее значение MTU:

$ ip link show | grep mtu

А далее установим желаемое значение:

# ip link set eth0 mtu 1450

Здесь eth0 – название интерфейса, оно может быть другим на вашем компьютере. Для того чтобы выбранное значение MTU использовалось постоянно при каждом входе в систему, необходимо прописать значение в файл /etc/network/interfaces, либо создать модуль для systemd. Рекомендуем обратиться к документации используемого дистрибутива для получения более подробной информации.

В macOS посмотреть размер MTU для подключения en0, а затем установить значение параметра можно в терминале:

networksetup -getMTU en0

networksetup -setMTU en0 1450

Вы можете указать размер MTU и в настройках маршрутизатора. Во многих моделях роутеров соответствующая настройка находится в разделе WAN. Более подробную информацию можно получить на сайтах производителей сетевого оборудования.

При ручной настройке MTU учитывайте, что слишком маленький размер блока данных устанавливать не рекомендуется, чтобы не создавать дополнительную нагрузку на процессор маршрутизатора. Также напомним еще раз: если ваше сетевое подключение работает нормально, значение MTU менять не стоит. Параметры, установленные провайдером или производителем маршрутизатора, вполне подходят для подавляющего большинства пользователей.

Поделиться