与UDP相比,我想知道创建新连接的一般成本。我知道TCP需要初始交换数据包(3次握手)。什么是其他费用?例如,在设置缓冲区等内核中是否存在某种魔法?
我问的原因是我可以保持现有连接打开并根据需要重复使用它。但是,如果重新连接的开销很小,则会降低复杂性。
答案 0 :(得分:11)
一旦UDP数据包被转储到线路上,UDP协议栈就可以完全忘记了它。使用TCP,至少有连接细节(源/目标端口和源/目标IP),序列号,连接的窗口大小等......这不是一个庞大的数据量,但在繁忙的服务器有很多连接。
然后还有3次握手。一些脑卒(和/或恶意系统)可以滥用该过程(查找“同步泛滥”),或者只是将连接放在他们的末端,让您的系统等待响应或关闭通知永远不会到来。优点是使用TCP,系统将尽力确保数据包到达必要的位置。使用UDP,根本无法保证。
答案 1 :(得分:8)
与数据包交换的延迟相比,内核设置时间等所有其他成本都是微不足道的。
答案 2 :(得分:5)
选项1:创建TCP连接的一般成本是:
步骤1:需要交换数据包,因此延迟到&来自网络延迟加上目标服务器的服务时间。两个盒子都没有显着的CPU使用率。
第2步:取决于邮件的大小。
步骤3:IIRC,只发送一个“立即关闭”数据包,无需等待目标确认,因此不涉及延迟。
选项2:UDP的成本:*
第1步:需要最少的设置,没有延迟担忧,非常快。
步骤2:小心谨慎,UDP中没有重传,因为它不关心数据包是否被任何人接收。我听说消息越大,数据被接收损坏的可能性就越大,而且经验法则是你将丢失超过20 MB的一定比例的消息。
第3步:最少的工作,最短的时间。
选项3:使用ZeroMQ
您正在将TCP与UDP进行比较,目标是减少重新连接时间。有一个很好的妥协:ZeroMQ套接字。
ZMQ允许您设置一个发布套接字,您不关心是否有人在监听(如UDP),并且在该套接字上有多个侦听器。这不是UDP套接字 - 它是这两种协议的替代品。
有关详细信息,请参阅:ZeroMQ.org。
它具有极高的速度和容错能力,并且出于这些原因在金融行业中的使用越来越多。