Протокол обнаружения соседей (NDP) — что это такое?

Интернет-протокол является неотъемлемой частью Интернета и локальных сетей: Однако для обеспечения транспортировки цифровой информации и отправки правильных пакетов данных на нужный целевой узел требуется ряд дополнительных протоколов помощи и маршрутизации. Именно для этого и существует семейство интернет-протоколов, или стек интернет-протоколов. Dynamic Host Configuration Protocol (DHCP), например, обеспечивает присвоение клиентам соответствующего сетевого адреса во время установки IP-соединения. Протокол обнаружения соседей (NDP) помогает взаимодействию между соседними узлами в локальных сетях и определяет шлюз-маршрутизатор.

Определение протокола Neighbor Discovery Protocol.

Протокол обнаружения соседей используется в сочетании с новой версией интернет-протокола (IPv6). Его основной функцией является преобразование адресов IPv6 в действительные MAC-адреса — базовые аппаратные адреса соответствующих устройств. В IPv4 эту функцию выполняет протокол разрешения адресов (ARP). Все определенные адреса хранятся в виде информации в так называемом кэше соседей. Этот буфер не только информирует пользователей сети о локальных адресах соседних клиентов, но и снабжает их дополнительной информацией, необходимой, например, для проверки доступности.

Как уже упоминалось, NDP дополнительно участвует в распределении стандартного шлюза. С помощью протокола Router Advertisement Protocol (RA) можно определить как стандартный маршрутизатор, так и действующие сетевые префиксы — два основных параметра сетевой конфигурации. Наконец, сетевой протокол, который обменивается данными только внутри сети, также выступает в качестве вспомогательного протокола для динамической конфигурации адресов. Этот процесс также известен как Stateless Automatic Address Configuration (SLAAC).

Как работает NDP?

Любое устройство, использующее протокол Neighbor Discovery Protocol для сетевых коммуникаций, управляет собственным кэшем соседей. В нем перечислены все устройства известной сети, которые можно проверить по их уникальным адресам устройств (MAC). Здесь можно увидеть, принадлежит ли буферизованный адрес простому клиенту или, например, маршрутизатору. Однако кэш соседей — это не отдельный, а один из четырех буферов, выполняющих функции протокола NDP. Три других компонента, которые также обрабатываются каждым устройством отдельно, следующие:

  • Кэш назначения: Кэш «цели» включает в себя записи обо всех хостах в сети, которым уже были отправлены пакеты данных. Каждая из этих записей, в свою очередь, ссылается на адресную ссылку в кэше соседей, которая должна использоваться в качестве следующего хопа (промежуточной станции) при отправке пакетов данных на нужный узел назначения.
  • Префиксный кэш: Кэш префиксов, или список префиксов, используется для управления всеми префиксами, которые применяются к сети, в которой находится клиент. Этот список необходим, с одной стороны, потому что IPv6 поддерживает мультихоминг — т.е. доступ к сети через двух разных провайдеров — и, с другой стороны, позволяет разделить адресное пространство на различные префиксы. Используя записи в кэше префиксов, NDP гарантирует, что целевой узел находится в той же подсети. Каждый префикс, за исключением MAC-адреса (также адрес канального уровня), имеет определенный срок действия, поэтому кэш всегда остается актуальным.
  • Список маршрутизаторов по умолчанию: Список маршрутизаторов по умолчанию включает все известные маршрутизаторы, которые регулярно связываются с устройством. В список попадают только активные маршрутизаторы, поскольку для всех представителей автоматически определяется срок действия. Продление или обновление возможно только в случае возврата маршрутизатора.

Для создания различных кэшей для NDP используется другой интернет-протокол, который известен как ICPMv6 (Internet Control Message Protocol for the Internet Protocol Version 6).

NDP основывается на этих пяти типах ICMPv6.

ICMPv6 широко используется в текущей версии семейства интернет-протоколов в качестве ретранслятора сообщений об ошибках и информационных сообщений, а также используется протоколом Neighbor Discovery Protocol в виде 5 различных типов ICMPv6. В зависимости от типа используются определенные уведомления — они помогают формировать временные хранилища или списки.

Тип 134: Объявление маршрутизатора

Маршрутизаторы периодически рассылают так называемые объявления маршрутизатора — сообщения ICMPv6 типа 134 — для информирования членов сети о своем присутствии. Затем они распространяют, среди прочего, свою информацию о маршрутизации и необходимые параметры для автоматической настройки IP. Местом назначения сообщения обычно является стандартный диапазон многоадресных адресов ‘ff02 :: 01’, через который адресуются все узлы, считающиеся действительными. Таким же образом они получают адрес маршрутизатора (шлюза по умолчанию) и глобальный префикс. Схема маршрутного объявления выглядит следующим образом:

Поэтому стандартная длина этого типа сообщения составляет 128 бит, а дополнительные биты используются для опций. К допустимым опциям относятся MAC-адрес маршрутизатора, ‘Maximum Transmission Unit’ и вся соответствующая информация о префиксе.

Поле ‘type’ имеет значение 134, а поле ‘code’ всегда имеет значение 0. Затем следует 16-битная контрольная сумма ICMP и 8-битная спецификация длины лимита переходов, который может включать станции, рекомендованные маршрутизатором.

После этого следуют отдельные биты, которые дают представление о том:

  • Можно ли получить IP-адреса с помощью динамического DHCPv6 (M).
  • И может ли другая адресная информация быть получена через динамический DHCPv6 (O).

Поле ‘reserved’ остается неиспользуемым и игнорируется получателем. Кроме того, объявление маршрутизатора содержит данные о:

  • Время в секундах, в течение которого маршрутизатор должен оставаться в списке маршрутизаторов по умолчанию (время жизни маршрутизатора, 16-битное целое число, максимум 65535).
  • Время в миллисекундах, в течение которого адрес в кэше соседей должен оставаться доступным после достижения доступности (тайм-аут доступности, 32-битное целое число, максимум около 50 дней).
  • Время в миллисекундах, через которое сообщение о запросе соседа (см. ниже) должно быть отправлено повторно (тайм-аут разрешения, 32-битное целое число).

Тип 133: Запрос маршрутизатора

Запрос маршрутизатора — это сообщение, которое хост может отправить, чтобы попросить все маршрутизаторы в сети отправить рекламу на адресованный маршрутизатор. Затем они отвечают сообщением типа 134, адресованным либо только запрашивающему хосту (одноадресная рассылка), либо всем абонентам сети (многоадресная рассылка). При использовании этого типа сообщения, например, о подключении к сети, хосту не нужно ждать, пока сетевой маршрутизатор автоматически уведомит себя. Этот тип сообщения ICMPv6 имеет следующую структуру:

Таким образом, стандартная конфигурация сообщения NDP-ICMPv6 типа 133 обеспечивает минимальную длину в 64 бита. ‘Type’ присваивается значение 133 для запроса маршрутизатора, а ‘Code’ снова устанавливается в 0. Двумя другими обязательными полями являются контрольная сумма ICMP (16 бит) и 32-битное поле ‘Reserved’, которое остается неиспользуемым.

Единственным возможным параметром, который может быть прикреплен к сообщению, является MAC-адрес отправителя.

Тип 135: Запрос соседа

Клиенты сети отправляют запросы соседей, чтобы узнать MAC-адрес целевого узла, а в ответ, по желанию, предоставляют свой собственный адрес. ICMPv6-сообщения этого типа могут передаваться устройствами либо по многоадресной рассылке, если они хотят определить адрес, либо по одноадресной рассылке, если они только проверяют наличие соседа.

Как и все типы сообщений ICMPv6, запрос соседа начинается с 8-битной идентификации типа — в данном случае ‘type’ имеет значение 135. Затем следует 8-битный длинный код, который устанавливается в 0, и 16-битная контрольная сумма. Поле ‘Reserved’ остается неиспользованным, как и в ранее представленных сообщениях.

В 128 битах целевой IP-адрес, который не может быть многоадресным адресом, составляет основную часть сообщения, общая длина которого составляет не менее 192 бит. Этот тип сообщения, который является решающим для протокола Neighbor Discovery Protocol, также допускает MAC-адрес отправителя в качестве необязательной дополнительной спецификации.

Тип 136: Объявление соседа

С одной стороны, сетевые устройства посылают объявления соседей в ответ на запросы соседей, а с другой стороны, также посылают незапрошенные сообщения, чтобы информировать других участников об изменениях в конфигурации адресов. Структура такого рода сообщений следующая:

Первые 32 бита стандартного 192-битного соседского объявления основаны на типичной схеме сообщений ICMPv6: под ‘тип’ (136) и ‘код’ (0) отводится 8 бит, за которыми следует 16-битная контрольная сумма. Три отдельных бита продолжают код сообщения, для которого действуют следующие условия:

  • R: Бит ‘R’ передается, когда сообщение отправляется с маршрутизатора.
  • S: Если сообщение содержит бит ‘S’, оно является ответом на одноадресный запрос соседа, который подтверждает, что пользователь сети достижим. Этот бит не может быть установлен в ответ на многоадресные запросы или в специально инициированных объявлениях соседей.
  • O: Флаг ‘O’ указывает получателю сообщения отменить существующую запись в кэше.

Последующие 29 битов зарезервированы в соответствии с известным шаблоном, поэтому они остаются неиспользуемыми, инициализируются 0 и игнорируются получателем. За 128-битным адресом назначения теперь следует основная часть сообщения: либо IP-адрес, с которого было запрошено объявление соседа, либо адрес, для которого будет опубликован новый MAC-адрес. Маршрутизатор также имеет возможность назвать свой собственный адрес — обязательно при ответе на многоадресный запрос.

Тип 137: Перенаправление

Маршрутизаторы имеют возможность информировать узлы сети о лучшем первом переходе на пути к определенным адресам назначения. Для этого они посылают NDP-ICMPv6 перенаправления, которые характеризуются следующей схемой:

Имея минимальную длину 320 бит, перенаправления являются самыми большими сообщениями ICMPv6, которые имеют отношение к функционированию протокола Neighbor Discovery Protocol. За типичной структурой с битовыми строками для идентификации типа (137), кода (0), контрольной суммы и неиспользуемого «зарезервированного» поля (32 бита) следуют адреса рекомендуемых переходов, а затем адрес, для которого рекомендованы оба этих перенаправления (оба по 128 бит). По желанию, пакет сообщения может включать MAC-адрес получателя, а также заголовок перенаправленного пакета.

Задачи и возможности NDP с первого взгляда.

Механизмы кэширования и коммуникации протокола Neighbor Discovery Protocol в сочетании с протоколом управляющих сообщений Интернета могут многое. Следующие сценарии NDP иллюстрируют взаимодействие и функциональность этих двух протоколов:

  • Обнаружение маршрутизатора и сетевого префикса: Все маршрутизаторы в сети регулярно передают объявления о маршрутизаторах через многоадресную рассылку всем операторам сети. Они включают, помимо прочего, такую информацию, как адрес, сетевой префикс и маршрутизацию, используемую для создания списка маршрутизаторов по умолчанию, а также список префиксов. Эти клиенты затем используются для определения шлюза по умолчанию и маски подсети. Поскольку все записи имеют ограниченный срок действия, остаются только активные маршрутизаторы. Объявления маршрутизаторов также могут быть принудительно запущены с помощью запросов маршрутизаторов.
  • Определение важных параметров для передачи пакетов: Объявления маршрутизаторов могут также опционально содержать информацию о том, какие параметры должны применять участвующие клиенты при передаче пакетов. Это может быть очень специфическая информация, например, максимальный размер пакета, но также и широкие параметры интернета, например, фиксированный лимит промежуточных станций для исходящих пакетов.
  • Определение следующего хопа: При отправке пакета протокол NDP гарантирует, что кэш назначения уже содержит соответствующую запись для целевого узла назначения. Если это не так, протокол определяет следующую промежуточную станцию, используя информацию из списка префиксов и списка маршрутизаторов по умолчанию. После этого новое состояние знаний сохраняется в кэше назначения, который сразу же становится доступным при новом запросе. Если вновь созданная запись еще не имеет эквивалента в кэше соседей, он создается автоматически, а затем начинается разрешение адреса.
  • Разрешение IP-адреса в MAC-адрес: Чтобы определить MAC-адрес конкретного узла в сети, он получает запрос соседа через многоадресную рассылку IPv6 на свой конкретный многоадресный адрес. Только хост может ответить на эту уникальную комбинацию адресов. В ответ он отправляет объявление соседа с MAC-адресом, сохраненным выходным клиентом в кэше соседей. Таким образом, протокол Neighbor Discovery Protocol используется для идентификации соседей, а также для определения маршрутизаторов.
  • Обнаружение пренебрежения соседом: Все MAC-адреса, хранящиеся в кэше соседей, должны регулярно проверяться на актуальность. Пока с зарегистрированного адреса отправляются данные TCP/IP или квитанции, он логически считается активным, и скрывающийся за ним хост может быть достигнут. Если обмен данными с соответствующим устройством не происходил в течение длительного времени, а срок действия записи истек, она помечается как устаревшая. Чтобы проверить, не является ли соответствующий узел более недоступным, сначала на зарегистрированный адрес отправляется обычный пакет данных. Если ответ получен, запускается последняя проверка с помощью одноадресного запроса соседей. Если это подтверждает недоступность, запись из кэша соседей исчезает.
  • Обнаружение дублирующихся адресов: Если устройство автоматически сконфигурировало адрес, NDP классифицирует его как «предварительный» (временный).  Для этого вновь подключившийся клиент сети посылает запрос соседей на временный адрес, который он хочет использовать сам — с временно неконкретным адресом отправителя. Если другой узел уже использует этот адрес, то он отвечает сообщением с рекламой соседа на общий многоадресный адрес. Проверяющий клиент также получает это сообщение, в котором предлагается новый адрес.
  • Информирование о вариантах перенаправления: Протокол обнаружения соседей дает маршрутизаторам с сообщением о перенаправлении возможность оптимизировать путь от пакетов данных до целевых узлов. Как отмечалось выше, они могут использовать ICMPv6 тип 137 для рекомендаций более подходящих промежуточных узлов, которые включаются в кэш назначения.

Как проверить кэш соседей в вашей системе

Будь то Windows, MacOS, Linux, iOS или Android — современные операционные системы поддерживают IPv6 и могут использовать возможности NDP в сетях на базе ethernet. Используя соответствующую инструкцию, вы можете в любой момент вызвать из командной строки кэш соседей, который был создан для вашего устройства.

Например, в Windows вы можете составить список соседей по сети с помощью программы netsh (сетевая оболочка) и следующей команды:

netsh interface ipv6 show neighbors

В большинстве дистрибутивов Linux вы можете получить доступ к кэшу соседей с помощью инструмента iproute2 и этой команды:

ip -6 neigh

В macOS и других дистрибутивах на базе BSD доступ к записям кэша можно получить следующим образом:

ndp -a

Оцените статью
cdelat.ru
Добавить комментарий