IGMP — 互联网组管理协议
管理主机与路由器之间的 IPv4 组播成员关系 / 网络层 / 无端口(IP Protocol = 2)/ RFC 1112、2236、3376
Table of Contents
1. 协议定位
| 项目 | 信息 |
|---|---|
| 所属层 | 网络层(封装在 IP 数据报内,与 ICMP 同属 IP 的"配套控制协议") |
| 英文全称 | Internet Group Management Protocol |
| 主要 RFC | RFC 1112(IGMPv1,1989,与 IP 组播主机扩展同文档)、RFC 2236(IGMPv2,1997)、RFC 3376(IGMPv3,2002);相关:RFC 4541(IGMP/MLD Snooping)、RFC 4604(SSM 下的 IGMPv3)、RFC 4607(SSM)、RFC 2710/3810(IPv6 的 MLD) |
| 端口 | 无。IGMP 直接封装于 IP,Protocol = 2;IP 头 TTL = 1(仅本链路有效),并携带 Router Alert 选项(RFC 2113) |
| 封装于 | IP 数据报(Protocol=2),目的地址为组播地址:v1/v2 通用查询发往 224.0.0.1,v2 离开发往 224.0.0.2,v3 报告统一发往 224.0.0.22 |
| 典型应用 | IPTV / 直播分发、视频会议、金融行情组播(如交易所行情推送)、股票/期货 Level-2 数据、组播文件分发、路由协议邻居发现的底层组播支撑 |
2. 一句话理解
IGMP 是组播世界的"订阅登记表":主机用它告诉本网段的组播路由器"我要收 239.1.1.1 这个频道",路由器据此决定是否把这条组播流转发到本网段——它管的是"最后一公里的订阅关系",不负责组播流在路由器之间怎么走(那是 PIM 的活)。
生活化类比
把组播想象成小区里的"共享电视频道":物业(组播路由器)只把 subscribed 的频道信号拉进本栋楼。IGMP 就是每户门口那张**“频道订阅登记表”——你想看 239.1.1.1 这个台,就填表告诉物业;不想看了就划掉。物业按表决定把哪路信号送到本栋楼。注意它只管"本栋楼里谁订了",至于信号从电视台(源)怎么一路传过来,是另一套干线系统(PIM)的事。
3. 它解决什么问题
为什么没有它,网络就"缺了一块":没有 IGMP,路由器根本不知道"本网段谁想收哪个组"——它只能要么把所有组播流都泼进每个网段(等于广播、带宽爆炸),要么干脆一个都不发(组播名存实亡)。IGMP 正是补齐"谁在收、还在不在收、收哪个源"这套订阅机制的拼图。
单播场景下,服务器向 1000 个客户端发同一份视频,需要发 1000 份数据,带宽线性膨胀。组播(Multicast)让服务器只发一份,由网络设备在分叉点复制,极大节省带宽。但这引出三个必须解决的问题:
- 谁想收?——路由器不可能把所有组播流都往每个网段泼,否则等同广播。需要一种机制让主机声明订阅意愿。
- 还有人在收吗?——最后一个成员离开后,若路由器仍持续转发,就是纯粹的带宽浪费与安全隐患。需要成员存活探测与离开通知。
- 收谁发的?——同一个组地址可能有多个源,主机可能只想收其中特定源(或排除某些源)。IGMPv3 的源过滤解决了这个问题,也是 SSM(指定源组播)的基础。
IGMP 正是运行在主机 ↔ 本网段第一跳组播路由器之间的这套"订阅/续订/退订"协议。
明确边界:IGMP 只管一跳(TTL=1,不跨网段)。组播流量如何在路由器之间构建分发树,由 PIM-SM / PIM-DM / PIM-SSM 等组播路由协议负责。二者是"接入侧"与"骨干侧"的分工。
4. 核心特征
- 【一跳就到头】只在本链路生效:IP 头 TTL=1,且带 Router Alert 选项确保路由器不会直接快速转发而是上送处理。
- 【选个主持人】查询器(Querier)机制:本网段选举唯一查询器周期性发通用查询(默认每 125 秒),主机回成员报告续订。IGMPv2/v3 选举 IP 地址最小者为查询器(IGMPv1 无选举,依赖组播路由协议指定)。
- 【会过期】软状态(Soft State):路由器的组成员记录会超时老化(组成员间隔默认约 260 秒),必须靠主机周期性报告续订,天然容忍状态丢失。
- 【别抢着说】报告抑制(v1/v2):主机在响应查询前随机延迟,若期间听到同组的他人报告则抑制自己的报告,避免同一网段大量重复报文。IGMPv3 取消了抑制,以支持路由器精确跟踪每个成员。
- 【32挑1】组播地址与 MAC 的映射:IPv4 组播
224.0.0.0/4映射到 MAC01:00:5E:xx:xx:xx(取 IP 低 23 位),因此存在 32:1 的地址重叠。 - 【新老都能处】三个版本向后兼容:v3 路由器可与 v1/v2 主机共存,但会降级到该网段的最低版本行为。
- 【交换机要懂事】二层配套:交换机默认把组播帧当广播泛洪,需 IGMP Snooping 侦听 IGMP 报文,仅向真正的成员端口转发。
5. 与其他协议的关系
| 相关协议 | 关系说明 |
|---|---|
| IP | IGMP 封装于 IP(Protocol=2),并服务于 IP 组播转发决策 |
| PIM(RFC 7761 等) | 分工明确:IGMP 管"主机 ↔ 第一跳路由器"的组成员关系;PIM 管"路由器 ↔ 路由器"的组播分发树构建。IGMP 收到订阅后,路由器用 PIM 向上游 Join |
| IGMP Snooping(RFC 4541) | 二层交换机侦听 IGMP 报文,建立"组播组 ↔ 端口"表,避免组播在整个 VLAN 内泛洪。没有它,三层组播优化会被二层泛洪抵消 |
| MLD(RFC 2710 / 3810) | IPv6 的对等协议,MLDv1 ≈ IGMPv2,MLDv2 ≈ IGMPv3;但 MLD 是 ICMPv6 的一部分(Type 130-132/143),不是独立协议 |
| ICMP | 同为 IP 的配套控制协议,同层同封装方式,但职责完全不同(ICMP 报错诊断,IGMP 管组成员) |
| SSM(RFC 4607) | 指定源组播模型,地址段 232.0.0.0/8,必须依赖 IGMPv3 的源过滤能力;v1/v2 需靠 SSM Mapping 转换 |
| UDP | 组播应用数据几乎都跑在 UDP 上(TCP 是点对点连接,无法组播) |
| DVMRP / MOSPF | 早期组播路由协议,现已基本被 PIM 取代 |
6. 本目录学习路线
- 01-原理与报文 — 组播地址规划与 MAC 映射规则、IGMPv1/v2/v3 报文格式逐字段、查询器选举、加入/离开完整时序(mermaid)、v3 的 INCLUDE/EXCLUDE 源过滤与组记录类型、三版本对比、关键定时器。
- 02-实战与排错 — Wireshark 过滤式、
ip maddr/netstat -g/smcroute/iperf组播测试、IGMP Snooping 配置、“收不到组播流"“组播风暴"“离开后仍持续转发"等故障排查。
学习建议:组播的排障链条比单播长得多——应用是否 join → 主机是否发出 IGMP 报告 → 交换机 Snooping 是否学到端口 → 路由器是否建立组成员 → PIM 是否向上游 Join 到源。学习时务必按这条链路逐段验证,任何一环断了现象都是"收不到流”。
初学者最常踩的坑:把 IGMP 当成"全权负责组播"的协议——其实它只管"主机 ↔ 第一跳路由器"这一跳(TTL=1,出不了本链路),组播流在路由器之间怎么走是 PIM 的活。另一坑:以为交换机天生懂组播,不开 IGMP Snooping 就会把组播帧当未知 MAC 在整个 VLAN 泛洪,三层省下的带宽在二层全浪费,严重时变成组播风暴。还有一个隐蔽坑:组播 socket 默认 TTL=1,跨网段收不到时第一反应应是"发送端 TTL 没调大”。