UDP协议的收发操作
大多数的应用程序都用TCP协议来收发数据,但当然也有例外。有些应用程序不使用TCP协议,而是使用UDP协议来收发数据。向DNS服务器查询IP地址的时候我们用的也是UDP协议。
不需要重发的数据用UDP发送更高效
由于我们需要将数据高效且可靠地发送给接收方。为了实现可靠性,tcp协议要求确认对方是否收到了我们发送的数据,如果没有还需要再发一遍。并且为了实现高效的传输,我们要避免重发已经送达的包,而是只重发那些出错的或者未送达的包。TCP之所以复杂,就是因为要实现这一点。
使用udp的场景
- 需要发送的数据很短
某些情况下我们要发送的数据很短,用一个包就能装得下。如果只有一个包,就不用考虑哪个包未送达了,因为全部重发也只不过是重发一个包而已,这种情况下我们就不需要TCP这样复杂的机制了。而且,如果不使用TCP,也不需要发送那些用来建立和断开连接的控制包了。此外,我们发送了数据,对方一般都会给出回复,只要将回复的数据当作接收确认就行了,也不需要专门的接收确认包了。像DNS查询等交换控制信息的操作基本上都可以在一个包的大小范围内解决,这种场景中就可以用UDP来代替TCP
- 音频和视频数据
音频和视频数据必须在规定的时间内送达,一旦送达晚了,就会错过播放时机,导致声音和图像卡顿。如果像TCP一样通过接收确认响应来检查错误并重发,重发的过程需要消耗一定的时间,因此重发的数据很可能已经错过了播放的时机。一旦错过播放时机,重发数据也是没有用的,因为声音和图像已经卡顿了,这是无法挽回的。当然,我们可以用高速线路让重发的数据能够在规定的时间内送达,但这样一来可能要增加几倍的带宽才行
此外,音频和视频数据中缺少了某些包并不会产生严重的问题,只是会产生一些失真或者卡顿而已,一般都是可以接受的。在这些无需重发数据,或者是重发了也没什么意义的情况下,使用UDP发送数据的效率会更高。
注:内容来源于书籍:网络是怎样连接的