用于一般协议消息交换,可以容忍一定的丢包。UDP比TCP效率高多少?
当前回答
UDP比TCP快,原因很简单,因为它不存在允许连续数据包流的确认数据包(ACK),而不是使用TCP窗口大小和往返时间(RTT)来确认一组数据包的TCP。
要了解更多信息,我推荐简单但非常容易理解的Skullbox解释(TCP vs. UDP)
其他回答
请记住,TCP通常在网络上保存多条消息。如果你想在UDP中实现这一点,如果你想可靠地做到这一点,你将有相当多的工作。你的解决方案要么不太可靠,要么速度较慢,要么工作量巨大。有有效的UDP应用程序,但如果你问这个问题,你的可能不是。
在一些应用程序中,TCP比UDP更快(更好的吞吐量)。
当执行大量相对于MTU大小的小写操作时,就会出现这种情况。例如,我读到一个实验,在这个实验中,一个300字节的数据包流通过以太网发送(1500字节MTU), TCP比UDP快50%。
这是因为TCP将尝试缓冲数据并填充整个网段,从而更有效地利用可用带宽。
另一方面,UDP将数据包立即放到网络上,从而使大量的小包阻塞网络。
你可能不应该使用UDP,除非你有非常具体的原因这样做。特别是因为你可以通过禁用Nagle算法来让TCP和UDP具有相同的延迟(例如,如果你正在传输实时传感器数据,而你不担心网络被大量的小包阻塞)。
UDP比TCP快,原因很简单,因为它不存在允许连续数据包流的确认数据包(ACK),而不是使用TCP窗口大小和往返时间(RTT)来确认一组数据包的TCP。
要了解更多信息,我推荐简单但非常容易理解的Skullbox解释(TCP vs. UDP)
每个TCP连接都需要在数据传输之前进行初始握手。此外,TCP报头包含大量用于不同信号和消息传递检测的开销。对于消息交换,如果失败的可能性很小,UDP可能就足够了。如果必须验证收据,TCP是最好的选择。
网络的设置对于任何测量都是至关重要的。如果您通过本地机器上的套接字或与世界的另一端进行通信,则会产生巨大的差异。
我想在讨论中补充三点:
您可以在这里找到一篇关于TCP与UDP的非常好的文章 游戏开发的背景。 此外,iperf (jperf增强iperf与GUI)是一个 这是一个很好的工具,可以通过测量来回答你的问题。 我用Python实现了一个基准测试(参见这个SO问题)。在平均10^6次迭代中,UDP发送8字节的差异大约是1-2微秒。
推荐文章
- 为什么SCTP不常用/不为人所知
- 连接网络共享时,如何提供用户名和密码
- 如何找到可用的端口?
- 如何通过windows命令行关闭TCP和UDP端口
- UDP和TCP比起来快多少?
- 一个干净、轻量级的Python扭曲的替代品?
- 将主机端口转发到docker容器
- 远程主机强制关闭现有连接
- TCP连接的最大数据包大小
- HTTP 1.1和HTTP 2.0的区别是什么?
- connectexception:拒绝连接
- 互联网上最大的安全UDP包大小是多少
- 关闭vs关闭套接字?
- 如何解决“java.net.BindException: Address already in use: JVM_Bind”错误?
- 增加Linux中TCP/IP连接的最大数量