用于一般协议消息交换,可以容忍一定的丢包。UDP比TCP效率高多少?


当前回答

根据我的经验,UDP稍微快一点,但也快不了多少。选择不应该基于性能,而应该基于消息内容和压缩技术。

如果它是一种带有消息交换的协议,我建议使用TCP所带来的轻微性能损失是值得的。你得到了两个端点之间的连接它能提供你所需要的一切。不要尝试在UDP之上创建自己可靠的双向协议,除非你对自己的工作非常非常有信心。

其他回答

网络的设置对于任何测量都是至关重要的。如果您通过本地机器上的套接字或与世界的另一端进行通信,则会产生巨大的差异。

我想在讨论中补充三点:

您可以在这里找到一篇关于TCP与UDP的非常好的文章 游戏开发的背景。 此外,iperf (jperf增强iperf与GUI)是一个 这是一个很好的工具,可以通过测量来回答你的问题。 我用Python实现了一个基准测试(参见这个SO问题)。在平均10^6次迭代中,UDP发送8字节的差异大约是1-2微秒。

如果你需要在两个还没有通话的IP之间快速发送消息,那么UDP到达的速度至少要快3倍,通常是5倍。

根据我的经验,UDP稍微快一点,但也快不了多少。选择不应该基于性能,而应该基于消息内容和压缩技术。

如果它是一种带有消息交换的协议,我建议使用TCP所带来的轻微性能损失是值得的。你得到了两个端点之间的连接它能提供你所需要的一切。不要尝试在UDP之上创建自己可靠的双向协议,除非你对自己的工作非常非常有信心。

在一些应用程序中,TCP比UDP更快(更好的吞吐量)。

当执行大量相对于MTU大小的小写操作时,就会出现这种情况。例如,我读到一个实验,在这个实验中,一个300字节的数据包流通过以太网发送(1500字节MTU), TCP比UDP快50%。

这是因为TCP将尝试缓冲数据并填充整个网段,从而更有效地利用可用带宽。

另一方面,UDP将数据包立即放到网络上,从而使大量的小包阻塞网络。

你可能不应该使用UDP,除非你有非常具体的原因这样做。特别是因为你可以通过禁用Nagle算法来让TCP和UDP具有相同的延迟(例如,如果你正在传输实时传感器数据,而你不担心网络被大量的小包阻塞)。

每个TCP连接都需要在数据传输之前进行初始握手。此外,TCP报头包含大量用于不同信号和消息传递检测的开销。对于消息交换,如果失败的可能性很小,UDP可能就足够了。如果必须验证收据,TCP是最好的选择。