PIM-SM в Cisco

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

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

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

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

На этой странице описывается настройка PIM-SM на оборудовании Cisco:

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

Принципы работы PIM Sparse Mode описаны на странице PIM-SM.

Содержание

[править] Включение PIM-SM на интерфейсах

Настройка PIM-SM на интерфейсах, происходит по аналогии с PIM-DM, но, так как логика работы PIM-SM сложнее, то, кроме включения режима на интерфейсах, потребуются дополнительные настройки.

Включить PIM sparse mode:

dyn3(config-if)# ip pim sparse-mode

Основная часть настроек касается выбора RP. Для этого существует несколько способов, которые описаны ниже.

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

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

Сообщения Register также проходят проверку RPF, так что это может быть причиной, по которой источник не был зарегистрирован на RP.

[править] Выбор DR

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

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

По умолчанию у всех маршрутизаторов приоритет 1, поэтому DR выбирается на основании IP-адреса:

  • маршрутизатор у которого больше IP-адрес, становится DR.

При необходимости можно изменить приоритет маршрутизатора:

dyn1(config-if)# ip pim dr-priority 10

Просмотр информации о приоритете интерфейса:

dyn1# sh ip pim int fa0/0

Address          Interface                Ver/   Nbr    Query  DR     DR
                                          Mode   Count  Intvl  Prior
192.168.1.1      FastEthernet0/0          v2/D   1      30     10     192.168.1.1

Просмотр информации о приоритете соседа:

dyn1#sh ip pim neighbor
PIM Neighbor Table
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode
192.168.1.2       FastEthernet0/0          03:13:39/00:01:30 v2    1 / S

[править] Настройка RP

Для координации работы в домене 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 маршрутизаторы могли выучить адрес автоматически.

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

Настройка RP с адресом 2.2.2.2:

R4(config)# ip pim rp-address 2.2.2.2

По умолчанию, при таком задании статической RP, RP отвечает за весь диапазон мультикаст.

При необходимости, можно разделить диапазон и назначить разные RP, для разных диапазонов.

Например, RP с адресом 4.4.4.4, будет отвечать за группу 224.1.1.1 (это надо задать на всех маршрутизаторах):

dyn4(config)# ip pim rp-address 4.4.4.4 1
dyn4(config)# access-list 1 permit 224.1.1.1

Для RP лучше использовать IP-адрес loopback-интерфейса. При статическом задании RP, при этом на loopback-интерфейсе не обязательно настраивать PIM.

На маршрутизаторе, который выполняет роль RP, обязательно нужно тоже статически указать RP. Иначе этот маршрутизатор не будет работать как RP. Это можно считать некой функцией безопасности, которая не позволяет указать как RP какой-то произвольный маршрутизатор, не настраивая это на нем.

Note-icon.gif

Динамические методы выбора RP (BSR и Auto-RP) по умолчанию имеют больший приоритет, чем статическая RP.

[править] BSR

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

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

Подробнее о работе протокола BSR: Протокол Bootstrap Router (BSR)

Кандидат в RP:

ip pim rp-candidate <int> [group-list] [interval] [priority <0-255>]

Кандидат в BSR:

ip pim bsr-candidate <int> [hash-mask-length] [priority <0-255>] [accept-rp-candidate <acl>]

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

Включить PIM sparse-dense mode:

dyn3(config-if)# ip pim sparse-dense-mode


Note-icon.gif

  • Для RP лучше использовать IP-адрес loopback-интерфейса.
  • При использовании Auto-RP, если loopback-интерфейс используется как источник сообщений RP-Announce, то на нём надо настраивать PIM sparse-dense mode.
  • Режим PIM должен быть настроен на интерфейсе до указания его отправителем сообщений RP-Announce.

Указать, что маршрутизатор может стать RP:

dyn3(config)# ip pim send-rp-announce <interface type> scope <ttl> [group-list <acl>]

Маршрутизатор отправляет сообщение Auto-RP на адрес 224.0.1.39, анонсируя, что он кандидат на RP для групп в диапазоне указанного ACL.

Пример настройки:

dyn4(config)# ip pim send-rp-announce lo0 scope 6 group-list 33 interval 20
dyn4(config)# access-list 33 permit 224.33.33.33

Настроить маршрутизатор в качестве RP mapping agent:

dyn3(config)# ip pim send-rp-discovery <interface type> scope <ttl>

Маршрутизатор слушает сообщения на адрес 224.0.1.39 и отправляет сообщения RP-to-group mapping на адрес 224.0.1.40. Другие PIM-маршрутизаторы слушают адрес 224.0.1.40 для того чтобы динамически обнаружить RP.

Note-icon.gif

Для того чтобы предотвратить распространение трафика других групп, кроме 224.0.1.39 и 224.0.1.40, в режиме dense, рекомендуется настраивать sink RP (RP of last resort). Фактически, sink RP это статически настроенная RP, которая может даже не существовать в сети.

Так как настройки Auto-RP более приоритетные, чем статическая RP, то эти настройки не будут мешать друг другу. Рекомендуется настраивать статическую sink RP для всех возможных multicast групп в сети, на случай, если какой-то незапланированный источник станет активным.

[править] Auto-RP в режиме PIM-SM

Как правило, Auto-RP используется с режимом PIM sparse-dense. Это связано с тем, что маршрутизаторы должны распространять информацию групп 224.0.1.39 и 224.0.1.40. Обычно эти трафик этих групп распространяется в режиме dense, а для всех остальных настраивается RP.

Однако, если в сети есть требование по использованию режима sparse, но не sparse-dense, то существует способ настройки маршрутизаторов таким образом, чтобы они всё-таки передавали информацию групп 224.0.1.39 и 224.0.1.40 в режиме dense.

На маршрутизаторах необходимо выполнить команду ip pim autorp listener. Эта команда позволяет маршрутизатору работать в режиме dense для групп 224.0.1.39 и 224.0.1.40 и в режиме sparse для всех остальных групп.

Пример выполнения команды:

dyn3(config)# ip pim autorp listener

[править] Совместное использование нескольких методов выбора RP

Динамические методы выбора RP (BSR и Auto-RP) более приоритетные, чем статическая RP. Однако, есть возможность указать, что статически указанная RP более приоритетная, чем динамически обнаруженные RP. Для этого к команде настройки статической RP надо добавить параметр override.

Пример настройки:

dyn4(config)# ip pim rp-address 4.4.4.4 1 override
dyn4(config)# access-list 1 permit 224.1.1.1

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

Настройка переключения между shared distribution tree и shortest path tree (опция infinity значит никогда не переключаться). По умолчанию значение 0, то есть переключение происходит сразу:

dyn3(config)# ip pim spt-threshold <rate | infinity>

[править] Дополнительные настройки

[править] Фильтрация RP

Фильтрация RP настраивается только на mapping agent. На других маршрутизаторах эта фильтрация работать не будет.

Настройка фильтрации:

dyn3(config)# ip pim rp-announce-filter rp-list 4 group-list 44
dyn3(config)# access-list 4 permit 4.4.4.4 
dyn3(config)# access-list 44 permit 224.4.4.4

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

При настройке PIM-SM в 15.0 версии IOS, поднимаются туннельные интерфейсы (192.168.33.33 и 192.168.55.55 это адреса RP):

dyn1#sh int tun 0
Tunnel0 is up, line protocol is up
  Hardware is Tunnel
  Interface is unnumbered. Using address of FastEthernet1/0 (192.168.2.1)
  MTU 17912 bytes, BW 100 Kbit/sec, DLY 50000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation TUNNEL, loopback not set
  Keepalive not set
  Tunnel source 192.168.2.1 (FastEthernet1/0), destination 192.168.55.55
   Tunnel Subblocks:
      src-track:
         Tunnel0 source tracking subblock associated with FastEthernet1/0
          Set of tunnels with source FastEthernet1/0, 2 members (includes iterators), on interface <OK>
  Tunnel protocol/transport PIM/IPv4
  Tunnel TOS/Traffic Class 0xC0,  Tunnel TTL 255
  Tunnel transport MTU 1472 bytes
  Tunnel is transmit only
  Tunnel transmit bandwidth 8000 (kbps)
  Tunnel receive bandwidth 8000 (kbps)
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 24
  Queueing strategy: fifo
  Output queue: 0/0 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     24 packets output, 1728 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 unknown protocol drops
     0 output buffer failures, 0 output buffers swapped out

dyn1#sh int tun 1
Tunnel1 is up, line protocol is up
  Hardware is Tunnel
  Interface is unnumbered. Using address of FastEthernet1/0 (192.168.2.1)
  MTU 17912 bytes, BW 100 Kbit/sec, DLY 50000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation TUNNEL, loopback not set
  Keepalive not set
  Tunnel source 192.168.2.1 (FastEthernet1/0), destination 192.168.33.33
   Tunnel Subblocks:
      src-track:
         Tunnel1 source tracking subblock associated with FastEthernet1/0
          Set of tunnels with source FastEthernet1/0, 2 members (includes iterators), on interface <OK>
  Tunnel protocol/transport PIM/IPv4
  Tunnel TOS/Traffic Class 0xC0,  Tunnel TTL 255
  Tunnel transport MTU 1472 bytes
  Tunnel is transmit only
  Tunnel transmit bandwidth 8000 (kbps)
  Tunnel receive bandwidth 8000 (kbps)
  Last input never, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 24
  Queueing strategy: fifo
  Output queue: 0/0 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     24 packets output, 1728 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 unknown protocol drops
     0 output buffer failures, 0 output buffers swapped out
dyn1#sh ip pim rp ma
PIM Group-to-RP Mappings

Group(s) 224.0.0.0/5
  RP 192.168.33.33 (?), v2v1
    Info source: 192.168.44.44 (?), elected via Auto-RP
         Uptime: 00:17:54, expires: 00:02:43
Group(s) 224.0.0.0/4
  RP 192.168.55.55 (?), v2v1
    Info source: 192.168.44.44 (?), elected via Auto-RP
         Uptime: 00:05:27, expires: 00:02:28
Group(s) (-)224.110.110.110/32
  RP 192.168.55.55 (?), v2v1
    Info source: 192.168.44.44 (?), elected via Auto-RP
         Uptime: 00:05:45, expires: 00:02:10
Group(s) 232.0.0.0/5
  RP 192.168.55.55 (?), v2v1
    Info source: 192.168.44.44 (?), elected via Auto-RP
         Uptime: 00:06:03, expires: 00:02:51
dyn1#sh ip pim tunnel 
Tunnel1 
  Type  : PIM Encap
  RP    : 192.168.33.33
  Source: 192.168.2.1
Tunnel0 
  Type  : PIM Encap
  RP    : 192.168.55.55
  Source: 192.168.2.1

Просмотр на RP:

dyn5#sh ip pim tunnel 
Tunnel1 
  Type  : PIM Encap
  RP    : 192.168.33.33
  Source: 192.168.5.5
Tunnel2 
  Type  : PIM Encap
  RP    : 192.168.55.55*
  Source: 192.168.55.55
Tunnel0* 
  Type  : PIM Decap
  RP    : 192.168.55.55*
  Source: -

Note-icon.gif

PIM tunnel interfaces are used by the IPv4 Multicast Forwarding Information Base (MFIB) for the PIM sparse mode (PIM-SM) registration process. Two types of PIM tunnel interfaces are used by the the IPv4 MFIB:

  • A PIM encapsulation tunnel (PIM Encap Tunnel)
  • A PIM decapsulation tunnel (PIM Decap Tunnel).

The PIM Encap Tunnel is dynamically created whenever a group-to-Rendezvous Point (RP) mapping is learned (via Auto-RP, bootstrap router (BSR), or static RP configuration). The PIM Encap Tunnel is used to encapsulate multicast packets sent by first-hop Designated Routers (DRs) that have directly connected sources.

Similar to the PIM Encap Tunnel, the PIM Decap Tunnel interface is dynamically created—with the exception that it is created only on the RP whenever a group-to-RP mapping is learned. The PIM Decap Tunnel interface is used by the RP to decapsulate PIM register messages.

PIM tunnels will not appear in the running configuration.

[править] Пример работы PIM-SM на Cisco

PIM-SM cisco.png

Пример работы PIM-SM будет пошагово показан на основе схемы, которая изображена на рисунке. На схеме все IP-адреса соответствуют такому шаблону: 10.1.x.y/24. Где x — номера соседних маршрутизаторов, между которыми проходит сеть, а y — номер маршрутизатора.

В этом разделе описываются базовые принципы работы PIM-SM и для упрощения используется статическое назначение RP.

На всех маршрутизаторах настроен OSPF, включена маршрутизация мультикаст, настроен режим sparse на всех интерфейсах (кроме R10) и статически назначена RP:

router ospf 1
 network 10.1.0.0 0.0.255.255 area 0
!
ip multicast-routing
!
ip pim rp-address 2.2.2.2
!
int f0/0
 ip pim sparse-mode

После включения PIM-SM на интерфейсах, PIM устанавливает отношения соседства, которые, в принципе, работают как и в протоколах динамической маршрутизации.

В роли источников и клиентов будут маршрутизаторы.

Icon-caution.gif

Для демонстрации работы PIM, для отображения форвардинга мультикаст пакетов, на маршрутизаторах отключен CEF. И выводы некоторых команд могут это отображать.

Кроме этого, используется вывод команд debug ip pim и debug ip mpacket.

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

Так как задача этого раздела показать общую логику работы PIM в режиме sparse, то RP назначена статически. Динамический выбор RP описан в соответствующих разделах.

На R2 создан интерфейс loopback2 с IP-адресом 2.2.2.2/32, адрес которого используется как RP. Также этот интерфейс анонсирован в OSPF. Как и на других маршрутизаторах домена, на R2 также должен статически быть назначен IP-адрес RP, чтобы маршрутизатор знал, что он выступает в роли RP.

R6#sh ip pim rp mapping 
PIM Group-to-RP Mappings

Group(s): 224.0.0.0/4, Static
    RP: 2.2.2.2 (?)


R6(config)#ip host ROUTER2 2.2.2.2

R6#sh ip pim rp mapping 
PIM Group-to-RP Mappings

Group(s): 224.0.0.0/4, Static
    RP: 2.2.2.2 (ROUTER2)

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

Маршрутизатор R10 будет источником трафика:

dyn10#ping 239.1.1.1 repeat 1000

Type escape sequence to abort.
Sending 1000, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
......................................................................
......................................

Когда маршрутизатор R10 начинает генерировать трафик, маршрутизатор, который непосредственно присоединен к нему, отправит на RP сообщение Register. В топологии, которая используется в примере, к R10 подключены два маршрутизатора, но регистрировать источник будет только один из них, тот, который стал DR.

На RP можно посмотреть процесс регистрации:

PIM(0): Received v2 Register on FastEthernet2/0 from 10.1.69.9
    for 10.1.89.10, group 239.1.1.1
PIM(0): Check RP 2.2.2.2 into the (*, 239.1.1.1) entry
PIM(0): Send v2 Register-Stop to 10.1.69.9 for 10.1.89.10, group 239.1.1.1
PIM(0): Received v2 Register on FastEthernet2/0 from 10.1.69.9
     for 10.1.89.10, group 239.1.1.1
PIM(0): Send v2 Register-Stop to 10.1.69.9 for 10.1.89.10, group 239.1.1.1
PIM-SM cisco dr.png

Из сообщения на R2 видно, что DR стал маршрутизатор R9. Как посмотреть какой маршрутизатор стал DR, описано ниже.

После регистрации источника на RP и маршрутизаторах, которые непосредственно присоединены к источнику, появятся записи (S, G). В данном примере запись будет (10.1.89.10, 239.1.1.1).

Таким образом RP узнает о том, что в сети появился источник мультикаст, который передает на определенную группу. Несмотря на то, что сообщение Register передавалось через R6, на нем (и других маршрутизаторах в сети) записи о группе 239.1.1.1 не будет до тех пор, пока не появятся клиенты, которые хотят получать трафик этой группы.

Информация о группе в таблице маршрутизации мультикаст на RP:

R2#sh ip mroute 239.1.1.1
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,
...
(*, 239.1.1.1), 00:05:51/stopped, RP 2.2.2.2, flags: SP
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list: Null

(10.1.89.10, 239.1.1.1), 00:05:51/00:01:10, flags: P
  Incoming interface: FastEthernet2/0, RPF nbr 10.1.26.6
  Outgoing interface list: Null

Информация о группе 239.1.1.1 на R8:

R8#sh ip mroute 239.1.1.1
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,
...
(*, 239.1.1.1), 00:06:24/stopped, RP 2.2.2.2, flags: SP
  Incoming interface: FastEthernet2/0, RPF nbr 10.1.68.6
  Outgoing interface list: Null 

(10.1.89.10, 239.1.1.1), 00:06:24/00:02:56, flags: PT
  Incoming interface: FastEthernet0/0, RPF nbr 0.0.0.0
  Outgoing interface list: Null


Информация о группе 239.1.1.1 на R9:

R9#sh ip mroute 239.1.1.1
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,
...
(*, 239.1.1.1), 00:06:48/stopped, RP 2.2.2.2, flags: SPF
  Incoming interface: FastEthernet1/0, RPF nbr 10.1.69.6
  Outgoing interface list: Null

(10.1.89.10, 239.1.1.1), 00:06:48/00:02:54, flags: PFT
  Incoming interface: FastEthernet0/0, RPF nbr 0.0.0.0
  Outgoing interface list: Null

Хотя от R9 к RP сообщение Register передается через R6:

R9#mtrace 2.2.2.2
Type escape sequence to abort.
Mtrace from 2.2.2.2 to 10.1.69.9 via RPF
From source (?) to destination (?)
Querying full reverse path... 
 0  10.1.69.9
-1  10.1.69.9 PIM  [2.2.2.2/32]
-2  10.1.69.6 PIM  [2.2.2.2/32]
-3  10.1.26.2 PIM  [2.2.2.2/32]
-4  2.2.2.2

В таблице маршрутизации R6 нет записи о группе 239.1.1.1:

R6#sh ip mroute 239.1.1.1
Group 239.1.1.1 not found

Как и на других маршрутизаторах:

R5#sh ip mroute 239.1.1.1 
Group 239.1.1.1 not found

[править] Designated Router (DR)

PIM-SM cisco dr.png
R9#sh ip pim int f0/0 detail 
FastEthernet0/0 is up, line protocol is up
  Internet address is 10.1.89.9/24
  Multicast switching: fast
  Multicast packets in/out: 1324/324
  Multicast TTL threshold: 0
  PIM: enabled
    PIM version: 2, mode: sparse
    PIM DR: 10.1.89.9 (this system)
    PIM neighbor count: 1
    PIM Hello/Query interval: 30 seconds
    PIM State-Refresh processing: enabled
    PIM State-Refresh origination: enabled, interval: 60 seconds
    PIM NBMA mode: disabled
    PIM ATM multipoint signalling: disabled
    PIM domain border: disabled
  Multicast Tagswitching: disabled
R8#sh ip pim neighbor 
PIM Neighbor Table
Neighbor          Interface                Uptime/Expires    Ver   DR
 Address                                                            Prio/Mode
10.1.89.9         FastEthernet0/0          00:04:10/00:01:30 v2    1 / DR S
10.1.18.1         FastEthernet1/0          01:08:42/00:01:30 v2    1 / S
10.1.68.6         FastEthernet2/0          1d08h/00:01:24    v2    1 / S

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

PIM-SM cisco shared tree.png

Note-icon.gif

Для демонстрации работы PIM-SM и построения shared дерева, без переключения на SPT-дерево, на маршрутизаторах R1, R4, R7 выполнена команда: ip pim spt-threshold infinity. Эта команда отключает переключение на SPT.

Переключение на SPT обсуждается далее.

Выше была описана ситуация, когда в сети появился источник, но нет клиентов. Теперь посмотрим как выглядит таблица маршрутизации мультикаст и что происходит в сети, когда есть клиенты, но нет источника.

Note-icon.gif

Иногда выводы debug ip pim немного тяжело читать, так как сообщения Join и Prune можно перепутать. В части выводов они пишутся как Join/Prune, так как это и есть одно и то же сообщение с разными заполненными полями и флагами.

Но по другим частям сообщений явно видно, какой тип сообщения имелся в виду. Плюс, по ходу объяснения это явно уточняется.

[править] Появляется клиент, но пока нет источника

В роли клиентов будет интерфейсы маршрутизаторов R1, R4, R7.

Первым появляется R1:

R1(config)# int f0/0
R1(config-if)# ip igmp join-group 239.1.1.1

После добавления интерфейса, от R1 к RP идет сообщение Join (*, G) на построение shared дерева:

PIM(0): Check RP 2.2.2.2 into the (*, 239.1.1.1) entry
PIM(0): Building Triggered (*,G) Join / (S,G,RP-bit) Prune message for 239.1.1.1
PIM(0): Insert (*,239.1.1.1) join in nbr 10.1.12.2's queue
PIM(0): Building Join/Prune packet for nbr 10.1.12.2
PIM(0): Adding v2 (2.2.2.2/32, 239.1.1.1), WC-bit, RPT-bit, S-bit Join
PIM(0): Send v2 join/prune to 10.1.12.2 (FastEthernet2/0)

R2 получил запрос и добавляет интерфейс, через который пришел запрос, в дерево (*, 239.1.1.1), и переводит в состояние forward:

PIM(0): Received v2 Join/Prune on FastEthernet0/0 from 10.1.12.1, to us
PIM(0): Join-list: (*, 239.1.1.1), RPT-bit set, WC-bit set, S-bit set
PIM(0): Check RP 2.2.2.2 into the (*, 239.1.1.1) entry
PIM(0): Add FastEthernet0/0/10.1.12.1 to (*, 239.1.1.1), Forward state, by PIM *G Join

Таблица маршрутизации мультикаст на RP:

R2#sh ip mroute 239.1.1.1
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
...
(*, 239.1.1.1), 00:02:06/00:03:22, RP 2.2.2.2, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:02:06/00:03:22 


R1#sh ip mroute 239.1.1.1
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,
...
(*, 239.1.1.1), 00:02:32/00:02:56, RP 2.2.2.2, flags: SCL
  Incoming interface: FastEthernet2/0, RPF nbr 10.1.12.2
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:02:32/00:02:56

[править] Обновление состояния дерева

От R1 периодически снова отправляется сообщение Join, для обновления состояния и подтверждения того, что еще есть желающие получать рассылку:

PIM(0): Building Periodic (*,G) Join / (S,G,RP-bit) Prune message for 239.1.1.1
PIM(0): Insert (*,239.1.1.1) join in nbr 10.1.12.2's queue
PIM(0): Building Join/Prune packet for nbr 10.1.12.2
PIM(0): Adding v2 (2.2.2.2/32, 239.1.1.1), WC-bit, RPT-bit, S-bit Join
PIM(0): Send v2 join/prune to 10.1.12.2 (FastEthernet2/0)

Обновление на RP:

PIM(0): Building Periodic (*,G) Join / (S,G,RP-bit) Prune message for 239.1.1.1
PIM(0): Received v2 Join/Prune on FastEthernet0/0 from 10.1.12.1, to us
PIM(0): Join-list: (*, 239.1.1.1), RPT-bit set, WC-bit set, S-bit set
PIM(0): Update FastEthernet0/0/10.1.12.1 to (*, 239.1.1.1), Forward state, by PIM *G Join
PIM(0): Send RP-reachability for 239.1.1.1 on FastEthernet0/0

[править] Дерево (*, G) с тремя клиентами, без источника

Теперь подключились клиенты R4 и R7.

R2#sh ip mroute 239.1.1.1
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,
       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
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 00:28:11/00:03:10, RP 2.2.2.2, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet2/0, Forward/Sparse, 00:00:19/00:03:10
    FastEthernet1/0, Forward/Sparse, 00:00:36/00:02:54
    FastEthernet0/0, Forward/Sparse, 00:28:11/00:02:52
PIM-SM cisco shared tree 2.png

От R4 дерево (*, 239.1.1.1) построилось так:

R4#mtrace 2.2.2.2   
Type escape sequence to abort.
Mtrace from 2.2.2.2 to 10.1.35.4 via RPF
From source (?) to destination (?)
Querying full reverse path... 
 0  10.1.35.4
-1  10.1.35.4 PIM  [2.2.2.2/32]
-2  10.1.35.3 PIM  [2.2.2.2/32]
-3  10.1.23.2 PIM  [2.2.2.2/32]
-4  2.2.2.2

От R7 дерево (*, 239.1.1.1) построилось так:

R7#mtrace 2.2.2.2
Type escape sequence to abort.
Mtrace from 2.2.2.2 to 10.1.57.7 via RPF
From source (?) to destination (?)
Querying full reverse path... 
 0  10.1.57.7
-1  10.1.57.7 PIM  [2.2.2.2/32]
-2  10.1.79.9 PIM  [2.2.2.2/32]
-3  10.1.69.6 PIM  [2.2.2.2/32]
-4  10.1.26.2 PIM  [2.2.2.2/32]
-5  2.2.2.2

[править] Дерево (*, G) с двумя клиентами и дерево (S, G) от RP к источнику

PIM-SM cisco.gif

Теперь в сети два клиента R1 и R4 и появляется источник.

Note-icon.gif

Ситуация с маршрутизатором R7 в роли клиента и источником R10 будет рассмотрена ниже.

Она вынесена на отдельную страницу, так как в текущей топологии, с R7 в роли клиента, так совпало, что дерево SPT и RPT частично совпадают. И логика работы немного другая. И требует дополнительного объяснения.

Состояние таблицы маршрутизации мультикаст на R2, после появления двух клиентов и до отправки пакетов с источника:

R2#sh ip mroute 239.1.1.1
(*, 239.1.1.1), 02:27:13/00:02:48, RP 2.2.2.2, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:03:37/00:02:48
    FastEthernet1/0, Forward/Sparse, 00:03:47/00:02:38

Когда появляется источник, то R9 отправляет сообщение Register на R2, для того чтобы зарегистрировать источник. Но, так как R2 уже знает о клиентах, которые хотят получать эту рассылку, то он сразу же строит дерево SPT к источнику:

#Пришло сообщение Register:
PIM(0): Received v2 Register on FastEthernet2/0 from 10.1.69.9
     for 10.1.89.10, group 239.1.1.1

#Генерация сообщения Join для SPT (10.1.89.10,239.1.1.1):
PIM(0): Insert (10.1.89.10,239.1.1.1) join in nbr 10.1.26.6's queue

# Данные из сообщения Register деинкапсулированы и отправлены на интерфейсы f0/0 и f1/0:
PIM(0): Forward decapsulated data packet for 239.1.1.1 on FastEthernet0/0
PIM(0): Forward decapsulated data packet for 239.1.1.1 on FastEthernet1/0

# Отправка Join:
PIM(0): Building Join/Prune packet for nbr 10.1.26.6
PIM(0): Adding v2 (10.1.89.10/32, 239.1.1.1), S-bit Join
PIM(0): Send v2 join/prune to 10.1.26.6 (FastEthernet2/0)

# После того как сообщение Join дошло до R9, по дереву SPT приходят мультикаст пакеты:
IP(0): s=10.1.89.10 (Fa2/0) d=239.1.1.1 (Fa1/0) id=5098, ttl=252, prot=1, len=100(100), mforward
IP(0): s=10.1.89.10 (Fa2/0) d=239.1.1.1 (Fa0/0) id=5098, ttl=252, prot=1, len=100(100), mforward
PIM-SM cisco shared tree 3.png

Таблица маршрутизации на R2 после появления источника:

R2#sh ip mroute 239.1.1.1
(*, 239.1.1.1), 03:14:12/stopped, RP 2.2.2.2, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:50:35/00:03:13
    FastEthernet1/0, Forward/Sparse, 00:50:46/00:03:00

(10.1.89.10, 239.1.1.1), 00:00:14/00:02:53, flags: T
  Incoming interface: FastEthernet2/0, RPF nbr 10.1.26.6
  Outgoing interface list:
    FastEthernet1/0, Forward/Sparse, 00:00:14/00:02:45
    FastEthernet0/0, Forward/Sparse, 00:00:14/00:02:45

На R1 и R3 есть только shared tree (так как отключено переключение на SPT):

R1#sh ip mroute 239.1.1.1
(*, 239.1.1.1), 00:52:45/00:02:58, RP 2.2.2.2, flags: SCL
  Incoming interface: FastEthernet2/0, RPF nbr 10.1.12.2
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:52:45/00:02:56

R3#sh ip mroute 239.1.1.1
(*, 239.1.1.1), 00:53:09/00:03:29, RP 2.2.2.2, flags: S
  Incoming interface: FastEthernet1/0, RPF nbr 10.1.23.2
  Outgoing interface list:
    FastEthernet2/0, Forward/Sparse, 00:53:09/00:02:35
R6#sh ip mroute 239.1.1.1
(*, 239.1.1.1), 00:00:55/stopped, RP 2.2.2.2, flags: SP
  Incoming interface: FastEthernet0/0, RPF nbr 10.1.26.2
  Outgoing interface list: Null

(10.1.89.10, 239.1.1.1), 00:00:11/00:03:29, flags: T
  Incoming interface: FastEthernet2/0, RPF nbr 10.1.69.9
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:00:11/00:03:18
R9#sh ip mroute 239.1.1.1
(*, 239.1.1.1), 00:03:28/stopped, RP 2.2.2.2, flags: SPF
  Incoming interface: FastEthernet1/0, RPF nbr 10.1.69.6
  Outgoing interface list: Null

(10.1.89.10, 239.1.1.1), 00:03:28/00:03:20, flags: FT
  Incoming interface: FastEthernet0/0, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet1/0, Forward/Sparse, 00:03:27/00:03:00
R7#sh ip mroute 239.1.1.1
Group 239.1.1.1 not found

[править] Совпадение деревьев SPT и RPT

Основная страница: PIM-SM в Cisco/Совпадение_SPT_и_RPT

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

PIM-SM cisco spt switch 1.png

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

Первоначально в PIM-SM дерево от маршрутизаторов, к которым подключены клиенты, к RP строится shared tree. Но, когда мультикаст пакеты приходят на эти маршрутизаторы, они могут переключиться на SPT-дерево, так как из пакетов мультикаст, видят IP-адрес источника.

Для того чтобы перейти на дерево SPT, маршрутизатор, к которому подключены клиенты, отправляет Join для подключения к дереву SPT и по дереву RPT отправляет сообщение Prune.

На Cisco переключение на SPT включено по умолчанию. Контролируется переключение командой:

ip pim spt-threshold <rate | infinity>

На маршрутизаторах R1 и R4 задано значение rate = 0. Это значит, что переключение на SPT будет выполняться сразу же, как только до маршрутизаторов по RPT дойдут пакеты от источника.

Так ка до этого переключение было отключено, то R1 и R4 использовали не кратчайший путь к источнику, в строили дерево к RP.

На RP сходились два дерева:

R2#sh ip mroute 239.1.1.1
(*, 239.1.1.1), 03:14:12/stopped, RP 2.2.2.2, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:50:35/00:03:13
    FastEthernet1/0, Forward/Sparse, 00:50:46/00:03:00

(10.1.89.10, 239.1.1.1), 00:00:14/00:02:53, flags: T
  Incoming interface: FastEthernet2/0, RPF nbr 10.1.26.6
  Outgoing interface list:
    FastEthernet1/0, Forward/Sparse, 00:00:14/00:02:45
    FastEthernet0/0, Forward/Sparse, 00:00:14/00:02:45

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

PIM-SM cisco spt switch 1b.png

Когда включено переключение, то, как только пакеты доходят до маршрутизатора, который присоединен к клиентам, по дереву RPT, начинается переключение.

К R4 дерево шло как SPT: R9 - R6 - R2, а потом как RPT: R2 - R3 - R4.

Когда R4 получает мультикаст пакеты:

IP(0): s=10.1.89.10 (Fa1/0) d=239.1.1.1 (Fa0/0) id=9384, ttl=252, prot=1, len=100(100), mforward

R4 генерирует Join соседу R5, указывая, что хочет присоединиться к дереву SPT:

PIM(0): Insert (10.1.89.10,239.1.1.1) join in nbr 10.1.35.5's queue
PIM(0): Building Join/Prune packet for nbr 10.1.35.5
PIM(0): Adding v2 (10.1.89.10/32, 239.1.1.1), S-bit Join
PIM(0): Send v2 join/prune to 10.1.35.5 (FastEthernet1/0)

R5 получает Join от R4 и переводит интерфейс f1/0 в состояние forward:

PIM(0): Received v2 Join/Prune on FastEthernet1/0 from 10.1.35.4, to us
PIM(0): Join-list: (10.1.89.10/32, 239.1.1.1), S-bit set
PIM(0): Add FastEthernet1/0/10.1.35.4 to (10.1.89.10, 239.1.1.1), Forward state, by PIM SG Join

R5 отправляет Join выше, по направлению к источнику:

PIM(0): Insert (10.1.89.10,239.1.1.1) join in nbr 10.1.57.7's queue
PIM(0): Building Join/Prune packet for nbr 10.1.57.7
PIM(0): Adding v2 (10.1.89.10/32, 239.1.1.1), S-bit Join
PIM(0): Send v2 join/prune to 10.1.57.7 (FastEthernet2/0)

R4, кроме сообщения Join, по направлению к источнику, отправляет по дереву RPT, маршрутизатору R3 сообщение Prune, для того чтобы удалить себя из RPT дерева:

PIM(0): Insert (10.1.89.10,239.1.1.1) sgr prune in nbr 10.1.35.3's queue
PIM(0): Building Join/Prune packet for nbr 10.1.35.3
PIM(0): Adding v2 (10.1.89.10/32, 239.1.1.1), RPT-bit, S-bit Prune
PIM(0): Send v2 join/prune to 10.1.35.3 (FastEthernet1/0)

Теперь на R3:

PIM(0): Received v2 Join/Prune on FastEthernet2/0 from 10.1.35.4, to us
PIM(0): Prune-list: (10.1.89.10/32, 239.1.1.1) RPT-bit set
PIM(0): Insert (10.1.89.10,239.1.1.1) sgr prune in nbr 10.1.23.2's queue set
PIM(0): Building Join/Prune packet for nbr 10.1.23.2
PIM(0): Adding v2 (10.1.89.10/32, 239.1.1.1), RPT-bit, S-bit Prune
PIM(0): Send v2 join/prune to 10.1.23.2 (FastEthernet1/0)

В итоге, в таблице маршрутизации мультикаст на R4 используется дерево SPT, а не RPT:

R4#sh ip mroute 239.1.1.1
(*, 239.1.1.1), 00:46:18/stopped, RP 2.2.2.2, flags: SJCL
  Incoming interface: FastEthernet1/0, RPF nbr 10.1.35.3
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:46:18/00:02:28

(10.1.89.10, 239.1.1.1), 00:01:30/00:02:58, flags: LJT
  Incoming interface: FastEthernet1/0, RPF nbr 10.1.35.5
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:01:30/00:02:28

Таблица маршрутизации на RP:

R2#sh ip mroute 239.1.1.1
(*, 239.1.1.1), 01:54:43/00:03:12, RP 2.2.2.2, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet1/0, Forward/Sparse, 01:54:37/00:03:08
    FastEthernet0/0, Forward/Sparse, 01:54:43/00:03:12

(10.1.89.10, 239.1.1.1), 01:09:49/00:01:27, flags: PT
  Incoming interface: FastEthernet2/0, RPF nbr 10.1.26.6
  Outgoing interface list: Null

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

PIM-SM cisco spt switch 1a.png

Аналогичная ситуация на R1:

# Приходит пакет мультикаст от R2 (входящий интерфейс Fa2/0):
IP(0): s=10.1.89.10 (Fa2/0) d=239.1.1.1 (Fa0/0) id=10384, ttl=251, prot=1, len=100(100), mforward

# R1 отправляет R8 Join:
PIM(0): Insert (10.1.89.10,239.1.1.1) join in nbr 10.1.18.8's queue
PIM(0): Building Join/Prune packet for nbr 10.1.18.8
PIM(0): Adding v2 (10.1.89.10/32, 239.1.1.1), S-bit Join
PIM(0): Send v2 join/prune to 10.1.18.8 (FastEthernet1/0)

R8 получается сообщение Prune от R1:

# На R8 приходит мультикаст пакет, так как источник с ним в одном сегменте,
то R8 еще не успел обработать Join и список исходяящих интерфейсов нулевой:
IP(0): s=10.1.89.10 (Fa0/0) d=239.1.1.1 id=10384, ttl=254, prot=1, len=114(100), mroute olist  null
Пришел Join:
PIM(0): Received v2 Join/Prune on FastEthernet1/0 from 10.1.18.1, to us
PIM(0): Join-list: (10.1.89.10/32, 239.1.1.1), S-bit set
PIM(0): Add FastEthernet1/0/10.1.18.1 to (10.1.89.10, 239.1.1.1), Forward state, by PIM SG Join

R1 отправляет маршрутизатору R2 Prune:

PIM(0): Insert (10.1.89.10,239.1.1.1) sgr prune in nbr 10.1.12.2's queue
# В это время через SPT-дерево, от R8 на R1 уже пришли пакеты мультикаст (входящий интерфейс Fa1/0):
IP(0): s=10.1.89.10 (Fa1/0) d=239.1.1.1 (Fa0/0) id=10385, ttl=253, prot=1, len=100(100), mforward
PIM(0): Building Join/Prune packet for nbr 10.1.12.2
PIM(0): Adding v2 (10.1.89.10/32, 239.1.1.1), RPT-bit, S-bit Prune
PIM(0): Send v2 join/prune to 10.1.12.2 (FastEthernet2/0)

Итоговая таблица маршрутизации мультикаст на R1:

R1#sh ip mroute 239.1.1.1
(*, 239.1.1.1), 01:59:57/stopped, RP 2.2.2.2, flags: SJCL
  Incoming interface: FastEthernet2/0, RPF nbr 10.1.12.2
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 01:59:57/00:02:32

(10.1.89.10, 239.1.1.1), 00:38:57/00:02:58, flags: LJT
  Incoming interface: FastEthernet1/0, RPF nbr 10.1.18.8
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:38:57/00:02:32

[править] Итоговые деревья SPT

PIM-SM cisco spt switch 4.png

[править] Дополнительная информация