Открыть сервис

Path MTU Discovery

Path MTU Discovery (PMTUD) — это механизм, используемый в компьютерных сетях на основе стека протоколов TCP/IP для автоматического определения максимального размера пакета (Maximum Transmission Unit, MTU), который может быть передан без фрагментации по всему маршруту от отправителя до получателя. PMTUD позволяет избежать фрагментации IP-пакетов, которая снижает производительность сети и может приводить к потере данных, и обеспечивает оптимальное использование пропускной способности канала.

Принцип работы

Основная идея PMTUD заключается в отправке тестовых IP-пакетов с установленным флагом Don't Fragment (DF) («не фрагментировать») и постепенном уменьшении их размера до тех пор, пока пакет не достигнет адресата без ошибок. Процесс основан на обработке ICMP-сообщений от промежуточных маршрутизаторов.

Алгоритм обнаружения

  1. Начальная оценка. Отправитель (обычно хост или маршрутизатор) начинает с предположения, что Path MTU равно MTU первого канала (например, 1500 байт для Ethernet). Он формирует IP-пакет максимального размера и устанавливает в его заголовке флаг DF.
  2. Отправка и проверка. Пакет отправляется по маршруту. Если на каком-либо участке сети (маршрутизаторе) размер пакета превышает MTU этого участка, маршрутизатор не может его передать без фрагментации. Поскольку флаг DF запрещает фрагментацию, маршрутизатор отбрасывает пакет и отправляет обратно отправителю ICMP-сообщение «Destination Unreachable» (тип 3) с кодом «Fragmentation Needed and DF Set» (код 4). В этом сообщении указывается MTU следующего канала.
  3. Адаптация. Отправитель, получив ICMP-сообщение, уменьшает предполагаемый размер Path MTU до значения, указанного в сообщении (или до меньшего значения, если сообщение не содержит точного MTU). Затем он повторяет отправку тестового пакета нового размера.
  4. Повторение. Процесс повторяется, пока пакет не достигнет получателя без ошибок. Последний успешно переданный размер пакета и считается Path MTU для данного соединения.
  5. Кэширование и обновление. Определённое значение 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-сообщение об ошибке (или оно блокируется на обратном пути). Отправитель не получает уведомления и продолжает отправлять пакеты большого размера, которые теряются. В результате соединение «зависает» или работает с крайне низкой производительностью. Для борьбы с этим применяются методы:

Альтернативы и дополнения

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 используется в большинстве современных сетевых протоколов и приложений:

Критика и ограничения

Основные недостатки классического PMTUD:

  1. Зависимость от ICMP. Блокировка ICMP-трафика — распространённая практика, что делает PMTUD неработоспособным во многих сетях.
  2. Медленная сходимость. Процесс обнаружения требует нескольких итераций, что может приводить к задержкам при установлении соединения.
  3. Неэффективность при динамических маршрутах. Если маршрут меняется во время сессии, PMTUD может не успеть адаптироваться, что приводит к потерям.
  4. Проблемы с симметричностью. PMTUD определяет MTU только в одном направлении (от отправителя к получателю). Для двустороннего обмена требуется отдельное обнаружение в каждом направлении.

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →