每日分享一个有趣的计算机小知识,今日话题:IGMP
IGMP是Internet Group Management Protocol的缩写,互联网组管理协议,它是TCP/IP协议族中负责IP组播成员管理的一个子协议。和ICMP协议一样都是基于IP的网络协议,且都运行在OSI模型的网络层,它有如下3个版本:
IGMPv1
1989年,RFC 1112第一次详细定义了IGMP协议规范,提供了基本的查询和响应机制,主机能够通知路由器加入多播组,但缺乏对主机离开多播组的通知机制。
IGMPv2
1997年,IGMP版本2规范发布RFC 2236,增加了主机离开组的通知机制,减少了不必要的成员报告消息,并改进了路由器的查询机制,使得多播管理更加灵活和高效。
IGMPv3
2002年,IGMP版本3规范发布RFC 3376,支持源特定组播(SSM,Source-Specific Multicast),允许主机指定要接收或屏蔽的源IP,进一步提高了多播通信的灵活性和安全性。
ICMP主要用于局域网(LAN)中,主要功能就是让主机能够向本地路由器报告它们希望接收的多播流,从而实现数据的高效传输,优化带宽使用。
对于多播不理解的,我们可以先来看下常见的网络数据传输方式:
1. 单播 Unicast
一对一传输,一个发送方只能将数据传递给一个指定的接收方。若有多个接收方,发送方需重复发送相同数据,接收方越多,发送端压力越大,适用于个人化、点对点的交互场景,比如浏览网页、微信聊天、下载文件、在线购物下单等。
2. 广播 Broadcast
一对所有传输,发送方只需发送一份数据,数据会自动扩散到当前网段内的所有设备,所有设备强制接收。多用于局域网内的通用通知或查询,比如ARP协议地址解析、路由器DHCP自动分配IP地址等。
3. 组播/多播 Multicast
一对多传输,仅支持特定网络内传输,发送方仅发送1份数据,数据会精准传输给所有"主动加入组播组"的接收方,未加入的设备则收不到。不管有多少个接收方,发送方始终只需发送1份数据,带宽利用率高。适用于多用户获取相同内容的场景,比如IPTV直播、企业视频会议、股市实时行情推送、在线课堂等。

IGMP协议需将报文封装在IP数据包中传输(IP协议版本号为2),主要分为查询报文和报告报文2类:
查询报文 Query
由组播路由器发送,用于询问网段内是否有设备加入特定组播组,如:通用查询General Query(用于询问所有设备加入了哪些组)、特定组查询Group-Specific Query(指定某一组播组,询问还有没有设备在接收当前组的数据流)、特定源特定组查询报文Group-Source-Specific Query(针对某一个组播组+某几个特定源IP,向终端询问是否还需要从这些源接收这个组播组的数据,仅IGMPv3支持)。
报告报文 Report
由终端主机发送,用于上报主机自己的组播成员身份,如:成员报告报文Membership Report(终端主动告知路由器加入或继续订阅某个组播组)、离开组报文Leave Group(仅IGMPv2/3支持,终端主动告知路由器不再需要某组播组的数据)。
在没有IGMP时,要1对多传输只能将多播流量发送到整个网络,浪费带宽资源。而通过IGMP协议,路由器只会向需要接收多播流量的主机转发数据,从而显著提升网络效率,减少不必要的带宽占用。