3.2 Generic Payload Header (通用载荷首部)
3.2 Generic Payload Header (通用载荷首部)
第 3.3 至 3.16 节定义的每条 IKE 载荷均以通用载荷首部开头, 见图 5. 下文各载荷的图中会包含该首部, 为简洁起见不再重复说明各字段.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 5: Generic Payload Header
通用载荷首部各字段定义如下:
- Next Payload (1 字节) - 下一条载荷的类型标识. 若当前载荷是消息中最后一条, 则本字段为 0. 该字段提供 "链接" 能力: 可将新载荷追加到消息末尾, 并把前一条的 Next Payload 设为新载荷类型. Encrypted 载荷是例外, 它必须是消息的最后一条载荷, 其内部按附加载荷的格式承载数据. 在 Encrypted 载荷首部中, Next Payload 设为第一条内含载荷的类型 (而非 0); 最后一条内含载荷的 Next Payload 则为 0. 载荷类型取值见下表. 表中取值仅截至 RFC 4306 发布时有效, 此后可能已有新增. 读者应查阅 [IKEV2IANA] 获取最新取值.
| Next Payload Type | Notation | Value |
|---|---|---|
| No Next Payload | 0 | |
| Security Association | SA | 33 |
| Key Exchange | KE | 34 |
| Identification - Initiator | IDi | 35 |
| Identification - Responder | IDr | 36 |
| Certificate | CERT | 37 |
| Certificate Request | CERTREQ | 38 |
| Authentication | AUTH | 39 |
| Nonce | Ni, Nr | 40 |
| Notify | N | 41 |
| Delete | D | 42 |
| Vendor ID | V | 43 |
| Traffic Selector - Initiator | TSi | 44 |
| Traffic Selector - Responder | TSr | 45 |
| Encrypted and Authenticated | SK | 46 |
| Configuration | CP | 47 |
| Extensible Authentication | EAP | 48 |
(将来不应再分配载荷类型值 1-32, 以免与 IKEv1 的代码分配重叠.)
-
Critical (1 比特) - 若发送方希望接收方在不理解前一条载荷 Next Payload 字段中的载荷类型代码时跳过本载荷, 则必须清零. 若希望接收方在不理解该载荷类型时拒收整条消息, 则必须置 1. 若接收方理解该载荷类型代码, 则必须忽略本比特. 本文档所定义的载荷类型在发送时必须将 Critical 清零. 注意 Critical 比特作用于当前载荷, 而非出现在首字节中的 "下一条" 载荷类型. 本文档定义的所有载荷类型各实现都必须理解, 因此必须忽略 Critical 的实际取值. 被跳过的载荷仍应具有合法的 Next Payload 与 Payload Length 字段. 关于该比特的更多说明见第 2.5 节.
-
RESERVED (7 比特) - 发送时必须为 0; 接收时必须忽略.
-
Payload Length (2 字节, 无符号整数) - 当前载荷长度, 以字节计, 含通用载荷首部.
许多载荷含有标记为 "RESERVED" 的字段. IKEv2 中 (以及历史上 IKEv1 中) 部分载荷未按 4 字节边界对齐.