组播之IGMP

IGMP协议

组成员管理
·IGMP协议运行于主机与组播路由器之间。这描述了IGMP的应用场景
只有主机和路由器才会使用,如果是路由器和路由器之间,是不会使用IGMP的
在这里插入图片描述

  • IGMP实际上是组播协议里面的最底层,没有它是不能完成的,我们后面学习的PIM等组播协议都是建立在IGMP之上的
    在这里插入图片描述
  • 对于IGMP协议的发展来说,到现在一共有3个版本,分别是IGMPv1,v2以及v3,它们有分别对应的RFC,可以自己去查看。

IGMPv1的工作机制
!!【不管是什么版本的协议,只需要从以下几点去认识,实际上就比较好理解了:①接收者的加入过程 ②组成员的维护过程 ③接收者的离开过程】
·对于RTA来说,实际上会通过224.0.0.1去发送成员关系查询信息,这个成员消息查询信息会通告出去,通告出去以后收到成员查询报文(普遍组查询)报文的主机侧,都会通告成员关系报告报文。也就是说,不管主机加入到了哪个组,都需要发送成员关系报告报文,这个报文实际上是属于被动去说的,它需要给路由器侧做申明,但是如果是主动加入组,那么实际上是主动的,会主动发送成员关系报告报文给路由器侧

  • IGMPv1的响应抑制
    在这里插入图片描述
    对于RTA来说,如果发送了成员关系查询报文,在这种情况下,对于我的client以及我的clientC都会收到这个成员关系查询报文,那么实际上A和C其中一台去进行成员关系报告报文即可,因为它们都是属于一个组播组里面的,所以为了节省流量,我们实际上可以这么做。
    这个机制叫做IGMPv1响应抑制机制,每个主机在收到查询的时候会在本地启动1个定时器,缺省情况下,定时器的范围是0-10秒之间的随机值,谁的计时器先超时,谁先发,发出的成员关系报告报文后,组播路由器会收到,其他在同一个组播组里的主机也会收到,收到后它们知道已经有主机回复report了,也就不再发送成员关系报告报文,这样相同的成员关系报告报文的就被抑制了。(抑制就是删除定时器)

IGMPv1成员加入
·Client D如果想要通过IGMPv1加入组的时候,首先会主动发送IGMP成员关系报告,里面的组播地址实际上就是组播组G3的地址。
在这里插入图片描述

IGMPv1问题一:组成员离开
·对于IGMPv1来说,如果组成员离开了,实际上是悄无声息的,因为IGMPv1没有定义离开组的消息,如果clientA离开了,那么是没有任何提示的,但是如果RTA发送成员关系查询报文的时候,实际上C还会发送G1组的成员关系报告报文,等到主机C也离开了,那么这个时候如果RTA还在发送关于G1组的成员关系查询报文,那么RTA是收不到任何的成员关系报告报文的,原因是因为G1组已经没人了,但是在这种情况下,RTA也不会无限制的进行查询,所以实际上会用一个计算方式,也就是
IGMP普遍查询消息发送间隔 × 健壮系数 + 最大查询响应时间,作为自己的成员关系超时时间,IGMP查询消息发送间隔为60s,最大查询相应时间为10s,因此缺省值为130秒,那么RTA就会将G1组的表项从路由器侧删除。

实验环节:
IGMPv1实验
在这里插入图片描述

①AR1这里先开启组播功能
[huawei]multicast routing-enable //如果想要使用IGMP,要先开启组播功能

②[huawei-G0/0/0]igmp enable //在华为设备接口上开启igmp

③使用display igmp interface,查看接口的igmp参数,能够看到里面有个Querier for IGMP字段,这个代表的意思是查询器的IP,并且能够看到上面有个version是2,意思是IGMP默认的版本是2

④进行修改,在接口处输入igmp version 1,将接口g0/0/0的IGMP版本改为1

⑤修改完成之后发现查询器没有了,原因实际是因为在IGMPv1下,是没有字段能够去选举查询器的,所以要用到PIM这个上层的路由协议

⑥[Huawei]pim
[Huawei-pim]quit
⑦进入接口删除igmp的信息
⑧[Huawei-GigabitEthernet0/0/0]pim sm
⑨在接口里把igmp重新配置起来,并且版本改成v1,发现有查询器了。
⑩最后一步,将PC1里面的组播地址改为239.1.1.1进行尝试
//查询指令display igmp interface

IGMPv2对IGMPv1的改进:组成员离开
·对于IGMPv2的版本来说,实际上和IGMPv1的组成员加入是一样的,主机加入一个组会发送一个或者多个成员关系报告给组播组,发送多个的原因,是因为可能我发送的报文不可靠,如果一个包可能会丢包,因此会多发几个包来报告成员关系,这样就能保证可靠。如果丢了的话我们就需要等待一个周期60s去等待查询器去发送成员关系查询报文,因此主机侧在发送关系报文的时候可能会发送多个来保证路由器能收到。

·IGMPv2查询与相应,实际上v1是一样的
·组成员离开(首先要了解的是,什么时候会发送组成员离开信息)
【当最后一个接收者(主机)离开的时候,主机会发送离开组报文。但是问题为谁是最后一个接收者?】
在这里插入图片描述
对于IGMPv2来说,如果ClientB要离开,那么它会主动发送一个离开组消息,发送完成之后,那么查询器接受到了之后,就会发送特定组查询,特定组查询的组播地址就是我们主机发送的离开组消息里面的IP地址,对于查询器来说,它会连续发送两次特殊组查询,每次间隔为1s,如果2s后还没回应,那么认为没有组播成员,那么会对表象进行一个清除,因此最快时间为2s。但是IGMPv1的话需要至少130s才能够知道组里是否还有成员,因此这两个版本差的时间比较多。

·解答谁为是一个last report:
在这里插入图片描述
①从路由器角度去解决,例如下面PC1,PC2,PC3都处于239.1.1.1这个组中,那么如果查询器周期发送成员关系查询报文,那么PC1,PC2,PC3都会随机选定最大响应时间,那么从0-10s里面选,选择完成之后,例如以PC1为例,它是最短的时间为1s,那么就会超时,超时完成之后,对于PC1而言要去发送成员报告报文,那么对于查询器来说就知道我们最后一个发送者是PC1,那么如果下次变成PC2发送了,那么路由器就认为是PC2,因此按照这个逻辑推断,大家就能明白,实际上我们的最后一个发送者,是按照查询器的角度去看待的,谁最后一个传给我,谁就是last reporter。
②PC也需要知道自己是last reporter,不然的话主机不会主动发送离开组信息,那么主机会不会知道组信息呢?实际上是知道的,那么如果PC机发送了reporter,那么它就认为自己是最后一台设备,被抑制的设备自己会知道自己不是最后一台设备。
③如果现在PC1先发送,那么发送完成之后,对于路由器和PC机自身都是属于last reporter,那么实际上PC1发送了离开组信息以后,路由器会进行特定组查询,查询239.1.1.1是否还有设备存在,如果有回应,那么不删除关系,如果没有回应,那么就删除对应表项。当然PC2和PC3也是有抑制操作的,有超时器,但是如果倒计时是正常情况的话,可能会有个问题出现,就是路由器设备的老化时间也就2秒,对于PC机来讲超时默认是0-10s,可能会大于2s,在这种情况下,路由器会做一个坚定的动作,把239.1.1.1给干掉,因此为了解决这个问题,那么就将成员关系报告报文的最大响应时间,定为1s,因此PC2和PC3响应时间为0-1s以内,就能解决这个问题。这个时间是由特定组查询发给它的。

IGMPv2对IGMPv1的改进:查询器选举
·IGMPv2查询器选举,首先,RTA以及RTB都会认为自己是查询器,然后向外发送成员关系查询报文,并且是224.0.0.1,在这种情况下,RTA以及RTB都能收到来自对方路由器设备的接口IP地址,收到之后会进行源IP地址与接收IP地址的比较,并且IP地址越小越优先,那么低的IP地址的路由器就会变成查询器,那么非查询器RTB实际上就会启动查询计时器,周期检查IGMP查询路由器的状态,缺省为120s。
也就是RTB实际上会监听这条链路120s,对于RTA来说,由于它的周期是60s,一旦我RTB60秒左右能收到来自RTA发来的查询信息,那么就会将计时器重启,重新变成120S,如果超时了,那么非查询器就会变成查询器。这个数值可以通过igmp timer other-querier-present interval。
在这里插入图片描述
IGMPv1和IGMPv2报文比较
在这里插入图片描述

混合操作
·V2的PC实际上不会发送离开组信息,因为它是作为v1版本设备存在的。
在这里插入图片描述
·如果是V1主机与V2路由器,那么v1主机发送v1的报告,但是V2路由器会设置一个与V1主机相关的倒数计时器,用于通知局域网有一个版本1的主机是组成员
在这里插入图片描述
·如果是IGMPv1的路由器,那么就会强制所有所属子网的路由器都为IGMPv1,这样正常使用就没有问题了。

SSM模型中的新需求
如果Client A和RTC之间运行的是IGMPv1或IGMPv2,Client A无法对组播源进行选择,无论其是否需要,都会同时接收到来自组播源Source A和Source B的数据。
为了满足SSM模型的新需求,IGMPv3提供了在报文中携带指定组播源信息的能力。

IGMPv3
·IGMPv3必须去服务SSM模型的,现在还没有得到广泛支持
·PIM类似的协议我们只需要去用IGMPv2即可。
·允许主机指定接收某些网络发送的某些组播组的信息
·增加了主机的控制能力,不仅可以指定组播组,还能指定组播源
在这里插入图片描述
·对于这幅图来说,对于查询器RTA,实际上查询起来都是一样的,通过224.0.0.1的普遍组查询,去查看主机侧设备的组信息
·主机侧收到了来自于查询器的成员关系查看报文,那么会通过224.0.0.22(IGMPv3的监听地址),那么在这个组播地址里面,会有信息,G代表的意思是主机侧的组信息,例如A的组为G1。那么IN(包含)和EX(不包含)的意思就不一样了,后面的数字叫做源列表。例如clientA的内容,代表的意思是它要接受源是1.1.1.1,组是G1的组播数据。EX代表不包含,就是不是这个源都可以,例如PCC的地址为G1 EX1.1.1.1,代表的意思就是我接受组播地址为G1,但是源地址不为1.1.1.1的组播流量。
在这里插入图片描述

·在这张图中,能够发现PC1能够收到两个组播流量,那么我们可以通过IGMPv3来控制来的组播流量,例如把2.2.2.2的源,224.1.1.1的组播地址的流量给干掉
·能发现IGMPv3能够加强主机的控制能力。

IGMP各版本间的差异
·IGMPv3	查询器选举	自己选举,和V2一样,选择IP小的成员离开方式	主动发出离开报文,并且v3里面没有抑制,原因是因为有可能加入相同组不同源,因此我们要分开进行查询,因此IGMPv3相同组是没有任何抑制的,即使PC1以及PC2加入的是相同源的组,V3也必须抑制。指定组查询	不仅有,还能支持特定源组的查询,v3能查询特定组的原因是因为V3兼容v2

发布了28 篇原创文章 · 获赞 15 · 访问量 872

猜你喜欢

转载自blog.csdn.net/weixin_45948002/article/details/104848947