跳到主要内容

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_PAYLOAD1
见第 2.5 节.
INVALID_IKE_SPI4
见第 2.21 节.
INVALID_MAJOR_VERSION5
见第 2.5 节.
INVALID_SYNTAX7
表示收到的 IKE 消息无效, 因为某类型, 长度或取值越界, 或因策略原因拒绝请求. 为防范利用伪造消息实施的 DoS 攻击, 仅当 Message ID 与密码学校验和均有效时, 才允许在加密包内针对该状态返回. 为避免向探测节点泄露信息, 对于未覆盖在其他状态类型下的任何错误, 必须发送此状态. 为便于调试, 更详细的错误信息应写入控制台或日志.
INVALID_MESSAGE_ID9
见第 2.3 节.
INVALID_SPI11
见第 1.5 节.
NO_PROPOSAL_CHOSEN14
所提议的密码套件均不可接受. 可在所提供的提议 (包括但不限于 SA payload 取值, USE_TRANSPORT_MODE 通知, IPCOMP_SUPPORTED 通知) 对响应方不可接受的任何情况下发送. 也可在因其他原因无法创建子 SA 时用作“通用”子 SA 错误. 另见第 2.7 节.
INVALID_KE_PAYLOAD17
见第 1.2 与 1.3 节.
AUTHENTICATION_FAILED24
在 IKE_AUTH 消息的响应中发送, 表示因某种原因认证失败. 无关联数据. 另见第 2.21.2 节.
SINGLE_PAIR_REQUIRED34
见第 2.9 节.
NO_ADDITIONAL_SAS35
见第 1.3 节.
INTERNAL_ADDRESS_FAILURE36
见第 3.15.4 节.
FAILED_CP_REQUIRED37
见第 2.19 节.
TS_UNACCEPTABLE38
见第 2.9 节.
INVALID_SELECTORS39
可以在 IKE INFORMATIONAL 交换中发送, 当某节点收到 ESP 或 AH 包, 其选择器与投递该包所用的 SA 上的选择器不匹配 (并导致丢包). Notification Data 包含违规数据包的起始部分 (与 ICMP 消息类似), 通知的 SPI 字段设置为与子 SA 的 SPI 一致.
TEMPORARY_FAILURE43
见第 2.25 节.
CHILD_SA_NOT_FOUND44
见第 2.25 节.
NOTIFY 消息: 状态类型取值
INITIAL_CONTACT16384
见第 2.4 节.
SET_WINDOW_SIZE16385
见第 2.3 节.
ADDITIONAL_TS_POSSIBLE16386
见第 2.9 节.
IPCOMP_SUPPORTED16387
见第 2.22 节.
NAT_DETECTION_SOURCE_IP16388
见第 2.23 节.
NAT_DETECTION_DESTINATION_IP16389
见第 2.23 节.
COOKIE16390
见第 2.6 节.
USE_TRANSPORT_MODE16391
见第 1.3.1 节.
HTTP_CERT_LOOKUP_SUPPORTED16392
见第 3.6 节.
REKEY_SA16393
见第 1.3.3 节.
ESP_TFC_PADDING_NOT_SUPPORTED16394
见第 1.3.1 节.
NON_FIRST_FRAGMENTS_ALSO16395
见第 1.3.1 节.