为什么 IKE 使用 UDP,并自己处理任何重传?
(较大的 IKE 数据包可能会导致 UDP 碎片并被某些 ISP 丢弃:IKE over TCP。
为什么 IKE 使用 UDP,并自己处理任何重传?
(较大的 IKE 数据包可能会导致 UDP 碎片并被某些 ISP 丢弃:IKE over TCP。
最初,选择 UDP 而非 TCP 是因为其较低的延迟和处理要求。此外,如果 ISP 遵循 IETF 标准,这也不是问题。有一种将 TCP 添加为替代方案的运动,并且有一个 RFC 草案(用于 Internet 密钥交换的 TCP 传输draft-ietf-ipsecme-ike-tcp-01)已过期。
您描述的问题实际上存在于两个地方:廉价的消费级设备和不遵循 IETF 标准的 ISP,尤其是在实施 CGN 时。IETF 中的许多人对这两种情况都没有同情,这就是提议的 RFC 过期的原因,而且,我想,重点是当尾巴摇摆不定时,标准变得毫无意义:IETF 不想被欺负仅仅因为供应商和 ISP 不/不会遵循其他现有标准(例如处理碎片)而加入新标准。
一些设备供应商已经创建了变通方法(例如,由 TCP 封装的 UDP 数据包),但这远非通用或标准化。
您可以游说或加入 IETF 以表达您对使用 TCP 的标准的支持。
IKE 的意思是封装其他通信。如果“其他通信”需要 TCP 提供的所有 L4 纠错,那么“其他通信”应该使用 TCP。
这样,IKE/IPsec 只负责创建安全传输。不是一个可靠的。
想象一下通过 IPsec/IKE 隧道传输 VOIP。VOIP 主要(并且有意)使用 UDP,但如果此 VOIP 流量通过 IPsec 隧道,并且 IPsec 隧道使用 TCP,则在 IPsec 为丢失的数据包整理重新传输时,您的呼叫可能会延迟 - 从而抵消好处使用 UDP 进行 VOIP。
换句话说,让两个独立的函数处理纠错并没有增加任何好处。如果您的数据流关心纠错,请使用 TCP。如果您的数据流没有,或者想要自行管理纠错,请使用 UDP。这些 UDP 或 TCP 数据包的传输不应干扰或导致与您为数据选择的内容发生冲突。
唯一不会增加额外纠错功能的协议是 UDP。
又如:如果同时使用IPsec的TCP和使用TCP的基础数据,如果分组被在运输过程中掉落,两者的功能的IPsec和TCP函数将每个请求重传。这将是不理想的。