ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 用户数据报协议UDP ## UDP的主要特点 1. UDP是**无链接**的,即发送数据之前不需要建立链接(结束后也不需要释放链接),减少了开销和发送数据之间的时延。 2. UDP使用的是**尽最大努力交付**,即不保证可靠交付,主机不需要维护复杂的链接状态表。 3. UDP是**面向报文的**,发送方的UDP对应用层交下来的报文,在添加首部后就向下IP(网络)层交付。UDP对应用层交下来的报文,既不合并也不拆分,而是保留这些报文的边界。 :-: ![](https://img.kancloud.cn/83/42/8342941b6a4732e3c7a4e4b3de8e8357_539x249.png) 4. UDP**没有拥塞控制**,网络发生拥塞时不会使源主机的发送速率降低。这点在某些实时应用中很有用。 5. UDP支持一对一、一对多、多对一、多对多链接。 6. UDP的**首部开销小**,只有8个字节,比TCP的首部20字节要短很多。 ## UDP首部格式 用户数据报UDP由2部分组成:**数据字段**和**首部字段**。首部字段很简单,只有8个字节,分为4个字段,每个字段都占2个字节。 ### 首部字段 * 源端口: 源端口号,在需要对方回信时必传,如不需要,可传0。 * 目标端口: 目的端口号,在终点交付时,必须要传。 * 长度: UDP用户数据报的长度,最小时为8(仅有首部)。 * 校验和:检测UDP用户数据报在传输中是否有错,有错就丢弃。 :-: ![](https://img.kancloud.cn/d9/d7/d9d78605e02b3fa9236fe670aece7c2c_859x351.png) ### 端口分用 当数据接收端的传输层从IP层接收到UDP数据报文时,就会根据UDP首部中的目的端口把数据报文上交给相应的应用程序。 如果接收方UDP发现接收到的报文中目的端口不正确(不存在对应于该端口号的应用程序),就会丢弃报文,并由网际控制报文协议ICMP发送`端口不可达`差错给发送方。 ### 伪首部 UDP用户数据报首部中的校验和字段计算方法有些特殊。在计算校验和时,要在用户数据报之前加12个字节的`伪首部`。所谓伪首部是因为这部分并不是UDP用户数据报真正的首部,只是在计算校验和的时候,临时加在UDP用户数据报首部前面的,伪首部既不向下传递也不向上提交,仅仅是用来计算校验和。