介绍
路由器―端口群管理协议(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与Bye数据包使用0.0.0.0作为RGMP数据包中的群组地址。Join与Leave使用让路由器发生响应的群组地址(加入或者离开)。
RGMP数据包使用以下的地址类型:
是什么使路由器发送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 命令
在交换机上启用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
* = St