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

相关推荐
怕浪猫3 分钟前
前端对接聊天 API:我用 React 做了一个比 ChatGPT 还好看的界面
前端·后端·面试
IT_陈寒8 分钟前
深入理解Python:核心原理与最佳实践
前端·人工智能·后端
我命由我1234543 分钟前
5-2.Python 编码进阶 - 字符串进阶(拼接、普通格式化、普通格式化数字精度控制、快速格式化、遍历、常用方法)
java·开发语言·后端·python·学习·java-ee·学习方法
专业程序开发源43 分钟前
django视听资源推荐系统16690-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
多客:duokelijie1 小时前
婚恋交友小程序合规梳理:上线运营需要准备哪些资质与许可手续?
后端·mysql·微信小程序·前端框架·uni-app·php·持续部署
yunwei371 小时前
eBPF 实例教程:使用内核跟踪点监控 GPU 驱动活动
linux·后端·性能优化
高频因子挖掘机1 小时前
别再手动维护股票名称映射表:用 Python 查询交易所元数据
后端·github·api
我的xiaodoujiao1 小时前
Django 权限系统项目实战详细图文教程 2--环境搭建
后端·python·django
高频因子挖掘机2 小时前
QuantDash 明明安装成功,为什么 Python 还是无法 import?
后端·github·api
Java爱好狂.9 小时前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试