跳到主要内容

2.1. Use of Retransmission Timers (重传定时器的使用)

2.1. Use of Retransmission Timers (重传定时器的使用)

IKE 中的每条消息都以成对形式存在: 请求与响应. 建立 IKE SA 通常由两次交换组成. IKE SA 建立后, 安全关联 (Security Association, SA) 的任一端均可随时发起请求, 任意时刻也可能有多条请求与响应 "在途". 但每条消息都标记为请求或响应之一, 且对每次交换而言, SA 的一端是发起方 (initiator), 另一端是响应方 (responder).

对每一对 IKE 消息, 若发生超时, 由发起方负责重传. 响应方绝对不能重传响应, 除非它收到了请求的重传. 此时, 响应方必须忽略重传的请求, 但可就重传请求再次发送同一响应除外. 发起方必须记住每条请求, 直到收到对应响应. 响应方必须记住每条响应, 直到收到序号大于或等于 "响应中的序号加上其窗口大小" 的请求 (见 2.3 节). 为节省内存, 允许响应方在数分钟超时后忘记响应. 若响应方收到重传请求而它已忘记对应响应, 则必须忽略该请求 (例如, 不得尝试构造新响应).

IKE 是可靠协议: 发起方必须重传请求, 直到收到对应响应或判定 IKE SA 已失败. 在后一种情况下, 发起方丢弃与该 IKE SA 以及用该 IKE SA 协商出的任何 Child SA 相关的全部状态. 发起方的重传必须与原始请求按位完全相同. 也就是说, 自 IKE 头 (IKE SA 发起方 SPI 起) 之后的所有内容必须按位相同; 其前的项 (如 IP 与 UDP 头) 不必相同.

对 IKE_SA_INIT 请求的重传需要一些特殊处理. 当响应方收到 IKE_SA_INIT 请求时, 须判定该分组是属于已有 "半开" IKE SA 的重传 (此时响应方重传同一响应), 还是新请求 (此时响应方创建新 IKE SA 并发送全新响应), 抑或属于已收到 IKE_AUTH 请求的已有 IKE SA (此时响应方忽略它).

仅凭发起方 SPI 与/或 IP 地址不足以区分上述三种情况, 因为位于同一 NAT 之后的两个不同对等方可能选择相同的发起方 SPI. 因此, 健壮的响应方应使用整个分组, 其散列值, 或 Ni 载荷来完成 IKE SA 查找.

单向消息的重传策略与普通消息略有不同. 因为永远不会发送确认, 没有理由无必要地重传单向消息. 鉴于这些消息均为错误类, 对每个 "违规" 分组只发送一次是合理的, 且仅当收到更多违规分组时才重传. 即便如此, 限制此类错误消息的重传次数也是合理的.