二、IGMP

目录

[1. IGMPv1](#1. IGMPv1)

[1.1 IGMPv1 报⽂类型](#1.1 IGMPv1 报⽂类型)

[1.2 IGMPv1 工作机制](#1.2 IGMPv1 工作机制)

[1.3 成员加入](#1.3 成员加入)

[1.4 离组机制](#1.4 离组机制)

[2. IGMPv2](#2. IGMPv2)

[2.1 IGMPv2 报文](#2.1 IGMPv2 报文)

[2.3 查询器选举 & 维护](#2.3 查询器选举 & 维护)

[2.4 成员加入](#2.4 成员加入)

[2.4 离组机制](#2.4 离组机制)

[3. IGMPv3](#3. IGMPv3)

[3.1 IGMPv3 vs. IGMPv2](#3.1 IGMPv3 vs. IGMPv2)

[3.2 IGMPv3 报文](#3.2 IGMPv3 报文)

[3.3 IGMPv3 工作机制](#3.3 IGMPv3 工作机制)

[4. IGMP Proxy](#4. IGMP Proxy)

[5. IGMP Snooping](#5. IGMP Snooping)

[5.1 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 离组,要经过130s(60+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
相关推荐
兴达易控1 小时前
ProfibusDP主站转modbusTCP网关接DP从站网关通讯案例
网络
凯雀安全1 小时前
printspoofer的RPC调用接口的简单代码
qt·网络协议·rpc
IP管家2 小时前
物联网设备远程管理:基于代理IP的安全固件更新通道方案
服务器·网络·物联网·网络协议·tcp/ip·安全·ip
搬码临时工2 小时前
远程连接电脑的方法?异地远程桌面连接和三方软件实现
运维·服务器·网络·物联网·电脑·远程工作
矿工学编程3 小时前
.NET 8 kestrel 配置PEM,实现内网https
网络协议·http·https
WuYiCheng6663 小时前
IPsec VPN与SSL VPN实验思路(eNSP)
网络·智能路由器
kaixiang3003 小时前
sqli-labs靶场29-31关(http参数污染)
网络·网络协议·http
吃橘子的猴4 小时前
BGP实验
网络·智能路由器
purrrew4 小时前
【Java ee初阶】http(1)
网络·网络协议·http