Summary

  • IPv6 Router Advertisement объявляет маршрутизатор и параметры. Router Lifetime относится к его пригодности как маршрутизатора по умолчанию; у опций могут быть отдельные сроки.
  • Выбор зависит от возможностей host, предпочтения и состояния достижимости. RFC 4861 отделяет обнаружение отказа как Neighbor Unreachability Detection, не полагаясь на отсутствие объявлений.
  • Надёжная квитанция должна связать принятое RA, фактически выбранный маршрут, Neighbor Cache/NUD и результаты репрезентативных пакетов.

Маршрут появился раньше свидетельства достижимости

Представим host, который принимает корректное RA, добавляет отправителя как маршрутизатор по умолчанию и сразу показывает внешне здоровый ::/0. Link-local адрес существует, срок ненулевой, предпочтение подходит. Но прямой путь может быть нарушен асимметричной связностью, потерей upstream-пересылки или устаревшим состоянием канального уровня.

Объявление этому не противоречит. Router Discovery отвечает, какие маршрутизаторы и параметры были объявлены. NUD ищет положительное подтверждение, что сосед получает пакеты и обрабатывает их на IP-уровне. Смешение вопросов превращает настоящий факт обнаружения в выдуманную гарантию доставки.

Возникает слепой интервал: свежее RA и установленный маршрут уже есть, а прогресс верхнего уровня или NUD probes ещё не подтвердили первый переход. Если сохранять только установку, важнейший переход состояния исчезает.

Что в действительности устанавливает Router Advertisement

RFC 4861 описывает RA как объявление присутствия маршрутизатора и параметров канала и Internet. В нём могут находиться prefix для on-link определения и настройки адреса, рекомендуемый hop limit, Router Lifetime, Reachable Time, Retrans Timer, данные канального уровня и MTU.

У этих сведений нет общих часов. Router Lifetime действует только на пригодность отправителя как маршрутизатора по умолчанию. Другие поля и опции имеют собственные сроки. «RA получено» не позволяет восстановить, какие факты оставались действительными при отправке пакета.

RFC прямо разделяет отказ. Частоты RA хватает для обнаружения маршрутизаторов, но не для вывода об отказе по отсутствию объявлений. Этим занимается NUD. Возраст последнего multicast RA — не liveness probe и не подтверждение двустороннего прогресса.

Default Router List ссылается на Neighbor Cache, а выбор предпочитает известные достижимые маршрутизаторы сомнительным. Next hop — изменяемый результат обнаружения, cache и состояния назначения, а не постоянный смысл одного RA.

Предпочтение меняет выбор, но не доказывает доставку

RFC 4191 добавляет Default Router Preference в header и Route Information Option для более специфичных prefix. Три значения — не метрики. При нулевом Router Lifetime предпочтение header игнорируется. У каждой RIO свои prefix, preference и lifetime.

Hosts ведут себя по-разному. Тип A игнорирует preference и RIO. Тип B использует предпочтение маршрутизатора по умолчанию, но игнорирует RIO. Тип C строит таблицу из обоих источников. У него RIO ::/0 может переопределить preference и lifetime из header. Одинаковые байты способны создать разные действующие маршруты.

Достижимость остаётся первой. Тип B сначала выбирает достижимый маршрутизатор, затем учитывает preference. Тип C использует самый длинный prefix, preference для равных длин и пропускает next hop, известный как недостижимый. Если данных нет, концептуальный алгоритм считает маршрутизатор достижимым. Это допущение запускает отправку, но не подтверждает успех.

NUD даёт свидетельство другого класса

Neighbor Unreachability Detection ищет положительное подтверждение, что пакеты дошли до соседа и обработаны его IP-уровнем. Недавний прогресс верхнего уровня может подтвердить это. Иначе узел отправляет unicast Neighbor Solicitations и ждёт solicited Neighbor Advertisements.

Neighbor Cache хранит не только адрес: состояние достижимости, число probes без ответа и время следующего события NUD. Маршрут по умолчанию может оставаться, пока сосед проходит reachable, stale, delay и probe. Записи маршрута и соседа следует читать вместе.

NUD остаётся доказательством первого перехода, не end-to-end гарантией. Маршрутизатор может отвечать локально и не иметь upstream пути. Временное отсутствие подсказки приложения также не доказывает отказ. Каждое наблюдение должно хранить свою область.

Источники