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

二、IGMP

目录

1. IGMPv1

1.1 IGMPv1 报⽂类型

1.2 IGMPv1 工作机制

1.3 成员加入

1.4 离组机制

2. IGMPv2

2.1 IGMPv2 报文

2.3 查询器选举 & 维护

2.4 成员加入

2.4 离组机制

3. IGMPv3

3.1 IGMPv3 vs. IGMPv2

3.2 IGMPv3 报文

3.3 IGMPv3 工作机制

4. IGMP Proxy

5. IGMP Snooping

5.1 IGMP Snooping 工作机制


组管理协议,工作在网络层之上,在成员端 DR 之间(最后一跳路由器)与组播接收者之间建立和维护组播组成员关系。

一共有三个版本都支持 ASM,IGPMv1、IGPMv2、IGPMv3 向前兼容。


1. IGMPv1

1.1 IGMPv1 报⽂类型

类型

发送者

目的IP

作用

General Query 0x11

普遍组查询报文

查询器

224.0.0.1 共享⽹络上所有主机和路由器

查询哪些组存在成员

Report 0x12

成员关系报告报文

主机

224.0.0.1组播路由器

申请加⼊某个组播组或者应答查询报⽂  

1.2 IGMPv1 工作机制

路由器周期性地发送查询报文,主机收到后若已加入/申请加入某组播组,则发送报告报文进行应答,以建立或维持 (*,G) 组播转发状态。

1)选举查询器 - IGMPv1 中 PIM DR 充当查询器(优先级比大 —> IP 地址比大)

2)查询器每 60s 向下发送查询报文,其组播组地址为空(普遍组查询),目的地址为 224.0.0.1。

3)主机收到查询报文后,随机启动一个最大响应时间 MRT(0~10s)。

4)第一个响应时间超时的主机,向查询器回复一个成员关系报告报文 。报告报文的组地址&目的地址为想要加入的组播组。

*其他主机也能收到该报告报文,并且抑制自己报告报文的发送

 5)查询器收到报告报文后,在本地生成一个(* G)表项,且将接收到该报文的接口加入(* G) OIL。

1.3 成员加入

⽹段上新接⼊⼀个主机 PC4,想加⼊组播组 G3:

1)不等待普遍组查询报文,⽴即发送针对 G3 的报告报⽂。

2)路由器收到报告报⽂后,⽣成组播转发表项 (*,G3),开启了 IGMP Snooping 的交换机更新 Snooping 转发表。

1.4 离组机制

IGMPv1 没有专⻔定义离组报⽂:查询器每 60s 发送查询报文,发送两次查询报文后,任然没有得到任何回应,就会将该接口从(*, G)表中的 OIF 接口删除。 

所以 IGMPv1 离组,要经过130s60+10+60


2. IGMPv2

IGMPv2 增加了离组机制和查询器选举。

2.1 IGMPv2 报文

Max Response Time:表示主机响应查询返回报告的最大时间,IGMPv1 中永远为 10。

  • 普遍组查询最大响应时间默认为10秒
  • 特定组查询最大响应时间默认为1秒

2.2 IGMPv2 报文类型

  • 普遍组查询报文/特定组查询报文 - 0x11
  • 成员关系报文报文- 0x12 v1 /0x16 v2
  • V2 离组报文 0x17  (224.0.0.2)

IGMPv2 对普遍组查询报⽂格式做了改进,添加了MRT字段。在组成员查询报文中⽤于控制成员的响应速度,其它消息中为 0。MRT 可配置,以十分之一秒为增量来计算,默认为 10s 最大 25s。

2.3 查询器选举 & 维护

1)所有 IGMPv2 路由器初始时认为⾃⼰是查询器,向本地⽹段内的所有主机和路由器(224.0.0.1) 发送普遍组查询报⽂。

2)其他路由器收到该报⽂后,将报⽂的源 IP 与⾃⼰的接⼝地址作⽐较。IP地址最⼩的为查询,其他路由器为非查询器。

维护:所有⾮查询器上都会启动⼀个定时器 Other Querier Present Timer,默认120s。定时器超时前收到来⾃查询器的查询报⽂,重置该定时器;否则认为原查询器失效并发起新的查询器选举。

2.4 成员加入

1)IGMPv2 中,组播接收者主动通过发送未应答的 Membership Report(类型 0x16)加入目标组播组 G,该报文的目的地址即为组播组地址 G3。

2)网络交换机在启用 IGMP Snooping 时,会侦听并更新端口的组播成员列表,只将后续的 G3 数据流转发到有成员的端口上。

3)最后一跳路由器(Last‐Hop DR)在收到 Membership Report 后,会在其组播转发表中创建一个 (*,G 条目,并向RP发起 PIM (*,G Join,以便在共享树上为 G3 构建分发路径。

4)当 G3 流量到达时,路由器会将数据沿最短路径树(SPT)或共享树(RPT)转发至接收者,确保 PC4 能收到组播数据。

2.4 离组机制

1)成员离组会向 224.0.0.2 发送离组报文,组地址为想要离开的组。

2)查询器收到离组报文,向 224.0.0.1 发送特定组查询报文(查看该组播组是否还存在其他主机),组地址 & 目的地址为查寻的组播组。每1s 发送一次,当发送两次未得到回应,将该接口从(* G)中的 OIL 表删除。

IGMPv2 中成员离组要经过 2s;但是如果组播组内的最后一个主机异常离线,则发送不了离组报文,那么仍然需要130s 来判定是否需要在转发数据到当前网段。

*思科设备是只要有成员离组就会发特定组查询,其它厂商设备有可能是只有查询器记录的 Last Reporter 离组,才会发送特定组查询报文。


3. IGMPv3

3.1 IGMPv3 vs. IGMPv2

IGMPv3 大部分工作机制与 IGMPv2 类似:

  • 查询器选举机制:IP 地址越小越优先,

  • 成员加组:周期性普遍组查询报文确认是否有成员加组

  • 特定组查询报文:确认组播成员存活。

不同:

  • 新增特定源组查询(Group-and-Source-Specific Query):主机只对指定源发来的流量作出响应。

  • 成员关系报告报文v3(Type 0x22):还携带“源组列表”,指明接收/拒绝哪些源的数据。

  • 无成员离组报文离组通过包含空源列表或特定源列表的成员报告报文来通知(通过block_old_sources来完成

  • 无成员关系报告报文机制

3.2 IGMPv3 报文

查询报文0x11 - - 普遍组查询/ 特定组查询/ *特定源组查询报⽂

成员关系报告报文 0x22

3.3 IGMPv3 工作机制

IGMPv3 为了配合 PIM SSM 的实现,跳过了 PIM-SM 模式中的共享树和RP过程,直接创建(S, G)。


4. IGMP Proxy

IGMP proxy 同时执行查询者和接收者的功能。用于在网络中传递组播数据的简化机制,常见于家庭网关、企业路由器和小型局域网。它的主要作用是实现组播流量在不同网络之间的转发,而不需要复杂的PIM路由协议。

IGMP Proxy主要依赖IGMP协议,它的工作过程包括以下几个步骤:

1)成员报告(Membership Report

  • 主机向本地路由器发送IGMP Membership Report消息,表示要加入一个特定的组播组。
  • 路由器会记录哪些主机对哪些组播组感兴趣。

2)查询过程(Query Process

  • IGMP Proxy设备会定期发送IGMP Membership Query消息,检查哪些设备仍然需要组播数据。
  • 收到应答后,更新组播组成员列表。

3)数据转发

  • IGMP Proxy将收到的组播数据转发到加入了该组播组的网络。
  • 这种转发是单向的,只需要少量状态信息,因此效率较高。

5. IGMP Snooping

开启 IGMP Snooping 之后,交换机通过侦听路由器和主机之间 IGMP 报文,建立二层组播转发表项。

IGMP Snooping 的功能分为转发层面和控制层面:控制层面由 CPU 根据报文来生成对应的转发表项;转发层面由硬件根据已经建立好了组播转发表项来转发报文。

5.1 IGMP Snooping 工作机制

1)交换机从路由器收到 IGMP query 后,交换机学习到有路由器连接在 x/y 接口(收到 PIM hello的端口状态也会被置为 router port)。

IGMP snooping 表增加条目:x/y 为 mrouter port

Switch#show ip igmp snooping mrouter
Vlan ports
---- -----
12   Gix/y(dynamic)

2)交换机从主机收到 IGMP query 后,创建 snooping 表。

Switch#show ip igmp snooping groups
Vlan  Group          Type   Version     Port List
----------------------------------------------
12    224.64.7.7    igmp     v2         Gix/z

http://www.xdnf.cn/news/6315.html

相关文章:

  • 记录一下seata后端数据库由mariadb10切换到mysql8遇到的SQLException问题
  • groovy 如何遍历 postgresql 所有的用户表 ?
  • 【golang】DNS 资源记录(RR)接口
  • 深度学习、机器学习及强化学习的联系与区别
  • 「Java EE开发指南」如何使用MyEclipse的可视化JSF编辑器设计JSP?(二)
  • 安全巡检清单-落地版
  • 使用 Apache POI 生成 Word 文档
  • 为什么elasticsearch配置文件JVM配置31G最佳
  • TensorFlow深度学习实战(16)——注意力机制详解
  • ESP32简介及相关使用
  • 基于React的高德地图api教程004:线标记绘制、修改、删除功能实现
  • 解密LLM重复输出:Max Token设置与模型机制
  • 基于面向对象设计的C++日期推算引擎:精准高效的时间运算实现与运算重载工程化实践
  • Linux操作系统实战:中断源码的性能分析(转)
  • 基于EFISH-SCB-RK3576/SAIL-RK3576的矿用本安型手持终端技术方案‌
  • 散列表(1)
  • [思维模式-37]:什么是事?什么是物?什么事物?如何通过数学的方法阐述事物?
  • 1. this指向的指向规则
  • 30天通过软考高项-质量论文
  • 多模态和多智能体系统与理性的结合综述研究
  • python: *args 与 **kwargs 用法
  • 【KWDB 创作者计划】MySQL数据库迁移至KWDB的完整实践指南
  • 强化学习_PPO算法
  • 2025最新出版 Microsoft Project由入门到精通(八)
  • rocketmq 拉取消息
  • 信奥赛-刷题笔记-队列篇-T3-P2058海港和P1886单调队列
  • sip协议栈--sip结构分析
  • 大模型哲学:语言的边界就是世界的边界
  • 并查集算法的学习
  • React学习———useContext和useReducer