IGMPv1,v2,v3的原理报文形式 - 图文 联系客服

发布时间 : 星期日 文章IGMPv1,v2,v3的原理报文形式 - 图文更新完毕开始阅读cd2fdbbba1c7aa00b52acbc0

2.2.1 工作原理

MLD协议的目的是使每一个组播路由器知道在本地链路上监听者对哪些组播地址和源地址感兴趣。被MLD收集到的信息提供给在路由器上运行的任何组播路由协议,来保证组播数据包被传递到组播组成员。组播路由器只需要知道在一个链路上,至少有一个节点正在监听从一个特定的源发给一个特定组播地址的数据包,它不需要知道有多少个这样的节点。

MLDv2是一个不对称的协议,它包括分离的两部分:针对组播地址侦听者部分(监听组播数据包的主机或者路由器)和组播路由器部分。它为组播地址侦听者和组播路由器定义了不同的行为。当执行“组播路由器”功能时,收集组播路由协议所需要的组播侦听者信息;当执行“组播地址侦听者”功能时,通知本身和其他邻居组播路由器他的侦听状态。需要注意的是,一个组播路由器可以本身是一个或者多个组播地址的侦听者,执行“组播路由器”和“组播地址侦听者”双重功能。 组播地址监听者在所有的支持组播的接口上执行MLDv2协议的“组播地址监听者”功能。 组播路由器在它的每一个接口上执行MLDv2协议的“组播路由器”功能。如果在同一个子网上具有不止一个组播路由器,组播路由器将运行查询者选举机制来选择一个组播路由器来充当查询路由器。在这个子网上的所有的组播路由器都在监听由组播地址监听者发送的消息,并且维护相同的组播监听信息状态,以便于当目前的查询路由器不能工作时,接替查询路由器的工作,但是只有查询路由器在子网上能够发送周期的消息和被触发的查询消息。

2.2.2 MLDv2报文格式

为了支持以上的功能,MLDv2除了兼容支持MLDvl所有的三种报文:组播侦听查询(MLD消息类型值为130),包括一般查询和特定组播地址查询:组播侦听报告(MLD消息类型值为131);组播侦听完成(MLD消息类型值为 132)外,还增加了MLDv2查询消息(一般的查询、特定组播地址查询,特定组播地址和源查询)和“侦听者报告”报文。“侦听者报告”报文是向邻居路由器报告当前的组播侦听状态,或者声明侦听状态变化情况。 综上,MLDv2消息中的所有消息如下: n 两种类型的MLDv2消息: l 组播侦听查询(类型值=130)

l Version 2组播侦听报告(类型值=143)

n 为保证和MLDvl的兼容,MLDv2还要支持以下两种消息: l Versionl组播侦听报告(类型值=131)[RFC2710] l versionl组播侦听完成(类型值=132)[RFC2710] 以下详细介绍两种类型的MLDv2消息内容。 a) MLDv2侦听查询消息

组播侦听查询消息是在请求状态的路由器发出来的,它用来查询邻居接口的侦听状态。它的消息格式如图2-24所示:

图2-24 MLDv2侦听查询消息

(1)编码

被发送者初始化为0,接收者被忽略。 (2)校验和

标准的ICMPv6校验和;算它,它需要计算整个消息,包括IPv6的伪造报头。为了计算它,首先把它设置为0。收到包后,要先验证后处理。 (3)最大响应延迟

最大响应延迟编码域指定了在发送响应报告的允许的最大延迟。实际时间叫做最大响应延迟,单位为毫秒。它们之间编码方式如下:

l 如果最大响应延迟编码<32768,则最大响应延迟=最大响应延迟编码。 l 如果最大响应延迟编码>=32768,则最大响应延迟编码构成如图2-25所示:

图2-25 最大响应延迟编码构成图

而且最大响应延迟=(mant | 0x1000) << (exp+3)。

值比较小的最大响应延迟允许MLDv2路由器调整“离开潜伏期”(链路上最后一个节点停止侦听某个特定的组播地址到路由协议认为对于这个地址没有侦听者的时间)。值比较大的最大响应延迟,尤其是编码的那些,是用来调整在链路上的爆炸性的MLD消息的传输。 (4)预留

被发送者初始化为0,被接收者忽略。 (5)组播地址

对于一般的查询消息,组播地址为0。对于特定组地址或者特定组地址和源的查询消息来说,组播地址被设置成需要查询的地址。 (6)S Flag(抑制路由器端的处理)

如果设置成1,则表示对于所有接收在收到查询消息时抑制计时器更新。不过,并不抑制选举查询者和主机端对一类查询消息的处理,这类查询是路由器请求实现组播侦听者的功能。 (7)QRV(查询者活跃变量)

如果非0,那么查询者活跃变量域包含查询者使用的活跃变量值。如果活跃变量大于7(查询者活跃变量域的最大值),查询者活跃变量域被设置为0。

路由器把近期收到的查询消息中的查询者活跃变量值设置为自己的活跃变量值,除非近期收到的查询消息中多数的查询者活跃变量值都为0。在多数的查询者活跃变量值都为0的清况时,就使用缺省值,或者静态配置特定的值。 (8)QQIC(查询者查询间隔编码)

查询者查询间隔编码域指定了查询者使用的查询间隔。实际间隔被叫作查询者查询间隔(QQI),它是以秒为单位的。它们之间的转换如下: l 如果QQIC<128,那么QQI=QQIC。

l 如果QQIC>=128,则查询者查询间隔编码构成如图2-26所示:

图2-26 查询者查询间隔编码构成图

而且QQI = (mant | 0x10) << (exp+ 3)。

不是当前查询者的组播路由器把最新收到的查询消息中的QQI值作为自己的查询间隔时间,除非近期收到的查询消息中多数的QQI值都为0。在都为0情况时,就使用缺省值 (9)源个数(N)

源个数(N)指出在当前处在查询的源地址的个数。在一般查询消息或者特定组播地址的查询消息中源个数都为0,在特定源和组地址的查询消息中不为0。源个数的大小由链路上可传输的最大报文决定。例如,在Ethernet上,可传输的最大报文是1500字节,携带路由警报选项的8字节的Hop-By-Hop扩展头和40字节的IPv6头一共48字节;源个数域前的MLD头共28字节,这样留给源个数域的有1424字节,所以源个数最大为89(1424/16)。 (10)源地址[i]

源地址[i]域是指向n的单播地址,n既是源个数域中的值。 (11)附加数据区

如果收到的查询消息中的IPv6头的负载长度域指定了需要有附加数据存在时,执行MLDv2时必须包含附加字节,用来确认收到MLD消息的校验和,否则就忽略附加字节。当发送查询消息时,一定不含附加消息。 (12)查询变量

查询消息中有三类查询变量:

l “一般查询消息”是查询路由器发出的,用来查询相连的链路上哪个组播地址有侦听者。组播地址和源个数都为0。

l “特定组地址查询消息”是查询路由器发出的,用来查询相连的链路上某个特定的组播地址是否有侦听者。在特定组地址查询消息中,包括希望查询的组地址,源个数为0。

l “特定组地址和源查询消息”是查询路由器发出的,用来查询相连的链路上某个特定的组播地址并且是来自特定的源的消息是否有侦听者。在特定组地址和源查询消息中,包括希望查询的组地址,源地址列表包含关注的源地址。 (13)查询消息源地址

所有MLDv2的查询消息的源地址为可用的IPv6链路本地地址。如果节点(路由器或主机)收到的来自不明的地址的查询消息,或者不是可用的IPv6链路本地地址时,它就丢弃这个消息,同时记录警报。

(14)查询消息目的地址

在MLDv2协议中,一般查询消息是发给链路内所有节点的地址的(FF02::1)。特定组地址查询消息和特定组地址和源查询消息都发给希望查询的组地址。同时节点必须接收和处理所有的IP目的地址是任意的单播或组播地址的查询消息,这样有利于调试。 MLDv2侦听查询报文在网络中传输完整的报文格式如图2-27:

图2-27 在网络中传输的MLDv2侦听查询报文