UDP的目的是什么?如果它在没有任何顺序的情况下传送数据包(并且考虑到数据包可能在途中丢失或发送到其他网络)。
答案 0 :(得分:1)
UDP尽可能多的非常有用的用例。
我的头脑中只有几个:
1 /您的有效负载很小(将保留在一个“数据包”中)并且您希望快速运行。这就是当数据大小超过512字节时DNS使用UDP的原因(99%)案件?):
https://en.wikipedia.org/wiki/Domain_Name_System#Protocol_transport
您每天都会处理数百个DNS请求。这节省了多少TCP 3路握手和连接拆除?如何在“互联网”上节省数PB或网络负载?我会说这非常有用!
2 /你不知道你在说谁,或者即使有人正在听或希望回复。换句话说,你不能或不想确定建立一个实际的连接就像TCP一样。可能没有TCP服务正在侦听您。例如,UPnP的SSDP协议使用UDP来发现设备/服务:
https://en.wikipedia.org/wiki/Simple_Service_Discovery_Protocol
使用UDP非常强大,即使没有人在听你的话,你也可以“在野外”发送你的数据。这让我想到了第3点......
3 /您想与多个主机,甚至“每个人”交谈。这是多播和广播,在UDP中很容易做到非常。上面提到的SSDP就是这种情况的一个例子。另一方面,如果您想在TCP上进行多播或广播,那么从一开始就变得非常非常棘手。您必须订阅多播组和blablabla。多播守护程序可能有所帮助(例如:https://github.com/troglobit/smcroute),但在TCP中实际上比使用UDP更困难。
4 /您的数据是实时的,如果目标丢失了,那就没有必要要求“请再次发送,我没有得到它和/或没有正确订购”。那太晚了,抱歉。接收器最好忘记它,继续尝试赶上。这里的典型用例可以是现场音频/视频(电话对话,实时视频流)。在TCP丢失的段的情况下,接收器一次又一次地试图获得旧的,过期的数据是没有意义的。你只能累积网络数据债务。最好忘记它并继续使用新的实时数据。你不能“暂停”实时传入的数据。如果你想要实际的真实的时间,而不是伪实时,就像你进入网络浏览器一样。
我相信其他海报会发现很多UDP用例。
所以UDP非常非常有用。您每天都会使用它而不会注意到它。没有它,网络世界将是一个可怜的地方。你真的会想念它。 “TCP / IP”实际上应该重命名为“TCP-UDP / IP”。
这是我对不公平鄙视但非常有用的UDP的倡导。 : - )
答案 1 :(得分:0)
通常,在速度比可靠性更重要的应用中使用UDP。例如,在从快速采集发送数据的应用程序中使用UDP可能更好,其中可以丢失一些数据点。您还可以使用UDP向收听服务器的任何/多台机器广播/多播。
应用程序可能希望更好地控制性能特征或通信的可靠性。为此,操作系统将IP的“尽力而为数据报”暴露给应用程序,以便它随心所欲地完成任务。
为此,操作系统提供UDP - “用户”数据报协议。它就像IP一样,因为服务是尽力而为的数据报,但不是将这些数据报“交给计算机”,而是增加了一层寻址,说明哪个应用程序对它们感兴趣(和TCP一样,UDP也是如此)一个端口号)。
应用程序可以在UDP之上运行任何他们想要的东西 - 任何运行在尽力而为的数据报上的东西。您可以在该抽象之上运行许多协议。
一般来说:
TCP用于高可靠性数据传输
UDP用于低开销传输