2.25. 交换冲突
2.25. 交换冲突
由于 IKEv2 交换可以由任一对等方发起,因此可能影响同一 SA 的两个交换有可能部分重叠。这可能导致 SA 状态信息暂时不同步,并且对等方可能收到无法以正常方式处理的请求。
显然,使用大于 1 的窗口大小会导致更复杂的情况,特别是在请求被乱序处理时。本节专注于即使窗口大小为 1 也可能出现的问题,并给出解决建议。
当对等方收到因临时状况(例如正在进行的重密钥操作)而无法完成的请求时,SHOULD 发送 TEMPORARY_FAILURE 通知。当对等方收到 TEMPORARY_FAILURE 通知时,它 MUST NOT 立即重试该操作;它 MUST 等待,以便发送方能够完成导致该临时状况的操作。接收方 MAY 在几分钟的时间内重试该请求一次或多次。如果某个对等方在几分钟后仍在同一 IKE SA 上继续收到 TEMPORARY_FAILURE,它 SHOULD 断定状态信息已不同步,并关闭该 IKE SA。
当对等方收到一个针对不存在的 Child SA 的重密钥请求时,SHOULD 发送 CHILD_SA_NOT_FOUND 通知。发起方尝试重密钥的 SA 由 Notify 负载中的 SPI 字段指示,该字段从 REKEY_SA 通知中的 SPI 字段复制而来。收到 CHILD_SA_NOT_FOUND 通知的对等方 SHOULD 静默删除该 Child SA(如果它仍然存在),并发送请求以从头创建一个新的 Child SA(如果该 Child SA 尚不存在)。
2.25.1. 重密钥或关闭 Child SA 时的冲突
如果对等方收到一个针对它当前正尝试关闭的 Child SA 的重密钥请求,它 SHOULD 以 TEMPORARY_FAILURE 回复。如果对等方收到一个针对它当前正在重密钥的 Child SA 的重密钥请求,它 SHOULD 照常回复,并 SHOULD 准备稍后基于 nonce(参见第 2.8.1 节)关闭冗余的 SA。如果对等方收到一个针对不存在的 Child SA 的重密钥请求,它 SHOULD 以 CHILD_SA_NOT_FOUND 回复。
如果对等方收到一个针对它当前正尝试关闭的 Child SA 的关闭请求,它 SHOULD 不带 Delete 负载地回复(参见第 1.4.1 节)。如果对等方收到一个针对它当前正在重密钥的 Child SA 的关闭请求,它 SHOULD 照常回复,并携带 Delete 负载。如果对等方收到一个针对不存在的 Child SA 的关闭请求,它 SHOULD 不带 Delete 负载地回复。
如果对等方收到一个针对 IKE SA 的重密钥请求,而它当前正在创建、重密钥或关闭该 IKE SA 的某个 Child SA,它 SHOULD 以 TEMPORARY_FAILURE 回复。
2.25.2. 重密钥或关闭 IKE SA 时的冲突
如果对等方收到一个针对它当前正在重密钥的 IKE SA 的重密钥请求,它 SHOULD 照常回复,并 SHOULD 准备稍后基于 nonce(参见第 2.8.2 节)关闭冗余的 SA 并迁移继承的 Child SA。如果对等方收到一个针对它当前正尝试关闭的 IKE SA 的重密钥请求,它 SHOULD 以 TEMPORARY_FAILURE 回复。
如果对等方收到一个针对它当前正在重密钥的 IKE SA 的关闭请求,它 SHOULD 照常回复,并忘记自身的重密钥请求。如果对等方收到一个针对它当前正尝试关闭的 IKE SA 的关闭请求,它 SHOULD 照常回复,并忘记自身的关闭请求。
如果对等方在其当前正在重密钥 IKE SA 时收到创建或重密钥 Child SA 的请求,它 SHOULD 以 TEMPORARY_FAILURE 回复。如果对等方在其当前正在重密钥 IKE SA 时收到删除 Child SA 的请求,它 SHOULD 照常回复,并携带 Delete 负载。