Введение

Протокол многоадресной маршрутизации (англ. 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, но хорошо масштабируется, поскольку ему не требуется состояние, специфичное для источника.

Версии

Существует две версии 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. По сути, "Эй, мне нужен этот мультикастный поток здесь и сейчас".