Введение
Протокол многоадресной маршрутизации (англ. Protocol Independent Multicast, PIM) — это семейство многоадресных маршрутизационных протоколов для сетей с протоколом Интернет (IP), обеспечивающих распределение данных по принципу «один ко многим» и «многие ко многим» в локальных (LAN), глобальных (WAN) сетях или в Интернете. Он называется независимым от протокола, поскольку PIM не включает собственный механизм обнаружения топологии, а вместо этого использует информацию о маршрутизации, предоставляемую другими протоколами маршрутизации. PIM не зависит от конкретного протокола одноадресной маршрутизации; он может использовать любой протокол одноадресной маршрутизации, применяемый в сети. PIM не создает собственные таблицы маршрутизации. PIM использует таблицу маршрутизации одноадресной маршрутизации для обратной маршрутизации. Существует четыре варианта PIM:
PIM Sparse Mode (PIM SM) явно строит однонаправленные общие деревья, укорененные в точке встречи (RP) для каждой группы, и опционально создает деревья кратчайшего пути для каждого источника. PIM SM обычно хорошо масштабируется для использования в широких географических областях. PIM Dense Mode (PIM DM) использует плотную многоадресную маршрутизацию. Он неявно строит деревья кратчайшего пути, широко распространяя многоадресный трафик по всему домену, а затем обрезая ветви дерева, где нет получателей. PIM DM прост в реализации, но обычно обладает плохими характеристиками масштабируемости. Первый протокол многоадресной маршрутизации DVMRP использовал плотную многоадресную маршрутизацию. См. RFC 3973. Двунаправленный PIM (Bidir PIM) явно строит общие двунаправленные деревья. Он никогда не строит дерево кратчайшего пути, поэтому может иметь большую задержку, чем PIM SM, но хорошо масштабируется, поскольку ему не требуется состояние, специфичное для источника.
Protocol Independent Multicast (PIM) is a family of multicast routing protocols for Internet Protocol (IP) networks that provide one to many and many to many distribution of data over a LAN, WAN or the Internet. It is termed protocol independent because PIM does not include its own topology discovery mechanism, but instead uses routing information supplied by other routing protocols. PIM is not dependent on a specific unicast routing protocol; it can make use of any unicast routing protocol in use on the network. PIM does not build its own routing tables. PIM uses the unicast routing table for reverse path forwarding. There are four variants of PIM:
PIM Sparse Mode (PIM SM) explicitly builds unidirectional shared trees rooted at a rendezvous point (RP) per group, and optionally creates shortest path trees per source. PIM SM generally scales fairly well for wide area usage. PIM Dense Mode (PIM DM) uses dense multicast routing. It implicitly builds shortest path trees by flooding multicast traffic domain wide, and then pruning back branches of the tree where no receivers are present. PIM DM is straightforward to implement but generally has poor scaling properties. The first multicast routing protocol, DVMRP used dense mode multicast routing. See RFC 3973. Bidirectional PIM (Bidir PIM) explicitly builds shared bi directional trees. It never builds a shortest path tree, so may have longer end to end delays than PIM SM, but scales well because it needs no source specific state.
Версии
Существует две версии PIM. Эти версии не напрямую совместимы, но могут сосуществовать в одной сети. Сетевое оборудование может поддерживать обе версии. PIMv2 имеет следующие улучшения по сравнению с PIMv1: используется один RP на группу. Обнаружение RP осуществляется с помощью Bootstrap Router (BSR). Группы могут работать как в разреженном, так и в плотном режиме; интерфейсы также могут быть настроены в любом из этих режимов. Общие улучшения гибкости и эффективности протокола.
Источники мультикаст
Когда источник данных впервые отправляет данные группе, его назначенный маршрутизатор (DR) отправляет сообщения о регистрации (Register) в точку встречи (RP), инкапсулируя в них пакеты данных источника. Если скорость передачи данных высока, RP может отправлять обратно к источнику сообщения Join/Prune, специфичные для данного источника, и пакеты данных источника будут следовать полученному состоянию пересылки, доставляясь в RP без инкапсуляции. Независимо от того, поступают ли пакеты инкапсулированными или в исходном виде, RP пересылает деинкапсулированные пакеты данных источника по дереву распределения с центром RP к членам группы. Если скорость передачи данных это оправдывает, маршрутизаторы с локальными приемниками могут присоединиться к дереву распределения, специфичному для источника и построенному по кратчайшему пути, и отсечь пакеты этого источника от общего дерева с центром RP. Для источников с низкой скоростью передачи данных ни RP, ни маршрутизаторы последнего участка не нуждаются в присоединении к дереву кратчайшего пути, специфичному для источника, и пакеты данных могут быть доставлены через общее дерево RP. После того, как все остальные маршрутизаторы, которым необходимо получать эти групповые пакеты, подписались, RP отменяет свою подписку на эту группу многоадресной рассылки, если ему также не требуется пересылать пакеты другому маршрутизатору или узлу. Кроме того, маршрутизаторы используют обратный путь пересылки (reverse path forwarding) для предотвращения петель при пересылке пакетов между маршрутизаторами, желающими получать пакеты многоадресной рассылки.
Плотный режим
Плотный режим мультикаста – это один из режимов, который мультикаст может использовать для построения дерева для отправки пакетов подписчикам мультикаста. Это альтернатива разреженному режиму. Основное предположение, лежащее в основе плотного режима, заключается в том, что у мультимедийного потока пакетов есть приемники в большинстве узлов сети. Разреженный режим предполагает относительно небольшое количество приемников. Плотный режим идеально подходит для групп, где многие узлы будут подписаны на получение пакетов мультикаста, так что большинству маршрутизаторов необходимо принимать и пересылать эти пакеты (группы с высокой плотностью). Эта разница проявляется в начальном поведении и механизмах двух протоколов. В плотном режиме используется довольно простой подход к обработке IP-маршрутизации мультикаста. Источник изначально широковещательно рассылает данные всем маршрутизаторам, непосредственно к нему подключенным. Эти соседние маршрутизаторы, в свою очередь, пересылают данные своим соседям. Если маршрутизатор не хочет получать данные этой группы (если нет других соседних маршрутизаторов PIM и ни один хост не заинтересован в группе), он отправляет сообщение Prune, чтобы указать на отсутствие интереса. Получив сообщение Prune, маршрутизатор изменит свое состояние, чтобы не пересылать эти пакеты через этот интерфейс. Если все интерфейсы маршрутизатора обрезанны, то и сам маршрутизатор будет обрезан. В старых версиях Cisco IOS PIM DM пересылал весь мультикастный трафик каждые 3 минуты. Это приемлемо для мультикаста с небольшим объемом трафика, но не для потоков пакетов с высокой пропускной способностью. Более новые версии Cisco IOS поддерживают новую функцию под названием PIM Dense Mode State Refresh, начиная с версии 12.1(5)T. Эта функция использует сообщения обновления состояния PIM для обновления состояния Prune на исходящих интерфейсах. Дополнительным преимуществом является более быстрое обнаружение изменений в топологии. По умолчанию сообщения обновления состояния PIM отправляются каждые 60 секунд. Кроме того, маршрутизаторы используют обратную маршрутизацию (RPF) для предотвращения петель при пересылке пакетов между маршрутизаторами, желающими получать пакеты мультикаста. Когда пакет данных принимается на интерфейсе, не являющемся RPF, требуется механизм для предотвращения петель. Если этот интерфейс, не являющийся RPF, является локальной сетью (LAN), отправляется сообщение Assert. Маршрутизаторы, не являющиеся пересыльщиками, затем отправляют Prune на свой интерфейс RPF, если им не нужен мультикастный поток. Отправляется только один такой Prune в момент перехода к отсутствию интерфейсов в списке исходящих интерфейсов (OILIST). Приемник Prune в локальной сети задерживает действие на 3 секунды, чтобы, если другому маршрутизатору в локальной сети все еще нужен мультикастный поток, он мог отправить сообщение PIM Join для отмены (противодействия) Prune. ("Этому маршрутизатору он не нужен, но он нужен мне!") Предположим, маршрутизатор выполнил обрезку, и спустя некоторое время приемник запрашивает мультикастный поток с помощью сообщения IGMP. Тогда маршрутизатор отправляет сообщение Graft. По сути, "Эй, мне нужен этот мультикастный поток здесь и сейчас".