IGMP V3协议报文格式

IGMPv3包格式

     IGMPv3包含查询报文和报告报文两种不同格式的报文,下面分别对两种报文的格式做简要说明。

     查询报文:


字段说明:

类型(Type):

     0x11           成员关系查询

最大响应代码(Max_Resp_Code):

最大响应代码字段指定在发送一个响应报告之前所允许的最大时间。实际允许的时间,被称为最大响应时间,其单位是1/10秒。它跟最大响应代码的换算如下:

if Max Rsp Code < 128 最大响应时间=Max Rsp Code

if Max Rsp Code >= 128 MaxRsp Code其实是表示如下的一个浮点值:

0 1 2 3 4 5 6 7

1|exp  |mant  |

最大响应时间= (mant | 0x10)<< (exp + 3)

最大响应时间的小值允许IGMPv3路由器调节“离开延迟”(最后一台主机离开组的那个时间点跟路由协议被通知到已经不存在成员的那个时间点,两者之间的时间差)。更大的值,尤其在指数范围内的值,可以调节网络中IGMP流量的爆炸。

校验和

校验和是对整个IGMP数据报以16位为一段进行取反求和。为了计算校验和,校验和字段开始必须被设置成0。当收到一个数据,在处理之前必须先对校验和进行验证

组地址(GroupAddress):

当发送一个普通查询的时候,组地址字段必须被置0。当发送一个指定组查询或者发送一个指定组和源的查询时,必须被设置成要被查询的IP组地址。

保留(Resv):

发送的时候以0填充,接收的时候不做处理,被忽略。

标志位S(禁止路由器处理):

当被设置成1的时候,S标志表示任何接收路由器禁止更新它们在收到查询时要更新的那些定时器。但它不禁止查询者选举或者普通的在路由器上执行的(当路由器作为一个组成员的时候)主机端的查询处理

QQIC:查询间隔时间,单位是秒;

查询者的健壮变量(QRV)

如果不为0,QRV中包含中一个被查询者使用的[健壮变量]的值,如果查询者的健壮变量的值超过7,即QRV字段的最大值,那么QRV被设成0。路由器取最近收到的查询中的QRV值作为它们自己的健壮性变量的值,除非最近收到的QRV是0,在这种情况下,接收者使用缺省的健壮性变量值,或者是一个静态配置的值。

查询者的查询间隔代码(QQIC)

     查询者的查询间隔代码字段指定查询者使用的[查询间隔]。实际的间隔,称为查询者的查询间隔(QQI),以秒为单位表示,从查询者的查询间隔代码进行换算的方法如下:
    if QQIC < 128    QQI=QQIC
    if QQIC >= 128    QQI代表如下的一个浮点值:
    0 1 2 3 4 5 6 7
    1|exp  |mant   |
    QQI = (mant | 0x10 ) << (exp + 3)
    当前为非查询者的多播路由器从最近收到的查询中取QQI值作为自己的[查询间隔]值,除非最近收到QQI是0,在这种情况下,接收路由器使用缺省的[查询间隔]值。

源数量Number_of_Source:

源数量(N)字段表明该查询中存在多少个源地址。在普通查询或指定组查询中这个值是0,在指定组和源的查询中,这个值为非0值。

Sourceaddress[i] (i取值从1到n):

n个IP单播地址的数组,n就是Number of Sources(N)字段的值。

附加数据:

如果收到的查询中的IP首部中数据报长度字段表明除了上述的字段之外,还有附加的数据存在,IGMPv3的实现在计算校验和的时候必须包含这些数据,但是在发送查询的时候,必须忽略这些数据,一个IGMPv3的实现在上述字段之外,不能再包含其它数据。

    

查询消息有三种类型的变体:

1、“普通查询”由多播路由器发出,用于获知邻接接口(即查询所传输的网络中所相连的接口)的完整的多播接收状态。在一个普通查询中,组地址字段和源数量(N)字段都为0。

2、“指定组查询”由一台多播路由器发出,用于获知邻接接口中跟某一个IP地址相关的多播接收状态。在指定组查询中,“组地址”字段含有需要查询的那个组地址,源数量(N)字段为0。

3、“指定组和源查询”由一台多播路由器发出,用于获知邻接接口是否需要接收来自指定的这些源的,发往指定组的多播数据报。在一个指定组和源的查询中,组地址字段含有要查询的多播地址,源地址[i]字段含有相关的源地址。


报告报文


字段说明:

Type(8bit)

     0x22           成员关系报告

Reserved( 8bit)和Reserved( 16bit):

都是表示保留字段,不过在IGMP中为了使它们都保持对应的长度,所以才有了长度上的区别,它在发送的时候是以0填充,在接收的时候是不作任何处理的。

校验和

校验和是对整个IGMP消息以16位为一段进行取反求和。为了计算校验和,校验和字段首先必须被置0。当收到一个数据,在处理之前,必须先对校验和进行验证。

Number_of_Group_Records(M):

该字段表示该报告报文中包含有几个组记录

Group Record[i] (i 从 1 到M):

一个主机可能需要点播多个组播地址的组播业务,每个记录包含了对应于其中一个组播地址的源地址列表等信息,它受到Number_of_Group_Records的大小的影响。

每一个组记录字段是一整块数据,其含有的信息是关于发送者在报告发送接口上的某一个多播组的成员关系。

 

每一个Group Reocrd的内部格式如下:

Record  Type(8bit)

Aux_Data_Len(8bit)

(16bit)Number_of_Group_Sources (N)

Multicast  Address(32bit)

Source  Address [i]  (i1N)

Auxiliary  Data

 

字段说明:

Aux Data Len:

辅助数据长度含有在组记录中的辅助数据的实际长度,其单位是32bit字。它有可能是0,这就表示辅助数据不存在。

Number_of_Group_Sources:

源数量(N)字段标明在组记录中存在多少源地址。

MulticastAddress:

多播地址字段标明该组记录从属的多播IP地址。

SourceAddress[i]:

源地址[i]字段是一个数组,含有n个单播地址。n就是该记录的源数量(N)字段的值。

Auxiliary Data:

     辅助数据字段如果存在,它含有关于该组记录的一些附加信息。本文档所描述的协议IGMPv3,没有定义任    何辅助数据。所以,IGMPv3的实现在任何传输的组记录中都不应该含有任何辅助数据(即必须把Aux Data Len字段置0)。并且在收到的所有组记录中,必须忽略辅助数据的存在。关于辅助数据的语法和内部编码会由将来版本的使用该字段的IGMP或其扩展定义。

附加数据:

     如果收到的报告中的IP首部的数据报长度字段标明在最后一个组记录后面有附加的数据存在。IGMPv3的实现必须在计算和验证校验和的时候包含这些附加数据,但是同时必须忽略这些附加数据。当发送一个报告时,一个IGMPv3的实现在最后一个组记录后面不能包含附加数据。

组记录类型(Record  Type):

     在一个报告消息中,有一定数量的不同类型的组记录:

 

    -“当前状态记录”由一个系统发出,用于响应在一个接口上收到的查询。它报告了接口跟某一个多播IP地址相关的当前的接收状态。当前状态记录的记录类型可以是下面两个值中的一个:

    值    名字和含义

    1   MODE_IS_INCLUDE-标明接口相关于某一指定多播地址的过滤模式为INCLUDE。该组记录中的源地址[i]字段含有该接口的相关于该多播地址的源列表(如果非空的话)。

2                        MODE_IS_EXCLUDE-标明接口相关于某一指定多播地址的过滤模式为EXCLUDE。该组记录中的源地址[i]字段含有该接口的相关于该多播地址的源列表(如果非空的话)。

 

    -“过滤模式改变记录”是当本地的IPMulticastListen调用造成本地的接口层相关于某一特定多播IP地址的过滤模式的改变的时候(即从INCLUDE变到EXCLUDE,或者从EXCLUDE变到INCLUDE),由系统发出。这个记录包含在一个报告中,而该报告是从发生改变的那个接口上发出来的。过滤模式改变记录的记录类型是以下两个值中的一个:
          值    名字和含义

    3   CHANGE_TO_INCLUDE_MODE,标明接口相关于某一指定的多播地址的过滤模式改变到INCLUDE。该组记录中的源地址[i]字段含有该指定多播地址相关的新的源列表(如果非空的话)。

    4   CHANGE_TO_EXCLUDE_MODE,标明接口相关于某一指定的多播地址的过滤模式改变到EXCLUDE。该组记录中的源地址[i]字段含有该指定多播地址相关的新的源列表(如果非空的话)。

 

 

    -“源列表改变记录”是当本地的IPMulticastListen调用造成本地的接口层相关于某一特定多播IP地址的源列表发生改变,并且该改变不跟过滤模式的改变产生冲突时,由系统发出。该记录包含在一个报告中,而该报告是从发生改变的那个接口上发出来的。源列表改变记录的记录类型是以下两个值中的一个:

    值    名字和含义

    5   ALLOW_NEW_SOURCE,标明组记录中的源地址[i]字段含有系统希望接收的发往某一多播地址的,新的源的列表。如果这是对一个INCLUDE列表的改变,那么这些地址会被添加到列表中,如果这是对一个EXCLUDE列表的改变,那么这些地址会被从列表中删除。

    6   BLOCK_OLD_SOURCE,标明组记录中的源地址[i]字段含有系统不希望再接收的发往某一多播地址的源的列表。如果这是对一个INCLUDE列表的改变,那么这些地址会被从列表中删除,如果这是对一个EXCLUDE列表的改变,那么这些地址会被添加到列表中。

    如果源列表的改变是同时添加新的源和阻止旧的源,这两种组记录会同时发往一个多播地址,一个是ALLOW_NEW_SOURCE,另一个是BLOCK_OLD_SOURCE。

    我们把过滤模式改变记录和源列表改变记录都统一称作状态改变记录。

    不能识别的记录类型值必须被丢弃。

 注意休息,定期活动颈椎,保持颈椎健康是一生的大事!

IGMPV3中它有了以下的改进功能:

1.增加了主机的控制能力;

如何实现:IGMP V3不仅可以指定加入的组播组G,还能明确要求从哪个指定组播源S接受信息,这也是指定源组播功能。

2.查询消息可以携带源地址;(源地址就是节目流地址)

3.响应消息包含多组记录:

如何实现:IGMP V1 V2版本的响应消息和查询消息具有相同的报文结构,即报文中仅包含组地址信息。IGMP V3响应消息包含的组地址为224.0.0.22,,其中可以携带1个多则多个组记录,在每个组记录中,包含组播组地址、数目不等的源地址信息。

4.取消响应的抑制机制:

原因:由于IGMP V3响应报文中同时携带源地址和组播组地址,而且包括Include和Exclude两种状态,为了减轻主机负担无需响应抑制机制,即组成员可以独立报告响应消息。

猜你喜欢

转载自blog.csdn.net/lisayh/article/details/79227007
今日推荐