При низкой скорости интернета мы почти всегда прибегаем к перезагрузке роутера. В некоторых случаях это может помочь. Иногда мы автоматически предполагаем, что наш интернет-провайдер ограничивает скорость интернета.Но это не всегда так. Возможно, мы просто столкнулись с какой-то уникальной проблемой, которая приводит к плохому качеству интернет-соединения, даже если скорость соединения кажется отличной во всех тестах.

Именно это со мной и произошло, и в итоге решение оказалось не таким, как я ожидал. Всё, что мне нужно было сделать, это привести значение Maximum Transmission Unit (MTU) в соответствие с фактическими ограничениями моего соединения. Как только я это сделал, задержка исчезла.
Быстрые ссылки
MTU определяет максимальную IP-нагрузку, которая может передаваться по каналу связи без повреждений.
Правила сегментации и ограничения размера заголовка определяют фактический размер пакета.

MTU обозначает максимальный размер пакета данных в байтах, который может разрешить сетевое устройство без фрагментации. Для большинства сетей Ethernet это значение обычно составляет 1500 байт. Число 1500 не является произвольным. Ваш маршрутизатор считает, что он безопасен, исходя из ограничений, заложенных в архитектуре сетей Ethernet, существовавших десятилетия назад, многие из которых используются и сегодня.
Однако 1500 байт — это не только размер ваших данных, поскольку пакеты, естественно, содержат дополнительные данные, представляющие собой накладные расходы протокола. В типичном TCP-трафике эти накладные расходы обычно включают 20 байт для заголовка IPv4 и еще 20 байт для заголовка TCP. С учетом этого, фактически, максимальный допустимый размер пакета составляет 1460 байт в среде с MTU 1500. Это объясняет максимальный размер сегмента TCP (MSS) в 1460 байт в стандартных сетях.
Проблемы возникают, когда размер пакета превышает MTU, через который он должен пройти. Единственный способ успешно пройти через него — это разбить пакет на более мелкие части. Этот процесс ресурсоемкий, требующий большей работы процессора и места для кэширования, поскольку каждая часть имеет свой собственный IP-заголовок, и все они должны быть собраны заново в пункте назначения. Сам по себе этот процесс не уменьшает пропускную способность, однако он увеличивает сложность и чувствительность доставки пакетов.
В реальных условиях интернет-соединения полезный размер MTU часто снижается до менее чем 1500.
Технологии упаковки и доступа сокращают доступное грузовое пространство.
Можно предположить, что 1500 байт работают везде, но это не так. 1500 байт — это больше, чем максимальный размер передаваемого блока (MTU), используемый во многих домашних подключениях. Технология Point-to-Point over Ethernet (PPPoE) — распространенный стандарт для некоторых оптоволоконных сетей и многих вариантов DSL. Дополнительные 8 байт уменьшают эффективный MTU до 1492, что приводит к фрагментации, если маршрутизатору приходится передавать пакеты размером 1500 байт через туннель размером 1492 бита.
Пока ваши данные необходимо инкапсулировать в дополнительную упаковку, это фактически повлияет на объем полезной нагрузки. Например, VLAN предоставляет 4-байтовый тег. Хотя этот тег необходим для идентификации виртуальной сети для трафика, он все равно уменьшает объем полезной нагрузки. Трансляция сетевых адресов на уровне оператора (CGNAT) и DS-Lite также имеют аналогичный эффект. В случае DS-Lite маршрутизация трафика через сеть вашего интернет-провайдера путем передачи трафика IPv4 внутри пакетов IPv6 добавляет дополнительный заголовок. VPN-сети делают ваш исходный пакет полезной нагрузкой для нового пакета, при этом новый пакет требует нового заголовка.
Все эти случаи подобны добавлению дополнительной упаковки к коробке, которая уже имеет свою собственную упаковку, без увеличения пути, который должна пройти коробка. Она пройдет весь путь только в том случае, если ее разделить.
В мобильных сетях ситуация усложняется, поскольку LTE и 5G исторически имеют более низкий базовый размер в 1500 байт, чем Ethernet. В зависимости от реализации вашего оператора, значения MTU варьируются от 1420 до 1480. Как правило, лимит соединения равен наименьшему значению MTU на всем пути следования, и пока маршрутизатор не может соблюдать этот лимит, вы будете сталкиваться либо с фрагментацией пакетов, либо с незаметной потерей пакетов. Это может быть одной из причин медленной работы интернета..
Механизмы автоматической регулировки MTU не всегда предотвращают сбои.
Обнаружение пути MTU, фильтрация ICMP и поведение «черной дыры».

Существует автоматическое решение для защиты от фрагментации, которое отлично работает, по крайней мере, на бумаге. Оно называется Path MTU Detection (PMTUD). Вот как это работает: устройства могут устанавливать бит «без фрагментации» при отправке пакетов. Этот бит заставляет принимающий маршрутизатор отвечать сообщением. Код ICMP типа 3 4«Фрагментация необходима», если размер нисходящего пакета превышает MTU.
Проблема в том, что на практике многие межсетевые экраны по умолчанию блокируют ICMP. В результате большие пакеты отбрасываются, и фильтрация межсетевого экрана не позволяет отправителю понять, что пакеты были слишком большими. Эта потеря пакетов приводит к повторной передаче TCP и экспоненциальному увеличению таймеров отката. Такая ситуация называется «черной дырой MTU», когда большие пакеты постоянно не проходят, даже если трафик, казалось бы, идет.
Современные операционные системы пытаются смягчить некоторые сбои, используя протокол RFC 4821 Packetization Layer Path MTU Discovery (PLPMTUD) для определения размера пакетов без опоры на ICMP. В некоторых случаях маршрутизаторы, оборудование интернет-провайдеров и VPN-терминалы неэффективно обрабатывают фрагментацию. Это не отражается в результатах тестов скорости, но реальное влияние заключается в постоянном увеличении задержек.
Если ваш маршрутизатор использует установку MSS, он может маскировать несоответствие MTU вместо того, чтобы его исправлять, поэтому симптомы могут быть непостоянными и непостоянными.
Измерение и корректировка MTU восстанавливает бесперебойный сквозной поток пакетов.
Если вы понимаете расчеты, найти правильное значение MTU несложно. Если вам нужно протестировать с помощью команды ping, обратите внимание, что заголовок IPv4 составляет 20 байт, а ICMP добавляет 8 байт, в результате чего общий размер заголовка составляет 28 байт. Таким образом, начиная с полезной нагрузки в 1472 байта, при добавлении 28 байт IPv4 и ICMP общий размер становится 1500. Уменьшайте размер полезной нагрузки, пока не достигнете значения, которое не вызывает фрагментации. Используемое значение MTU будет равно 28 плюс максимальное успешное значение полезной нагрузки.
Вот команда Windows:
ping 8.8.8.8 -f -l 1472
Я использую `-f` для установки бита `Don't Fragment` и `-l` для указания размера полезной нагрузки. Цель состоит в том, чтобы постепенно уменьшать размер полезной нагрузки до тех пор, пока не будет получен стабильный успешный ответ. Эквивалентная команда Linux выглядит так:
ping -M do -s 1472 8.8.8.8
В macOS ситуация несколько иная, поскольку обработка хешей различается в разных версиях. Более надежную проверку пути MTU можно получить с помощью таких инструментов, как... метр Через Homebrew.
Всегда проверяйте MTU для нескольких целевых IP-адресов, а не только для 8.8.8.8, поскольку на одних путях могут возникать «черные дыры», а на других — нет.
Как только вы определите желаемое фиксированное значение, лучше всего установить MTU в WAN-интерфейсе вашего маршрутизатора, чтобы не настраивать каждое устройство по отдельности. Ниже приведена таблица с приблизительными значениями, которые вы можете ожидать для различных типов подключения:
| Тип соединения | Типичный MTU, который следует ожидать |
|---|---|
| Стандартный Ethernet (прямое подключение по кабелю/оптоволокну, без PPPoE) | 1500 |
| PPPoE (DSL или некоторые провайдеры оптоволоконного интернета) | 1492 |
| Подключение к интернет-провайдеру помечено с помощью VLAN. | 1496-1500 (в зависимости от приложения интернет-провайдера) |
| Мобильные сети LTE / 4G / 5G | ~1420-1480 (зависит от телекоммуникационной компании) |
| IPSec VPN (режим туннелирования) | 1380-1460 (в зависимости от кода и упаковки) |
| WireGuard (оригинальный MTU 1500) | ~ 1412 |
| OpenVPN (режим UDP) | 1300–1450 (в значительной степени зависит от настроек) |










