为什么IKE使用UDP,并处理任何重传本身?
(较大的IKE数据包可能会导致UDP碎片,并被一些ISP丢弃:undefined。
发布于 2016-04-18 15:31:55
最初,UDP被选择而不是TCP,因为它具有较低的延迟和处理需求。此外,如果ISP遵循IETF标准,这将不是一个问题。有一个运动,增加TCP作为一个替代,并有一个草案RFC (因特网密钥交换草案的tcp传输-ietf-ipsecme-ike-tcp-01),这是过期的。
您所描述的问题实际上存在于两个方面:廉价的消费级设备和不符合IETF标准的ISP,尤其是在实现CGN时。IETF中的许多人对这两种情况都不同情,这就是为什么提议的RFC过期了,而且,我想问题是,当尾巴摇晃狗的时候,这些标准就变得毫无意义: IETF不想仅仅因为供应商和is不遵循其他现有的标准(例如处理碎片)而被欺压到新标准中。
一些设备供应商已经创建了解决方案(例如,由TCP封装的UDP数据包),但这还远远不是通用的或标准化的。
您可以游说或加入IETF来表达您对使用TCP的标准的支持。
发布于 2016-04-18 15:45:04
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函数都会请求重新传输。这不太理想。
https://networkengineering.stackexchange.com/questions/29669
复制相似问题