网络通讯接收组播异常问题技术分析报告

news2024/11/15 20:00:11

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、结论

交换机端口组播表项老化机制只针对动态表项,静态表项永不老化。对交换机端口进行静态组播表项的设置,彻底解决偶发建立表项失败的问题。采用的措施稳定、有效、可靠,可以开展后续工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/963956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一题 2511. 最多可以摧毁的敌人城堡数目

难度:简单 翻译:寻找距离最远的 1 和 -1 的组合,要求它们之间只有0 class Solution:def captureForts(self, forts: List[int]) -> int:res, t 0, -1for i, fort in enumerate(forts):if fort -1 or fort 1:if t > 0 and fort ! f…

687. 最长同值路径

687. 最长同值路径 C代码:DFS int res; // int res 0; 这种初始化有问题int dfs(struct TreeNode* root, int val) {if (root NULL) {return 0;}int left dfs(root->left, root->val);int right dfs(root->right, root->val);res fmax(res, lef…

【STM32】学习笔记(TIM定时器)

TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且…

nvidia-smi nvcc -V 及 CUDA、cuDNN 安装

nvidia-smi nvcc -V 及 CUDA、cuDNN 安装 1. 问题缘由2. 分析3. CUDA Driver API 安装3.1 Software & Updates3.2 官网下载 4. CUDA Runtime API 安装5. 安装 cuDNN5.1 cuDNN下载 6. 一点点小注意事项 1. 问题缘由 之前查找 CUDA 版本时都是直接使用的 nvidia-smi 指令&am…

软考A计划-网络工程师-复习背熟-数据通信基础和局域网技术

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

Power View

界面 切换可视化效果 对于已经上传到透视表的数据,选择power view,形成表格后。

Windows开发调试纯Linux代码(WSL+Qt+MobaXterm)环境搭建(超详细教程)

为何要调试Linux代码 1 学习Linux环境开发 想必很多同学都想学习Linux环境下的开发,一个是很多纯服务端程序不需要Windows这样的窗口界面。另一个纯服务端开发Linux的命令行以及脚本优势也比较明显。相反,Windows在纯服务端编程方面并没有Linux有优势。…

拓扑排序算法 -- dfs、bfs

210. 课程表 II 该题用到「拓扑排序」的算法思想,关于拓扑排序,直观地说就是,让你把⼀幅图「拉平」,⽽且这个「拉平」的图⾥⾯,所有箭头⽅向都是⼀致的,⽐如上图所有箭头都是朝右的。 很显然,如…

CVE-2023-32315:Openfire管理控制台身份验证绕过到RCE的复现

CVE-2023-32315:Openfire管理控制台身份验证绕过到RCE复现 前言 本次测试仅供学习使用,如若非法他用,与本文作者无关,需自行负责!!! 一.Openfire简介 Openfire是根据开源Apache许可证授权的…

C语言——指针基本语法

概述 内存地址 在计算机内存中,每个存储单元都有一个唯一的地址(内存编号)。 通俗理解,内存就是房间,地址就是门牌号 指针和指针变量 指针(Pointer)是一种特殊的变量类型,它用于存储内存地址。 指针的实…

46、SpringBoot输入校验--JSR 303

★ Spring Boot的输入校验 springboot支持两种校验方式:1. Spring原生提供的 Validation,这种验证方式需要开发者手写验证代码,比较繁琐。就是普通的if判断2. 使用JSR 303的校验,这种验证方式只需使用注解、即可以声明式的方式进…

封装(个人学习笔记黑马学习)

1、格式 #include <iostream> using namespace std;const double PI 3.14;//设计一个圆类&#xff0c;求圆的周长 class Circle {//访问权限//公共权限 public://属性//半径int m_r;//行为//获取圆的周长double calculateZC() {return 2 * PI * m_r;} };int main() {//通…

MBA/MEM联考已经过了“蛮干”的时间段了……

如果MBA/MEM备考存在有效的方式&#xff0c;倾注时间一定是最靠谱的&#xff01;如果要靠谱的一点的方式&#xff0c;那就是大量的倾注时间&#xff01;可问题目前已经没有“大量”的时间可以用了&#xff0c;因为对于在职考生而言&#xff0c;最难得得也恰恰就是时间&#xff…

软件总体部署:Total Software Deployment Crack

TNI 6.1&#xff1a;数据传输模式的新界面和功能 根据您向支持团队提供的反馈&#xff0c;我们对“数据传输”窗口的机制和界面进行了重大重新设计。 概述 远程和自动化软件部署 全面软件部署&#xff1a;企业网络的托管软件部署。 远程和自动化软件部署 Total Software Deplo…

碳中和数据合集(含上市公司碳排放、碳减排、排污费、环境税等数据)1990-2022年

数据简介&#xff1a;“推动企业形成绿色生产方式和生活方式”“支持有条件的地方和重点行业、重点企业率先达到碳排放峰值”。可见&#xff0c;企业已成为应对气候变化、推动低碳转型、助力“双碳”目标实现的主力军&#xff0c;推动其绿色、低碳化转型已成为未来经济发展的必…

OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字

目录 1.绘制直线line() 2.绘制圆形circle() 3.绘制椭圆形ellipse() 4.绘制矩形rectangle() 5.绘制多边形 fillPoly() 6.绘制文字putText() 7.例子 1.绘制直线line() CV_EXPORTS_W void line(InputOutputArray img,Point pt1, Point pt2,const Scalar& color,int t…

“宽带中国”城市试点与专利匹配数据,做一个多期DID(2010-2021)

数据简介&#xff1a;人类正在经历以互联网为基础的第三次技术革命&#xff0c;作为以“互联网”为底层基础的数字经济&#xff0c;以5G、人工智能和大数据中心为代表的数字基础设施建设和普惠宽带网络基础设施建设成为数字经济可持续发展的动力。工业和信息化部、国家发展和改…

uniapp小程序单页面改变手机电量,头部通知的颜色效果demo(整理)

onShow(){ // 改变电池的颜色 wx.setNavigationBarColor({ frontColor: ‘#ffffff’, //只支持两种颜色 backgroundColor: ‘#ffffff’, animation: { duration: 1 } }) }

个微API接口开发

请求URL&#xff1a; http://域名地址/sendText 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId是string登录实例标识wcId是string接收…

常见链表的操作题+代码

文章目录 leetcode 2 两数相加leetcode 19删除链表中的倒数第N个节点leetcode 21合并两个有序链表leetcode 24两两交换链表中的节点leetcode 25k个一组链表反转leetcode 61旋转链表 leetcode 2 两数相加 两个链表对应的值进行相加&#xff0c;如何计算呢&#xff1f; 考虑点&…