本文档讨论在生成树拓扑发生更改后,Cisco Catalyst交换机和Cisco IOS®路由器上的Cisco组管理协议(CGMP)如何重建CGMP的组播条目。
Cisco 建议您了解以下主题:
交换机、路由器和组播的基本操作
生成树、CGMP和互联网组管理协议(IGMP)的基本操作
本文档中的信息基于以下软件和硬件版本:
Catalyst 3550版本12.1(9)EA1c
Catalyst 2900/3500XL版本12.0(5)WC3b
Catalyst 4000管理引擎III版本12.1(11b)EW
Catalyst 4000管理引擎I/II版本7.2(2)
Catalyst 6500管理引擎Cisco IOS软件版本12.1(11b)EX
Catalyst 6500 Catalyst OS(CatOS)版本7.2(2)
Catalyst 5500 CatOS版本4.5(13a)
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
本节分步介绍在使用CGMP的VLAN上检测到生成树拓扑更改以阻止所有端口上的组播流量泛洪时发生的情况,以及可能出现的问题。如本例所示,本文档中讨论的网络包括一台路由器、一台交换机和四台PC:
端口1 — 接收器PC 1
端口2 — 接收器PC 2
端口3 — 接收器PC 3
端口4 — 不是接收方PC 4
端口5 — 其他交换机(此交换机上没有接收器或路由器)
端口48 — 运行IGMP和CGMP的Cisco IOS路由器
在本文档中,假设接收方PC使用IGMP,且交换机运行CGMP。Cisco IOS路由器运行IGMP和CGMP,它们从不同接口上的视频服务器接收组播流。此接口发送到IP组播组239.100.100.100。
一旦所有设备都启动,并且接收方PC发送了组239.100.100.100的IGMP加入消息,CGMP将这些消息添加到由MAC地址01-00-5e-64-64-64表示的相应第2层组。
此列表显示交换机上哪些端口(以粗体突出显示)接收通过Cisco IOS路由器的组播流。
端口1 — 接收器PC 1
端口2 — 接收器PC 2
端口3 — 接收器PC 3
端口4 — 不是接收方PC 4
端口5 — 其他交换机(此交换机上没有接收器或路由器)
端口48 — 运行IGMP和CGMP的Cisco IOS路由器
注意:Cisco IOS路由器也添加到组播组,但由于它是源,因此它不会收到自己的数据包。
在每个查询间隔,Cisco IOS路由器发送IGMP一般查询(该查询被发送到组播组224.0.0.1,因此泛洪到所有其他组件)。 发生这种情况时,所有接收方都开始为239.100.100.100组构建IGMP报告。接收方将此报告发回IP组播组239.100.100.100,第2层MAC地址为01-00-5E-64-64-64。由于此地址被发送到组地址,因此所有接收方都会接收其他接收方发送的报告以及第一个接收方发送的报告。这会触发其他接收方PC取消其对此组的报告。这意味着,仅为此组发送一条CGMP加入消息,其中源MAC地址是第一个响应的PC。这会持续很长时间,所有接收方PC都会接收视频广播。
此时,另一台交换机会触发网络中的拓扑更改。根据CGMP规范,在收到拓扑更改时,交换机会清除它通过CGMP获知的所有组播条目。来自路由器的组播流量泛洪到交换机上的所有端口。
此列表显示交换机上哪些端口(以粗体突出显示)接收通过Cisco IOS路由器的组播流:
端口1 — 接收器PC 1
端口2 — 接收器PC 2
端口3 — 接收器PC 3
端口4 — 不是接收方PC 4
端口5 — 其他交换机(此交换机上没有接收器或路由器)
端口48 — 运行IGMP和CGMP的Cisco IOS路由器
当流量泛洪到所有端口时,接收方PC不会发现任何差异,并继续接收视频广播。但是,由于流量泛洪到所有端口,因此PC 4(不是接收方)和另一台交换机现在也接收组播流,尽管它们尚未请求组播流。这将一直持续到Cisco IOS路由器再次发出其定期IGMP常规查询。在Cisco IOS路由器上,此默认值为60秒(配置了IP IGMP查询间隔)。
当Cisco IOS路由器发出其第一个IGMP一般查询时,所有接收方PC都开始为239.100.100.100组构建其IGMP报告。其中一个(在本文档中,它是PC 3)是第一个发回其IGMP报告的PC。由于交换机上尚未构建组播条目,因此所有PC都会收到该条目,而其他接收方PC会取消其IGMP报告。Cisco IOS路由器收到报告并发送后续的CGMP加入消息,其源地址为接收方PC 3。
交换机再次为组01-00-5e-64-64-64构建组播条目,并向其添加端口3,因为这是CGMP加入数据包中的源地址。由于端口5是组播路由器端口,因此也会将此端口添加到组播组。因此,只有接收方PC3接收视频流,而PC1和PC2上的视频流保持静止。
此列表显示交换机上哪些端口(以粗体突出显示)接收通过Cisco IOS路由器的组播流:
端口1 — 接收器PC 1
端口2 — 接收器PC 2
端口3 — 接收器PC 3
端口4 — 不是接收方PC 4
端口5 — 其他交换机(此交换机上没有接收器或路由器)
端口48 — 运行IGMP和CGMP的Cisco IOS路由器
在IGMP查询间隔结束时,Cisco IOS路由器会发出另一个IGMP常规查询。收到查询后,所有接收方PC都会为239.100.100.100组生成报告。但是,这一次,来自其他PC的报告仅由接收方PC 3和Cisco IOS路由器接收。(路由器端口会自动添加到每个组播组。)
由于接收方PC 1和PC 2没有看到来自任何其他接收方的报告,因此它们都会发送报告。Cisco IOS路由器随后发出CGMP加入消息,其中包含各台PC的源MAC地址,因此,它们会被添加,并通过Cisco IOS路由器再次开始接收组播流。
此列表显示交换机上哪些端口(以粗体突出显示)接收通过Cisco IOS路由器的组播流:
端口1 — 接收器PC 1
端口2 — 接收器PC 2
端口3 — 接收器PC 3
端口4 — 不是接收方PC 4
端口5 — 其他交换机(此交换机上没有接收器或路由器)
端口48 — 运行IGMP和CGMP的Cisco IOS路由器
配置恢复到原始稳定状态,一切正常。这是已发生情况的细分:
发生拓扑更改。
提示:当主机端口中未启用portfast时,每次重新启动主机或连接/断开与端口/从端口连接/断开时,链路状态的更改都会触发VLAN中的拓扑更改通知。如果在拓扑更改时启用了CGMP调试,则显示以下调试消息:
CGMP SHIM: got short age timer
泛洪开始到达所有端口。
发送第一个IGMP常规查询。
泛洪停止。
并非所有接收器都接收组播流。
第二个IGMP常规查询将发出。
所有接收器都添加并再次接收组播流。
由于PC组播流丢失一分钟(默认IGMP查询间隔)并不总是可接受,因此运行CGMP的路由器和交换机都进行了一些增强。
由于路由器是第3层设备,因此通常不知道生成树和发生的拓扑更改,因此网络中的交换机需要提醒路由器此拓扑更改。定义IGMP全局离开消息以处理此问题。
此IGMP全局离开消息是交换机可以传输的IGMP离开,请求离开组0.0.0.0。
为了确保路由器不会因IGMP全局离开消息而过载,拓扑更改结束时,只有生成树域中的根交换机负责发送此IGMP全局离开消息。
当路由器在运行Cisco IOS软件的接口上收到此IGMP全局离开消息时,它会识别该接口上已发生生成树拓扑更改,并采取以下操作尝试并限制组播接收器的组播流量丢失:
在收到IGMP全局离开消息后发送CGMP批加入消息。路由器发送CGMP加入消息,其MAC地址作为其在接口的IGMP缓存中拥有的每个组播组的用户源地址。通过发送这些CGMP自加入消息,CGMP交换机自动为每个组创建一个条目,其中仅包含路由器端口。
此列表显示了在CGMP批处理加入后本文档中使用的网络。只有Cisco IOS路由器已添加到组播组,如粗体所示。
注意:在本文档的前面的示例中,从组播路由器接收流量的端口以粗体显示,此示例显示交换机上添加到组播组的所有端口。
端口1 — 接收器PC 1
端口2 — 接收器PC 2
端口3 — 接收器PC 3
端口4 — 不是接收方PC 4
端口5 — 其他交换机(此交换机上没有接收器或路由器)
端口48 — 运行IGMP和CGMP的Cisco IOS路由器
发送IGMP常规查询。所有接收方都会收到此IGMP一般查询,并为已加入的每个组构建报告。由于CGMP交换机已经为每个组构建了组播条目,其中只有路由器作为接收方,所有报告都只发送到路由器。路由器发送后续的CGMP加入消息,以将所有接收器添加到相应的组。
当所有接收方发送回其IGMP报告,并且路由器发出相应的CGMP加入消息后,所有接收方应该已添加回组播组。
10秒后(默认IGMP最大响应时间),将发送另一个IGMP常规查询,以确保添加所有接收器。此步骤会重复几次,以确保所有接收器重新加入组播组。
应添加到组播组的所有端口都已添加,如本例中粗体所示:
端口1 — 接收器PC 1
端口2 — 接收器PC 2
端口3 — 接收器PC 3
端口4 — 不是接收方PC 4
端口5 — 其他交换机(此交换机上没有接收器或路由器)
端口48 — 运行IGMP和CGMP的Cisco IOS路由器
在Catalyst交换机的范围内,其行为存在一些差异。每台支持CGMP的交换机都按照本文档的CGMP和拓扑更改部分所述进行操作。但是,CGMP的增强功能并非在所有平台上实施。下表列出了Catalyst交换机及其对CGMP的反应:
CGMP交换机 | CGMP路由器 | 生成树协议(STP)根时发送全局离开 | |
---|---|---|---|
运行Cisco IOS软件的Catalyst 6500 | n | Y | Y |
运行CatOS的Catalyst 6500 | n | n | n |
Catalyst 5500、Catalyst 2926/2926G | Y | n | Y |
Catalyst 4000管理引擎I/II、Catalyst 2948G/2980G、Catalyst 4912G | Y | n | Y |
Catalyst 4000/4500 Supervisor 引擎 III/IV | n | Y | Y |
Catalyst 2900XL/3500XL | Y | n | Y |
Catalyst 2940 | n | n | n |
Catalyst 2950 | n | n | n |
Catalyst 2970 | n | n | n |
Catalyst 3550 | n | Y | Y |
Catalyst 3750 | n | Y | Y |
注意:在带有Supervisor引擎III/IV的Catalyst 4000/4500上,拓扑更改和CGMP的行为是可配置的。发出以下命令,以便将Catalyst 4000配置为在不是生成树根时发送或不发送IGMP全局离开消息:
ip igmp snooping tcn query solicit
注意:发出此命令的“no”形式以禁用它:
no ip igmp snooping tcn query solicit