2.25. Exchange Collisions (交换碰撞)
2.25. Exchange Collisions (交换碰撞)
由于 IKEv2 交换可由任一对等体发起, 两个影响同一 SA 的交换可能部分重叠. 可能导致 SA 状态信息暂时不同步, 对等体收到无法正常处理的请求.
显然, 窗口大小大于 1 时情况更复杂, 尤其在请求乱序处理时. 本节聚焦即使窗口为 1 仍可能出现的问题, 并给出建议.
当对等体因临时条件 (如重密钥操作) 无法完成请求时, 应发送 TEMPORARY_FAILURE 通知. 收到 TEMPORARY_FAILURE 的对等体不得立即重试操作; 必须等待, 以便发送方完成导致临时状况的操作. 接收方可以在数分钟内一次或多次重试请求. 若数分钟后仍在同一 IKE SA 上持续收到 TEMPORARY_FAILURE, 应断定状态信息不同步并关闭 IKE SA.
当对等体收到重密钥某个不存在的 Child SA 的请求时, 应发送 CHILD_SA_NOT_FOUND 通知. 发起方试图重密钥的 SA 由 Notify 载荷中的 SPI 字段指示, 该字段从 REKEY_SA 通知的 SPI 字段复制. 收到 CHILD_SA_NOT_FOUND 的对等体应静默删除该 Child SA (若仍存在), 并发送从零创建新 Child SA 的请求 (若 Child SA 尚不存在).
2.25.1. Collisions while Rekeying or Closing Child SAs (重密钥或关闭 Child SA 时的碰撞)
若对等体收到重密钥 Child SA 的请求时自身正试图关闭该 SA, 应以 TEMPORARY_FAILURE 回复. 若收到重密钥请求时自身正在重密钥该 Child SA, 应按常例回复, 并应稍后基于 nonce 准备关闭冗余 SA (见 2.8.1 节). 若收到重密钥不存在的 Child SA 的请求, 应以 CHILD_SA_NOT_FOUND 回复.
若对等体收到关闭 Child SA 的请求时自身正试图关闭该 SA, 应不带 Delete 载荷回复 (见 1.4.1 节). 若收到关闭请求时自身正在重密钥该 Child SA, 应按常例带 Delete 载荷回复. 若收到关闭不存在的 Child SA 的请求, 应不带 Delete 载荷回复.
若对等体收到重密钥 IKE SA 的请求, 而自身正在为该 IKE SA 创建, 重密钥或关闭 Child SA, 应以 TEMPORARY_FAILURE 回复.
2.25.2. Collisions while Rekeying or Closing IKE SAs (重密钥或关闭 IKE SA 时的碰撞)
若对等体收到重密钥 IKE SA 的请求时自身正在重密钥该 IKE SA, 应按常例回复, 并应稍后基于 nonce 准备关闭冗余 SA 并迁移继承的 Child SA (见 2.8.2 节). 若收到重密钥请求时自身正试图关闭该 IKE SA, 应以 TEMPORARY_FAILURE 回复.
若对等体收到关闭 IKE SA 的请求时自身正在重密钥该 IKE SA, 应按常例回复, 并放弃自身的重密钥请求. 若收到关闭请求时自身正试图关闭该 IKE SA, 应按常例回复, 并放弃自身的关闭请求.
若对等体在正在重密钥 IKE SA 时收到创建或重密钥 Child SA 的请求, 应以 TEMPORARY_FAILURE 回复. 若在正在重密钥 IKE SA 时收到删除 Child SA 的请求, 应按常例带 Delete 载荷回复.