MLD报文格式
MLD(Multicast Listener Discovery)组播监听者发现协议。MLD和IPv4网络中的IGMP功能类似,用于IPv6路由器发现其直连网段上组播监听者(Multicast Listener)、建立、维护组成员关系。现有MLDv1和MLDv2两个版本。
-
MLD(Multicast Listener Discovery)组播监听者发现协议现有MLDv1和MLDv2两个版本,MLDv2在MLDv1的基础上增加了对SSM模型的支持。
-
MLDv2查询消息分为普遍组查询消息和特定组查询消息。普遍组查询消息是查询器定期向共享网段内所有主机以组播方式发送的查询消息,用于查询哪些组播组存在成员;特定组查询消息是查询器向共享网段内特定组播组成员发送的消息,用于查询该组播组是否存在成员。
-
MLDv2成员报告消息是主机向组播路由器发送的报告消息,用于申请加入某个组播组或者应答查询消息。
协议栈结构
MLD消息是ICMPv6消息的一个子集,封装在IPv6报文中。
MLD报文封装格式
+---------------+----------------------------+---------------+
| IPv6 Header | Hop-by-Hop Option Header | MLD message |
+---------------+----------------------------+---------------+
-
IPv6报文头的源地址字段为MLD消息发送者的IPv6本地链路地址。
-
IPv6报文头的目的地址字段用来标识MLD消息所属的组播组。
-
IPv6报文头的Hop Limit字段值为1,表示MLD消息只在本地网段传播。
-
逐跳选项头(Hop-by-Hop Option Header)。其中下一报头(Next Header)字段值为58,表示该报文是ICMPv6消息;路由器告警选项(RTR-ALERT)的值是0x05020000,表明该报文是MLD消息。
-
不同版本的MLD协议,使用不同的消息格式,支持不同的消息类型。
MLDv1有以下几种消息:
-
MLDv1查询消息(Type=130)
-
MLDv1成员报告消息(Type=131)
-
MLDv1离开消息(Type=132)
MLDv2有以下几种消息:
-
MLDv2查询消息(Type=130)
-
MLDv1成员报告消息(Type=131)
-
MLDv1离开消息(Type=132)
-
MLDv2成员报告消息(Type=143)
为了保证能与只支持MLDv1的节点互通,MLDv2支持MLDv1成员报告消息(Type=131)和MLDv1离开消息(Type=132),这两种消息完全继承MLDv1的消息格式,是为了兼容MLDv1而保留的,不再详细说明。
MLDv1
MLD(Multicast Listener Discovery)组播监听者发现协议现有MLDv1和MLDv2两个版本,MLDv2在MLDv1的基础上增加了对SSM模型的支持。
MLDv1消息格式
+0--------------7--------------15------------------------------31
| Type | Code | Checksum |
+---------------|--------------|-------------------------------|
| Maximum Response Delay | Reserved |
+--------------------------------------------------------------|
| Multicast Address |
| |
| |
| |
MLDv1消息格式字段解释
| 字段 | 长度 | 描述 |
|---|---|---|
| Type | 1B | MLDv1消息类型,有3种取值,如所示。 |
| Code | 1B | 代码。发送时此字段设置为0,接收时不处理此字段。 |
| Checksum | 2B | 标准的ICMPv6校验和,覆盖所有MLD消息以及IPv6首部区域中的伪首部。在计算校验和时,此字段以零计算。发送报文时必须计算校验和并将结果写入此字段。接收报文时首先验证校验和,然后才处理报文。 |
| Maximum Response Delay | 2B | 最大响应时间。这个字段只有在查询消息中才有意义。在其他类型的消息中,发送时这个字段被清零,接收时不处理这个字段。 |
| Reserved | 2B | 保留位。发送时此字段被清零,接收时不处理此字段。 |
| Multicast Address | 16B | 组地址。 |
MLDv1消息类型
| 取值(十进制) | 消息类型 | 备注 |
|---|---|---|
| 130 | MLDv1普遍组查询消息 | 普遍组查询消息是查询器定期向共享网段内所有主机以组播方式发送的查询消息,用于查询哪些组播组存在成员。封装该消息的IPv6报文头的目的地址字段为FF02::1。组地址字段为全0,表示不指定组播组。 |
| : | MLDv1特定组查询消息 | 特定组查询消息是查询器向共享网段内特定组播组成员发送的消息,用于查询该组播组是否存在成员。封装该消息的IPv6报文头的目的地址字段为被查询的组播组的IP地址,网络中属于该组播组的成员才能识别并响应。组地址字段为被查询的IPv6组播组地址。 |
| 131 | MLDv1的成员报告消息 | 成员报告消息是主机向组播路由器发送的报告消息,用于申请加入某个组播组或者应答查询消息。封装该消息的IPv6报文头的目的地址字段为主机要加入的IPv6组播组地址,只有网络中的组播路由器和该组成员才能识别并接收。组地址字段为主机要加入的IPv6组播组地址。 |
| 132 | MLDv1离开消息 | 离开消息是主机主动离开组播组时向组播路由器发送的消息,用于宣告自己离开了某个组播组。封装该消息的IPv6报文头的目的地址字段为FF02::2。组地址字段为主机要离开的IPv6组播组地址。 |
MLDv2查询
MLDv2查询消息分为普遍组查询消息和特定组查询消息。普遍组查询消息是查询器定期向共享网段内所有主机以组播方式发送的查询消息,用于查询哪些组播组存在成员;特定组查询消息是查询器向共享网段内特定组播组成员发送的消息,用于查询该组播组是否存在成员。
MLDv2查询消息格式
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 = 130 | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Maximum Response Code | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
* *
| |
* Multicast Address *
| |
* *
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Resv |S| QRV | QQIC | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
* *
| |
* Source Address [1] *
| |
* *
| |
+- -+
| |
* *
| |
* Source Address [2] *
| |
* *
| |
+- . -+
. . .
. . .
+- -+
| |
* *
| |
* Source Address [N] *
| |
* *
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
MLDv2查询消息字段解释
| 字段 | 长度 | 描述 |
|---|---|---|
| Type | 1B | 消息类型,该字段取值为130。 |
| Code | 1B | 发送时此字段设置为0,接收时不处理此字段。 |
| Checksum | 2B | 标准的ICMPv6校验和,覆盖所有MLD消息以及IPv6首部区域中的伪首部。在计算校验和时,此字段以零计算。发送报文时必须计算校验和并将结果写入此字段。接收报文时首先验证校验和,然后才处理报文。 |
| Maximum Response Delay | 2B | 主机发送报告消息前允许的最长响应延迟。 |
| Reserved | 2B | 保留字段。发送时此字段设置为0,接收时不处理此字段。 |
| Multicast Address | 16B | 组地址。普遍组查询消息中,此字段设置为0。特定组查询消息中,此字段设置为待查询的组播地址。特定源-组查询消息中,此字段设置为待查询的组播地址。 |
| Resv | 4比特 | 保留字段。发送时此字段设置为0,接收时不处理此字段。 |
| S(Suppress Router-Side Processing) | 1比特 | 标识位,表示路由器接收到查询消息后是否对定时器更新进行抑制。 |
| QRV(Querier’s Robustness Variable) | 3比特 | 查询器健壮系数。 |
| QQIC(Querier’s Query Interval Code) | 1B | 查询器查询间隔。 |
| Number of Sources | 2B | 组播源个数。普遍组查询消息中,此字段设置为0。特定组查询消息中,此字段设置为0。特定源-组查询消息中,此字段表示查询消息中包含的源地址个数。 |
| Source Address [i] | 16B | 组播源地址列表。普遍组查询消息中,此字段设置为0。特定组查询消息中,此字段设置为0。特定源-组查询消息中,此字段表示指定查询的组播源地址(i=1,2,…,n。n表示源地址个数)。 |
MLDv2成员报告
MLDv2成员报告消息是主机向组播路由器发送的报告消息,用于申请加入某个组播组或者应答查询消息。
MLDv2成员报告消息格式
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 = 143 | Reserved | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |Nr of Mcast Address Records (M)|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Multicast Address Record [1] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Multicast Address Record [2] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| . |
. . .
| . |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Multicast Address Record [M] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
MLDv2成员报告消息字段解释
| 字段 | 长度 | 描述 |
|---|---|---|
| Type | 1B | 消息类型,该字段取值为143。 |
| Reserved | 1B | 发送时此字段设置为0,接收时不处理此字段。 |
| Checksum | 2B | 标准的ICMPv6校验和,覆盖所有MLD消息以及IPv6首部区域中的伪首部。在计算校验和时,此字段以零计算。发送报文时必须计算校验和并将结果写入此字段。接收报文时首先验证校验和,然后才处理报文。 |
| Reserved | 2B | 保留字段。发送时此字段设置为0,接收时不处理此字段。 |
| Number of Multicast Address Record | 2B | 组播地址记录的个数。 |
| Multicast Address Record (i) | 变长 | 组播地址记录,表示主机在接口上侦听到的每个组播地址信息,包括记录类型、组播地址、源地址等。(i=1,2,…,m, m表示组播地址记录的个数)组播地址记录的格式请参见。 |
组播地址记录字段格式
组播地址记录字段格式
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Record Type | Aux Data Len | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
* *
| |
* Multicast Address *
| |
* *
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
* *
| |
* Source Address [1] *
| |
* *
| |
+- -+
| |
* *
| |
* Source Address [2] *
| |
* *
| |
+- -+
. . .
. . .
. . .
+- -+
| |
* *
| |
* Source Address [N] *
| |
* *
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Auxiliary Data .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
组播地址记录字段解释
| 字段 | 长度 | 说明 |
|---|---|---|
| Record Type | 1B | 记录类型:MODE_IS_INCLUDE,表示接口和指定组之间的关系是INCLUDE,源地址列表中会包含的源。该类型的Record不会包含空的源列表。MODE_IS_EXCLUDE,表示组播组与源列表之间的对应方式为EXCLUDE,即接收从指定源列表以外的组播源发往该组播组的数据。CHANGE_TO_INCLUDE_MODE,表示主机的组播组与源列表之间的对应方式由EXCLUDE转换到INCLUDE。CHANGE_TO_EXCLUDE_MODE,表示主机的组播组与源列表之间的对应方式由INCLUDE转换到EXCLUDE。ALLOW_NEW_SOURCES,表示在现有的基础上,还希望从某些组播源接收组播数据。如果当前对应关系为INCLUDE,则向现有源列表中添加某些组播源;如果当前对应关系为EXCLUDE,则从现有源列表中删除某些组播源。BLOCK_OLD_SOURCES,表示在现有的基础上,不再希望从某些组播源接收组播数据。如果当前对应关系为INCLUDE,则从现有源列表中删除某些组播源;如果当前对应关系为EXCLUDE,则向现有源列表中添加某些组播源。 |
| Aux Data Len | 1B | 在组播地址Record中附加Auxiliary Data的长度。 |
| Number of Sources | 2B | 本记录中包含的源地址数量。 |
| Multicast Address | 16B | 组地址。 |
| Source Address | 16B | 组播源地址。 |
| Auxiliary Data | 变长 | 组播地址Record的附加信息。 |
参考标准
MLD参考标准
| 标准 | 描述 |
|---|---|
| Multicast Listener Discovery (MLD) for IPv6 | |
No comments to display
No comments to display