IGMPv3
IGMPv3是为了配合SSM(Source-Specific Multicast)服务模型而发展的,增加了在报文中携带组播源地址的功能,即能加入到指定源的组播组
IGMPv3与IGMPv2相比,IGMPv3新增了一些功能:
查询报文中除了普遍组查询和特定组查询之外,还新增了特定源组查询报文(Group-and-Source-Specific Query),该报文由查询器共享网段内特定组播组成员发送,用于查询该组成员是否愿意接受特定源发送的数据,特定源组查询通过在报文中携带一个或多个源地址来达到这一目的
报告报文不仅告知路由器主机希望加入哪个组播组,并且可以指定只接受哪些组播源发往该组的数据,IGMPv3增加针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系,在IGMP表中表示为(G,INCLUDE,(S1,S2...)),表示只接受源为S1,S2...发往组G的数据,或者(G,EXCLUDE,(S1,S2...)),表示只不接受S1,S2...组播源发往组G的数据,也就是说S1,S2...其他都收
以下是IGMPv3普遍组查询报文结构:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x11 | Max Resp Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Group Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Resv |S| QRV | QQIC | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [1] |
+- -+
| Source Address [2] |
+- . -+
. . .
. . .
+- -+
| Source Address [N] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段 | 说明 |
Type | 0x11:报文类型,取值为0x11,IGMPv3只有该类型 |
Max Resp Code | 最大相应时间,成员主机在收到IGMP查询器发出的普遍组查询报文后,需要在最大响应时间内做出回应 |
Checksum |
校验和,在发送端计算出校验和之前,该字段为全0,当发送端计算出报文的校验和之后,必须将值插入该字段,接收端接收数据包时,必须在处理数据包内容前,完成对数据包的校验 |
Group Address | 组播组地址,在普遍组查询中,该字段为0,在特定组查询中,该字段为要查询的组播组地址 |
Resv | 保留字段,发送报文时该为0,接收报文时应忽略该位 |
S | 该位为1时,所有收到查询报文的其他路由器不启动定时器刷新过程,但是此报文不抑制查询器选举和路由器对主机的处理 |
QRV | 该字段表示查询器的健壮系数,健壮系数直的是,当查询器收到一个离组报文后,向该组发送几个特定组查询报文,如果健壮系数为5,那么就发送5个特定组查询报文,查询该组是否还有成员。如果该字段为0,则表示查询器的健壮系数大于7同时不做处理,如果非0,则表示查询器的健壮系数,其他非查询器会将自己的健壮系数,调整到与查询器一致 |
QQIC | 表示IGMP查询器的查询间隔,单位为秒。每过x秒,发送一次普遍组查询报文,如果该字段位0,则不做处理,如果该字段非0,则将自己的查询间隔调整至该字段的值 |
Number of Sources |
为数据包中包含组播源的数量,对于普遍组查询报文,该值为0,对于特定源组查询报文,该值非0,此参数的大小收到所在网络MTU值的大小 |
Source Address | 组播源地址,其数量受到Number of Sources字段大小的限制 |
以下是成员报告报文:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x22 | Reserved | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | Number of Group Records (M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Group Record [1] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Group Record [2] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| . |
. . .
| . |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Group Record [M] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段 |
说明 |
Type |
报文类型,取值为0x22 |
Reserved |
保留字段,发送时该字段应为0,接收端应忽略该字段 |
Checksum |
校验和,在发送端计算出校验和之前,该字段为全0,当发送端计算出报文的校验和之后,必须将值插入该字段,接收端接收数据包时,必须在处理数据包内容前,完成对数据包的校验 |
Number of Group Records |
报文中组记录的数量 |
Group Record |
组记录,Group Record字段的格式如下图所示 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Record Type | Aux Data Len | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Multicast Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [1] |
+- -+
| Source Address [2] |
+- -+
. . .
. . .
. . .
+- -+
| Source Address [N] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Auxiliary Data .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表为Record Type字段的含义,并非全字段讲解
分类 |
组记录类型 |
含义 |
当前状态报告,相应查询报文 |
IS_IN |
值为0x01,表示组播组与源列表之间的对应方式为INCLUDE |
IS_EX |
值为0x02,表示组播组与源列表之间的对应方式为EXCLUDE |
|
过滤模式报告,通告过滤模式发生变化 |
TO_IN |
值为0x03,表示组播组与源列表之间的对应关系切换到INCLUDE,如果源列表为空,则表示离开该组播组 |
TO_EX |
值为0x04,表示组播组与源列表之间的对应关系切换到EXCLUDE |
|
源列表报告,通告源发生变化 | ALLOW |
值为0x05,表示在现有基础上,还希望从哪些源接收或不接受数据,如果当前对应关系为INCLUDE,则向现有源列表中添加某些组播源,如果当前对应关系为EXCLUDE,则从源列表中删除某些组播源 |
BLOCK | 值为0x06,表示在现有基础上,还希望从哪些源接收或不接受数据,如果当前对应关系为INCLUDE,则从现有源列表中删除某些组播源,如果当前对应关系为EXCLUDE,则向现有源列表中添加某些组播源 |
以下是Group Record字段说明
字段 | 说明 |
Aux Data Len | 辅助数据长度,在IGMPv3中不存在辅助字段,所以该值为0 |
Number os Sources | 本记录中包含的组播源地址数量 |
Multicast Address | 组播组地址 |
Sources Address | 组播源地址 |
Auxiliary Data | 辅助数据,为IGMP后续扩展或后续版本做预留,在IGMPv3中不会使用到任何辅助字段 |
IGMPv3工作机制
IGMPv3在工作机制上与前两个版本新增了主机对组播源的选择能力
特定源组加入
IGMPv3的成员报文会发向224.0.0.22(网段内所有运行IGMPv3的路由器),通过在报告报文中的记录,主机在加入组播组的同时,能够明确要求接受或不接受特定组播源发出的组播数据,以下图为例,网络中存在S1,S2两个组播源,均向组播组G发送组播数据,Host仅希望接收从S1发往组播组G的数据
##如果Host和路由器之间运行的协议是IGMPv1,或者v2,那么Host加入组播组时会同时接收到S1,S2发往组播组G的数据,无论是否需要,但如果采用IGMPv3,主机在加入组播组时就可以明确地指定,希望接收哪个组播源发往G的数据
本文部分来自华为技术手册
博主现为上海思邱实业公司总经理,诚意招商
营业范围:联想戴尔等主流厂商服务器,办公电脑,显示器
华为华三思科等主流厂商数通产品,路由器,交换机,防火墙,无线等等
提供企业网络应急维修,网络周期性维护,服务器应急维修,服务器周期性维护,云计算部署,云存储部署等等各种各样的服务
只要你有IT行业相关的需求,那就可以联系我们
联系方式:17621969147 李先生