网站首页 > 文章精选 正文
同学们,今天我们来认真学习下UDP协议特点和报文格式
1. UDP定义
UDP是工作在OSI(开放系统互连,Open Systems Interconnection)模型中传输层的协议。它使用IP作为底层协议,是为应用程序提供一种以最少的协议机制向其他程序发送消息的协议。其主要特点是无连接,不保证可靠传输和面向报文。RFC 768为IETF(互联网工程部,Internet Engineering Task Force)提供的UDP标准。
2. 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字节的首部短。
3. UDP报文格式
UDP协议和TCP协议同位于传输层,介于网络层(IP)和应用层之间:UDP数据部分为应用层报文,而UDP报文在IP中承载。如下图:
UDP 报文格式相对于简单,如下图:
UDP报文有两大部分组成:报头+有效载荷(数据),其中有效载荷就是应用层交付给UDP协议层的报文,首部字段有8个字节,由四个字段组成,每个字段的长度都是2字节。
3.1 首部
在学习协议报文时,首先要解决两个问题:1. 报头和有效载荷如何分离 2. 有效载荷如何向上交付
第一个问题:报头和有效载荷如何分离
在UDP中,报头的大小是固定的——8字节。所以只要截取前8字节,后面就都是有效载荷了。
第二个问题:有效载荷如何向上交付
UDP是传输层的,上层是应用层。而应用层程序会绑定端口号,UDP报头中有16位(bit位)目的端口号,根据端口号做到向上交付。
UDP报头由4部分组成,各字段含义如下:
源端口号:发送方的端口号
目的端口号:目的主机的端口号
UDP长度:UDP报文的长度,单位字节,包括报头和有效载荷,即header+data 总长度
UDP校验和:伪头部,头部,data 三部分校验和。伪头部,文末稍作解释。保证报文完整性和正确性,出错就丢弃。
如果接收方 UDP 发现收到的报文中的端口号不存在,就丢弃该报文,并由国际控制报文协议 ICMP发送“端口不可达”差错报文给发送方。
3.2 校验和
UDP用户数据报首部中的校验和的计算方法较为特殊。在计算校验和前,要在UDP用户数据报之前增加12字节的伪首部。伪首部不是UDP报文的真正首部,只是在计算校验和时,临时添加的字段。伪首部既不向下传送也不向上递交,只是为了计算校验和。下图给出伪首部字段内容:
UDP的校验和是把首部和数据部分一起检验。
发送方:首先将全零放入首部的校验和字段,再把伪首部以及UDP报文看成是由许多16位的字串拼接起来的。若UDP报文的数据部分不是偶数个字节,还要填入一个全零字节(但此字节不发送)。然后按照二进制反码计算出这些16位字的和。将此和的二进制反码写入校验和字段。
接收方:将收到的UDP报文(添加伪首部和可能填充的全零字节)一起按照二进制反码求这些16位字的和。当无差错时其结果应为全1。否则就表明有差错出现,接收方就丢弃这个UDP报文(也可以上交给应用层,但附上差错警告)。
3.3 伪头部(只需了解)
UDP校验和中的伪头部,并非UDP报文中的有效数据,是提取了IP数据报中的源IP,目的IP信息并加上协议等字段构造的数据。伪头部在实际网络传输中,仅用作校验和计算使用,并不发送!因此称为伪头部。事实上在TCP校验和计算中也用到了伪头部,与UDP一致。一句话讲:伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。
综上我们应该知道真正UDP报文格式应如下:
4. UDP的缓冲区
UDP报头中,UDP长度为16,即最长UDP报文时64KB(包含报头),如果长度超过64KB,需要应用层手动分包,多次发送,并在接收方手动拼接。因为UDP是面向数据报的,上层一次交付多少数据,就发送多少数据,所以UDP是没有发送缓冲区的,但是有接受缓冲区,因为需要等待上层处理。所以UDP是全双工的(可同时收发数据)。
5. 常见的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 |
结束语
- 上一篇: 小白看了也能懂的TCP/IP基础
- 下一篇: 网络交换机接口知识总结!都认识的已是高手
猜你喜欢
- 2025-03-11 一分钟复习-网络基础知识(1)
- 2025-03-11 Linux常用指令简介(9):网络相关
- 2025-03-11 FTP服务 FTP和SFTP
- 2025-03-11 计算机网络——TCP/IP协议简述
- 2025-03-11 通过TFTP协议发动DDoS攻击成真
- 2025-03-11 H3C交换机详细配置
- 2025-03-11 关于交换机上存在的不同接口介绍(二)
- 2025-03-11 星际魔盒系列之局域网文件共享篇samba、nfs、tftp
- 2025-03-11 网络安全之网络组件
- 2025-03-11 应用层协议和传输层协议的关系
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)