到底有多不靠谱?——再谈UDP协议

Posted 给产品经理讲技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了到底有多不靠谱?——再谈UDP协议相关的知识,希望对你有一定的参考价值。


在IP协议栈的运输层,有两个明星协议,一个是TCP,另一个也是TCP是UDP。

关于TCP协议,持续关注果果的同学会立即会出现这么一个概念:可靠。关于TCP协议的可靠性,在《》文章里有详细的描述。但它的另一个兄弟UDP,却有一个「不靠谱」的名声。

UDP(User Datagram Protocol)的中文名是「用户数据包协议」。与TCP协议一样,负责将上层应用数据从网络的一端传输到另一端。

当应用程序在「应用层」生成了对应的网络数据后,UDP协议会将数据拆分为多段,把每段都放到一个UDP数据包中,然后交由网络层的IP协议发送到网络。

正如我们把TCP的传输过程比喻成发快递,我们也可以把UDP协议的传输过程比作是发平信。我们把信(数据)写好,放到信封(UDP数据包)里,然后出门把信封塞到邮筒中。然而是否会有邮递员来取这封信,信在运输的过程中是否丢失,我们就不得而知了。

UDP协议在传输前没有建立连接的过程,当数据包从主机发出后,这个数据包与该主机就再也没有任何关系,这就让数据包的发送过程无法追溯,正如我们无法问邮筒「喂,邮递员来取信了吗?」

关于UDP有多不靠谱,国外网友做了这样的一个实验:

用分别位于洛杉矶(LA)、阿姆斯特丹(NLD)、东京(JPN)和新泽西州(NJ1、NJ2)的5台服务器在7个小时内互相发送UDP数据包,然后计算每台服务器上数据包的接收率如下:

表里的数据应该会让大部分同学大吃一惊,除了LA到NJ的接收率在98%,其余服务器的接收率都接近100%。看来这个UDP协议并不像传说中的这么不靠谱。

虽然经过试验证明,UDP的「可靠性」可以接近100%,但是考虑到UDP传输的无序性,接收方要维护接收到的UDP数据包的顺序,处理算法的优劣,将直接影响到上层应用的质量

由于不会建立连接,所以UDP协议的传输过程是不可靠并且是无序的。但也正是因为不需要冗余的信息保证传输的可靠性和顺序,UDP报文会比TCP报文小,网络设备处理起来也会比较快在一些网络状况良好的环境中,传输一些对可靠性要求不高的数据,UDP在性能上比TCP有优势。这也应了一句老话——尺有所短寸有所长。


以上是关于到底有多不靠谱?——再谈UDP协议的主要内容,如果未能解决你的问题,请参考以下文章

20 张图解,为什么 HTTP3.0 使用 UDP 协议?

UDP协议

再谈Http和Https及TCP/UDP/IP协议分析,面试官都惊讶的网络见解

传输层 —— UDP协议

传输层协议 ——— UDP协议

Linux从青铜到王者第十七篇:Linux网络基础第二篇之UDP协议