创建TCP连接的一般开销

时间:2011-01-29 23:24:49

标签: sockets networking tcp

与UDP相比,我想知道创建新连接的一般成本。我知道TCP需要初始交换数据包(3次握手)。什么是其他费用?例如,在设置缓冲区等内核中是否存在某种魔法?

我问的原因是我可以保持现有连接打开并根据需要重复使用它。但是,如果重新连接的开销很小,则会降低复杂性。

3 个答案:

答案 0 :(得分:11)

一旦UDP数据包被转储到线路上,UDP协议栈就可以完全忘记了它。使用TCP,至少有连接细节(源/目标端口和源/目标IP),序列号,连接的窗口大小等......这不是一个庞大的数据量,但在繁忙的服务器有很多连接。

然后还有3次握手。一些脑卒(和/或恶意系统)可以滥用该过程(查找“同步泛滥”),或者只是将连接放在他们的末端,让您的系统等待响应或关闭通知永远不会到来。优点是使用TCP,系统将尽力确保数据包到达必要的位置。使用UDP,根本无法保证。

答案 1 :(得分:8)

与数据包交换的延迟相比,内核设置时间等所有其他成本都是微不足道的。

答案 2 :(得分:5)

选项1:创建TCP连接的一般成本是:

  1. 创建套接字连接
  2. 发送数据
  3. 拆除套接字连接
  4. 步骤1:需要交换数据包,因此延迟到&来自网络延迟加上目标服务器的服务时间。两个盒子都没有显着的CPU使用率。

    第2步:取决于邮件的大小。

    步骤3:IIRC,只发送一个“立即关闭”数据包,无需等待目标确认,因此不涉及延迟。

    选项2:UDP的成本:*

    1. 创建UDP对象
    2. 发送数据
    3. 关闭UDP对象
    4. 第1步:需要最少的设置,没有延迟担忧,非常快。

      步骤2:小心谨慎,UDP中没有重传,因为它不关心数据包是否被任何人接收。我听说消息越大,数据被接收损坏的可能性就越大,而且经验法则是你将丢失超过20 MB的一定比例的消息。

      第3步:最少的工作,最短的时间。

      选项3:使用ZeroMQ

      您正在将TCP与UDP进行比较,目标是减少重新连接时间。有一个很好的妥协:ZeroMQ套接字。

      ZMQ允许您设置一个发布套接字,您不关心是否有人在监听(如UDP),并且在该套接字上有多个侦听器。这不是UDP套接字 - 它是这两种协议的替代品。

      有关详细信息,请参阅:ZeroMQ.org

      它具有极高的速度和容错能力,并且出于这些原因在金融行业中的使用越来越多。