由于TCP能够保证数据包的传递,因此可以被认为是“可靠的”,而UDP并不保证任何东西,数据包可能会丢失。在应用程序中使用UDP传输数据相对于TCP流传输有什么优势?在什么情况下UDP会是更好的选择,为什么?
我假设UDP更快,因为它没有创建和维护流的开销,但如果一些数据永远无法到达目的地,那么这个假设是否还有意义呢?
由于TCP能够保证数据包的传递,因此可以被认为是“可靠的”,而UDP并不保证任何东西,数据包可能会丢失。在应用程序中使用UDP传输数据相对于TCP流传输有什么优势?在什么情况下UDP会是更好的选择,为什么?
我假设UDP更快,因为它没有创建和维护流的开销,但如果一些数据永远无法到达目的地,那么这个假设是否还有意义呢?
如果TCP能够可能工作,我有点不愿意建议使用UDP。问题在于,如果TCP由于连接过于拥挤或延迟过高而无法工作,那么更改应用程序以使用UDP是不太可能有所帮助的。糟糕的连接对于UDP也是不利的。TCP已经非常有效地最小化了拥塞。
我唯一能想到需要使用UDP的情况是广播协议。在涉及两个已知主机的应用程序中,UDP可能只会提供微不足道的性能优势,而代价则是显著提高的代码复杂性。
只有在您真正知道自己在做什么时才使用UDP。今天UDP在极其罕见的情况下使用,但是试图将其应用到任何地方的(即使是非常有经验的)专家数量似乎不成比例。也许他们喜欢自己实现错误处理和连接维护代码。
TCP应该预计在现代网络接口卡上由于所谓的校验和印记而更快。令人惊讶的是,在快速连接速度(例如1Gbps)下,计算校验和对于CPU来说是一个很大的负担,因此它被卸载到NIC硬件中,该硬件识别TCP数据包以进行印记,并且它不会为您提供相同的服务。
UDP非常适合VoIP地址,其中数据包必须被发送而不考虑其可靠性... 视频聊天是UDP的一个例子(您可以通过wireshark网络捕获在任何视频聊天期间进行检查)... 此外,TCP无法与DNS和SNMP协议一起使用。 UDP没有任何开销,而TCP有很多开销。