Обнаружение MTU пути ( PMTUD ) — это стандартизированный метод в компьютерных сетях для определения максимального размера единицы передачи (MTU) на сетевом пути между двумя хостами Интернет-протокола (IP), обычно с целью избежать фрагментации IP . PMTUD изначально предназначался для маршрутизаторов с протоколом Интернета версии 4 (IPv4). [1] Однако все современные операционные системы используют его на конечных точках. В IPv6 эта функция явно делегирована конечным точкам сеанса связи. [2] В качестве расширения стандартного обнаружения MTU пути метод, называемый «Обнаружение MTU пути на уровне пакетизации», работает без поддержки ICMP . [3]
Для пакетов IPv4 обнаружение Path MTU работает путем установки бита флага «Не фрагментировать» (DF) в IP-заголовках исходящих пакетов. Затем любое устройство на пути, чей MTU меньше, чем пакет, отбросит его и отправит обратно сообщение о необходимости фрагментации протокола управляющих сообщений Интернета (ICMP) (тип 3, код 4), содержащее его MTU, что позволит исходному хосту уменьшить свой MTU. путь MTU соответственно. Процесс повторяется до тех пор, пока MTU не станет достаточно маленьким, чтобы пройти весь путь без фрагментации.
Поскольку маршрутизаторы IPv6 не фрагментируют пакеты, в заголовке IPv6 нет опции «Не фрагментировать» . Для IPv6 обнаружение MTU пути изначально предполагает, что MTU пути совпадает с MTU на интерфейсе канального уровня , откуда исходит трафик. Затем, как и в случае с IPv4, любое устройство на пути, чей MTU меньше пакета, отбросит пакет и отправит обратно сообщение ICMPv6 «Слишком большой пакет (тип 2)», содержащее его MTU, что позволит исходному хосту соответствующим образом уменьшить MTU своего пути. Процесс повторяется до тех пор, пока MTU не станет достаточно маленьким, чтобы пройти весь путь без фрагментации. [4]
Если MTU пути изменится после установки соединения и станет меньше ранее определенного MTU пути, первый большой пакет вызовет ошибку ICMP и будет найден новый, меньший MTU пути. Если путь изменится и новый MTU пути станет больше, источник не узнает об увеличении, поскольку все маршрутизаторы на новом пути будут способны ретранслировать все пакеты, которые отправляет источник, используя первоначально определенный, меньший MTU пути. [5] [6] [4]
Многие устройства сетевой безопасности блокируют все сообщения ICMP ради предполагаемых преимуществ безопасности, включая ошибки, необходимые для правильной работы PMTUD. Это может привести к тому, что соединения правильно завершат трехстороннее подтверждение TCP , но затем зависнут при передаче данных. Это состояние называется соединением черной дыры . [7]
Некоторые реализации PMTUD пытаются предотвратить эту проблему, предполагая, что большие пакеты полезной нагрузки отбрасываются из-за MTU, а не из-за перегрузки канала. Однако для того, чтобы протокол управления передачей (TCP) работал наиболее эффективно, следует разрешить сообщения ICMP о недоступности (тип 3). Надежный метод PMTUD, который использует TCP или другой протокол для проверки пути с постепенно увеличивающимися пакетами, был стандартизирован в RFC 4821.
Обходной путь, используемый некоторыми маршрутизаторами [ какими? ] заключается в изменении максимального размера сегмента (MSS) всех TCP-соединений, проходящих через каналы, у которых MTU меньше, чем значение по умолчанию для Ethernet , равное 1500. Это известно как ограничение MSS . [8] [ нужно обновить? ]