用于2个端口/套接字之间通信的UDP功能?

时间:2016-02-27 09:39:01

标签: networking tcp udp

UDP的目的是什么?如果它在没有任何顺序的情况下传送数据包(并且考虑到数据包可能在途中丢失或发送到其他网络)。

2 个答案:

答案 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用于低开销传输