跳到主要内容

2.3. 重叠请求的窗口大小

2.3. 重叠请求的窗口大小​

SET_WINDOW_SIZE 通知断言发送端点有能力为多个未完成的交换维护状态,从而允许接收方在收到第一个请求的响应之前发送多个请求。与 SET_WINDOW_SIZE 通知相关联的数据必须为 4 个八位组长,并包含发送方承诺保留的消息数量的大端表示。在初始交换完成之前,窗口大小始终为 1。

IKE 端点必须等待对每个消息的响应,然后才能发送后续消息,除非它收到了来自其对端的 SET_WINDOW_SIZE Notify 消息,告知其对端准备为多个未完成消息维护状态,以允许更高的吞吐量。

在 IKE SA 建立之后,为了最大化 IKE 吞吐量,IKE 端点可以发出多个请求而无需先获得其中任何一个的响应,但最多不超过其对端 SET_WINDOW_SIZE 所设定的限制。这些请求可能在网络上相互交错传递。IKE 端点必须准备好在其有请求未完成时接受和处理请求,以避免在这种情况下发生死锁。IKE 端点也可以在其有请求未完成时接受和处理多个请求。

IKE 端点不得超出对端声明的窗口大小来发送 IKE 请求。换句话说,如果响应者声明其窗口大小为 N,那么当发起者需要发出请求 X 时,它必须等到收到对请求 X-N 之前的所有请求的响应之后才能发送。IKE 端点必须保存(或能够精确地重新生成)其发送的每个请求的副本,直到它收到相应的响应。IKE 端点必须保存(或能够精确地重新生成)与其声明的窗口大小相同数量的先前响应的副本,以防其响应丢失而发起者通过重传请求来要求重传该响应。

支持大于 1 的窗口大小的 IKE 端点应该能够在网络故障或数据包重排序的情况下乱序处理传入请求,以最大化性能。

窗口大小通常是特定实现的(可能可配置的)属性,与拥塞控制无关(例如,与 TCP 中的窗口大小不同)。特别是,当响应者收到一个包含比当前生效值更小值的 SET_WINDOW_SIZE 通知时该怎么办并未定义。因此,目前没有办法减小现有 IKE SA 的窗口大小;你只能增大它。在重钥 IKE SA 时,新的 IKE SA 从窗口大小 1 开始,直到通过发送新的 SET_WINDOW_SIZE 通知显式增大为止。

当收到超出所支持窗口的 IKE Message ID 时,会发送 INVALID_MESSAGE_ID 通知。此 Notify 消息不得在响应中发送;该无效请求不得被确认。相反,通过发起一个 INFORMATIONAL 交换来通知另一方,其 Notification 数据中包含无效的四八位组 Message ID。发送此通知是可选的,并且此类通知必须进行速率限制。