当前位置: 首页 > article >正文

litemao-IGMP Snooping

IGMP Snooping简介

一、概述

IGMP Snooping(Internet Group Management Protocol Snooping),即互联网组管理协议侦听,是一种针对IPv4的二层组播协议。它通过监听三层组播设备与用户主机之间交互的组播协议报文,来维护组播报文的出接口信息,进而管理和控制组播数据报文在数据链路层的转发过程。

二、目的

在众多网络场景中,尤其是局域网环境,组播报文往往需要经过二层交换设备。然而,由于组播报文的目的地址是组播组地址,二层设备无法学习到此类MAC表项,导致组播报文会在所有接口进行广播。这不仅造成了网络带宽的浪费,还可能引发网络信息安全问题,因为同一广播域内的组播成员和非组播成员都能接收到组播报文。IGMP Snooping的出现,有效解决了这一问题。一旦配置了IGMP Snooping,二层组播设备就能监听并分析组播用户与上游路由器之间的IGMP报文,据此建立二层组播转发表项,从而精准控制组播数据报文的转发,避免了组播数据在二层网络中的无谓广播。

三、原理描述

(一)基本原理

IGMP Snooping是二层组播的核心功能之一,它能够实现组播数据在数据链路层的转发与控制。当主机与上游三层设备之间传递的IGMP协议报文经过二层组播设备时,IGMP Snooping会对报文携带的信息进行分析,并根据这些信息构建和维护二层组播转发表,以此指导组播数据在数据链路层按需转发。
例如,当组播数据从三层组播设备Router转发下来后,处于接入边缘的二层组播设备Switch负责将这些组播数据转发给用户主机,让用户能够收看所点播的节目。如果Switch没有启用IGMP Snooping,那么组播数据就会在二层被广播;而当Switch启用IGMP Snooping后,组播数据就不会在二层广播,而是会被Switch精准地发送给指定的接收者。
启用IGMP Snooping功能后,Switch会持续监听主机和上游三层设备之间交互的IGMP报文,通过分析报文中的信息(如报文类型、组播组地址、接收报文的接口等),建立和维护二层组播转发表,从而确保组播数据在数据链路层能够按需转发。

(二)基本概念

以一个典型的网络场景为例,三层设备Router从组播源接收数据并向下游转发,在二层组播设备SwitchA和SwitchB上分别运行IGMP Snooping,HostA、HostB和HostC为接收者主机(即组播组成员)。

在IGMP Snooping中,存在以下几种端口角色及其作用和生成方式:

  • 路由器端口(Router Port):如SwitchA和SwitchB上蓝色圆圈表示的接口。它是二层组播设备上朝向三层组播设备(DR或IGMP查询器)一侧的接口,二层组播设备通过此接口接收组播数据报文。由协议生成的路由器端口被称为动态路由器端口。当接口收到源地址不为0.0.0.0的IGMP普遍组查询报文或PIM Hello报文(三层组播设备的PIM接口向外发送的用于发现并维持邻居关系的报文)时,该接口就会被视为动态路由器端口。而手工配置的路由器端口则被称为静态路由器端口。
  • 成员端口(Member Port):如SwitchA和SwitchB上黄色方框表示的接口。它也被称为组播组成员端口,表示二层组播设备上朝向组播组成员一侧的端口,二层组播设备会向此接口发送组播数据报文。由协议生成的成员端口被称为动态成员端口。当接口收到IGMP Report报文时,二层组播设备会将其标识为动态成员端口。同样地,手工配置的成员端口则被称为静态成员端口。

路由器端口和成员端口在二层组播转发表项中扮演着重要角色,它们是出接口的关键信息。其中,路由器端口相当于上游接口,成员端口相当于下游接口。通过协议报文学习到的端口对应的为动态表项;而手工配置的端口对应的为静态表项。除了出接口外,每条表项还包含组播组地址和VLAN编号等信息。

(三)工作机制

当二层组播设备启用了IGMP Snooping后,它会根据收到的不同IGMP协议报文进行相应的处理,并在此过程中建立起二层组播转发表项。

  • 收到IGMP普遍组查询报文时
    • IGMP工作阶段:IGMP查询器会定期向本地网段内的所有主机与路由器(目的地址为224.0.0.1)发送IGMP普遍组查询报文,目的是查询该网段中有哪些组播组的成员。
    • 处理方式:二层组播设备会将该查询报文向VLAN内除接收接口外的其他所有接口转发,并对接收接口进行以下操作:如果路由器端口列表中尚未包含该接口,则将其添加进去,并启动老化定时器;如果路由器端口列表中已包含该动态路由器端口,则重置老化定时器。通常情况下,收到IGMP普遍组查询报文时,动态路由器端口的老化定时器缺省值为180秒,但可以通过命令行进行配置。
  • 收到IGMP报告报文时
    • IGMP工作阶段:存在两种情况,一是成员收到IGMP普遍组查询报文后,会回应IGMP报告报文;二是成员主动向IGMP查询器发送IGMP报告报文,以此声明自己加入该组播组。
    • 处理方式:二层组播设备会将该报告报文向VLAN内所有路由器端口转发。同时,从报文中解析出主机要加入的组播组地址,并对接收接口进行以下操作:如果不存在该组对应的转发表项,则创建转发表项,将该接口作为动态成员端口添加到出接口列表中,并启动老化定时器;如果已存在该组对应的转发表项,但出接口列表中未包含该接口,则将该接口作为动态成员端口添加到出接口列表,并启动老化定时器;如果已存在该组对应的转发表项,且出接口列表中已包含该动态成员端口,则重置其老化定时器。收到IGMP报告报文后,动态成员端口的老化定时器计算公式为:健壮系数×普遍组查询间隔+最大响应时间。
  • 收到IGMP离开报文时
    • IGMP工作阶段:分为两个阶段,一是运行IGMPv2或IGMPv3的成员发送IGMP离开报文,以通知IGMP查询器自己离开了某个组播组;二是IGMP查询器收到IGMP离开报文后,从中解析出组播组地址,并通过接收接口向该组播组发送IGMP特定组查询报文/IGMP特定源组查询报文。
    • 处理方式:二层组播设备首先会判断离开的组是否存在对应的转发表项,以及转发表项出接口列表是否包含报文的接收接口。如果不存在该组对应的转发表项,或者该组对应转发表项的出接口列表中不包含接收接口,二层组播设备不转发该报文,而是将其直接丢弃;如果存在该组对应的转发表项,且转发表项的出接口列表中包含该接口,二层组播设备会将报文向VLAN内所有路由器端口转发。对于IGMP离开报文的接收接口(假定为动态成员端口),二层组播设备在其老化时间内,如果从该接口收到了主机响应IGMP特定组/源组查询的报告报文,表示接口下还有该组的成员,于是重置其老化定时器;如果没有从该接口收到主机响应IGMP特定组/源组查询的报告报文,则表示接口下已没有该组成员,在老化时间超时后,将接口从该组的转发表项出接口列表中删除。
  • 收到PIM Hello报文时:二层组播设备会将该报文向VLAN内除接收接口外的其他所有接口转发,并对接收接口进行以下处理:如果路由器端口列表中已包含该动态路由器端口,则重置老化定时器;如果路由器端口列表中尚未包含该接口,则将其添加进去,并启动老化定时器。此外,如果配置了静态路由器端口,二层组播设备收到IGMP报告和离开报文也会向静态路由器端口转发;如果配置了静态成员端口,则转发表项中会添加该接口为出接口。

当二层组播设备成功建立了二层组播转发表项后,每当它接收到组播数据报文时,就会依据报文所属的VLAN以及报文的目的地址(即组播组地址)来查找转发表项,查看是否存在对应的“出接口信息”。如果存在,就将报文发送到相应的组播组成员端口和路由器端口;如果不存在,则丢弃该报文或将报文在VLAN内广播。


http://www.kler.cn/a/586397.html

相关文章:

  • 【蓝桥杯】第15届c++B组--R格式
  • uni-app App 端分段导出 JSON 数据为文件
  • CentOS7下安装MongoDB
  • Java 集合遍历过程中修改数据触发 Fail-Fast 机制 ,导致报ConcurrentModificationException异常
  • VisualSVN Server批量添加用户
  • FPGA初级项目9——基于SPI的ADC芯片进行模数转换
  • 深入解析 TCP 协议【真题】
  • 第五天 Labview数据记录(5.5 SQL数据库读写)
  • 贝壳找房:以 OceanBase 为 JuiceFS 元数据引擎,构建 AI 存储底座
  • 从http到Axios和fetch全解析
  • Python 实现的采集诸葛灵签
  • 以下列举了一些典型的JavaScript网页设计实例,它们展示了多样化的功能和交互体验,非常适合初学者及中级开发者学习借鉴如下:
  • 在MAC mini4上安装Ollama、Chatbox及模型交互指南
  • 电网电压暂态扰动机理与工业设备抗失压防护策略研究
  • 提升 Instagram 账号安全性:防止数据泄露的步骤
  • sqldef:一款免费的数据库变更管理工具
  • rpmlib(SetVersions) is needed by can-uilts-v2019.00.0-alt1.aarch64
  • Java序列化
  • Yolo-Uniow开集目标检测本地复现
  • 基于微信小程序开发的宠物领养平台——代码解读