自学教程 从零学编程

IGMP 协议

一、IGMP 是什么

IGMP(Internet Group Management Protocol,互联网组管理协议),网络层协议,封装在IP报文里,IP协议号2。

IGMP没有端口号。

作用:管理组播组,让主机和本地组播路由器之间通信,告诉路由器:本机是否需要接收某个组播组的数据。

单播:一对一;广播:同一网段所有主机;组播:一对一组,只发给订阅了该组的主机。
IGMP只工作在主机与本地路由器之间;路由器之间组播路由使用PIM等协议,不是IGMP。

二、IGMP版本对比

版本特点
IGMPv1只有成员报告、查询报文;无离开组报文;等待超时才判定主机退出
IGMPv2(主流)增加离开组报文,主机主动通知路由器退出组播组;支持最大响应时间
IGMPv3支持源过滤,可以指定:接收/不接收来自某个源IP的组播流量

三、IGMPv2 报文类型

  1. 成员查询报文(Query):路由器周期性发送(默认125s),询问网段内哪些主机还在某个组播组。分为通用查询、特定组查询。
  2. 成员报告报文(Report):主机主动发给路由器,声明我要加入这个组播组。
  3. 离开组报文(Leave):主机退出组播组时主动发送。

四、IGMPv2 工作流程

1. 主机加入组播组

主机想加入某个组播组,发送IGMP成员报告,告知本地组播路由器:我订阅这个组播地址。
路由器收到后,向上游组播路由拉取该组播流量,转发到本网段。

抑制机制:同一网段多台主机加入同一个组,一台主机发送报告后,其他主机收到报告,抑制自己不再发送报告,减少网段报文数量。

2. 路由器周期性查询

路由器每隔一段时间发送通用查询:“哪些组播组还有成员?”
组内主机收到查询,启动随机计时器,最先到期的主机发送成员报告,其余主机被抑制。

3. 主机离开组播组

主机不再需要组播数据,发送离开组报文。
路由器收到离开报文,立刻发送特定组查询,检查网段内是否还有其他主机留在该组;
如果一段时间没有收到任何成员报告,路由器判定该网段无此组成员,停止转发这个组播流量到本局域网。

IGMPv1没有离开报文,只能等待超时,离开延迟很大。

五、IGMPv3 新增能力

可以做源过滤,两种模式:

  • INCLUDE模式:只接收来自指定源IP的组播流量
  • EXCLUDE模式:接收该组播,排除某些源IP

适合多源组播场景,IPTV常用。

六、常见应用场景

IPTV视频直播、在线视频会议、设备组播升级、监控摄像头组播流。

七、重要误区

  1. ❌ IGMP不是组播路由协议;IGMP只在主机 ↔ 本地路由器之间工作;路由器之间组播路由用PIM、DVMRP。
  2. ❌ IGMP不能跨网段;它只管理当前局域网的组播成员。
  3. 组播报文目的地址是D类IP(224.0.0.0 ~ 239.255.255.255)。

八、优缺点

✅ 优点

  1. 一对多传输,相同数据在链路只传一份,节省带宽(IPTV典型收益);
  2. v2支持主动离组,减少不必要流量;v3支持源过滤。

❌ 缺点

  1. 二层交换机默认会把组播像广播一样泛洪到所有端口;需要开启IGMP Snooping,交换机监听IGMP报文,只把组播转发到有订阅主机的端口。
  2. 部分防火墙对组播支持较差。

IGMP Snooping:二层交换机功能,不是IGMP协议本身;交换机监听IGMP报文,记录哪个端口存在组播接收者,隔离不需要组播的端口。

九、小结

  1. IGMP网络层协议,IP协议号2,用于主机和本地路由器之间管理组播组成员;
  2. IGMPv2:查询、成员报告、离开报文;主机可主动离组;v3支持源IP过滤;
  3. 同一网段存在报告抑制机制,减少重复报文;
  4. IGMP只管本网段成员,不是组播路由协议;交换机IGMP Snooping优化二层组播转发;
  5. 组播使用D类IP地址。

思考题:交换机开启IGMP Snooping的作用是什么,如果不开启会发生什么?

标签:

0 条笔记