取消
显示结果 
搜索替代 
您的意思是: 
cancel
4643
查看次数
110
有帮助
7
评论
yinba
Cisco Employee
Cisco Employee

问题
多播数据流似乎不会通过 Catalyst 交换机,即使是在同一 VLAN 中也是如此。图 1 描述了一个典型方案:
图 1 - 多播源和接收方的网络设置
多播源连接到交换机 1,这是一台运行 Cisco IOS 软件的带有 Supervisor 引擎 720 的 Catalyst 6500 交换机。接收方 1 连接到交换机 1,接收方 2 连接到交换机 2。交换机 2 是一台 Catalyst 3750。交换机 1 和交换机 2 之间有一个第 2 层链路(接入或中继)。
在此设置中,您发现接收方 1(与源在同一台交换机上)可以顺利地获得多播流。然而,接收方 2 却无法 获得任何多播数据流。本文档旨在解决此问题。
重温一些关键多播概念
在研究所拥有的解决方案和不同选项之前,您必须清楚地了解第 2 层多播的一些关键概念。此部分定义了这些概念。
注意: 此部分提供了一个非常简单和直接的解释,该解释重点介绍此特定问题。有关这些术语的更详细说明,请参阅本文档的相关信息部分。
IGMP
IGMP 是一种协议,它使终端主机(接收方)能够向多播路由器(IGMP 查询者)通知终端主机接收特定多播数据流的意图。因此,这是一种在路由器和终端主机之间运行的协议,它允许:

  • 路由器询问终端主机是否需要特定的多播流(IGMP 查询)

  • 终端主机通知或回应路由器它们是否查找特定的多播流(IGMP 报告)

IGMP 侦听
IGMP 监听是一种机制,用来将多播数据流限定为只能从附加了接收方的端口上发出。该机制可提高效率,这是因为它使第 2 层交换机能够有选择地仅在需要多播数据包的端口上发出多播数据包。如果没有 IGMP 监听,交换机会使每个端口上的数据包泛洪。交换机“监听”路由器和终端主机的 IGMP 消息交换。通过这种方式,交换机可生成一个 IGMP 监听表,其中列出了已请求特定多播组的所有端口。
Mrouter 端口
Mrouter 端口仅仅是连接到多播路由器的端口(从交换机的角度来说)。为使 IGMP 监听操作能够跨交换机进行,至少存在一个 mrouter 端口是绝对必要的。本文档的了解问题及其解决方案部分详细讨论了这一要求。
L2 上的多播
目标 IP 在 224.0.0.0 到 239.255.255.255 范围中的任何 IP 版本 4 (IPv4) 数据流都是多播流。所有 IPv4 多播数据包都映射到格式为 01.00.5e.xx.xx.xx 的预定义 IEEE MAC 地址。
注意: 仅当多播 MAC 地址映射到这一符合 IEEE 标准的 MAC 范围时,IGMP 监听才能工作。按照设计,某些保留的多播范围禁止被监听。如果在交换网络上发出了一个不符合规定的多播数据包,则此数据包将在该 VLAN 中泛洪,这意味着它被视为广播数据流。
了解问题及其解决方案
默认情况下,Catalyst 交换机启用了 IGMP 监听。使用 IGMP 监听,交换机会监听(或侦听)所有端口上的 IGMP 消息。交换机会生成一个 IGMP 监听表,该表主要将多播组映射到已请求它的所有交换机端口。
假设在事先未进行任何配置的情况下,接收方 1 和接收方 2 发出了表示它们要接收 239.239.239.239(映射到 L2 多播 MAC 地址 01.00.5e.6f.ef.ef)的多播流的信号。交换机 1 和交换机 2 在其监听表中为这些接收方创建一个条目以响应这些接收方生成的 IGMP 报告。交换机 1 在其表中输入端口千兆以太网 2/48,交换机 2 在其表中输入端口快速以太网 1/0/47。
注意: 这时,多播源尚未开始其数据流,并且任何交换机都不知道交换机的 mrouter 端口。
当交换机 1 上的源开始传输多播数据流时,交换机 1“发现了”来自接收方 1 的 IGMP 报告。因此,交换机 1 将多播传送到端口千兆以太网 2/48。但是,因为交换机 2 在 IGMP 监听过程中从接收方 2“吸收了”IGMP 报告,因此交换机 1 在端口千兆以太网 2/46 上看不到 IGMP 报告(多播请求)。因此,交换机 1 不会向交换机 2 发出任何多播数据流。所以,接收方 2 永远不会获得任何多播数据流,即使接收方 2 在同一 VLAN 中但只是位于与多播源不同的交换机上也是如此。
此问题的原因是任何没有 mrouter 的 Catalyst 平台实际上并不支持 IGMP 监听。该机制在缺少 mrouter 端口时将“崩溃”。如果要修正此解决方案,必须让交换机识别或知道 mrouter 端口。本文档的解决方案部分介绍了该过程。但是,交换机上存在 mrouter 端口时如何解决此问题?
基本上,当交换机识别或以静态方式知道 mrouter 端口时,会发生两件重要事情:

  • 交换机将 IGMP 报告从接收方“中继”到 mrouter 端口,这意味着 IGMP 报告将转发到多播路由器。交换机不中继所有 IGMP 报告,而是仅将其中的少数报告发送到 mrouter。对于此讨论的目的而言,报告的数量并不重要。多播路由器只需要知道是否至少有一个接收方仍在关注多播下游。为了做出决定,多播路由器接收定期 IGMP 报告以响应其 IGMP 查询。

  • 在还没有任何接收方“加入”的仅源多播方案中,交换机只从其 mrouter 端口发出多播流。

当交换机知道其 mrouter 端口时,交换机 2 会将该交换机从接收方 2 收到的 IGMP 报告中继到其 mrouter 端口。此端口是快速以太网 1/0/33。交换机 1 在交换机端口千兆以太网 2/46 上获得此 IGMP 报告。从交换机 1 的角度来说,该交换机只是收到了另一个 IGMP 报告。该交换机将该端口添加到其 IGMP 监听表中,并也开始在该端口上发出多播数据流。这时,两个接收方都收到请求的多播数据流,并且应用程序按照预期正常工作。
但是,这些交换机如何标识其 mrouter 端口,以使 IGMP 监听能够在像这样的简单环境中按照预期正常工作?解决方案部分提供了一些答案。
解决方案
可以使用这些解决方案来解决问题。
解决方案 1:在第 3 层路由器/VLAN 接口上启用 PIM
所有 Catalyst 平台都能够动态地识别 mrouter 端口。交换机被动侦听多播路由器定期发出的独立于协议的多播 (PIM) hello 或 IGMP 查询消息。
此示例配置在Catalyst 6500的VLAN1交换的虚拟接口(SVI)有ip pim sparse-dense-mode的。
Switch1#show run interface vlan 1!interface Vlan1 ip address 1.1.1.1 255.255.255.0 ip pim sparse-dense-modeendSwitch 1 now reflects itself (Actually the internal router port) as an Mrouter port. Switch1#show ip igmp snooping mrouter vlan ports-----+---------------------------------------- 1 RouterSwitch 2 receives the same PIM hellos on its Fa 1/0/33 interface. So it assigns that port as its Mrouter port.Switch2#show ip igmp snooping mrouter Vlan ports---- ----- 1 Fa1/0/33(dynamic)
解决方案 2:在第 2 层 Catalyst 交换机上启用 IGMP 查询者功能
IGMP 查询者是第 2 层交换机上的一个相对较新的功能。当网络/VLAN 没有可在交换机上承担多播路由器角色并在交换机上提供 mrouter 发现的路由器时,您可以打开 IGMP 查询者功能。此功能允许第 2 层交换机在该网络中为多播路由器提供代理并发出定期 IGMP 查询。此操作会使交换机将其自身视为 mrouter 端口。网络中的剩余交换机仅仅将其各自的 mrouter 端口定义为它们用于接收此 IGMP 查询的接口。
Switch2(config)#ip igmp snooping querierSwitch2#show ip igmp snooping querier Vlan IP Address IGMP Version Port -------------------------------------------------------------1 1.1.1.2 v2 Switch
交换机 1 现在将链接至交换机 2 的端口 Gig 2/46 视为 mrouter 端口。
Switch1#show ip igmp snooping mrouter vlan ports-----+---------------------------------------- 1 Gi2/46
当交换机 1 上的源开始传输多播数据流时,交换机 1 会将多播数据流转发到通过 IGMP 监听发现的接收方 1(即,从端口 Gig 2/48 发出),并转发到 mrouter 端口(即,从端口 Gig 2/46 发出)。
解决方案 3:在交换机上配置静态 Mrouter 端口
因为交换机上缺少 mrouter 端口,所以同一第 2 层 VLAN 内的多播数据流失败,如了解问题及其解决方案部分所述。如果以静态方式在所有交换机上配置 mrouter 端口,则可以在该 VLAN 中将 IGMP 报告中继到所有交换机。因此,无法进行多播。因此,在该示例中,您必须以静态方式将 Catalyst 3750 交换机配置为将快速以太网 1/0/33 作为 mrouter 端口。
在该示例中,只需在交换机 2 上具有静态 mrouter 端口:
Switch2(config)#ip igmp snooping vlan 1 mrouter interface fastethernet 1/0/33Switch2#show ip igmp snooping mrouterVlan ports---- ----- 1 Fa1/0/33(static)
解决方案 4:在所有交换机上配置静态多播 MAC 项
您在所有接收方端口下行交换机端口的所有交换机能做组播MAC地址的一个静态内容可寻址存储器(CAM)条目。所有交换机都遵守静态 CAM 条目规则并从在 CAM 表中指定的所有接口发送数据包。对于拥有大量多播应用程序的环境,这是可扩展性最差的解决方案。
Switch1(config)#mac-address-table static 0100.5e6f.efef vlan 1 interface gigabitethernet 2/46 gigabitethernet 2/48!--- Note: This command should be on one line.Switch1#show mac-address-table multicast vlan 1 vlan mac address type learn qos ports-----+---------------+--------+-----+---+-------------------------------- 1 0100.5e6f.efef static Yes - Gi2/46,Gi2/48Switch2(config)#mac-address-table static 0100.5e6f.efef vlan 1 interface fastethernet 1/0/47!--- Note: This command should be on one line.Switch2#show mac-address-table multicast vlan 1Vlan Mac Address Type Ports---- ----------- ---- ----- 1 0100.5e6f.efef USER Fa1/0/47
解决方案 5:在所有交换机上禁用 IGMP 监听
如果禁用 IGMP 监听,所有交换机会将多播数据流视为广播数据流。这会使该数据流泛洪到该 VLAN 中的所有 端口,而不管端口是否具有与该多播流相关的接收方。
Switch1(config)#no ip igmp snoopingSwitch2(config)#no ip igmp snooping

评论
lelwu
Cisco Employee
Cisco Employee
大赞!
one-time
Level 13
Level 13
很赞呦;P
Luke Huang
Cisco Employee
Cisco Employee
ip igmp snooping 默认开启,然后开启 ip igmp snooping querier,之前解决过一个同样问题
cpmld-199
Community Member
谢谢分享,学习下。
suzhouxiaoniu
Spotlight
Spotlight
谢谢楼主分享
郑云霞
Community Member
过来学些一下
gcq
Level 1
Level 1
太透彻了,好厉害。
入门指南

使用上面的搜索栏输入关键字、短语或问题,搜索问题的答案。

我们希望您在这里的旅程尽可能顺利,因此这里有一些链接可以帮助您快速熟悉思科社区:









快捷链接