Фрагментация IPv6 не происходит

373
mius

Я настроил тестовую сеть с двумя компьютерами Linux, работающими в качестве маршрутизаторов, и двумя компьютерами Linux, работающими как обычные клиенты. 2 маршрутизатора подключены друг к другу, и каждый клиент подключен к одному маршрутизатору. На пути от клиента к одному из маршрутизаторов MTU составляет 1500, однако между двумя маршрутизаторами это 1200. Также я использую только IPv6.

Если я сейчас попытаюсь отправить пакет, размер которого превышает 1200 байт, я ожидаю получить ошибку ICMPv6 «слишком большой пакет» от маршрутизатора, и клиент должен затем фрагментировать пакет и попытаться отправить его повторно. Однако этого не происходит. Если я смотрю на wireshark, я вижу клиента, получающего ошибки ICMPv6, однако клиент не пытается повторно посылать пакеты как фрагменты.

Что может быть причиной такого поведения?

1
Возможный дубликат [туннеля IPsec слишком мал] (https://superuser.com/questions/1312594/ipsec-tunnel-mtu-too-small) Michael Hampton 6 лет назад 1
Некоторая (плохая) фильтрация на стороне клиента, которая отфильтровывает ICMP-пакеты? Patrick Mevzek 6 лет назад 0
См. Https://tools.ietf.org/html/rfc8201 и, в частности: «Узлы, реализующие обнаружение Path MTU и отправляющие пакеты, размер которых превышает MTU минимального канала IPv6, подвержены проблемным связям, если сообщения ICMPv6 [ICMPv6] заблокированы или не переданы. Например, это приведет к соединениям, которые правильно завершают трехстороннее рукопожатие TCP, но затем зависают при передаче данных. Это состояние называется черной дырой [RFC2923]. Обнаружение пути MTU основано на слишком большом пакете ICMPv6 ( PTB) для определения MTU пути ". Patrick Mevzek 6 лет назад 0

1 ответ на вопрос

2
Zac67

IPv6 не поддерживает фрагментацию.

С IPv4 маршрутизатор может фрагментировать пакет при пересылке с одного канала на другой канал с меньшим MTU (если не установлен DF ).

С IPv6 конечные точки должны использовать Path MTU Discovery, чтобы фактически выяснить это сами, а затем использовать этот MTU между собой ...

Редактируйте после благодарных комментариев @Patrick Mevzek:

... или прибегнуть к использованию гарантированного MTU для IPv6 размером 1280 байт (с фрагментацией пакета на хосте или без него).

Маршрутизаторы не фрагментируются, но хосты могут. См. RFC8200, пункт 5: «Настоятельно рекомендуется, чтобы узлы IPv6 реализовали обнаружение MTU пути [RFC8201], чтобы обнаруживать и использовать MTU пути более 1280 октетов. Однако минимальная реализация IPv6 (например, в загрузочном ПЗУ) может просто ограничиться отправкой пакетов размером не более 1280 октетов и пропустить реализацию Path MTU Discovery. " PMTUD настоятельно рекомендуется, не обязательно. Конечные узлы могут использовать заголовок фрагмента IPv6 для отправки пакетов, превышающих MTU пути. Patrick Mevzek 6 лет назад 0
Спасибо за указание на это - хотя я бы не назвал эту фрагментацию: в заголовке v6 нет фрагментации, а «минимальный» клиент просто использует гарантированный MTU для работы. Zac67 6 лет назад 0
Он называется заголовком фрагмента IPv6 ... если это не фрагментация, я не знаю, что это такое. Заголовок v6 отсутствует, заголовки IPv6 образуют цепочку, основанную на необходимых функциях. Patrick Mevzek 6 лет назад 0
Кажется, я пропустил это - еще раз спасибо. Я еще не видел этого в реальной жизни, но сейчас я готов. Zac67 6 лет назад 0