4.2 Options (选项)
当前定义的两个扩展报头 -- Hop-by-Hop Options header 和 Destination Options header -- 携带可变数量的 type-length-value (TLV, 类型-长度-值) 编码的 "options (选项)", 格式如下:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
| Option Type | Opt Data Len | Option Data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
Option Type (选项类型) - 8 位选项类型标识符.
Opt Data Len (选项数据长度) - 8 位无符号整数.此选项的 Option Data 字段的长度 (以八位字节为单位).
Option Data (选项数据) - 可变长度字段.选项类型特定的数据.
报头中的选项序列必须严格按照它们在报头中出现的顺序进行处理; 例如, 接收方不得扫描报头以查找特定类型的选项并在处理所有前面的选项之前处理该选项.
Option Type 标识符的内部编码使得其最高两位指定了当处理 IPv6 节点不识别该 Option Type 时必须采取的行动:
00 - 跳过此选项并继续处理报头.
01 - 丢弃该分组.
10 - 丢弃该分组, 并且无论分组的 Destination Address 是否为组播地址,
都向分组的 Source Address 发送 ICMP Parameter Problem, Code 2 消息,
指向无法识别的 Option Type.
11 - 丢弃该分组, 并且仅当分组的 Destination Address 不是组播地址时,
才向分组的 Source Address 发送 ICMP Parameter Problem, Code 2 消息,
指向无法识别的 Option Type.
Option Type 的第三高位指定该选项的 Option Data 在到达分组最终目的地的途中是否可以改变.当分组中存在 Authentication header 时, 对于其数据可能在途中改变的任何选项, 在计算或验证分组的认证值时, 其整个 Option Data 字段必须被视为零值八位字节.
0 - Option Data 在途中不改变
1 - Option Data 可能在途中改变
上述三个高位应被视为 Option Type 的一部分, 而不是独立于 Option Type.也就是说, 特定选项由完整的 8 位 Option Type 标识, 而不仅仅是 Option Type 的低 5 位.
Hop-by-Hop Options header 和 Destination Options header 使用相同的 Option Type 编号空间.然而, 特定选项的规范可能限制其仅在这两个报头之一中使用.
各个选项可能具有特定的对齐要求, 以确保 Option Data 字段中的多八位字节值落在自然边界上.选项的对齐要求使用符号 xn+y 指定, 意味着 Option Type 必须出现在距报头起始位置 x 个八位字节的整数倍加 y 个八位字节处.例如:
2n 表示距报头起始位置的任何 2 个八位字节偏移量.
8n+2 表示距报头起始位置的任何 8 个八位字节偏移量, 加 2 个八位字节.
有两个填充选项, 在需要对齐后续选项以及将包含报头填充到 8 个八位字节长度的倍数时使用.所有 IPv6 实现都必须识别这些填充选项:
Pad1 option (Pad1 选项) (对齐要求: 无)
+-+-+-+-+-+-+-+-+
| 0 |
+-+-+-+-+-+-+-+-+
注意! Pad1 选项的格式是一个特例 -- 它没有长度和值字段.
Pad1 选项用于在报头的 Options 区域中插入一个八位字节的填充.如果需要多于一个八位字节的填充, 应使用下面描述的 PadN 选项, 而不是多个 Pad1 选项.
PadN option (PadN 选项) (对齐要求: 无)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
| 1 | Opt Data Len | Option Data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
PadN 选项用于在报头的 Options 区域中插入两个或多个八位字节的填充.对于 N 个八位字节的填充, Opt Data Len 字段包含值 N-2, Option Data 由 N-2 个零值八位字节组成.
附录 B 包含设计新选项的格式化指南.