二、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 离组,要经过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