为什么 IKEv2 使用 UDP 而不是 TCP?

为什么 IKEv2 使用 UDP 而不是 TCP?

根据 IKEv2RFC 7296,它是一个可靠的协议。

由于 UDP 是数据报(不可靠)协议,IKE 在其定义中包含了传输错误恢复,包括数据包丢失、数据包重放和数据包伪造。

此外,它还具有重传计时器(第 2.1 节), 消息 ID 形式的序列号(第 2.2 节)和窗口大小(第 2.3 节)虽然,RFC中明确提到,窗口大小的目的不是为了实现拥塞控制。

窗口大小通常是特定实现的(可能可配置的)属性,并且与拥塞控制无关(例如,与 TCP 中的窗口大小不同)。

我的问题是为什么 IKEv2 使用 UDP,而不是利用 TCP?

答案1

其中一个原因是与 IKEv1 向后兼容.另一个是与 NAT 穿越兼容(UDP 封装,RFC 3948) 因为它利用 IKE 连接创建的现有 NAT 映射通过 NAT 传输 ESP(通过 TCP 执行此操作可能会对性能产生一定影响,见下文)。

但是,现在可以使用 TCP 封装 IKEv2 和 ESP(甚至可以在 TLS 中建立隧道)。此扩展定义在RFC 8229如果无法通过 UDP 建立连接(例如由于防火墙),则可以作为后备。

正如所述第12节该 RFC 中,使用它可能会对性能产生一些负面影响(例如 TCP-in-TCP),因此通常最好使用 UDP。由于它是一个相对较新的扩展,对它的支持还不是很广泛(Linux 内核从 5.6 开始支持它,该版本于 2020 年 3 月/4 月发布)。

相关内容