【网络是怎样连接的】第2章 - 用电信号传输 TCP/IP 数据(6)

2.6 UDP协议的收发操作

不需要重发的数据用UDP发送更高效

如果漏掉了一个包就要全部重发一遍,怎么看都很低效。为了实现高效的传输,我们要避免重发已经送达的包,而是只重发那些出错的或者未送达的包。TCP之所以复杂,就是因为要实现这一点。

数据很短,用一个包就能装得下。如果只有一个包,就不用考虑哪个包未送达了,因为全部重发也只不过是重发一个包而已,这种情况下我们就不需要TCP这样复杂的机制了。
我们发送了数据,对方一般都会给出回复,只要将回复的数据当作接收确认就行了,也不需要专门的接收确认包了。

控制用的短数据

像DNS查询等交换控制信息的操作基本上都可以在一个包的大小范围内解决,这种场景中就可以用UDP来代替TCP。UDP没有TCP的接收确认、窗口等机制,因此在收发数据之前也不需要交换控制信息,也就是说不需要建立和断开连接的步骤,只要在从应用程序获取的数据前面加上UDP头部,然后交给IP进行发送就可以了(表2.5)。接收也很简单,只要根据IP头部中的接收方和发送方IP地址,以及UDP头部中的接收方和发送方端口号,找到相应的套接字并将数据交给相应的应用程序就可以了。

UDP协议没有其他功能了,遇到错误或者丢包也一概不管。因为UDP只负责单纯地发送包而已,并不像TCP一样会对包的送达状态进行监控,所以协议栈也不知道有没有发生错误。但这样并不会引发什么问题,因此出错时就收不到来自对方的回复,应用程序会注意到这个问题,并重新发送一遍数据。

音频和视频数据

音频和视频数据中缺少了某些包并不会产生严重的问题,只是会产生一些失真或者卡顿而已,一般都是可以接受的。

在这些无需重发数据,或者是重发了也没什么意义的情况下,使用UDP发送数据的效率会更高。

音视频采用udp,丢包会产生卡顿,就算TCP重发数据,卡顿已经产生,重发并不能弥补。卡顿时也是觉得当前网络质量不佳,信号差的锅。

你可能感兴趣的:(【网络是怎样连接的】第2章 - 用电信号传输 TCP/IP 数据(6))