Networking 什么时候使用UDP而不是TCP合适?

Networking 什么时候使用UDP而不是TCP合适?,networking,tcp,udp,Networking,Tcp,Udp,因为TCP保证数据包的传递,因此可以认为是“可靠的”,而UDP不保证任何东西,数据包可能会丢失。在应用程序中使用UDP而不是通过TCP流传输数据有什么好处?在什么情况下UDP是更好的选择,为什么 我假设UDP更快,因为它没有创建和维护流的开销,但是,如果某些数据从未到达其目的地,这难道不是无关紧要的吗?视频流是使用UDP的一个完美例子。UDP确实具有较少的开销,并且有利于流式传输音频或视频等实时数据,或者在任何情况下,如果数据丢失都可以。如果数据包丢失,它将被重新发送。对于依赖以特定顺序实时处理

因为TCP保证数据包的传递,因此可以认为是“可靠的”,而UDP不保证任何东西,数据包可能会丢失。在应用程序中使用UDP而不是通过TCP流传输数据有什么好处?在什么情况下UDP是更好的选择,为什么


我假设UDP更快,因为它没有创建和维护流的开销,但是,如果某些数据从未到达其目的地,这难道不是无关紧要的吗?

视频流是使用UDP的一个完美例子。

UDP确实具有较少的开销,并且有利于流式传输音频或视频等实时数据,或者在任何情况下,如果数据丢失都可以。

如果数据包丢失,它将被重新发送。对于依赖以特定顺序实时处理数据的应用程序来说,这并不方便


示例包括视频流,尤其是(例如)。然而,在这些情况下,丢弃的数据包并不是什么大事:我们的感官并不完美,所以我们甚至可能没有注意到。这就是为什么这些类型的应用程序不使用TCP。

UDP的“不可靠性”是一种形式主义。传输不是绝对有保证的。实际上,他们几乎总能通过。它们只是在超时后不会被确认和重试

协商TCP套接字和握手TCP数据包的开销是巨大的。真的很大。没有明显的UDP开销

最重要的是,您可以轻松地用一些可靠的传递握手来补充UDP,这比TCP的开销要少。请阅读以下内容:

UDP对于在发布-订阅类型的应用程序中广播信息非常有用。TIBCO大量使用UDP来通知状态更改

任何其他类型的单向“重大事件”或“日志记录”活动都可以通过UDP数据包很好地处理。您希望发送通知而不构建整个套接字。你不期望不同的听众有任何反应


系统“心跳”或“我还活着”消息也是一个不错的选择。缺少一个不是危机。丢失半打(连续)是。

如果在传输过程中丢失一些数据不会完全破坏正在传输的数据,您希望在TCP上使用UDP。它的许多用途都是在实时应用程序中,例如游戏(即FPS,在FPS中,您不必总是知道每个玩家在任何给定时间的位置,如果您在途中丢失了一些数据包,新数据将正确地告诉您玩家在哪里)和实时视频流(一个损坏的帧不会破坏观看体验)。

UDP是一种无连接协议,用于诸如和之类的协议中,在这些协议中,数据包无序到达是可以接受的,并且数据包的立即传输很重要

它用于SNMP,因为网络管理通常必须在网络处于压力状态时进行,即在难以实现可靠、拥塞控制的数据传输时

它用于DNS,因为它不涉及连接建立,从而避免了连接建立延迟


cheers

当应用程序更关心“实时”数据而不是精确的数据复制时,可以使用UDP。例如,VOIP可以使用UDP,应用程序将担心重新排序数据包,但最终VOIP不需要每个数据包,但更重要的是需要许多数据包的连续流。也许你这里有一个“小故障”在语音质量方面,但主要目的是获取消息,而不是在另一端完全重新创建消息。UDP也用于创建连接和与TCP同步的费用超过有效负载的情况。DNS查询是一个完美的例子。每个查询一个数据包出,一个数据包回。如果使用TCP如果您没有得到DNS响应,请重试。

这是我最喜欢的问题之一。UDP被误解得太多了

在您确实希望快速获得另一台服务器的简单答案的情况下,UDP工作得最好。通常,您希望答案在一个响应数据包中,并且您准备实施自己的协议以提高可靠性或重新发送。DNS是此用例的完美描述。连接设置的成本太高(然而,DNS 也支持TCP模式)

另一种情况是,当您传送的数据可能会丢失,因为新数据将取代以前的数据/状态。天气数据、视频流、股票报价服务(不用于实际交易)或游戏数据会浮现在脑海中

另一种情况是,当您管理大量状态时,您希望避免使用TCP,因为操作系统无法处理那么多会话。这在今天是一种罕见的情况。事实上,现在可以使用用户区TCP堆栈,以便应用程序编写器可以对该TCP状态所需的资源进行更细粒度的控制。Pr在2003年,UDP确实是镇上唯一的游戏


另一种情况是多播通信。UDP可以多播到多个主机,而TCP根本无法做到这一点。

视频游戏的网络通信几乎总是通过UDP完成的


速度是最重要的,如果错过了更新并不重要,因为每个更新都包含了播放器可以看到的完整的当前状态。

UDP具有较低的开销,正如前面所述,它已经适合于视频和音频等流式传输,最好是丢失一个数据包,然后尝试重新发送并赶上

TCP传输没有任何保证,你只需要被告知套接字是否断开,或者基本上是数据是否不会到达,否则数据到达时就会到达

人们忘记的一件大事是udp是基于数据包的,而tcp是基于ByTestStream的,因此不能保证“tcp数据包”是可靠的