介绍
路由器—端口群管理协议(RGMP)和IGMP侦听一起用于强制组播业务发送至实际需要该业务的层中。IGMP侦听将组播业务发送至路由器所有端口。有了RGMP,组播业务仅被发送至需要对其进行接收的端口。由于RGMP在组播网络的骨干上运行,知道了组播的基础知识(IGMP、PIM、组播路由)将有助于理解本文。
硬件和软件 版本
RGMP是一个在Catalyst交换机与路由器之间运行的协议,两者都需要支持RGMP以使功能正常作用。下列交换机支持RGMP:- Catalyst 6000:从软件版本5.4开始
- 运行本机模式的Catalyst 6000:从软件12.1(3a)E3开始
- Catalyst 5000:从软件版本5.4开始
下列Cisco IOS® 路由器软件版本支持RGMP:
- 12.2 主系列版本
- 12.1E
- 12.1T (从版本12.1(5)T1开始)
- 12.0S (从版本12.0(10)S开始)
- 12.0ST (从版本12.0(11)ST开始)
协议限制
- 路由器和交换机上都需要运行RGMP。
- 您需要在交换机上启用IGMP侦听。
- RGMP将仅对配置有协议独立组播(PIM)分散模式的群组有效。
- 不支持直接连接至一RGMP交换机发送组播业务的源。
- 不支持将多个路由器连接至同一交换机端口(例如在同一集线器上的两个路由器)。
- 不支持将多个路由器连接至同一非RGMP交换机。
如果不遵守这些限制,将有可能导致组播连接中断。
RGMP减少网络负载
RGMP的目的是去除不必要的组播业务。以下图表说明的是没有启用RGMP的假设网络:
我们现在有一个连接至R1的组播源以及一个连接至R4的接收机。该群组的RP在R2之后。业务由R1转发至交换机(每个PIM与mroute表格,当接收机在交换机接口之后)。交换机将使用IGMP侦听来对这个只有源的网络进行探测,并创建一个指向所有路由器(R1、R2、R3与R4)的静态Content-Address Memory (CAM)条目。组播业务将发送至所有路由器,其中包括不需要该业务的R3。这个组播业务量很大,可能会对路由器R3产生不必要的负载。RGMP已经克服了这个问题。
下图显示了启用RGMP的同一个网络 (假设路由器与交换机均有RGMP能力):
R2与R4将对交换机发送至RGMP加入组播群组。R3将不发送RGMP 加入消息。结果,交换机将仅向R2与R4的群组转发从R1接收的组播业务,而不向R3发送。这样就减少了网络上的业务量。
RGMP详情
RGMP和CGMP类似,是一个在路由器和交换机之间运行的协议。路由器发送RGMP数据包,交换机接收RGMP数据包。交换机从不发送RGMP数据包,而路由器将忽略任何可能接收到的RGMP数据包。RGMP数据包是类型为IGMP的IP数据包,且被发送至预留的群组地址224.0.0.25(MAC地址01 - 00 - 5e - 00 - 00 - 19)。它们作为IGMP数据包发送,保活时间(TTL)为1。地址224.0.0.25是对应于所有交换机组播地址的预留地址。一个RGMP数据包基本包括一个类型字段、一个群组地址字段以及一个校验和。
下表显示RGMP数据包的不同类型:
描述 | 作用 |
Hello | 当在路由器上启用RGMP时,将没有组播数据业务通过交换机发送至路由器,除非为一个组发送RGMP 加入消息. |
Bye | 当路由器上禁用RGMP时,所有组播数据业务将通过交换机发送至路由器。 |
Join | 对于从第3层群组地址G中组播的MAC地址,组播数据业务将被发送至路由器。在RGMP数据包的群组地址字段中,这些数据包的群组为G。 |
Leave | Mult群组G的组播数据业务将不发送至路由器。在RGMP数据包的群组地址字段中,这些数据包的群组为G。 |
Hello与Bye数据包使用0.0.0.0作为RGMP数据包中的群组地址。Join与Leave使用让路由器发生响应的群组地址(加入或者离开)。
RGMP数据包使用以下的地址类型:
地址类型 | 所用地址 |
所有RGMP数据包的目的地MAC地址 | 01-00-5e-00-00-19 |
所有RGMP数据包的目的地IP地址 | 224.0.0.25 |
用于RGMP Hello与Bye的群组地址 | 0.0.0.0 |
用于RGMP Join与Leave的群组地址TD> | 发送Join或者Leave的组播群组 |
是什么使路由器发送RGMP数据包
RGMP Hello
每当路由器上启用RGMP时,该路由器将向交换机送出一条RGMP Hello信息,指出交换机不应该把组播数据业务转发至该路由器上,除非发送某组的RGMP 加入消息。同样,请注意必须在路由器上对PIM进行配置,以使该功能生效。在同一重发间隔中发送RGMP Hello信息作为PIM Hello信息(默认值为30秒)。RGMP Hello信息始终先于PIM Hello信息。
RGMP Bye
每当路由器禁用RGMP,它将发送RGMP Bye信息至交换机,指出路由器不再执行RGMP,且所有组播业务应再次转发至该路由器。
RGMP 加入消息
每当路由器发送PIM 加入消息时,它同时构建RGMP 加入消息并在送出PIM 加入消息的同一接口处送出。使用上述图表举例,R4从群组G接收机接收IGMP报告的同时向RP发送PIM 加入信息。它还在同一接口上发送RGMP Join,该信息随后由交换机S1截获。S1对数据包进行处理,并将该路由器端口添加到群组G的第2层静态条目(静态CAM条目)。这样可以在该端口上实现对群组G的业务转发。
综述:
- 每当路由器创建(*,G)条目时,将发送RGMP Join,发送接口和路由器发送PIM Join信息的接口是同一个。
- 每当路由器创建(S,G)条目时,将发送RGMP Join。路由器将在通向S的接口上发送PIM Join信息,然后RGMP Join也在同一通向S的接口上进行发送。
- RGMP Join将在发送PIM Join时发送,但不在接收PIM Join时发送。
- 如果有多个源发送至群组G,且只有一个(*,G)条目,将只送出一条RGMP Join。
RGMP Leave
当路由器发送(*,G)或者(S,G)的PIM Prune消息时,它同样会检查:对于PIM Prune的发送接口,该群组是否至少有一个其它的mroute 条目。如果没有其它的条目,RGMP Leave将在同一接口进行发送。
当交换机接收RGMP数据包时将发生什么
当路由器禁用RGM而交换机启用IGMP侦听时,交换机中的各组播群组转发条目列出输出端口表,其中包括所有组播路由器端口以及响应主机所加入到组播群组的所有端口,
当启用了RGMP时,将发生以下变化:
- 交换机不向RGMP路由器发送任何组播群组,除非特地给出请求(除224.0.0.x和224.0.1[39-40])范围中预留的组。
- 交换机仍向非RGMP路由器群组发送组播业务。
RGMP Hello:
当从某个路由器端口接收到一个RGMP Hello数据包时,交换机将把该路由器端口作为有RGMP能力的端口标记,普通的组播业务将不再发送至该组播路由器端口。
RGMP Bye:
收到RGMP Bye时,我们取消作为RGMP路由器端口的路由器端口的标记,并在VLAN中的所有现有群组中添加该端口。
RGMP Join:
当某个特殊群组接收RGMP Join数据包时,交换机将添加该路由器端口,由该端口接收RGMP Join并发送至群组目的地端口列表中。RGMP Join也被转发至所有RGMP路由器端口。
RGMP Leave:
当某个特殊群组接收RGMP Leave数据包时,交换机将从对接收该群组产生响应的端口群组中去除该路由器端口。
RGMP配置与检验
在交换机上启用RGMP:
#set igmp enable !--- 如果以前没有进行该设置 #set rgmp enable
您可以通过通过输入以下命令来检验设定:
#sh rgmp group #sh multi router #sh rgmp stat #sh multi group
在路由器上配置RGMP:
#ip rgmp !--- 处于接口模式
and, if not done previously:
#ip multicast-routing !--- 处于全局配置模式 #ip pim sparse-mode !--- 处于接口模式
运行本地IOS的Catalyst 6000上的RGMP
运行本地IOS的Catalyst 6000上的RGMP具有以下特点:
- 默认值是在所有L2端口(交换机端口)上启用RGMP,且无法禁用。
- 如果需要L3组播接口起到RGMP路由器的作用,则需要在所有L3组播端口上启用RGMP;通过在接口方式(和通常IOS路由器上一样)中发出ip rgmp命令来实现。
通过IGMP侦听探测到的运行RGMP的接口以及所有其它的RGMP路由器可以通过发出以下命令进行检验:
Boris#sh ip igmp snooping mrouter vlan ports -----+---------------------------------------- 1 Po3,Router 10 Gi3/8,Router 11 Gi3/8,Router 100 Router 101 Router 198 Po3,Router 199 Po3,Router+ 222 Router '+'- RGMP capable router port Boris#
处理输出结果显示本地6000的VLAN 199接口上配置了ip rgmp在VLAN 199上,路由器标记为具有RGMP能力。本地IOS中的路由器代替了VLAN 199中的6500路由器本身。
案例分析
以下图表说明使用RGMP的实际网络:
在本例中,仅fido和taras中的多层交换机功能卡(MSFC)是具有RGMP能力的路由器;donald、daniella以及piggy是无RGMP能力的路由器。由组播源4.4.4.1向224.1.1.1进行发送,224.1.1.1位于piggy后的串口上。 Taras - msfc在VLAN 2与VLAN 3之间执行 VLAN间路由。VLAN 2中没有接收机,而VLAN 3中有两个接收机:一个在fido后面,另一个在donald后面。
注意: 在下节中,没有由具体命令处理的输出结果被认为来自路由器上的 debug ip rgmp 和来自交换机上的set trace mcast 5 命令
[page]
在交换机上启用RGMP
首先,我们在taras(Catalyst 6000交换机)上启用RGMP,假定还没有路由器进行了RGMP配置。一旦启用了RGMP,交换机将组播MAC地址01 - 00 - 5e - 00 - 00 - 19添加至系统CAM表,这意味着交换机开始对所有发送至该MAC地址的数据包进行接收。该地址相当于由RGMP使用的224.0.0.25:
taras (enable) set rgmp enable
RGMP enabled.
taras (enable) sh cam sys
* = Static Entry. + = Permanent Entry. # = System Entry. R = Router Entry.
X = Port Security Entry $ = Dot1x Security Entry
VLAN Dest MAC/Route Des [CoS] Destination Ports or VCs / [Protocol Type]
---- ------------------ ----- -------------------------------------------
1 00-d0-00-3f-8b-fc R# 15/1
1 00-d0-00-3f-8b-ff # 1/3
1 01-00-0c-cc-cc-cc # 1/3
1 01-00-0c-cc-cc-cd # 1/3
1 01-00-0c-dd-dd-dd # 1/3
1 01-00-5e-00-00-19 # 1/3
1 01-80-c2-00-00-00 # 1/3
1 01-80-c2-00-00-01 # 1/3
2 00-d0-00-3f-8b-fc R# 15/1
2 01-00-0c-cc-cc-cc # 1/3
2 01-00-0c-cc-cc-cd # 1/3
2 01-00-0c-dd-dd-dd # 1/3
2 01-00-5e-00-00-19 # 1/3
2 01-80-c2-00-00-00 # 1/3
2 01-80-c2-00-00-01 # 1/3
3 00-d0-00-3f-8b-fc R# 15/1
3 01-00-0c-cc-cc-cc # 1/3
3 01-00-0c-cc-cc-cd # 1/3
3 01-00-0c-dd-dd-dd # 1/3
3 01-00-5e-00-00-19 # 1/3
3 01-80-c2-00-00-00 # 1/3
3 01-80-c2-00-00-01 # 1/3
在路由器上启用RGMP
现在我们在taras - msfc与fido上启用RGMP。路由器以接口方式进行配置,当debug ip rgmp运行时,我们可以看到路由器开始每30秒在该接口上发送RGMP Hello数据包。
taras(config-if)#ip rgmp 00:10:24: RGMP: Sending a Hello packet on Ethernet0 00:10:54: RGMP: Sending a Hello packet on Ethernet0 00:11:24: RGMP: Sending a Hello packet on Ethernet0 00:11:54: RGMP: Sending a Hello packet on Ethernet0
如果我们现在查看交换机,就可以看到端口4/6与15/1被标记为具RGMP能力的路由器端口。 请注意,交换机总是在接收PIM Hello之前接收RGMP Hello:
MCAST-IGMPQ:recvd an RGMP Hello on the port 15/1 vlanNo 3 GDA 0.0.0.0
MCAST-RGMP: Received RGMP Hello in vlanNo 3 on port 15/1
MCAST-IGMPQ:recvd a PIM V2 packet of type HELLO on the port 15/1 vlanNo 3
taras (debug-eng) sh multi ro Port Vlan ---------- ---------------- 4/3 3 4/4 2 4/5 3 4/6 + 3 15/1 + 2-3Total Number of Entries = 5 '*' - Configured '+' - RGMP-capable
VLAN 2中的RGMP操作
由于在donald之后有接收机开启(而在fido之后没有接收机),VLAN 2中的组播业务需要转发至VLAN 3。所以taras中的MSFC需要在VLAN 2中获得业务。
路由器将发送:
16:10:28: RGMP: Sending a Join packet on Vlan2 for group 224.1.1.1
16:10:29: RGMP: Sending a Join packet on Vlan2 for group 224.1.1.1
交换机的监控程序进行接收:
MCAST-RGMP: Received RGMP Join for 224.1.1.1 in vlanNo 2 on port 15/1
通过使用sh rgmp group,我们可以看到端口15/1在VLAN 2中有加入的群组01 - 00 - 5e - 01 - 01 - 01。请注意,在VLAN 3中显示了静态的CAM条目,但是,端口列表中包括的仅有的路由器端口为无RGMP能力的路由器端口(也就是说,15/1与4/6不在VLAN 3中的条目列表之中,因为这些路由器不具备RGMP能力,也不会在VLAN 3中发送RGMP Join)。同样要注意的是,在静态的CAM表中,RGMP操作将不影响群组01 - 00 - 5e - 00 - 01 - [27,28](该群组相当于由auto - rp使用的224.0.1.[39,40])。这些群组中的所有业务仍将发送至所有组播路由器,无论它们是否具有RGMP有能力。
taras (enable) sh cam sta
* = Static Entry. + = Permanent Entry. # = System Entry. R = Router Entry.
X = Port Security Entry $ = Dot1x Security Entry
VLAN Dest MAC/Route Des [CoS] Destination Ports or VCs / [Protocol Type]
---- ------------------ ----- -------------------------------------------
2 01-00-5e-01-01-01 4/4,15/1
2 01-00-5e-00-01-27 4/4,15/1
2 01-00-5e-00-01-28 4/4,15/1
3 01-00-5e-01-01-01 4/5,4/3
3 01-00-5e-00-01-27 4/3,4/5-6,15/1
3 01-00-5e-00-01-28 4/3,4/5-6,15/1
taras (enable) sh rgmp group 01-00-5e-01-01-01
RGMP enabled
VLAN Dest MAC/Route Des [CoS] RGMP Joined Router Ports
---- ------------------ ----- ------------------------
2 01-00-5e-01-01-01 15/1
Total Number of Entries = 1
现在来看VLAN 2的RGMP情况。交换机定期接收RGMP Hello与RGMP Join数据包。它每30秒从taras - msfc处获得RGMP Hello,且taras - msfc每向该群组发送一条PIM Join时,就向224.1.1.1发送一条RGMP Join:
taras (enable) sh rgmp stat 2 RGMP enabled RGMP statistics for vlan 2:Receive : Valid pkts: 67 Hellos: 40 Joins: 27 Leaves: 0 Join Alls: 0 Leave Alls: 0 Byes: 0 Discarded: 0 Transmit : Total pkts: 0 Failures: 0 Hellos: 0 Joins: 0 Leaves: 0 Join Alls: 0 Leave Alls: 0 Byes: 0
到目前为止,taras - msfc和fido仅在VLAN 3中发送了Hello数据包:
taras (enable) sh rgmp stat 3 RGMP enabled VLAN 3中的RGMP Join操作Receive : Valid pkts: 468 Hellos: 468 Joins: 0 Leaves: 0 Join Alls: 0 Leave Alls: 0 Byes: 0 Discarded: 0 Transmit : Total pkts: 0 Failures: 0 Hellos: 0 Joins: 0 Leaves: 0 Join Alls: 0 Leave Alls: 0 Byes:
RGMP Join Operation in VLAN 3
如果我们现在开启fido之后的接收机B,具备RGMP能力的路由器将对群组224.1.1.1发送一条RGMP Join至交换机。交换机将进行接收,并将4/6(fido)添加到VLAN 3中对该群组响应的接收机列表中。
在路由器中我们看到:
01:07:49: RGMP: Sending a Join packet on Ethernet0 for group 224.1.1.1
01:07:49: RGMP: Sending a Join packet on Ethernet0 for group 224.1.1.1
01:07:49: RGMP: Sending a Join packet on Ethernet0 for group 224.1.1.1
01:07:51: RGMP: Sending a Join packet on Ethernet0 for group 224.1.1.1
交换机接收RGMP Join,并添加路由器端口4/6至静态条目。我们可以看见各种show 命令的结果:
MCAST-IGMPQ:recvd an RGMP Join on the port 4/6 vlanNo 3 GDA 224.1.1.1
MCAST-RGMP: Received RGMP Join for 224.1.1.1 in vlanNo 3 on port 4/6
EARL-MCAST: SetRGMPPortInGDA: RGMP port 4/6 in vlanNo 3 joining for the first time
for this group 224.1.1.1
MCAST-RELAY:Relaying packet on port 15/1 vlanNo 3
MCAST-SEND: Inband Transmit Succeeded for IGMP RELAY msg on port 15/1 vlanNo 3
taras (enable) sh rgmp group RGMP enabled
VLAN Dest MAC/Route Des [CoS] RGMP Joined Router Ports
---- ------------------ ----- ------------------------
2 01-00-5e-01-01-01 15/1
3 01-00-5e-01-01-01 4/6
Total Number of Entries = 2
taras (enable) sh cam sta 01-00-5e-01-01-01
* = Static Entry. + = Permanent Entry. # = System Entry. R = Router Entry.
X = Port Security Entry $ = Dot1x Security Entry
VLAN Dest MAC/Route Des [CoS] Destination Ports or VCs / [Protocol Type]
---- ------------------ ----- -------------------------------------------
2 01-00-5e-01-01-01 4/4,15/1
3 01-00-5e-01-01-01 4/3,4/5-6
taras (enable) sh rgmp stat 3
RGMP enabled
RGMP statistics for vlan 3:
Receive : Valid pkts: 542 Hellos: 532 Joins: 10 Leaves: 0 Join Alls: 0 Leave Alls: 0 Byes: 0 Discarded: 0 Transmit : Total pkts: 0 Failures: 0 Hellos: 0 Joins: 0 Leaves: 0 Join Alls: 0 Leave Alls: 0 Byes: 0
RGMP Leave操作
假设接收机B不再响应,故而fido不再需要该群组的组播业务,它将在接口中对该群组发送一条PIM Prune。路由器也对该群组发送一条RGMP Leave,让交换机了解这个路由器不再对该群组作出响应。
当接收机B仍然开启时,sh ip mroute显示具有C标记的(S,G)条目,告诉我们有一个发出响应的接收机相连:
fido#sh ip mroute 224.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 - Advertised via MSDP, U - URD,
I - Received Source Specific Host Report
Outgoing interface flags: H - Hardware switched
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 224.1.1.1), 00:01:18/00:00:00, RP 10.10.10.1, flags: SJCL Incoming interface: Ethernet0, RPF nbr 33.3.3.1 Outgoing interface list:
- 发表评论请到:http://bbs.cnitom.com