二、IGMP协议简介
IGMP是Internet Group Management Protocol的简称,又被称为互联网组管理协议,是TCP/IP协议族中负责IPv4组播成员管理的协议。
IGMP用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。
IGMP通过在接收者主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。
IP组播通信的特点是报文从一个源发出,被转发到一组特定的接收者。但在组播通信模型中,发送者不关注接收者的位置信息,只是将数据发送到约定的目的组播地址。要使组播报文最终能够到达接收者,需要某种机制使连接接收者网段的组播路由器能够了电信大流量卡解到该网段存在哪些组播接收者,同时保证接收者可以加入相应的组播组中。
IGMP就是用来在接收者主机和与其所在网段直接相邻的组播路由器之间建立、维护组播组成员关系的协议。
图1 IGMP在组播网络中的部署位置
IGMP在组播网络中的部署位置如上图1所示。
1、IGMP版本简介
到目前为止,IGMP有三个版本:IGMPv1版本(由RFC 1112定义)、IGMPv2版本(由RFC 2236定义)、IGMPv3版本(由RFC 3376定义)。
IGMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了查询器选举和组成员离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组电信大流量卡播源的报文。
三个版本在演进过程中对协议报文的处理是向前兼容的,因此尽管各个版本的协议报文格式不同,但是运行IGMP高版本的路由器可以识别低版本的IGMP报文。
所有IGMP版本都支持ASM(Any-Source Multicast)模型。IGMPv3可以直接应用于SSM(Source-Specific Multicast)模型,而IGMPv1和IGMPv2则需要IGMP SSM Mapping技术的支持才可以应用于SSM模型。
IGMP三个版本的比较如下表1所示。
2、IGMPv1工作原理
2.1、IGMPv1报文介绍
IGMPv1包括两种类型的报文:
普遍组查询报文(General Query):
查询器电信大流量卡向共享网络上所有主机和路由器发送的查询报文,用于了解哪些组播组存在成员。
成员报告报文(Report):
主机向查询器发送的报告报文,用于申请加入某个组播组或者应答查询报文。
IGMPv1报文的格式如下图1所示,其中各个字段的说明见下表1。
图1 IGMPv1报文格式
2.2、IGMPv1工作机制
IGMPv1协议主要基于查询和响应机制完成组播组管理。
当一个网段内有多个组播路由器时,由于它们都可以接收到主机发送的成员报告报文,因此只需要选取其中一台组播路由器发送查询报文就足够了,该组播路由器称为IGMP查询器(Querier)。
在IGMPv1中,由组播路由协议PIM选举出唯一的组播信息转发者(Assert电信大流量卡 Winner或DR)作为IGMPv1的查询器,负责该网段的组成员关系查询。
IGMPv1的工作机制可以分为普遍组查询和响应机制、新组成员加入机制和组成员离开机制三个方面。
图2 组播网络示意图
下面以上图2所示组网为例,介绍IGMPv1的工作机制。
如上图2所示,组播网络中RouterA和RouterB连接主机网段,RouterA为IGMP查询器,在主机网段上有HostA、HostB、HostC三个接收者。HostA和HostB想要接收发往组播组G1的数据,HostC想要接收发往组播组G2的数据。
2.2.1、IGMPv1普遍组查询和响应机制
通过普遍组查询和响应,IGMP查询器可以了解到该网段内哪些组电信大流量卡播组存在成员。
图3 IGMP查询和响应示意图
如上图3所示,普遍组查询和响应过程如下:
IGMP查询器发送目的地址为224.0.0.1(表示同一网段内所有主机和路由器)的普遍组查询报文;收到该查询报文的组成员启动定时器。
普遍组查询报文是周期性发送的,发送周期可以通过命令配置,缺省情况下每隔60秒发送一次。HostA和HostB是组播组G1的成员,则在本地启动定时器Timer-G1。缺省情况下,定时器的范围为0~10秒之间的随机值。
第一个定时器超时的组成员发送针对该组的报告报文。
假设HostA上的Timer-G1首先超时,HostA向该网段发送目的地址为G1的报告报文。也想加入组G1的HostB收到电信大流量卡此报告报文,则停止定时器Timer-G1,不再发送针对G1的报告报文。这样报告报文被抑制,可以减少网段上的流量。
IGMP查询器接收到HostA的报告报文后,了解到本网段内存在组播组G1的成员,则由组播路由协议生成(*,G1)组播转发表项,“*”代表任意组播源。网络中一旦有组播组G1的数据到达路由器,将向该网段转发。
2.2.2、IGMPv1新组成员加入机制
图4 新组成员加入示意图
如上图4所示,主机HostC加入组播组G2的过程如下:
主机HostC不等待普遍组查询报文的到来,主动发送针对G2的报告报文以声明加入。
IGMP查询器接收到HostC的报告报文后,了解到本网段内出现了组播组G2的成员,则生电信大流量卡成组播转发项(*,G2)。网络中一旦有G2的数据到达路由器,将向该网段转发。
2.2.3、IGMPv1组成员离开机制
IGMPv1没有专门定义离开组的报文。主机离开组播组后,便不会再对普遍组查询报文做出回应。如上图2所示。
假设HostA想要退出组播组G1
HostA收到IGMP查询器发送的普遍组查询报文时,不再发送针对G1的报告报文。由于网段内还存在G1组成员HostB,HostB会向IGMP查询器发送针对G1的报告报文,因此IGMP查询器感知不到HostA的离开。
假设HostC想要退出组播组G2
HostC收到IGMP查询器发送的普遍组查询报文时,不再发送针对G2的报告报文。由于网段内不存在组G2的电信大流量卡其他成员,IGMP查询器不会收到G2组成员的报告报文,则在一定时间(缺省值为130秒)后,删除G2所对应的组播转发表项。
3、IGMPv2与IGMPv1相比的变化
IGMPv2的工作机制与IGMPv1基本相同,最大的不同之处在于IGMPv2增加了离开组机制。
主机离开组播组时,会主动发送成员离开报文通知IGMP查询器;IGMP查询器收到成员离开报文后,会连续发送特定组查询报文,询问该组播组是否还存在组成员。
如果在一段时间内没有收到成员主机发送的报告报文,IGMP查询器将不再维护该组的组成员关系。
IGMPv2可以使IGMP查询器及时了解到网段内哪些组播组已不存在成员,从而及时更新组成员关系,减少网络中电信大流量卡冗余的组播流量。
1、IGMPv2报文介绍
与IGMPv1相比,IGMPv2的变化如下:
除了普遍组查询报文和成员报告报文之外,IGMPv2新增了两种报文:
1.1、成员离开报文(Leave):
成员离开组播组时主动向查询器发送的报文,用于宣告自己离开了某个组播组。
1.2、特定组查询报文(Group-Specific Query):
查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。
IGMPv2对普遍组查询报文格式也做了改进,添加了最大响应时间(Max Response Time)字段。此字段取值可以通过命令配置,用于控制成员对于查询报文的响应速度。
IGMPv2报文的格式如下图1所电信大流量卡示,其中各个字段的说明见下表1。
图1 IGMPv2报文格式
2、IGMPv2工作机制
在工作机制上,与IGMPv1相比,IGMPv2增加了查询器选举和离开组机制。
图2 组播网络示意图
下面以上图2所示组网为例,介绍IGMPv2的工作机制。
如上图2所示,组播网络中RouterA和RouterB连接主机网段,在主机网段上有HostA、HostB、HostC三个接收者。假设HostA和HostB想要接收发往组播组G1的数据,HostC想要接收发往组播组G2的数据。
查询器选举机制、离开组机制的过程如下。
2.1 、IGMPv2查询器选举机制
IGMPv2使用独立的查询器选举机制,当共享网段上存在多个组播路由器时电信大流量卡,IP地址最小的路由器成为查询器。
图3 查询器选举示意图
如上图3所示,在IGMPv2中,查询器的选举过程如下:
最初,所有运行IGMPv2的组播路由器(RouterA和RouterB)都认为自己是查询器,向本网段内的所有主机和组播路由器发送普遍组查询报文。
RouterA和RouterB在收到对方发送的普遍组查询报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,IP地址最小的组播路由器将成为查询器,其他组播路由器成为非查询器(Non-Querier)。
如上图3所示,RouterA的接口地址小于RouterB,则RouterA当选为查询器,RouterB为非查询器。
此后,将由IGMP查询器电信大流量卡(RouterA)向本网段内的所有主机和其他组播路由器发送普遍组查询报文,而非查询器(RouterB)则不再发送普遍组查询报文。
非查询器(RouterB)上都会启动一个定时器(即其他查询器存在时间定时器Other Querier Present Timer)。在该定时器超时前,如果收到了来自查询器的查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。
2.2、IGMPv2离开组机制
图4 离开组示意图
如上图4所示,在IGMPv2中,主机HostA离开组播组G1的过程如下:
HostA向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送针对组G1的离开报文。
查询器电信大流量卡收到离开报文,会发送针对组G1的特定组查询报文。发送间隔和发送次数可以通过命令配置,缺省情况下每隔1秒发送一次,共发送两次。同时查询器启动组成员关系定时器(Timer-Membership=发送间隔x发送次数)。
该网段内还存在组G1的其他成员(如上图4所示的HostB),这些成员(HostB)在收到查询器发送的特定组查询报文后,会立即发送针对组G1的报告报文。查询器收到针对组G1的报告报文后将继续维护该组成员关系。
如果该网段内不存在组G1的其他成员,查询器将不会收到针对组G1的报告报文。在Timer-Membership超时后,查询器将删除(*,G1)对应的IGMP组表项。当有组G1的组播数据电信大流量卡到达查询器时,查询器将不会向下游转发。
友情提醒: 请添加客服微信进行免费领取流量卡!
QQ交流群:226333560 站长微信:qgzmt2
原创文章,作者:sunyaqun,如若转载,请注明出处:https://www.dallk.cn/46815.html