每日一个计算机小知识:IGMP

每日分享一个有趣的计算机小知识,今日话题: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协议,路由器只会向需要接收多播流量的主机转发数据,从而显著提升网络效率,减少不必要的带宽占用。

相关推荐
周杰伦_Jay12 小时前
【Go 语言主流 Web】 框架详细解析
开发语言·后端·微服务·架构·golang
风的归宿5513 小时前
openresty容器导出火焰图
后端
i听风逝夜13 小时前
Web 3D地球实时统计访问来源
前端·后端
Python私教13 小时前
省下5万培训费!这份Python量化自学路线,比付费课更狠
后端
w***954913 小时前
VScode 开发 Springboot 程序
java·spring boot·后端
豆浆Whisky13 小时前
Go微服务通信优化:从协议选择到性能调优全攻略|Go语言进阶(20)
后端·微服务·go
MOMO陌染13 小时前
Python 饼图入门:3 行代码展示数据占比
后端·python
旮旯村CDN13 小时前
深入旮旯村:我用后端架构拆解了VPN的底层逻辑
后端
花酒锄作田13 小时前
FastAPI - Tracking ID的设计
后端
十月南城13 小时前
SQL性能的三要素——索引、执行计划与数据分布的协同影响
后端·程序员