HCIP-Datacom Core Technology V1.0_18 IGMP原理与配置

发布时间:2026/5/22 16:39:10

HCIP-Datacom Core Technology V1.0_18 IGMP原理与配置 IGMP用于接收者和直连组播路由之间建立和维护组播成员关系的组播协议本章课程将介绍IGMP的原理以及它不同版本的区别还有一些其它特性。IGMP介绍组播网络的转发困境正常情况下组播源将组播报文推送给第一跳路由器之后第一跳路由器就应该将这个数据推送给特定的接收者成员现在问题在于路由器去判断组播成员在哪里。第二个是对于用户而言哪些成员想要接收组播报文组成员又要去选择哪些组播数据来进行正常接收。以及是否会存在其它的新增组播成员都是所面临的问题。所学习的IGMP它就是用于感知组播组成员的。感知组播组成员正常情况下有两种第一种可以在组播路由器上手工配置该接口下面的用户想要接收某个组的消息这样的情况下对于新上线的用户能够直接快速上线能够接收想要的组播数据流量但是缺点是非常明显的因为组播用户的上线和下线是不确定很随机性的没有办法实时感知整个组播网络的状况因此用静态的方式去配置的话工作量非常大而且灵活性也非常差因此一般情况下采用的是动态动态感知就是通过IGMP这个协议去通知整个组播网络中哪些成员想要接收组播数据以及哪些成员它想要接收哪个组的组播数据都是通过IGMP协议去实现的这种方式更加灵活配置也非常简单。基于IGMP得知成员的位置和它想要加入的组播之后就可以基于这些信息将组播数据报文推送给想要加入的成员其中IGMP这个协议是运行在最后一条路由器和组播组成员之间。而从第一跳路由器到最后一跳路由器中间转发组播数据的过程是由组播路由协议去实现的。IGMP协议的概述∑IGMP这个协议是在IPv4的网络中是用来管理组播成员的一个协议这是由主机和直连组播路由器也就是最后一跳路由器来建立和维护组播成员关系的IGMP一共有三个版本v1,v2和v3,在现网中用的最多的是v2和v3的版本v1的版本已经被淘汰了在组播路由器和组成员之间通过IGMP协议会生成IGMP路由表项以及IGMP的组表项。通过这样的一个协议就能够正常的去感知成员所在的位置以及它想要加入的组播组。IGMP组表项与路由表项通过IGMP这个协议它生成的两个表项分别是什么含义在正式介绍这两个表项之前回顾一下两个比较重要的概念分别是(*,G)表项和(S,G)表项。*G表项*是代表想要加入的是任意源G代表它想要加入的组播组。正常情况下(*,G)表项是由主机直连组播路由器去触发生成这样的一个表项。因为对于主机而言它并不知道它想要接收的组播是来自于哪个源的它只想要接收该组的消息所以成员端和直连组播路由器之间所建立的是(*,G)表项。S,G表项正常情况下一般是由组播路由器接收到组播源接收到推送过来的组播数据之后形成的(S,G)表项因为得知是哪个组播源发送过来的组播数据给这台路由器因此它是知道源在哪里。当运行IGMP协议之后如果终端设备和组播路由器正常交互的话这个时候就会生成IGMP组表项时面包含了哪些重要的信息最后一个向组播路由器发送报告的成员的IP地址前面是它想要加入的组播组。IGMP路由表项会生成一个(*,G)表项表明它想要接收的组播组最关键的在于接口是出接口这个出接口有什么作用呢得知通过IGMP生成的两个表项第一个能够知道哪一台成员想要接收哪个组的消息就完成了成员的位置以及它想要加入的组播组再到后面这个出接口针对整个组播数据的转发有什么意义呢?IGMP表项与组播路由表项正常运行的组播路由协议的路由器它需要转发组播流量然后再到最后一条路由器由最后一跳路由器去推送流到成员端。组播路由表它并不是单一的运行组播路由协议就能够产生它是由IGMP路由表项IGMP组表项以及运行组播路由协议也就是PIM路由表项汇总而成的也就是说这是一个比较复杂的过程当最后一条路由器运行了IGMP以及PIM协议之后它会生成IGMP的组表项IGMP的路由表项包括PIM的路由表项将这三个表项里面的信息进行汇总之后再组成了组播路由表项由组播路由表项指导组播流量的转发。首先它包含的是(S,G)表项这个G表明想要加入的组播组这个组播组是怎么来的呢就是由IGMP组表项里面的组播组映射过来的第二个IGMP路由表项的出接口有什么作用它会直接映射到组播路由表项里面的下游的出接口这样的意义在于什么呢想像一下一台路由器运行了PIM协议运行了IGMP协议最后形成了组播路由表项当它收到这样一个组播数据流之后要对应着从某一个接口把数据流推送下去应该从哪个接口推送下去呢?也就是说组播路由协议的下游接口对应着IGMP路由表项的出接口因为从该接口接收到了IGMP里面所想要加入的组播组的这样的一个信息表明我接收到该组的组播流量应该从该出接口再转发下去给下面的成员端设备因此它们之间是一个映射的关系在这里大家可能有很多疑问比如说组播路由表项它是怎么指导组播数据转发的PIM路由表是怎样的。IGMP工作原理理解成员和直连路由器之间的邻居关系建立以及维护这个关系。IGMPv1基本概念在IGMPv1的版本中会发现它的机制非常简单正常情况下只有两个报文。第一个是普遍组查询报文第二个成员关系报告报文。普通组查询报文是由查询器也就是说某一台设备向该网络上所有的主机和路由器之间周期性的去发送查询报文去询问下面是否有某些组播组成员想要接收该组的消息类似于我主动向我的成员端去发送各种通知问你们有没有想要接收的组播组而成员关系报告报文是由主机主动向查询器去汇报我想要接收某个组播的消息。因此你会发现这两个报文是针对不同的设备而言一个是查询器主动向下游去询问一个是下游组播组成员主动向上游去告知。在IGMPv1版本中其实有一个非常大的问题在一个多路访问里面只需要一台组播路由器去发送查询报告就可以了比如说按图中的案例在一个MA网络中如果这两台路由器都充当查询器向下游设备去查询某些成员想要接收哪个组的消息这样就会显得非常繁琐而且查询的消息也重复了浪费了设备的带宽以及这样的一个链路的资源。因此只要选举一台设备作为查询器进行查询就可以完成这样的操作但是在IGMPv1版本中它自己没有本身机制去选举查询器在IGMPV1版本中查询器的选举是依赖于组播路由协议PIM协议去完成的也就是说如果用的是IGMPv1的版本最后一条路由器不仅要在接口上去运行IGMP,同时也要运行PIM协议才能去实现这样一个查询器的选举然后由查询器周期性发送普遍组查询报文。它存在着一个依赖关系。在后续的版本中它就会有自己本身的机制去选举查询器。IGMPv1报文格式IGMPv1的报文格式非常简单主要是包含了两个报文类型分别是普通组查询报文和成员关系报告报文其中Group Address是组播组地址在普遍组查询报文中该字段全为0因为在普遍组查询报文中它表明所有主机都应该去接收这样的一个查询报文然后由你向我进行响应因此0.0可以理解为代表所有的意思而在成员关系报告报文中这个字段就表明它自己想要加入的某个组播的组播地址。IGMPv1组成员加组机制周期性的去发送成员关系查询报文是为了获知下面的主机是否想要加入某个组来判断这样的组播流量是否要下发给成员端。首先查询器会周期性的发送普遍组查询报文正常情况下每60秒发送一次当成员端所有主机接收到这样的一个普遍查询报文之后如果它想要加入某个组播组这个时候它就应该正常通过成员关系报告报文进行反馈但是如果多台主机想要加入同一个组播组它应该是怎样的反馈呢现在假设PC1和PC2它们都想要加入组播组G1这个时候它们接收到普遍组查询报文之后会怎么办呢第一步它们会启动一个定时器这个定时器在0~10秒内随机选取一个数值按图中的案例比如PC1它选出来了是5秒PC2它最后随机选出来的一个是7秒通过定时器开始倒计时谁先倒计时完成然后谁先向查询器去发送成员关系报告报文这个时候成员关系报告报文不仅会发送给查询器也会发送给同一组的成员端主机这个时候会造成什么问题呢对于查询器而言接收到这样的一个成员关系报告报文之后它就会形成相应的IGMP的路由表项和IGMP的组表项里面包含了想要加入的某个组以及对应的出接口。这样当从上游设备接收到关于某个组的流量之后就会从对应的出接口将流量推送下来给下面的成员端主机对于其它主机而言这样的一个成员关系报告报文它起到的作用是一个抑制的概念PC1和PC2都想要加入到组播给G1中这个时候如果PC1已经向查询器汇报了我需要这们的组播流量这个时候查询器就会将这样的组播流量从出接口推送下来给下游成员端主机既然已经完成了这个操作组播流量已经推送下来了这个时候自己的成员2不需要再去发送成员关系报告报文了因为我想要的组播流量已经推送下来了我会接收的到。如果再发送成员关系报告报文类似于做了一个重复的这样的操作并没有任何意义因此为了节省资源就抑制了这样的一个成员关系报告是通过这样一个定时器来完成 的谁先数到0谁先报告然后其它的成员主机就会抑制成员关系报告报文的发送。实际上在现网中成员关系报文都是需要去发送的因为这会涉及到后续一个比较重要的机制正常情况下不需要抑制的而是需要去发送成员关系报告报文。IGMPv1查询器选举机制在IGMPv1版本中是要选举一个查询器的这个查询器类似于帮助我们去查询下面的终端设备想要加入的组播组如果多台设备都去发送查询的话那就完全浪费了设备的资源这个查询器类似于DR的概念在v1的版本中并没有本身的机制能够选举这个查询器因此在v1的版本中它需要和组播路由协议也就是PIM协议通过它去选举一个成员端DR由成员端的DR充当查询器在v1版本中向下游设备发送成员关系查询报文。如何在PIM协议中选举成员端的DRIGMPv1组成员离组机制组播的这样的一个成员它想要加入组和离开组都是随机性的完全没有办法去干涉这个时候如果说某一台主机它想要离开组不接受关于该组的消息之后会发生怎样的情况呢在IGMPv1版本中它的机制是比较落后的它没有专门定义离开消息也就是说成员离开类似于静默离开悄悄的走查询器并不知道你走了它是通过怎样的机制去判断你离开的呢然后再杜绝发送组播流量给下游设备。之前介绍过查询器会周期性的发送普遍组查询报文这个时间是60秒按图中的案例现在这两台成员想要接收的组播组的这样的一个消息是不同的分别是G1和G2, 现在通过周期性的发送普遍组查询报文给下游设备就类似于下游设备是否想要接收组1的消息是否想要接收组2的消息现在G1里面的PC1,它依然想要接收该组的消息因此它会去反馈成员关系报告依然想要接收关于G1的流量给查询器但是成员2它里面所有的成员全部离开了没有任何一台设备想要接收关于G2的组播流量因此它就不做任何响应这个时候关于G2就会启动一个定时器这个定时器也可以简单的理解为一个超时时间就是130秒在130秒以内查询器没有接收到关于G2组播组的任何成员关系的反馈查询器就默认为关于G2的流量下面已经没有任何人想要接收了这个时候就不应该将组播的流量推送给下游设备因为没有接收者推送数据流下来就等于浪费了链路的带宽因此就会在IGMP的路由表项里面把对应关于阻碍的组播表项和出接口给它删除接收到成员反馈的这样的一个关系报告的流量依然会在这样的一个组播路由表项里面存在为它去推送组播数据流量所以会发现IGMPv1的组成员离开机制可以说是非常简陋的因为它是采取定时器的这样的一个机制。

相关新闻