Multicast. PIM Sparse-mode. Конспект.

Для своей работы PIM использует unicast-маршрутизация для избежания петель.

Режим Sparse не передавает multicast трафик до тех пор, пока тебя не попросят об этом. Это отличие от Dense. Dense флудит трафик через все интерфейсы.
Выбирается точка рандеву — Rendevous Point. Это маршрутизатор, на который накладываются определенные функции. Все остальные мультикаст-маршрутизаторы должны знать о точке рандеву. (Либо руками, либо динамически через Auto-RP или BSR)

Когда появляется активный клиент (который высылает IGMP Join), R5 смотрит где точка рандеву. Далее R5 шлет PIM Join и добавляет 0/0 в incoming interface list (будет ждать мультикаст на этот интерфейс)
R4 принимает PIM Join, 0/0 добавляет в outgoint interface list, далее смотрит где точка рандеву и высылает также PIM Join также на группу (*, 239.1.1.1)
R3 принимает PIM Join, добавляет интерфейс, куда пришел PIM Join в outgoing interface list. На этом этапе построено Shared Tree Path (*, 239.1.1.1) между RP и R5.

R5#sh ip mroute
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 00:14:13/00:02:12, RP 150.1.3.3, flags: SJCL
  Incoming interface: Ethernet0/0, RPF nbr 155.1.4.4
  Outgoing interface list:
    Loopback0, Forward/Sparse, 00:02:27/00:02:12

И на точке рандеву также появляется такой Shared Path маршрут до приёмника:

R3# sh ip mroute
IP Multicast Routing Table

(*, 239.1.1.1), 00:16:28/00:02:43, RP 150.1.3.3, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/1.58, Forward/Sparse, 00:04:41/00:02:43

Когда в сети начинает передаваться мультикаст-трафик на группу 239.1.1.1 (маршрутизатор R1 является first-hop для этого), то на R1 появляется следующая маршрутная информация: shared tree до RP и source tree до источника.

R6#sh ip mroute
IP Multicast Routing Table

(*, 239.1.1.1), 00:00:12/stopped, RP 150.1.3.3, flags: SPF
  Incoming interface: Ethernet0/1.146, RPF nbr 155.1.146.4
  Outgoing interface list: Null

(155.1.146.6, 239.1.1.1), 00:00:12/00:02:53, flags: PFT
  Incoming interface: Ethernet0/1.146, RPF nbr 0.0.0.0
  Outgoing interface list: Null

На RP далее появляется следующая маршрутная информация:

R3#sh ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F - Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific Host Report, 
       Z - Multicast Tunnel, z - MDT-data group sender, 
       Y - Joined MDT-data group, y - Sending to MDT-data group, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 00:29:27/stopped, RP 150.1.3.3, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/1, Forward/Sparse, 00:17:41/00:02:32

(155.1.146.6, 239.1.1.1), 00:00:03/00:03:27, flags: T
  Incoming interface: Ethernet0/0, RPF nbr 155.1.2.2
  Outgoing interface list:
    Ethernet0/1, Forward/Sparse, 00:00:03/00:03:26

И на R5:

R5#sh ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F - Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific Host Report, 
       Z - Multicast Tunnel, z - MDT-data group sender, 
       Y - Joined MDT-data group, y - Sending to MDT-data group, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.2.3), 00:34:17/stopped, RP 150.1.5.5, flags: SJCL
  Incoming interface: Ethernet0/1.108, RPF nbr 155.1.108.8
  Outgoing interface list:
    Loopback0, Forward/Sparse, 00:22:30/00:02:10

(155.1.146.6, 239.1.2.3), 00:00:04/00:02:55, flags: LJT
  Incoming interface: Ethernet0/1.108, RPF nbr 155.1.108.8
  Outgoing interface list:
    Loopback0, Forward/Sparse, 00:00:04/00:02:55

(*, 224.0.1.40), 00:35:03/00:02:02, RP 150.1.5.5, flags: SJPCL
  Incoming interface: Ethernet0/1.108, RPF nbr 155.1.108.8
  Outgoing interface list: Null

Данный трафик уже не идет через точку рандеву, а передается согласно таблице unicast-маршрутизации.

sparse_2

PIM Sparse надо не забыть включить на интерфейсе, за которым RP.
Root Path Tree — дерево до корня. Корнем является точка рандеву. Путь от точки рандеву в сторону всех клиентов.

ip pim spt-threshold — переключение на оптимальное дерево.
ip pim rp-mapping — прикрепить определенные потоки к определенной точке рандеву. Балансировка.
ip pim accept-rp — прием join-сообщений только для определенных адресов. (Клиенты смогут отправлять JOIN только для заданных групп, например 239.1.1.1)

R4# ip access-list standart ACL_PIM-GROUPS
  permit 239.1.1.1
R4# ip pim accept-rp ACL_150.1.3.3 PIM-GROUPS

В данном случае разрешает Join сообщения для RP 150.1.3.3 только для группы 239.1.1.1

DR этот тот маршрутизатор, который отправляет Join-сообщения до точки рандеву. Выбирается в сегменте сети.
ip pim dr-priority на интерфейсе позволяет задавать приоритет. У кого больше, тот и DR в сегменте. 
Пример:
Смотрим PIM-соседей, видим, что кто DR.

R4# sh ip pim neighbor 
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
      P - Proxy Capable, S - State Refresh Capable, G - GenID Capable
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode
192.168.1.3       Ethernet0/0              2d18h/00:01:30    v2    2 / DR S P G

 

Автоматический режим выбора точки рандеву
Их два режима — Auto RP и Bootstrap router (BSR)
Auto RP: RP высылает RP announce на 224.0.1.39, который прослушивается маршрутизатор, настроенный как mapping agent. Принимая это сообщение, он высылает RP discovery на 224.0.1.40, в котором пересылается адрес точки рандеву и группы.
На схеме видно, что есть три RP, каждая высылает RP announce, MA пересылает RP discovery к R1, R2 и R3, из которых они узнают о RP.
RP_Auto_1
Тут встает проблема — для работы sparse-mode требуется наличие RP, а чтобы сработал Auto-RP нужно, чтобы работал PIM. Решение ниже.

ip pim sparse-dense mode
ip pim autorp listener — автоматически активируется dense-режим, но только для auto-rp трафика. Решение проблемы, описанной выше.

ip pim send-rp-announce — делает маршрутизатор точкой рандеву
ip pim send-rp-discovery -делает маршрутизатор mapping-агентом.
ip pim rp-announce-filter — фильтрация сообщений rp-announce от точек. (по access-list)
ip multicast boundary filter auto-rp на интерфейсе позволяет запретить, например, auto-rp сообщения.

Bootstrap Router (BSR) (работает только в PIMv2)
В BSR RP отправляет информацию о себе. Эти сообщения прослушивает маршрутизатор, который настроен как BSR (т.е. аналог mapping agent в Auto-RP), далее он рассылает эту информацию через все интерфейсы. R1 получает его и флудит его дальше. R4 получает в итоге 2 таких сообщения и чтобы не было петель, проводит RPF в сторону BSR.
224.0.0.13 — на этот адрес отсылаются эти сообщения.

BSR_1

Важное отличие от Auto-RP — BSR отправляет информацию о всех RP, в отличие от Auto-RP, которая сначала выберет master RP по бОльшему IP.

BSR_2

ip pim rp-candidate Loopback 0 [group-list ] [interval ] [priority <0-255>]. — настройка точки рандеву в режиме BSR. Group-list позволяет явно задать список кандидатов в ACL.
ip pim bsr-candidate Loopback 0 — настройка маршрутизатора в режиме BSR (тот, кто рассылкает информацию о мультикаст группах и о RP в мультикаст-домене, наподобие mapping agent в Auto-RP). Для балансировки между RP и группами мультикаста указывается hash — ip pim bsr-candidate Loopback 0 30
30 — хеш-маска, который позволяет балансировать мультикаст-рассылку между RP. Пример ниже:

При маске 30 будет так:
R5#show ip mroute | inc 10.10.0.1
(*, 239.255.1.4), 00:56:52/00:02:52, RP 10.10.0.1, flags: SJCL
(*, 239.255.1.5), 00:56:50/00:02:59, RP 10.10.0.1, flags: SJCL
(*, 239.255.1.6), 00:57:51/00:02:52, RP 10.10.0.1, flags: SJCL
(*, 239.255.1.7), 00:55:29/00:02:51, RP 10.10.0.1, flags: SJCL
R5#show ip mroute | inc 10.10.0.2
(*, 239.255.1.0), 00:57:02/00:02:51, RP 10.10.0.2, flags: SJCL
(*, 239.255.1.1), 00:59:57/00:02:50, RP 10.10.0.2, flags: SJCL
(*, 239.255.1.2), 00:56:59/00:02:50, RP 10.10.0.2, flags: SJCL
(*, 239.255.1.3), 00:56:57/00:02:51, RP 10.10.0.2, flags: SJCL

show ip pim rp mapping — просмотр текущих точек рандеву на клиентах.

PIM Bidirectional Маршрутизаторы сразу шлют мультикаст к точке рандеву, минуя регистрацию. И весь трафик идет через точку рандеву.
Сначала настраивается классический PIM Sparse, далее глобально ip pim bidirectional

PIM SSM (Source Specific) — полная противоположность bidirectional. Трафик не идет через точку рандеву.
Клиент высылает IGMP JOINv3. (на свитчах она должна быть включена, по умолчанию включена вторая) Клиент явно указывает IP сервера в этом IGMP Join, R5 преобразует это в PIM Join и высылает это PIM Join напрямую к серверу, а не на точку рандеву.
ip pim ssm — включает этот режим.
SSM_1

Anycast Rendevous Point
Необходимо гнать трафик между двумя организациями. В одной есть RP, и в другой есть RP.
anycast
Multicast Source Discovery Protocol поднимается между двумя RP на этих двух площадках ip msdp peer x.x.x.x
Чтобы гонять мультикаст между двумя площадками, необходима настройка mBGP (address group ipv4 multicast) между ними с той целью, чтобы проходил RPF от точки рандеву до сервера.

Чаще всего MSDP используется в связке с anycast RP.

msdp+anycast_1
Anycast необходим для балансировки между двумя RP (один и тот же адрес 10.1.1.1)