跳到主要内容

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 TypeNotationValue
No Next Payload0
Security AssociationSA33
Key ExchangeKE34
Identification - InitiatorIDi35
Identification - ResponderIDr36
CertificateCERT37
Certificate RequestCERTREQ38
AuthenticationAUTH39
NonceNi, Nr40
NotifyN41
DeleteD42
Vendor IDV43
Traffic Selector - InitiatorTSi44
Traffic Selector - ResponderTSr45
Encrypted and AuthenticatedSK46
ConfigurationCP47
Extensible AuthenticationEAP48

(将来不应再分配载荷类型值 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 字节边界对齐.