大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
目录
前言
上一篇文章介绍了IP组播的原理,文章链接如下:https://blog.csdn.net/Adsjddjjej/article/details/126305279
在了解了IP组播的原理之后,本文将介绍IP组播最底层的协议——IGMP协议版本中的IGMPv1
一、协议体系
组播协议分为主机-路由器之间的组成员关系协议和路由器-路由器之间的组播路由协议。组成员关系协议包括IGMP(互连网组管理协议)。组播路由协议分为域内组播路由协议及域间组播路由协议。域内组播路由协议包括PIM-SM、PIM-DM、DVMRP等协议,域间组播路由协议包括MBGP、MSDP等协议。
二、IGMP协议介绍
IGMP(Internet Group Management Protocol)作为因特网组管理协议,是TCP/IP协议族中负责IP组播成员管理的协议,它用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
IGMP建立并且维护路由器直联网段的组成员关系信息。域内组播路由协议根据IGMP维护的这些组播组成员关系信息,运用一定的组播路由算法构造组播分发树进行组播数据包转发。
IGMP协议运行于主机与主机直接相连的组播路由器之间。
IGMP工作机制:
- 接收者(主机)向所在的共享网络报告组成员关系。
- 查询者(路由器)周期性地向该共享网段发送组成员查询信息。
- 接收者主机接收到查询消息后进行响应以报告组成员关系。
- 网段中的组播路由器依据接收到的响应来刷新组成员的存在信息。
对于IGMP协议的发展,目前一共有3个版本,分别是IGMPv1,IGMPv2以及IGMPv3。
这三个版本的协议,只需要从以下几点去认识,实际上就比较好理解了:
①接收者的加入过程
②组成员的维护过程
③接收者的离开过程
IGMPv1定义了基本的组成员查询和报告过程
IGMPv2在IGMPv1的基础上添加了组成员快速离开的机制
IGMPv3增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。
三、IGMPv1报文格式
- 版本:IGMP版本标识,版本1为1。IGMPv2的报文中没有该字段。
- 类型:类型字段。表示IGMP报文类型。IGMPv1支持两种类型的报文:
- 成员关系查询(0x11):路由器周期性的发送成员关系查询报文去查询是否有组播成员。默认查询周期为60秒。
- 成员关系报告(0x12):成员关系报告用于表示主机想加入某个组播组。
- 成员关系报告的发送可以被动发送也可主动发送。
- 被动发送是指当主机收到成员关系查询消息后如果对某个组播组感兴趣想加入组播组时发送成员关系报告。
- 主动发送是指如果主机想加入某个组播组时,可以不用等待成员关系查询报文,而主动地发送成员关系报告。
- 组地址:不同类型的IGMP报文中组地址不同。
- 在成员关系报告报文中,组地址为某个特定的组播地址。
在成员关系查询报文中,组地址为0。
四、IGMPv1
IGMPv1组成员加入
主机PC3发送IGMP成员关系报告,表示希望加入组播IP地址为224.1.1.1的组播组。
IGMPv1的查询与响应
IGMPv1的查询与响应过程如下:
- IGMP查询器周期性地向共享网段内所有主机以组播方式(目的地址为224.0.0.1)发送成员关系查询消息(组地址为0)。(查询周期为60s)
- 网络内所有主机都接收到该查询消息,如果某主机(如PC1、PC2和PC3)对任意组播组G感兴趣,则以组播方式发送“成员关系报告”报文(其中携带组播组G的地址)来宣告自己将加入该组播组,假设PC2首先发送此报告。(实验效果为,IGMP响应报告的目的地址应该为加入的组播组地址)
- 经过查询/响应过程后,IGMP路由器了解到本网络内存在组播组G对应的接收者,生成(*,G)组播项并依此作为组播信息的转发依据。
- *表示任意组播源,G表示某个组播组。
IGMPv1规定,当共享网络中有多台路由器时,由组播路由协议选举查询器。不同的组播路由协议有不同的选举机制。(运行PIM DM或PIM SM的网段会选举DR,同时该DR也是IGMPv1的查询器)
IGMPv1响应抑制机制
- IGMP成员关系查询报文是目的地址是224.0.0.1,就是说网段内所有的设备都会接收到该查询报文。
- 但并不是所有接收到该报文的主机都会响应查询请求的。
- 本例中只有一个主机会以成员关系报告报文响应,而其他主机则抑制成员关系报告的发送。
- 实际上主机收到IGMP成员关系查询时,会对它已经加入的每个组播组启动一个倒计数报告计时器,计时器的值默认为0到最大响应值,IGMPv1中计时器最大响应值固定使用10秒。计时器到时的主机则主动发送成员关系报告,组地址为该组播组地址,目的地址为加入的组播组的地址,于是网段内其它主机都会收到该成员关系报告报文,接收到成员关系报告报文的主机抑制成员关系报告的发送,并删除计时器。(所以这些被抑制的路由器也就知道自己不是Last Reporter了)
- 当路由器周期性的发送成员关系查询报文时,每个主机都会再次启动计时器进行查询/响应/抑制。(路由器查询间隔为60秒)
IGMPv1组成员离开
- 由于IGMPv1版本没有定义专门离开组播组的消息,因此主机离开组时是默默离开不发送任何报文。
- 而组播路由器如何知道用户已经离开组播组呢?IGMPv1主要是基于查询无响应进而超时的思路实现的。
- 成员悄悄离开组播组,不发送任何报文。路由器依旧周期性的发送成员关系查询报文,周期为60秒,当路由器发送3次成员关系查询报文都没有收到响应的成员关系报告报文时,路由器认为组内已经没有成员,不再向该网段转发组播报文。
总结
以上就是今天要讲的内容,本文介绍了IGMP协议版本中的IGMPv1协议,从接收者的加入过程、组成员的维护过程、接收者的离开过程三个方面介绍了IGMPv1协议的实现过程,下一节将介绍IGMPv2协议。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/193995.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...