我想知道与 UDP 相比,创建新连接的一般成本。我知道 TCP 需要初始数据包交换(3 次握手)。其他费用是多少?例如,内核中是否存在设置缓冲区等所需的某种魔法?
我问的原因是我可以保持现有连接打开并根据需要重用它。但是,如果重新连接的开销很小,它会降低复杂性。
最佳答案
一旦 UDP 数据包被转储到线路上,UDP 协议(protocol)栈就可以完全忘记它。使用 TCP,至少有连接详细信息(源/目标端口和源/目标 IP)、序列号、连接窗口大小等……这不是大量数据,但在有很多连接的繁忙服务器。
然后还有 3 次握手。某些脑残(和/或恶意系统)可能会滥用该过程(查找“syn flood”),或者只是在他们的末端断开连接,让您的系统等待永远不会到来的响应或关闭通知。好的一面是,使用 TCP,系统将尽最大努力确保数据包到达它必须到达的地方。使用 UDP,根本没有任何保证。
关于sockets - 创建 TCP 连接的一般开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840116/