Кратко

  • Сначала получатель становился известен маршрутизатору последнего перехода через IGMP; лишь затем PIM-SM протягивал общее дерево (*,G) к точке рандеву RP.
  • Join/Prune не выдавал квитанции. Мягкое состояние истекало и продолжало жить только благодаря периодическому обновлению.
  • Источник обращался к RP через Register; RP мог ответить Register-Stop, создать (S,G) и разрешить переход на кратчайшее дерево, отмеченное битом SPT.
  • Спецификация отделяла наблюдаемый сигнал от доказательства доставки. Запись в таблице подтверждала свежее состояние, а не сквозное получение пакета.

Дерево начиналось на границе

RFC 2117 был опубликован в июне 1997 года как экспериментальная спецификация PIM-SM для сетей, где участники группы распределены редко. «Независимость от протокола» не означала независимость от одноадресной маршрутизации: PIM использовал её таблицу для проверки обратного пути, но не требовал определённого одноадресного протокола.

Первый рабочий факт поступал из IGMP. Узел сообщал локальному маршрутизатору об интересе к группе. Этот маршрутизатор последнего перехода отправлял PIM Join к RP группы. На каждом переходе создавалось состояние (*,G) — любой источник, группа G. Так общее дерево с корнем в RP росло лишь туда, где был известен спрос.

Эта последовательность проводит границу доказательств. Отчёт IGMP подтверждал локальный интерес. Состояние (*,G) показывало, что маршрутизатор принял и поддерживает направление пересылки. Ни то ни другое не гарантировало доставку каждого будущего пакета получателю.

Источник входил другим путём

Когда источник начинал передачу, назначенный маршрутизатор инкапсулировал первые пакеты в сообщения Register для RP. RP мог снять оболочку и передать трафик по общему дереву. Одновременно он мог отправить Join к источнику и сформировать состояние (S,G).

Получив обычный трафик с нового направления, RP отправлял маршрутизатору источника Register-Stop. Это было не подтверждение доставки подписчикам, а команда прекратить лишнюю инкапсуляцию. RFC описывал и переход маршрутизатора получателя на кратчайшее дерево от источника. Бит SPT показывал, что соответствующая запись уже использует этот путь.

Поэтому (*,G), Register, Register-Stop, (S,G) и SPT не были этапами одной подтверждённой транзакции. Это разные сигналы и состояния на разных устройствах, каждое со своей доказательной силой.

Join/Prune не обещал постоянства

Самая показательная черта RFC 2117 — отсутствие подтверждения Join/Prune. Потеря сообщения не вызывала положительного ответа, закрывающего операцию. Вместо этого протокол опирался на периодическое обновление. Таймеры удаляли неподтверждённое заново состояние, а последующие сообщения восстанавливали или продлевали то, что оставалось нужным.

Так дерево могло пережить временный сбой без центрального журнала квитанций. Но таблицы требовали осторожного чтения: присутствующее состояние означало недавно обновлённые сведения; отсутствие могло быть результатом истечения таймера, смены топологии, потери управляющего сообщения или исчезновения спроса. Смысл находился в паре «сообщение — таймер», а не в отдельной строке.