【计算机网络】UDP报文详解

目录

[一. UDP协议概述](#一. UDP协议概述)

[二. UDP报文格式](#二. UDP报文格式)

[1. 首部](#1. 首部)

[2. 校验和](#2. 校验和)

[三. UDP的缓冲区](#三. UDP的缓冲区)

结束语


一. UDP协议概述

UDP------用户数据报协议,是传输层的一个重要协议

基于UDP的应用层协议有: DNS,TFTP,SNMP,NTP

协议 全称 默认端口号
DNS Domain Name Service(域名服务) 53
TFTP Trivial File Transfer Protocol(简单文件传输协议) 69
SNMP Simple Network Management Protocol(简单网络管理协议) 通过UDP端口161接收,只有Trap信息采用端口162
NTP Network Time Protocol(网络时间协议) 123

UDP的主要特点:

  1. UDP是无连接的。即发送数据前不需要建立连接,发送数据结束也没有连接释放,因此减少了开销和发送数据前的时延
  2. UDP使用尽最大努力交付。即不保证可靠交付,因此不需要维护复杂的连接状态表(有许多参数)
  3. UDP是面向数据报的。发送方的UDP对应用层交付的报文,在添加首部后直接交付给IP层。UDP对应用层交付的报文,既不合并,也不拆分,而是保留这些报文的边界。也就是说,应用层给UDP多长报文,UDP就发多长,一次发送一个报文,如下图。
  4. 在接收方的UDP,对于IP层交付的UDP用户数据报,在去除UDP首部后也直接交付应用层,不作任何处理,一次交付一个完整的报文。因此这就将控制报文长度的工作交给了应用层:应用层要选择合适大小的报文。若报文太长,UDP封装后交给IP层,IP层在传输时可能要进行分片处理,减低了IP层的效率。反之,应用层报文太短,效率也低
  5. UDP没有拥塞控制。因此网络出现的拥塞不会使源主机的发送速率降低 。这对某些实时应用很重要,如IP电话,实时视频会议等,要求源主机以恒定的速率发送数据,并且允许在网络拥塞时丢失一部分数据,但不允许数据有太大的时延
  6. UDP支持一对一,一对多,多对一和多对多的交互通信
  7. UDP的首部开销小,只有8字节,比TCP的20字节的首部短

二. UDP报文格式

UDP报文有两大部分组成:报头+有效载荷(数据),其中有效载荷就是应用层交付给UDP协议层的报文

1. 首部

在学习协议报文时,首先要解决两个问题:1. 报头和有效载荷如何分离 2. 有效载荷如何向上交付

第一个问题:报头和有效载荷如何分离

在UDP中,报头的大小是固定的------8字节。所以只要截取前8字节,后面就都是有效载荷了

第二个问题:有效载荷如何向上交付

UDP是传输层的,上层是应用层。而应用层程序会绑定端口号,UDP报头中有16位(bit位)目的端口号,根据端口号做到向上交付


UDP报头由4部分组成:

  1. 源端口号:发送方的端口号
  2. 目的端口号:目的主机的端口号
  3. UDP长度:UDP报文的长度,单位字节,包括报头和有效载荷
  4. UDP校验和:保证报文完整性和正确性,出错就丢弃

如果接收方 UDP 发现收到的报文中的端口号不存在,就丢弃该报文,并由国际控制报文协议 ICMP发送"端口不可达"差错报文给发送方

2. 校验和

UDP用户数据报首部中的校验和的计算方法较为特殊。在计算校验和前,要在UDP用户数据报之前增加12字节的伪首部。伪首部不是UDP报文的真正首部,只是在计算校验和时,临时添加的字段。伪首部既不向下传送也不向上递交,只是为了计算校验和。下图给出伪首部字段内容

UDP的校验和是把首部和数据部分一起检验。

发送方:首先将全零放入首部的校验和字段,再把伪首部以及UDP报文看成是由许多16位的字串拼接起来的。若UDP报文的数据部分不是偶数个字节,还要填入一个全零字节(但此字节不发送)。然后按照二进制反码计算出这些16位字的和。将此和的二进制反码写入校验和字段

接收方:将收到的UDP报文(添加伪首部和可能填充的全零字节)一起按照二进制反码求这些16位字的和。当无差错时其结果应为全1。否则就表明有差错出现,接收方就丢弃这个UDP报文(也可以上交给应用层,但附上差错警告)

下图给出了一个计算 UDP 校验和的例子。这里假定用户数据报的长度是 15 字节,因此要添加一个全 0 的字节。不难看出,这种简单的差错检验方法的检错能力并不强,当它的好处是简单,处理起来比较快。

三. UDP的缓冲区

UDP报头中,UDP长度为16为,即最长UDP报文时64KB(包含报头),如果长度超过64KB,需要应用层手动分包,多次发送,并在接收方手动拼接

因为UDP是面向数据报的,上层一次交付多少数据,就发送多少数据,所以UDP是没有发送缓冲区的,但是有接受缓冲区,因为需要等待上层处理。所以UDP是全双工的(可同时收发数据)

结束语

本篇博客到此结束,感谢看到此处。

欢迎大家纠错和补充

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。

相关推荐
andxe6 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
shiyi.十一7 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
DFT计算杂谈8 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
水境传感 李兆栋8 小时前
GNSS 位移监测站 :毫米级感知,筑牢安全监测防线
网络
中微极客10 小时前
2026主流AI Agent框架技术选型与性能对比
运维·网络·人工智能
猿的天空14 小时前
机器人双手迎来全栈训练系统:灵初智能EgoSteer让灵巧手无所不能
网络·人工智能·计算机·ai·程序员·机器人·编程
Xzaveir_77714 小时前
OPPO、vivo、荣耀号码认证:多终端拨测矩阵与异常复现
大数据·网络·科技·矩阵·产品经理·ai-native
wuqingshun31415914 小时前
从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
网络
牛马工作号14 小时前
Zigbee 专业详解:从协议到排障
网络·物联网·安全
牛马工作号14 小时前
Wi‑Fi 完全指南:从 802.11 协议到 Wi‑Fi 7、AC+AP 与 Mesh 工程组网
网络·网络协议·智能路由器