Протокол управляющих сообщений Интернета версии 6 ( ICMPv6 ) — это реализация протокола управляющих сообщений Интернета (ICMP) для протокола Интернета версии 6 (IPv6). [1] ICMPv6 является неотъемлемой частью IPv6 и выполняет функции сообщения об ошибках и диагностики.
ICMPv6 имеет структуру для расширений для реализации новых функций. Было опубликовано несколько расширений, определяющих новые типы сообщений ICMPv6, а также новые параметры для существующих типов сообщений ICMPv6. Например, Neighbor Discovery Protocol (NDP) — это протокол обнаружения узлов на основе ICMPv6, который заменяет и улучшает функции ARP . [2] Secure Neighbor Discovery (SEND) — это расширение NDP с дополнительной безопасностью. Multicast Listener Discovery (MLD) используется маршрутизаторами IPv6 для обнаружения многоадресных прослушивателей на напрямую подключенном канале, подобно тому, как Internet Group Management Protocol (IGMP) используется в IPv4 . Multicast Router Discovery (MRD) позволяет обнаруживать многоадресные маршрутизаторы.
Сообщения ICMPv6 можно классифицировать как сообщения об ошибках и информационные сообщения . Сообщения ICMPv6 транспортируются пакетами IPv6, в которых значение заголовка IPv6 Next для ICMPv6 установлено на значение 58 .
Сообщение ICMPv6 состоит из заголовка и полезной нагрузки протокола. Заголовок содержит только три поля: Тип (8 бит), Код (8 бит) и Контрольная сумма (16 бит).
Управляющие сообщения идентифицируются значением в поле типа . Поле кода дает дополнительную контекстную информацию для сообщения. Некоторые сообщения служат той же цели, что и соответствующие им типы сообщений ICMP.
Обратите внимание, что таблица выше не является исчерпывающей. Текущий полный список назначенных типов ICMPv6 можно найти по этой ссылке: IANA: ICMPv6 Parameters.
ICMPv6 обеспечивает минимальный уровень проверки целостности сообщения путем включения 16-битной контрольной суммы в его заголовок. Контрольная сумма вычисляется, начиная с псевдозаголовка полей заголовка IPv6 в соответствии со стандартом IPv6, [6] который состоит из адресов источника и назначения, длины пакета и следующего поля заголовка, последнее из которых установлено в значение 58. После этого псевдозаголовка контрольная сумма продолжается с сообщением ICMPv6. Вычисление контрольной суммы выполняется в соответствии со стандартами интернет-протокола с использованием 16-битного суммирования с дополнением по единицам , за которым следует окончательное дополнение по единицам самой контрольной суммы и вставка его в поле контрольной суммы. [7] Обратите внимание, что это отличается от способа вычисления для IPv4 в ICMP , но похоже на вычисление, выполняемое в TCP .
Полезная нагрузка сообщения ICMPv6 различается в зависимости от типа отправляемого сообщения. Она начинается с бита 32 сразу после заголовка, описанного выше. Для некоторых сообщений, таких как недоступность пункта назначения или превышение времени, не определено тело сообщения.
Другие определяют использование только первых четырех байтов тела без какого-либо другого определенного содержимого:
В случае сообщений NDP первые четыре байта либо зарезервированы, либо используются для флагов/лимита хоп-пакетов. В то время как сброс тела имеет неопределенные структурированные данные:
Для перенаправления первые байты тела сообщения зарезервированы, но не используются. Далее следует Target и адрес назначения. Неуказанные опции могут быть присоединены к концу:
Когда узел ICMPv6 получает пакет, он должен предпринять действия, которые зависят от типа сообщения. Протокол ICMPv6 должен ограничивать количество сообщений об ошибках, отправляемых в одно и то же место назначения, чтобы избежать перегрузки сети. Например, если узел продолжает пересылать ошибочные пакеты, ICMP сообщит об ошибке первому пакету и затем будет делать это периодически, с фиксированным минимальным периодом или с фиксированной максимальной нагрузкой сети. Сообщение об ошибке ICMP никогда не должно отправляться в ответ на другое сообщение об ошибке ICMP.