PIM-SM

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.

Автор: Наташа Самойленко

PIM Sparse Mode (PIM-SM) — это один из протоколов из семейства PIM.


Содержание

[править] Описание работы PIM-SM

PIM-SM информация не флудится по всему домену, как в PIM-DM. В PIM-SM маршрутизаторы добавляются в дерево передачи мультикаст трафика, только если они явно отправляют PIM Join. То есть, явно сообщают о том, что они хотят получать трафик определенной группы. Это происходит, когда у маршрутизатора есть непосредственно присоединенные клиенты, которые хотят получать трафик (отправили IGMP Join), или когда он получил PIM Join он нижестоящего маршрутизатора.

Но, так как в PIM-SM не используется флудинг, то получается, что маршрутизаторы не знают о соответствии между источниками и группами. А именно, не знают где находится источник мультикаст, трафик которого хотят получать клиенты. И значит, не знают куда и кому отправлять сообщения Join.

Rendezvous Point (RP)

PIM-SM 4.png

Проблема с изучением этой информации в PIM-SM решается так: вместо флудинга, как в PIM-DM, в PIM-SM выбирается одна общая точка, один маршрутизатор, который будет хранить информацию о группах и источниках. Это обычный маршрутизатор PIM-SM (их может быть несколько), который выполняет роль rendezvous point (RP). И все маршрутизаторы в домене PIM-SM обязательно должны знать, кто выполняет роль RP.

Когда маршрутизаторы получают запросы от клиентов, на присоединение к группе, то они отправляют запрос "вверх" к RP. В итоге строится дерево, для конкретной группы, где ветками будут маршрутизаторы, которые хотят получать пакеты конкретной группы, а вершиной построенного дерева будет RP. Но, так как для всех групп вершина всегда RP, то это дерево называется shared tree. На каждом маршрутизаторе, от RP вниз по дереву, который является частью дерева для конкретной группы G, будет запись вида (*, G), где * обозначает RP, общую вершину деревьев.

Регистрация источника

PIM-SM 1a.png

Вторая задача — это сообщить RP о существующих парах (источник, группа). Так как все маршрутизаторы в домене PIM-SM знают об RP, то известно кому эту информацию нужно отправить. Отправка информации на RP об источнике трафика, называется регистрация источника. Регистрацию выполняет маршрутизатор, к которому источник непосредственно присоединен. И когда этот маршрутизатор получает пакеты мультикаст от источника, он инкапсулирует пакет в служебное сообщение Register и отправляет на RP. Таким образом RP узнает о паре (S, G).

Построение дерева

И, когда появятся желающие получать рассылку этой группы, маршрутизаторы построят shared tree до RP, а RP построит SPT-дерево к источнику. И клиенты смогут получить мультикаст пакеты по этому дереву составленному из двух. И, хотя построенное дерево может не быть кратчайшим для передачи пакетов получателям, такой подход существенно сокращает количество информации, которое надо хранить маршрутизаторам в домене мультикаст, по сравнению с PIM-DM. Кроме того, после того как реальные пакеты мультикаст, дойдут до маршрутизаторов к которым непосредственно подключены клиенты, эти маршрутизаторы, узнав IP-адрес источника из пакетов, могут инициировать переключение на SPT-дерево непосредственно к источнику трафика и исключить себя из shared tree.


Note-icon.gif

Модель распространения трафика PIM-SM, называется также pull model или explicit join.

[править] Сообщения PIM-SM

PIM-SM использует такие сообщения:

  • Hello для обнаружения соседей и поддержания связи с соседями
  • Register для регистрации источника
  • Register-Stop
  • Join для добавления ветвей в дерево распространения мультикаст трафика
  • Prune для удаления ветвей из дерева распространения мультикаст трафика
  • Assert для выбора Forwarder
  • Bootstrap
  • Candidate-RP-Advertisement

[править] Регистрация источника

PIM-SM 1a.png

Когда PIM-маршрутизатор, который присоединен к той же сети, что и источник трафика, получает multicast трафик от источника, он проверяет существующие у него соответствия группа-RP и определяет какая RP отвечает за эту группу. После этого маршрутизатор должен зарегистрироваться на RP. Для регистрации на RP маршрутизатор инкапсулирует multicast пакет в сообщение Register и отправляет его unicast на RP.

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

Для того чтобы передавать и дальше multicast трафик и не инкапсулировать его дополнительно, RP строит source-based SPT к источнику и создает у себя запись (S,G). После того как от RP построено дерево SPT и RP получает multicast трафик по этому дереву, RP отправляет сообщение Register-Stop. После этого ближайший к источнику маршрутизатор перестает передавать multicast сообщения инкапсулированные в сообщения Register.

Если желающих получать трафик нет, то RP не строит SPT, а просто отправляет сообщение Register-Stop.

Когда маршрутизатор, который отправлял сообщение Register получает Register-Stop, он запускает таймер Register-Suppression. Значение таймера 1 минута. За 5 секунд до истечения таймера маршрутизатор снова отправляет сообщение Register, с установленным флагом Null-Register, без инкапсулированного внутри пакета multicast. В результате отправки этого сообщения Register, в зависимости от того есть ли получатели трафика, происходит следующее:

  • Если RP всё ещё не получила запросов на получение трафика, то отправляется сообщение Register-Stop. Маршрутизатор, который отправил Register, снова запускает таймер Register-Suppression.
  • Если появились хосты, которые хотят получать трафик, то RP не отвечает на этот пакет. В результате, по истечению таймера, маршрутизатор опять отправляет обычное сообщение Register с инкапсулированным пакетом внутри.

[править] Designated Router

PIM-SM 1b.png

Когда к сети с множественным доступом присоединены несколько маршрутизаторов, один из них должен выполнять роль выделенного маршрутизатора (Designated Router, DR). DR отвечает за отправку сообщений Join/Prune и Register к RP.

В PIM-SM DR важен, так как маршрутизатор, который стал DR, отвечает за регистрацию источника на RP и в некоторых ситуациях, неправильный выбор DR может повлиять на работу сети.

Для выбора выделенного маршрутизатора используются сообщения Hello. Маршрутизатор с наибольшим IP-адресом становится DR.

Note-icon.gif

Не стоит путать DR и Forwarder. Маршрутизатор, который был выбран DR, может не стать Forwarder для сети. Тогда маршрутизатор, который проиграл выбор Forwarder и выполнял роль DR, исключает интерфейс ведущий в сегмент с множественным доступом из списка исходящих интерфейсов. Выигравший маршрутизатор становится last-hop маршрутизатором и отвечает за отправку сообщений Join к RP.

[править] Rendezvous Point (RP)

PIM-SM 0.png

Для координации работы в домене PIM-SM, одному из маршрутизаторов (или нескольким) назначается роль rendezvous point (RP). RP знает обо всех парах (источник, группа) в домене засчет процедуры регистрации, которая описана выше.

Для работы PIM-SM необходимо чтобы каждый маршрутизатор, который работает по PIM-SM, знал адрес RP. Для того чтобы выучить адрес RP маршрутизатор может использовать один из методов:

  • Адрес RP может быть настроен статически на всех маршрутизаторах.
  • Использовать протокол BootStrap Router (BSR) для назначения RP и для анонсирования её адреса для того чтобы все PIM-SM маршрутизаторы могли выучить адрес автоматически.
  • Использовать проприетарный протокол Cisco Auto-RP для выбора RP и для анонсирования её адреса для того чтобы все PIM-SM маршрутизаторы могли выучить адрес автоматически.

Так как PIM-SM зависит от RP, то существуют механизмы для выбора избыточных RP:

  • Anycast RP с использованием Multicast Source Discovery Protocol (MSDP),
  • BootStrap Router (BSR)

[править] Построение дерева

PIM-SM 4.png

Когда в сети появляются желающие получать рассылку определенной группы, маршрутизаторы строят shared tree до RP, а RP строит SPT-дерево к источнику. После этого клиенты смогут получить мультикаст пакеты по этому дереву составленному из двух. И, хотя построенное дерево может не быть кратчайшим для передачи пакетов получателям, такой подход существенно сокращает количество информации, которое надо хранить маршрутизаторам в домене мультикаст, по сравнению с PIM-DM. Кроме того, после того как реальные пакеты мультикаст, дойдут до маршрутизаторов к которым непосредственно подключены клиенты, эти маршрутизаторы, узнав IP-адрес источника из пакетов, могут инициировать переключение на SPT-дерево непосредственно к источнику трафика и исключить себя из shared tree.


[править] Переключение на SPT

[править] Добавление/Удаление из shared tree

В сообщениях Join, которые отправляются upstream маршрутизаторам по направлению к RP, указаны:

  • Адрес группы,
  • Адрес RP,
  • Флаги:
    • WC-bit (wildcard bit) — 1 указывает на то, что адрес указанный в поле join address, это адрес RP, а не источника,
    • RPT-bit (RP-tree bit) — 1 указывает на то, что сообщение передается по shared tree к RP.

Если маршрутизатор хочет исключить интерфейс из RPT и переключиться на SPT, то он отправляет сообщение Prune с выставленными флагами RPT-bit и WC-bit.

[править] Переключение на SPT

Сначала маршрутизатор к которому подключены клиенты инициирует подключение к RPT. Переключиться на SPT маршрутизатор может после того как получит пакеты от источника трафика через RPT. RFC 2362 рекомендует настраивать переключение на SPT после того как было получено большое количество данных за определенный период времени от одного источника через RPT (какое количество данных и за какой промежуток времени в RFC не указывается). После превышения установленного порога маршрутизатор инициирует переключение на SPT.

После создания записи (S,G) по направлению к источнику отправляется сообщение Join/Prune с источником в Join list. До тех пор пока запись (S,G) существует, сообщение Join/Prune периодически отправляет снова.

При создании записи (S,G) список исходящих интерфейсов копируется из записи (*,G). Это делается для того чтобы все получатели, которые были зарегистрированы, продолжали получать multicast трафик.

Запись (S,G) сохраняется с таблице маршрутизации до тех пор, пока от источника приходит трафик. Для записи установлен таймер Entry-timer. По его истечению, запись будет удалена.

Только RP и маршрутизаторы к которым подключены клиенты могут инициировать переключение на SPT; промежуточные маршрутизаторы не могут. Last-hop маршрутизаторы создают запись (S,G) в ответ на получение пакетов от источника; промежуточные маршрутизаторы создают запись (S,G) только в ответ на получение сообщения Join/Prune от downstream маршрутизатора у которого источник есть с списке Join (Join list).

[править] Варианты выбора Rendezvous Point (RP)

[править] Статическое задание адреса RP

При статической настройке RP, IP-адрес RP должен быть настроен на всех маршрутизаторах.

[править] Протокол Bootstrap Router (BSR)

Протокол BootStrap Router (BSR) является частью спецификации PIM версии 2 и описывает стандартизированный механизм распространения информации об RP по домену PIM.

Маршрутизатор, который был выбран BSR-маршрутизатором, будет распространять информацию об RP, которые существуют в домене PIM. Но прежде, все маршрутизаторы в домене должны узнать о самом BSR-маршрутизаторе. Информация о BSR-маршрутизаторе распространяется в сообщениях PIM, по хопам, от маршрутизатора к маршрутизатору.

В итоге, когда все маршрутизаторы знают о BSR-маршрутизаторе, те из них, кому будет назначена роль RP, смогут сообщить о себе BSR-маршрутизатору.

BSR-маршрутизатор передает информацию обо всех известных ему RP по домену PIM.


BSR-маршрутизатор:

  • анонсирует все соответствия между RP и группами. Если есть несколько RP для группы, то анонсируются все.
  • сообщения отправляются на адрес 224.0.0.13.
  • Распространение сообщений bootstrap не требует чтобы маршрутизатор знал адрес RP или поддержки режима dense.


[править] Candidate BSR, candidate RP

Для работы протокола BootStrap необходимо назначить административно:

  • кандидатов в BSR (candidate bootstrap router, C-BSR),
  • кандидатов в RP (candidate rendezvous point, C-RP).

Среди C-BSR маршрутизаторов должен быть выбран маршрутизатор, который будет выполнять роль BSR. Каждому C-BSR соответствует определенный приоритет от 0 до 255 (в Cisco по умолчанию 0) и IP-адрес BSR.

C-BSR маршрутизатор устанавливает таймер Bootstrap Timeout равным 130 секунд и слушает сообщения Bootstrap:

  • Когда C-BSR маршрутизатор получает сообщение Bootstrap, он сравнивает свой приоритет с приоритетом отправителя:
    • Если у отправителя приоритет больше, то маршрутизатор запускает заново Bootstrap Timeout и слушает сообщения дальше.
    • Если приоритет больше у маршрутизатора, который получил сообщение Bootstrap, то он объявляет себя BSR и начинает отправлять сообщения Bootstrap каждые 60 секунд.
    • Если приоритеты у маршрутизаторов C-BSR одинаковые, то выигрывает тот у кого больше IP-адрес.
  • Если по истечению Bootstrap Timeout маршрутизатор не получил сообщения Bootstrap, то он начинает отправлять сообщения Bootstrap каждые 60 секунд.


Каждому маршрутизатору C-RP соответствует определенный приоритет от 0 до 255 и IP-адрес RP. Маршрутизатор может быть настроен как C-RP для всех групп или только для определенных групп.

Так как из сообщений bootstrap маршрутизаторы знают где находится BSR, то C-RP маршрутизаторы могут отправлять информацию непосредственно на BSR и сообщать свой IP-адрес и группы которые они поддерживают.

После того как BSR получил сообщения от C-RP, он собирает информацию о RP, соответствующих им группах и приоритетов в RP-Set. RP-Set анонсируется через весь домен в сообщениях bootstrap.

Когда маршрутизатор должен присоединиться к shared tree он анализирует RP-Set полученный от BSR:

  • если для группы только одна C-RP, то соответствующий маршрутизатор выбирается RP,
  • если для группы есть несколько C-RP, то маршрутизатор с наименьшим приоритетом выбирается RP,
  • если для группы есть несколько C-RP с одинаковым приоритетом, то вычисляется хеш-функция. C-RP с большим значением хеш-функции становится RP,
  • если значение хеш-функции одинаковое, то C-RP с наибольшим IP-адресом станет RP.

Note-icon.gif

Вычисление хеш-функции:

Value(G,M,C(i)) = (1103515245 * ((1103515245 * (G&M)+12345) XOR C(i)) + 12345) mod 2^31

где:

  • G = Group prefix
  • M = Hash mask
  • C = C-RP address

[править] Auto-RP

Auto-RP это проприетарный функционал на маршрутизаторах Cisco, который позволяет автоматизировать анонсирование информации о группах и RP, которые за них отвечают.

Note-icon.gif

Auto-RP это функционал который был доступен еще в PIMv1. В PIMv2 появился стандартизированный механизм, который позволяет реализовать аналогичный функционал.

Для работы Auto-RP в сети надо выбрать и назначить маршрутизаторы:

  • кандидат(ы) в RP — маршрутизатор, который хочет быть RP
    • Маршрутизатор, который настроен как RP, анонсирует сообщения RP-Announce каждые 60 секунд на зарезервированный адрес 224.0.1.39. Этими сообщениями он оповещает mapping agent, для каких групп он выполняет роль RP.
  • mapping agent — маршрутизатор, который выбирает RP из всех, которые сообщили информацию о себе и отправляет информацию о выбранных RP по всему домену PIM
    • Маршрутизатор, который выполняет роль mapping agent, выучивает адреса RP и соответствующие им группы, "слушая" адрес 224.0.0.39.
    • Затем mapping agent отправляет сообщение RP-Discovery, которое указывает какая RP должна использоваться для каждой группы. Сообщение отправляется на адрес 224.0.1.40 каждые 60 секунд.
    • Если mapping agent получил информацию о нескольких RP для одной группы, то он выбирает лучшую RP (маршрутизатор с большим IP-адресом).
    • Часто mapping agent это тот же маршрутизатор, который был выбран RP, однако может использоваться и другой маршрутизатор.

Но, если вспомнить, что Auto-RP предназначен для работы в режиме PIM-SM, то получается, что служебные сообщения, которые отправляют RP и mapping agent, не будут передаваться по домену мультикаст. Эти сообщение это обычные мультикаст пакеты, а PIM-SM не выполняет флудинг пакетов мультикаст по домену как PIM-DM.

Для решения это проблемы есть несколько вариантов:

  • использовать на интерфейсах режим sparse-dense (команда ip pim sparse-dense-mode). Тогда будет использоваться:
    • режим dense для групп для которых нет RP
    • режим sparse для групп для которых есть RP
  • использовать на интерфейсах режим sparse
    • включить глобально на маршрутизаторах auto-rp listener (команда ip pim autorp listener). Тогда будет использоваться:
      • режим dense для групп 224.0.1.39 и 224.0.1.40
      • режим sparse для всех остальных групп
    • статически настроить RP для групп 224.0.1.39, 224.0.1.40
      • конечно этот вариант плох тем, что при попытке настроить динамическое назначение RP, приходит настраивать RP статически. Так что, этот вариант лучше не использовать

[править] Выбор избыточных RP

[править] Anycast RP

Anycast RP позволяет балансировать нагрузку между RP для одной и той же группы.

По протоколу MSDP RP сообщают друг другу об источниках о которых они знают.

[править] Настройка PIM-SM

[править] PIM-SM в Cisco

На странице PIM-SM в Cisco описан пример работы PIM-SM на примере схемы, которая изображена на рисунке.

PIM-SM cisco.png


Основная страница: PIM-SM в Cisco
Источник — «http://xgu.ru/wiki/PIM-SM»