【干货】IGMPv1协议闲聊

简介: 【干货】IGMPv1协议闲聊

1、它是干嘛的?

IGMP(Internet  Group Mangment Protocl)因特网组管理协议,开发该协议,主要是用于组播流接收主机和相邻组播路由器之间维护组播组成员关系的。


说白了,主机通过它来表达自己想加入哪个组播组。组播路由器通过它可以清楚了解连接主机子网内有哪些组播组成员。



2、什么时候才需要它? 部署场景?


当部署组播时候,有主机需要加入组播组时就需要它。



部署场景:







IGMP协议、原理介绍


1、协议发展:





2、协议具体介绍

   IGMP协议运行于主机和 与主机相邻的组播路由器(最后一跳路由器)之间。


   IGMP工作机制,龙哥就从两个维度来说把,就是主机路由器













3、IGMP工作机制






  聊IGMP工作机制前,我个人还是偏向先了解一下报文格式,如果有报文格式读透了,然后再去研究原理,就容易理解一些。





                                IGMPv1报文格式


版本:即=1‘

类型:0x11= ’成员关系查询报文;0x12=成员加入报告报文。

组播地址:

如果是成员关系查询报文,即等于0.0.0.0

如果是成员加入报告报文,即等于想要加入的组播地址。






  结合上述格式,龙哥再抓个包给大家看,就会更加深刻了。






红色部分,我们可知,IGMP是基于IP之上进行封装的,协议号为2

在这,大家是不是能想到ICMP,也是基于IP之上的,协议号为1。不过与ICMP不同的是,IGMP消息仅局限于本地数据链路,为啥呢?  看图说话,TTL=1。


4、IGMPv1成员加入






例如,PC1想加入239.1.1.1这个组播组,就会发送IGMPv1的成员报告报文,目的IP地址为想要加入的组。路由器收到后,就会了解到该网段有组播组239.1.1.1的成员,为其生成组播转发表项(*,239.1.1.1) , *表示任意组播源。


路由器没收到 成员报告 :







当PC1 发送 成员报告报文,表示想加入239.1.1.1时,成员报告报文如下:








从报文,我们一下就知道了:

IGMPv1的成员报告报文类型为:0x12

报文的目的IP为 所要加入组的组播IP地址。



5、IGMPv1 成员维护。


值得一提的是,IGMPv1 里没有查询器这个东西,是依赖组播协议PIM选择产生的。






下面,我们通过配一下PIM来看看是否就有查询器了?










这样,IGMP 查询器就产生了,就可以看到路由器周期发送查询报文。










路由器缺省每隔60s发送一次查询报文,向224.0.0.1发生查询报文:问问大家,这个组还有成员吗?

(224.0.0.1 代表组内所有主机系统)

该网段的所有主机都能收到这个查询报文,同时会启动一个延时定时器,值为0到10s之间,随机取一个。谁先到期,就由谁来发送响应报文。这样做的好处,避免重复的响应报文。






PC1先到期,然后就会发生响应报文。






其他PC也会收到PC1的响应报文,就会清除延时定时器,同时他们不会发响应报文的。


如果130s内没有响应路由器,路由器就将该组对应的转发表项删除了。


6、IGMPv1 成员离开。






IGMPv1 没有定义离开报文,所以PC离开时,不会发任何报文,路由器无法感知到,只能通过继续周期查询,如果查了3次还是没有人响应,则认为该组没有成员了。

相关文章
|
JSON JavaScript 数据格式
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
305 1
|
Kubernetes Linux iOS开发
使用kubectl连接远程Kubernetes(k8s)集群
在自己本机当中安装kubectl并远程连接Kubernetes(k8s)集群。覆盖了Windows、MacOS和Linux操作系统,步骤超详细,在后面还有关于MacOS和Linux命令自动补全
1596 1
使用kubectl连接远程Kubernetes(k8s)集群
|
Dubbo 网络协议 安全
【Dubbo 解析】Dubbo 支持哪些协议,它们的优缺点有哪些?
【1月更文挑战第11天】【Dubbo 解析】Dubbo 支持哪些协议,它们的优缺点有哪些?
成功解决TypeError: ‘encoding’ is an invalid keyword argument for this function
成功解决TypeError: ‘encoding’ is an invalid keyword argument for this function
|
6月前
|
Linux 开发工具 C语言
在CentOS系统中编译安装TinyXml2的方法
以上就是在CentOS系统中编译安装TinyXml2的方法。这个过程可能会有些复杂,但只要你按照上面的步骤一步一步来,你应该能够成功地完成这个任务。如果你在这个过程中遇到任何问题,你可以在网上搜索相关的资料,或者在相关的论坛上寻求帮助。希望这个指南能够帮助你成功地在你的CentOS系统中编译安装TinyXml2。
156 22
|
7月前
|
运维 安全 关系型数据库
Websoft9 运维面板,全网真正的一键部署应用
Websoft9运维面板实现应用真·一键部署,通过智能环境适配、安全架构与容器化技术,将传统数小时部署缩短至分钟级,显著提升效率与安全性。
205 5
|
12月前
|
人工智能
歌词结构的艺术:写歌词的技巧和方法深度剖析,妙笔生词AI智能写歌词软件
歌词是音乐的灵魂伴侣,其结构蕴含独特艺术魅力。掌握歌词结构技巧是创作者成功的关键。开头需迅速吸引听众,主体部分通过叙事、抒情或对话形式展开,结尾则点睛收尾。创作时可借助《妙笔生词智能写歌词软件》,利用 AI 功能优化歌词,提供丰富模板和案例,助力灵感涌现,轻松掌握歌词结构艺术。
|
机器学习/深度学习 人工智能 自然语言处理
SCoRe: 通过强化学习教导大语言模型进行自我纠错
谷歌研究人员提出了一种名为自我纠错强化学习(SCoRe)的新方法,旨在使大型语言模型(LLMs)能够在无需外部反馈的情况下即时纠正自己的错误。SCoRe通过在线多轮强化学习训练模型,解决了传统自我纠错方法的局限性。实验结果显示,SCoRe在数学问题求解和代码生成任务上显著提升了模型的自我纠错能力,相较于基准模型和其他方法表现出色。此外,SCoRe还可与其他推理优化技术结合,进一步提升模型性能。尽管存在迭代次数限制和计算成本等局限性,SCoRe为未来研究提供了新的方向,有望推动AI系统的自主性和适应性发展。
592 3
|
存储 监控 NoSQL
Redis是如何保证高可用的?
通过这些机制,Redis可以在主节点故障或其他异常情况下保持高可用性,确保数据的可靠性和可用性。不过,为了实现高可用性,需要仔细规划和配置Redis集群,并确保监控和故障恢复机制的可靠性。
455 6
|
10月前
|
网络协议 网络性能优化
第十二问:TCP慢起动详细解释
TCP的慢启动是其拥塞控制的一部分,旨在防止网络拥塞。在连接建立初期,TCP逐步增加发送的数据量,通过接收方的ACK确认来调整拥塞窗口(cwnd)。初始阶段cwnd较小,每收到一个ACK,cwnd增加1个MSS,发送速率大致翻倍。当cwnd达到慢启动阈值(ssthresh)时,进入拥塞避免阶段,cwnd改为线性增长。若发生数据丢失或网络拥塞,TCP会减小cwnd,重新进入慢启动。慢启动通过动态调整发送速率,确保网络不被瞬时大流量压垮。
443 0