Кратко
- RFC 2174 объединил дистанционно-векторную unicast-маршрутизацию с единственным деревом broadcast/multicast, укоренённым в Virtual Source Switch.
- В кадре MAPOS не было ни адреса источника, ни TTL; временная петля не могла установить реальное происхождение кадра и не имела встроенного срока жизни.
- Поэтому маршрут, VSS, метрика меньше 16 и установленный бит порта были локальными состояниями управления, а не подтверждением безопасной передачи или доставки.
Новость о пути распространялась раньше самого broadcast
По умолчанию каждый SSP-коммутатор раз в десять секунд отправлял соседям полную таблицу. Получатель прибавлял стоимость линии, обычно единицу, сравнивал метрики и выбирал входной порт следующим переходом. Локальный отказ, ухудшение метрики или объявление недоступности могли вызвать немедленное обновление.
Однако новый downstream-порт не открывался сразу. При его обнаружении запускался FORWARD_DELAY_TIMER: тридцать секунд, или три полных периода. Отношение уже можно было хранить, но отправка broadcast и multicast через порт оставалась запрещённой.
Причина находилась в самом кадре. MAPOS указывал назначение, но не источник. Получатель не мог строить проверку обратного пути от реального отправителя. Не было и TTL. Если две ещё не согласованные версии дерева образовывали контур, у копии не было счётчика, который рано или поздно уничтожил бы её.
SSP давал управляющей информации время обогнать данные. До окончания паузы молчание было не отсутствием маршрута, а защитой от кадра без собственной границы жизни.
Один воображаемый источник упрощал всё дерево
Virtual Reverse Path Broadcast предполагал, что любой broadcast или multicast возник под одним VSS. Им становился достижимый коммутатор с наименьшим номером.
Каждый участник находил его в своей unicast-таблице и вычислял кратчайший обратный путь. У не-корневого коммутатора был один upstream-порт и могло быть несколько downstream-портов. У VSS upstream отсутствовал. На весь сегмент существовало одно дерево в каждый момент.
Правило не создавало отдельной транзакции выборов. Одинаковый алгоритм мог работать с таблицами разного возраста. Один коммутатор уже видел новый минимальный номер, другой ещё доверял прежнему пути. Выбранный VSS был выводом из локальной картины, а не квитанцией о синхронном согласии.
Появление нового VSS или потеря прежнего делали недействительной всю broadcast/multicast-таблицу. Изменение одного downstream затрагивало меньшую часть. Протокол различал смену основания дерева и смену одной ветви.
Бит задавал намерение, но не сообщал результат
Таблица была битовой картой портов. Единица означала, что кадр следует направить локальному узлу, upstream- или downstream-коммутатору. Если единиц не было, кадр молча отбрасывался.
Но единица не показывала, что сигнал вышел, сосед принял кадр, выбрал то же дерево или конечный узел обработал данные. Во время forward delay даже известное отношение ещё не давало разрешения на отправку.
Биты получали разные основания. Запрос NSP свидетельствовал о локальном узле. Следующий переход к VSS задавал upstream. Poisoned reverse, пришедший с порта, означал, что коммутатор за ним использует локальное устройство на пути к корню, и потому считается downstream.
Новый downstream запускал задержку включения. Затем отдельный PORT_EXPIRATION_TIMER, также на тридцать секунд, следил за продолжением poisoned reverse. Новые сообщения освежали таймер; их отсутствие очищало бит. Обычное обновление от бывшего downstream требовало немедленного удаления: сосед выбрал другой путь или другой VSS.
Один бит проходил состояния кандидата, ожидания, активности, обновления, недействительности и очистки. Финальное значение стирало историю решения.
Недоступный маршрут сохранялся, чтобы сообщить о своей смерти
Если текущий сосед тридцать секунд не обновлял маршрут или объявлял метрику 16, запись становилась недоступной. Она оставалась ещё тридцать секунд, чтобы распространять 16, и лишь затем удалялась сборщиком.
RFC 1058 объяснял наследуемую проблему RIP: дистанционный вектор способен удерживать устаревшее убеждение и считать до бесконечности. Значение 16 служило практической бесконечностью. Poisoned reverse ломал некоторые петли быстрее, triggered updates ускоряли плохую новость, но не превращали сеть в атомарный commit.
Таймеры выражали разные утверждения. Expiration прекращал использование старой веры. Garbage collection сохранял её для объявления недействительности. Forward delay не разрешал использовать новую связь. Port expiration прекращал доверять downstream, когда переставало приходить поддерживающее его свидетельство.
Чёрная дыра могла продолжать присылать обновления
В разделе реализации описано половинчатое соединение. Приёмный канал мог работать, а передающий — отказать. Коммутатор продолжал слышать SSP, таймеры выглядели свежими, но его собственные кадры уходили в чёрную дыру.
Служебные поля SONET/SDH иногда позволяли получить обратную информацию о передающем канале со стороны удалённого конца. Но не все услуги сохраняли требуемую прозрачность. Приход управления в одном направлении не доказывал полезный двусторонний путь.
RFC 2174 имел статус Informational, не был продуктом рабочей группы IETF и не относился к Standards Track. Он предполагал небольшое число коммутаторов и не приводил данные о внедрении, измеренной сходимости, совместимости или реальном инциденте. Безопасность не обсуждалась.
Его историческая точность заключается в разделении событий. Узнать маршрут, выбрать корень, дождаться согласования, открыть порт и доставить кадр — не одно и то же. Запись могла быть достаточно хороша для таблицы, но ещё недостаточно зрелой для broadcast.
Источники
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров

