Path MTU Discovery
Path MTU Discovery (PMTUD) — это механизм, используемый в компьютерных сетях на основе стека протоколов TCP/IP для автоматического определения максимального размера пакета (Maximum Transmission Unit, MTU), который может быть передан без фрагментации по всему маршруту от отправителя до получателя. PMTUD позволяет избежать фрагментации IP-пакетов, которая снижает производительность сети и может приводить к потере данных, и обеспечивает оптимальное использование пропускной способности канала.
Принцип работы
Основная идея PMTUD заключается в отправке тестовых IP-пакетов с установленным флагом Don't Fragment (DF) («не фрагментировать») и постепенном уменьшении их размера до тех пор, пока пакет не достигнет адресата без ошибок. Процесс основан на обработке ICMP-сообщений от промежуточных маршрутизаторов.
Алгоритм обнаружения
- Начальная оценка. Отправитель (обычно хост или маршрутизатор) начинает с предположения, что Path MTU равно MTU первого канала (например, 1500 байт для Ethernet). Он формирует IP-пакет максимального размера и устанавливает в его заголовке флаг DF.
- Отправка и проверка. Пакет отправляется по маршруту. Если на каком-либо участке сети (маршрутизаторе) размер пакета превышает MTU этого участка, маршрутизатор не может его передать без фрагментации. Поскольку флаг DF запрещает фрагментацию, маршрутизатор отбрасывает пакет и отправляет обратно отправителю ICMP-сообщение «Destination Unreachable» (тип 3) с кодом «Fragmentation Needed and DF Set» (код 4). В этом сообщении указывается MTU следующего канала.
- Адаптация. Отправитель, получив ICMP-сообщение, уменьшает предполагаемый размер Path MTU до значения, указанного в сообщении (или до меньшего значения, если сообщение не содержит точного MTU). Затем он повторяет отправку тестового пакета нового размера.
- Повторение. Процесс повторяется, пока пакет не достигнет получателя без ошибок. Последний успешно переданный размер пакета и считается Path MTU для данного соединения.
- Кэширование и обновление. Определённое значение Path MTU может кэшироваться на время жизни сессии. Однако маршруты в сети могут меняться, поэтому протоколы (например, TCP) периодически повторяют процедуру PMTUD, чтобы обнаружить возможное увеличение MTU или изменение маршрута.
Роль ICMP
Протокол ICMP (Internet Control Message Protocol) является ключевым для работы PMTUD. Без корректной обработки ICMP-сообщений механизм не может функционировать. В современных сетях иногда возникают проблемы, когда межсетевые экраны (firewalls) или маршрутизаторы блокируют ICMP-трафик, что приводит к «слепому» снижению производительности или полной недоступности соединения.
История и развитие
Механизм PMTUD был впервые описан в RFC 1191 (1990 год) для протокола IPv4. Позднее, с развитием IPv6, были разработаны уточнения и новые механизмы.
PMTUD для IPv4
В IPv4 PMTUD является опциональным, но широко используемым механизмом. Реализация в TCP-стеках операционных систем (Linux, Windows, macOS) по умолчанию включает поддержку PMTUD. Однако из-за блокировки ICMP-трафика в некоторых сетях (например, в корпоративных или домашних маршрутизаторах с агрессивными настройками безопасности) PMTUD может работать некорректно. Это приводит к проблемам, известным как «PMTUD black hole» («чёрная дыра PMTUD»).
PMTUD для IPv6
В IPv6 PMTUD является обязательным требованием. Протокол IPv6 не поддерживает фрагментацию на промежуточных узлах (маршрутизаторах) — фрагментация может выполняться только на хосте-отправителе. Поэтому для IPv6 PMTUD критически важен. В RFC 1981 (1996 год) описана реализация PMTUD для IPv6, а в RFC 8201 (2017 год) — обновлённая версия. В IPv6 используются те же принципы, но с некоторыми отличиями в формате ICMPv6-сообщений.
Проблема «чёрных дыр» PMTUD
«Чёрная дыра» PMTUD возникает, когда маршрутизатор или межсетевой экран корректно отбрасывает пакет с флагом DF, но не отправляет ICMP-сообщение об ошибке (или оно блокируется на обратном пути). Отправитель не получает уведомления и продолжает отправлять пакеты большого размера, которые теряются. В результате соединение «зависает» или работает с крайне низкой производительностью. Для борьбы с этим применяются методы:
- Автоматическое снижение MTU. Некоторые операционные системы (например, Linux) при обнаружении повторяющихся тайм-аутов TCP автоматически уменьшают MTU для данного соединения.
- ICMP-прокси. Специализированные устройства могут генерировать ICMP-сообщения от имени маршрутизаторов, которые их не отправляют.
- Плагины для TCP. Например, механизм PLPMTUD (Packetization Layer Path MTU Discovery), описанный в RFC 4821, который не полагается на ICMP, а использует зондирование на уровне TCP.
Альтернативы и дополнения
PLPMTUD (Packetization Layer Path MTU Discovery)
PLPMTUD — это более современный и надёжный подход, описанный в RFC 4821 (2007 год). Он работает на уровне транспортного протокола (например, TCP) и не требует ICMP-сообщений. PLPMTUD отправляет зондирующие сегменты данных, постепенно увеличивая их размер, и отслеживает успешность доставки по подтверждениям (ACK). Если сегмент теряется, размер уменьшается. Этот метод не зависит от правильной работы ICMP и считается более устойчивым к сетевым аномалиям.
MTU Path Discovery в VPN и туннелях
В виртуальных частных сетях (VPN) и туннельных протоколах (например, GRE, IPsec) PMTUD усложняется, так как добавляется дополнительный заголовок, увеличивающий размер пакета. Для корректной работы часто используется механизм MSS (Maximum Segment Size) на уровне TCP, который автоматически уменьшает размер сегмента с учётом накладных расходов туннеля. Некоторые VPN-решения также реализуют собственные версии PMTUD.
Применение
PMTUD используется в большинстве современных сетевых протоколов и приложений:
- TCP-соединения. Веб-серверы, почтовые серверы, файловые обмены (FTP, SMB) — все они полагаются на PMTUD для оптимальной передачи данных.
- VoIP и видеоконференции. Протоколы реального времени (RTP) также могут использовать PMTUD для уменьшения задержек и потерь пакетов.
- Протоколы маршрутизации. Некоторые протоколы (например, OSPF) используют PMTUD для определения размера пакетов при обмене маршрутной информацией.
- Мобильные сети. В сетях 4G/5G PMTUD важен для адаптации к изменяющимся условиям радиоканала, где MTU может быть небольшим.
Критика и ограничения
Основные недостатки классического PMTUD:
- Зависимость от ICMP. Блокировка ICMP-трафика — распространённая практика, что делает PMTUD неработоспособным во многих сетях.
- Медленная сходимость. Процесс обнаружения требует нескольких итераций, что может приводить к задержкам при установлении соединения.
- Неэффективность при динамических маршрутах. Если маршрут меняется во время сессии, PMTUD может не успеть адаптироваться, что приводит к потерям.
- Проблемы с симметричностью. PMTUD определяет MTU только в одном направлении (от отправителя к получателю). Для двустороннего обмена требуется отдельное обнаружение в каждом направлении.
Интересные факты
- Стандартный MTU для Ethernet (1500 байт) был установлен в 1980-х годах и до сих пор является наиболее распространённым значением в локальных сетях.
- В некоторых операционных системах (например, в Windows) можно вручную задать MTU для сетевого интерфейса, что иногда используется для решения проблем с PMTUD.
- В сетях с Jumbo Frames (MTU до 9000 байт) PMTUD позволяет значительно повысить производительность при передаче больших объёмов данных, но требует поддержки на всех промежуточных устройствах.
Источники
- RFC 1191 — Path MTU Discovery (для IPv4).
- RFC 1981 — Path MTU Discovery for IP version 6.
- RFC 4821 — Packetization Layer Path MTU Discovery.
- RFC 8201 — Path MTU Discovery for IP version 6 (обновлённая версия).
- Стивенс, У. Р. «TCP/IP. Иллюстрированное руководство. Том 1. Протоколы». — М.: Вильямс, 2003.
- Таненбаум, Э., Уэзеролл, Д. «Компьютерные сети». — 5-е изд. — СПб.: Питер, 2012.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →