3. Packet 格式
本节描述 MLDv2 packet format 的细节. 所有 MLDv2 message 都在 ICMPv6 packet [RFC2463] 中发送.
3.1. Multicast Listener Query Message
Multicast Listener Query Message 由 multicast router 发送, 用于查询相邻 interface 的 multicast reception state. 其格式如下:
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] |
* *
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.1.1. Type
130 (Multicast Listener Query)
3.1.2. Code
由发送方初始化为零; 接收方忽略.
3.1.3. Checksum
标准 ICMPv6 checksum.
3.1.4. Maximum Response Code
指定发送响应 Report 之前允许的最长时间. 实际允许时间称为 Maximum Response Delay, 以毫秒为单位表示, 并按如下方式从 Maximum Response Code 派生:
如果 Maximum Response Code < 32768, 则 Maximum Response Delay = Maximum Response Code
如果 Maximum Response Code >= 32768, 则 Maximum Response Code 按如下方式表示一个 floating-point value:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1| exp | mant |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Maximum Response Delay = (mant | 0x1000) << (exp + 3)
3.1.5. Reserved
由发送方初始化为零; 接收方忽略.
3.1.6. Multicast Address
- 对于 General Query, Multicast Address 字段设置为零.
- 对于 Multicast-Address-Specific Query, 它设置为被查询的 multicast address.
- 对于 Multicast-Address-and-Source-Specific Query, 它设置为被查询的 multicast address.
3.1.7. S Flag (Suppress Router-Side Processing)
当设置为 1 时, 表示任何接收该 Query 的 multicast router 都要抑制其在听到 Query 时通常执行的 timer update.
3.1.8. QRV (Querier's Robustness Variable)
如果非零, 则包含 Query 发送方使用的 [Robustness Variable] 值. 如果发送方的 [Robustness Variable] 超过 7, 则发送最大值 7.
3.1.9. QQIC (Querier's Query Interval Code)
指定 Querier 使用的 [Query Interval]. 实际间隔称为 Querier's Query Interval (QQI), 以秒为单位表示, 并按如下方式从 Querier's Query Interval Code 派生:
如果 QQIC < 128, 则 QQI = QQIC
如果 QQIC >= 128, 则 QQIC 按如下方式表示一个 floating-point value:
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|1| exp | mant |
+-+-+-+-+-+-+-+-+
QQI = (mant | 0x10) << (exp + 3)
3.1.10. Number of Sources (N)
指定 Query 中存在多少个 source address. 对于 General Query 和 Multicast-Address-Specific Query, 该数字为零; 对于 Multicast-Address-and-Source-Specific Query, 该数字非零.
3.1.11. Source Address [i]
Source Address [i] 字段是由 n 个 IPv6 unicast address 组成的 vector, 其中 n 是 Number of Sources (N) 字段中的值.
3.2. Multicast Listener Report Message
Multicast Listener Report Message 由 multicast listener 发送, 用于报告其当前 multicast reception state. 其格式如下:
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Multicast Address Record [1] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Multicast Address Record [2] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| . |
. . .
| . |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Multicast Address Record [M] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.2.1. Type
143 (Version 2 Multicast Listener Report)
3.2.2. Reserved
由发送方初始化为零; 接收方忽略.
3.2.3. Checksum
标准 ICMPv6 checksum.
3.2.4. Nr of Mcast Address Records (M)
指定该 Report 中存在多少个 Multicast Address Record.
3.2.5. Multicast Address Record
每个 Multicast Address Record 具有如下内部格式:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Record Type | Aux Data Len | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
* *
| Multicast Address |
* *
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
* *
| Source Address [1] |
* *
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. . .
. . .
. . .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
* *
| Source Address [N] |
* *
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Auxiliary Data .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.2.6.1. Record Type
参见第 4 节.
3.2.6.2. Aux Data Len
该 Multicast Address Record 中 Auxiliary Data 字段的长度, 单位为 32-bit word.
3.2.6.3. Number of Sources (N)
指定该 Multicast Address Record 中存在多少个 source address.
3.2.6.4. Multicast Address
该 Multicast Address Record 所对应的 multicast address.
3.2.6.5. Source Address [i]
Source Address [i] 字段是由 n 个 IPv6 unicast address 组成的 vector, 其中 n 是 Number of Sources (N) 字段中的值.
3.2.6.6. Auxiliary Data
与该 Multicast Address Record 关联的附加数据. 当前未定义 Auxiliary Data, 因此 Aux Data Len 设置为 0, 且该字段不存在.