3.10. Notify Payload (通知载荷)
3.10. Notify Payload (通知载荷)
Notify payload 在本文件中记为 N, 用于向 IKE 对端传送信息性数据, 例如错误条件与状态转换. Notify payload 可出现在响应消息中 (通常说明请求被拒绝的原因), 出现在 INFORMATIONAL 交换中 (报告不在 IKE 请求中的错误), 或出现在任何其他消息中以指示发送方能力或改变请求的含义.
Notify payload 定义如下:
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protocol ID | SPI Size | Notify Message Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Security Parameter Index (SPI) ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
~ Notification Data ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
图 16: Notify payload 格式
-
Protocol ID (1 个八位组) - 若本通知涉及 SPI 字段给出的既有 SA, 本字段指示该 SA 的类型. 对于涉及子 SA 的通知, 本字段必须包含 (2) 表示 AH 或 (3) 表示 ESP. 本文档定义的通知中, 仅 INVALID_SELECTORS, REKEY_SA 与 CHILD_SA_NOT_FOUND 包含 SPI. 若 SPI 字段为空, 本字段必须发送为零且必须在接收时忽略.
-
SPI Size (1 个八位组) - 由 IPsec 协议 ID 定义的 SPI 长度 (以八位组计), 若无适用 SPI 则为零. 对于涉及 IKE SA 的通知, SPI Size 必须为零且该字段必须为空.
-
Notify Message Type (2 个八位组) - 指定通知消息类型.
-
SPI (可变长度) - Security Parameter Index.
-
Notification Data (可变长度) - 除 Notify Message Type 外传送的状态或错误数据. 本字段的取值依类型而定 (见下).
Notify payload 的载荷类型为四十一 (41).
3.10.1. Notify Message Types (通知消息类型)
通知信息可以是说明无法建立 SA 的错误消息, 也可以是管理 SA 数据库的进程希望与对等进程通信的状态数据.
下表列出通知消息及其对应取值. 与 IKEv1 相比, 不同错误状态的数量已大幅减少, 既为简化, 也为避免向探测者泄露配置信息.
0 - 16383 范围内的类型用于报告错误. 实现在响应中收到带有其无法识别的此类类型的 Notify payload 时, 必须假定相应请求已完全失败. 请求中无法识别的错误类型以及请求或响应中的状态类型必须忽略, 并应记录日志.
带有状态类型的 Notify payload 可以添加到任何消息中, 若无法识别则必须忽略. 它们用于指示能力, 并作为 SA 协商的一部分用于协商非密码学参数.
关于错误处理的更多信息见第 2.21 节.
下表中的取值仅截至 RFC 4306 发布之日有效, 另加本文档新增的两个错误类型. 此后可能已有其他取值被加入, 或将在本文档发布之后加入. 读者应查阅 [IKEV2IANA] 获取最新取值.
| NOTIFY 消息: 错误类型 | 取值 |
|---|---|
| UNSUPPORTED_CRITICAL_PAYLOAD | 1 |
| 见第 2.5 节. | |
| INVALID_IKE_SPI | 4 |
| 见第 2.21 节. | |
| INVALID_MAJOR_VERSION | 5 |
| 见第 2.5 节. | |
| INVALID_SYNTAX | 7 |
| 表示收到的 IKE 消息无效, 因为某类型, 长度或取值越界, 或因策略原因拒绝请求. 为防范利用伪造消息实施的 DoS 攻击, 仅当 Message ID 与密码学校验和均有效时, 才允许在加密包内针对该状态返回. 为避免向探测节点泄露信息, 对于未覆盖在其他状态类型下的任何错误, 必须发送此状态. 为便于调试, 更详细的错误信息应写入控制台或日志. | |
| INVALID_MESSAGE_ID | 9 |
| 见第 2.3 节. | |
| INVALID_SPI | 11 |
| 见第 1.5 节. | |
| NO_PROPOSAL_CHOSEN | 14 |
| 所提议的密码套件均不可接受. 可在所提供的提议 (包括但不限于 SA payload 取值, USE_TRANSPORT_MODE 通知, IPCOMP_SUPPORTED 通知) 对响应方不可接受的任何情况下发送. 也可在因其他原因无法创建子 SA 时用作“通用”子 SA 错误. 另见第 2.7 节. | |
| INVALID_KE_PAYLOAD | 17 |
| 见第 1.2 与 1.3 节. | |
| AUTHENTICATION_FAILED | 24 |
| 在 IKE_AUTH 消息的响应中发送, 表示因某种原因认证失败. 无关联数据. 另见第 2.21.2 节. | |
| SINGLE_PAIR_REQUIRED | 34 |
| 见第 2.9 节. | |
| NO_ADDITIONAL_SAS | 35 |
| 见第 1.3 节. | |
| INTERNAL_ADDRESS_FAILURE | 36 |
| 见第 3.15.4 节. | |
| FAILED_CP_REQUIRED | 37 |
| 见第 2.19 节. | |
| TS_UNACCEPTABLE | 38 |
| 见第 2.9 节. | |
| INVALID_SELECTORS | 39 |
| 可以在 IKE INFORMATIONAL 交换中发送, 当某节点收到 ESP 或 AH 包, 其选择器与投递该包所用的 SA 上的选择器不匹配 (并导致丢包). Notification Data 包含违规数据包的起始部分 (与 ICMP 消息类似), 通知的 SPI 字段设置为与子 SA 的 SPI 一致. | |
| TEMPORARY_FAILURE | 43 |
| 见第 2.25 节. | |
| CHILD_SA_NOT_FOUND | 44 |
| 见第 2.25 节. |
| NOTIFY 消息: 状态类型 | 取值 |
|---|---|
| INITIAL_CONTACT | 16384 |
| 见第 2.4 节. | |
| SET_WINDOW_SIZE | 16385 |
| 见第 2.3 节. | |
| ADDITIONAL_TS_POSSIBLE | 16386 |
| 见第 2.9 节. | |
| IPCOMP_SUPPORTED | 16387 |
| 见第 2.22 节. | |
| NAT_DETECTION_SOURCE_IP | 16388 |
| 见第 2.23 节. | |
| NAT_DETECTION_DESTINATION_IP | 16389 |
| 见第 2.23 节. | |
| COOKIE | 16390 |
| 见第 2.6 节. | |
| USE_TRANSPORT_MODE | 16391 |
| 见第 1.3.1 节. | |
| HTTP_CERT_LOOKUP_SUPPORTED | 16392 |
| 见第 3.6 节. | |
| REKEY_SA | 16393 |
| 见第 1.3.3 节. | |
| ESP_TFC_PADDING_NOT_SUPPORTED | 16394 |
| 见第 1.3.1 节. | |
| NON_FIRST_FRAGMENTS_ALSO | 16395 |
| 见第 1.3.1 节. |