APP下载

UDP协议-看这篇就够了

消息来源:baojiabao.com 作者: 发布时间:2026-05-27

报价宝综合消息UDP协议-看这篇就够了

每一个程序员应该都知道TCP,UDP协议。UDP是使用者资料报文协议,属于OSI模型中的传输层。它是一种无连线的协议,也就说上一报文和下一报文在协议层没有任何联络,同时提供了简单的不可靠的传输服务。

也就是说UDP是不可靠的,如果要想让资料可靠,就需要在业务层做纠错和检错功能。比如:TFTP

那可能就会有同学问了,既然是不可靠的,为什么不直接使用IP协议呢?还要这么大费周章增加一种协议UDP呢?

其实其中一个最重要的原因就是IP协议中没有埠(port)的概念,它只是规定了两台主机之间的通讯,并没有解决不同主机上应用程序之间的通讯。如果一个主机上的多个应用程序需要通讯,直接用IP协议就无法资料区分资料到底哪个应用程序了。

可以理解为一个埠就是一个通讯通道,当然UDP在IP协议的基础上增加了一些功能,所以我们来总结下:

UDP无连线,没有连线。所以它的传送和接受的开销就会小很多。UDP不保证资料可靠交付,只是尽最大可能。所以不需要维护复杂的连线关系。UDP是面向报文的,新增在应用层下来资料头部,直接塞给IP层。UDP没有拥塞控制UDP至支援多播。UDP头部小,说明传输更多的资料内容下图展示是UDP和上下层的关系

UDP的首部到底是怎样的呢?

先看下图:

从图中可以看出,UDP的首部由四部分组成:

各16bit的来源埠和目的埠用来标记传送和接受的应用程序。因为UDP不需要应答,所以来源埠是可选的,如果来源埠不用,那么置为零。当运输层从IP层收到UDP资料报时,就是根据首部中的目的埠,把UDP资料报通过相应的埠,上交最后的终点--应用程序。如果接收方UDP发现收到的报文中的目的埠号不正确,就会丢弃改报文,并由网际控制协议ICMP传送“埠不可达”差错报文给传送方。ICMP应用Traceroute,就是让传送的UDP使用者资料报故意使用一个非法的UDP埠,结果ICMP返回“埠不可达”差错报文,因而达到了测试的目的。

在目的埠后面是长度固定的以字节为单位的报文长度域,用来指定UDP资料报包括资料部分的长度,长度最小值为8byte。首部剩下地16bit是用来对首部和资料部分一起做校验和(Checksum)的,这部分是可选的,但在实际应用中一般都使用这一功能。UDP和TCP的校验和都覆盖到了他们的首部和资料,而IP首部的校验和只覆盖了IP首部。

UDP和socket怎样配合使用

随着我们进入传输层,我们也可以呼叫操作系统中的API,来构建socket。Socket是操作系统提供的一个程式设计界面,它用来代表某个网络通讯。应用程序通过socket来呼叫系统核心中处理网络协议的模组,而这些核心模组会负责具体的网络协议的实施

这样,我们可以让核心来接收网络协议的细节,而我们只需要提供所要传输的内容就可以了,核心会帮我们控制格式,并进一步向底层封装。因此,在实际应用中,我们并不需要知道具体怎么构成一个UDP包,而只需要提供相关资讯(比如IP地址,比如埠号,比如所要传输的资讯),操作系统核心会在传输之前会根据我们提供的相关资讯构成一个合格的UDP包(以及下层的包和帧)。看下图吧。

UDP使用场景

需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用。如DHCP协议就是基于UDP的。一般的获取IP地址都是内网请求,而且一次获取不到IP又没事。又比如基于UDP的RTP,TFTP,丢一帧资料问题也不大。再比如一些装置发现协议等等。不需要一对一沟通,建立连线,而是可以广播的应用。DHCP就是一种广播的形式。VXLAN也是需要用到组播,也是基于UDP协议的。需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候。QUIC是Google提出的一种基于UDP改进的通讯协议,其目的是降低网络通讯的延迟,提供更好的使用者互动体验。

结语

UDP没有TCP那么复杂,但是网络体系中不可缺少的协议。需要熟练的掌握该协议。
2019-12-07 13:52:00

相关文章