1、问题概述
2023年8月24日,深夜约22:10分,内部网络E5刀片上运行的组播接收软件未收到目的地址是230.1.6.4的航迹组播报文,利用交换机Web页面查看交换机组播表项,发现E5刀片连接的交换机29端口没有任何组播表项。重新运行组播接收软件,29端口上建立组,重新加组成功,组播接收软件能够接收到航迹组播报文。
2、问题定位
2.1 组播原理
IGMP Snooping(Internet Group Management Protocol Snooping,IGMP侦听)是运行在二层以太网交换机上的组播约束机制,用于管理和控制组播组。二层交换机通过IGMP Snooping来控制组播流量的广播。当二层以太网交换收到主机和查询器之间传递的IGMP报文时,IGMP Snooping将对IGMP报文所带的信息进行分析,将端口和MAC组播地址建立起映射关系,并根据这样的映射关系转发组播数据。组播查询器定期发送通用组查询报文来维护组播组成员关系。所有接收者将发送IGMP报告报文来响应这个查询,交换机通过这个监听IGMP报告报文来建立转发表项。二层的组播组可以通过IGMP报文动态建立,也可以静态配置。
如图1所示,当组播数据从上游交换设备转发下来以后,处于接入边缘的二层组播设备交换机负责将组播数据转发给用户主机,使用户能收到组播数据。当交换机没有运行IGMP Snooping时,组播数据在二层被广播;当交换机运行了IGMP Snooping后,组播数据不会在二层广播,而是会被交换机发送给指定的接收者。
使能IGMP Snooping功能后,交换机会侦听主机和查询器设备之间交互的IGMP报文,通过分析报文中携带的信息(报文类型、组播组地址、接收报文的端口等),建立和维护二层组播转发表,从而指导组播数据在数据链路层按需转发,不是广播转发。
图1 组播转发方式比较
2.2 系统概述
内网网络拓扑如图2所示,内部网络由两个交换机组成,分别是转台交换机和平台交换机,交换机间互联,组播发送设备信号处理设备、组播接收设备E5刀片设备分别连接到转台交换机30、29端口,两台交换机都开启二层组播功能。交换机通过收发IGMP协议的查询报文、响应报文及离开报文动态维护组播表。
图2 网络拓扑图
转台交换机组播IGMP Snooping配置如图3所示,开启二层组播IGMP Snooping功能,查询周期125秒,查询报文最大响应时间10秒,未开启快速离开功能,开启未知组播报文丢弃功能,未开启报告抑制功能。
图3 转台交换机组播配置
平台交换机组播IGMP Snooping配置如图4所示,开启二层组播IGMP Snooping功能,查询周期125秒。
图4 平台交换机组播配置
3、问题分析
3.1 组播地址老化
组播表项的维护有一个自动老化机制,在交换机主动查询主机是否在组,主机无应答的情景下,超过一定时间交换机会将该主机从转发表中移除。 加组动作会导致老化定时器重新计数,即保证在老化时间内应答交换机的查询或主动加组,都可以保证组播转发表项的正常存在,进而组播正常转发。
故障时,在E5刀片设备本地利用”tcpdump –i enp9s0f1 igmp”过滤抓包IGMP协议交互报文,发现E5刀片设备在22:10:16收到平台交换机发送的普遍组查询报文,但是E5刀片设备在13秒内都没有响应此查询报文,如图5所示。此时交换机端组播表项如图6所示,29端口没有任何组播表项。在时刻22:11:44收到转台交换机发送的普遍组查询报文,且响应此查询报文,交换机利用响应报文建立组播表。查询转台交换机,29端口建立正常的组播表项,如图7所示。
根据IGMP协议的工作原理以及交换机代码的实现逻辑判断22:10:16~22:10:29时间段内,E5刀片设备运行的国产化操作系统自带的IGMP协议模块未响应交换机发送的查询报文导致组播表项老化,从而导致交换机丢弃掉未知组播报文,最终E5刀片设备上的组播接收软件未收到目的地址是230.1.6.4的航迹组播报文。
图5 协议报文交互
图6 异常组播表项
图7 正常组播表项
3.2 查询器选举
当网络中存在多个交换机时,初期都认为本身是查询器,互相发送普遍组查询报文(224.0.0.1),当交换机接收到其他交换机发送的查询报文后,开始查询器的选举,IP地址小的成为全网的主查询器,主查询器发送查询报文。其他交换机均是从查询器,接收主查询器发送的查询报文,从查询器不主动发送查询报文,一直侦听主查询器发送的查询报文,当在一个查询周期内没有收到主查询器发送的查询报文,认为主查询器失效,再次仲裁全网的主查询器。
主查询器持续监听交换机端口链路状态,当监听到一个端口处于持续的up/down链路不稳的恶劣工况下,主查询器为了全网的稳定性,通信可靠性,主动不发送查询报文,从查询器在一个查询周期内没有收到查询报文,认为主查询器失效,再次仲裁全网的主查询器。
16端口链路持续频繁up/down现象,是由于连接的对端ADS-B设备在温度高的情况下会自动上下线,目前已经替换正常的ADS-B设备,未再出现链路不稳定的现象。
查询故障时交换机日志syslog文件,发现在22:10:59时刻一直到22:11:35时刻,交换机端口eth-0-16,一直处于up/down链路不稳定状态,如图8所示,主查询器探测到恶劣的端口连接状态,不发送查询报文,此时平台交换机仲裁胜出主查询器,发送源地址是“192.168.127.253”的查询报文,E5刀片设备收到此查询报文。当链路不稳定的故障消失,重新仲裁出主查询器,仲裁选举转台交换机是主查询器,发送源地址是“192.168.6.157”的查询报文,E5刀片设备收到此查询报文,且响应了此查询报文,如图9所示。
图8 端口不稳定
图9 查询器选举
4、措施与验证
在某些特殊的应用场景中,比如:
- 主机无法发送报告报文,但是又需要将组播数据转发到该端口,静态组播表项解决无法动态建立组播表项的问题;
- 主机偶发不响应交换机发送的查询报文,静态组播表项解决偶然不能动态建立组播表项的问题。
为了实现组播数据的快速、稳定转发,或者将组播数据转发到端口,可以在组播交换机的用户侧端口上配置静态组播组。在端口上部署静态组播功能后,交换机就认为此端口上一直存在该组播组的成员,组播表项不会被老化,确保能够长期、稳定、及时的收到指定组播组的数据流。静态配置的特点是管理简单、维护成本低、通信实时性高。
给29端口配置二层静态组播功能如下:
ip igmp snooping vlan 1 static-group 224.192.168.168 interface eth-0-29
ip igmp snooping vlan 1 static-group 224.192.168.230 interface eth-0-29
ip igmp snooping vlan 1 static-group 224.224.126.126 interface eth-0-29
ip igmp snooping vlan 1 static-group 230.1.6.4 interface eth-0-29
ip igmp snooping vlan 1 static-group 230.1.6.8 interface eth-0-29
ip igmp snooping vlan 1 static-group 230.1.7.1 interface eth-0-29
ip igmp snooping vlan 1 static-group 230.1.7.8 interface eth-0-29
ip igmp snooping vlan 1 static-group 230.1.14.1 interface eth-0-29
添加后效果如下,stopped表示不老化,如图10所示,彻底解决偶发组播表项老化问题。
图10 静态组播表项
对交换机更改后的配置进行长达72小时的组播老练通信验证,反复上下电通信验证,没有发现组播通信异常。
5、结论
交换机端口组播表项老化机制只针对动态表项,静态表项永不老化。对交换机端口进行静态组播表项的设置,彻底解决偶发建立表项失败的问题。采用的措施稳定、有效、可靠,可以开展后续工作。