目录
一. UDP协议概述
二. 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的主要特点:
- UDP是无连接的。即发送数据前不需要建立连接,发送数据结束也没有连接释放,因此减少了开销和发送数据前的时延
- UDP使用尽最大努力交付。即不保证可靠交付,因此不需要维护复杂的连接状态表(有许多参数)
- UDP是面向数据报的。发送方的UDP对应用层交付的报文,在添加首部后直接交付给IP层。UDP对应用层交付的报文,既不合并,也不拆分,而是保留这些报文的边界。也就是说,应用层给UDP多长报文,UDP就发多长,一次发送一个报文,如下图。
- 在接收方的UDP,对于IP层交付的UDP用户数据报,在去除UDP首部后也直接交付应用层,不作任何处理,一次交付一个完整的报文。因此这就将控制报文长度的工作交给了应用层:应用层要选择合适大小的报文。若报文太长,UDP封装后交给IP层,IP层在传输时可能要进行分片处理,减低了IP层的效率。反之,应用层报文太短,效率也低
- UDP没有拥塞控制。因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用很重要,如IP电话,实时视频会议等,要求源主机以恒定的速率发送数据,并且允许在网络拥塞时丢失一部分数据,但不允许数据有太大的时延
- UDP支持一对一,一对多,多对一和多对多的交互通信
- UDP的首部开销小,只有8字节,比TCP的20字节的首部短
二. UDP报文格式
UDP报文有两大部分组成:报头+有效载荷(数据),其中有效载荷就是应用层交付给UDP协议层的报文
首部
在学习协议报文时,首先要解决两个问题:1. 报头和有效载荷如何分离 2. 有效载荷如何向上交付
第一个问题:报头和有效载荷如何分离
在UDP中,报头的大小是固定的——8字节。所以只要截取前8字节,后面就都是有效载荷了
第二个问题:有效载荷如何向上交付
UDP是传输层的,上层是应用层。而应用层程序会绑定端口号,UDP报头中有16位(bit位)目的端口号,根据端口号做到向上交付
UDP报头由4部分组成:
- 源端口号:发送方的端口号
- 目的端口号:目的主机的端口号
- UDP长度:UDP报文的长度,单位字节,包括报头和有效载荷
- UDP校验和:保证报文完整性和正确性,出错就丢弃
如果接收方 UDP 发现收到的报文中的端口号不存在,就丢弃该报文,并由国际控制报文协议 ICMP发送“端口不可达”差错报文给发送方
三. UDP的缓冲区
UDP报头中,UDP长度为16为,即最长UDP报文时64KB(包含报头),如果长度超过64KB,需要应用层手动分包,多次发送,并在接收方手动拼接
因为UDP是面向数据报的,上层一次交付多少数据,就发送多少数据,所以UDP是没有发送缓冲区的,但是有接受缓冲区,因为需要等待上层处理。所以UDP是全双工的(可同时收发数据)
结束语
本篇博客到此结束,感谢看到此处。
欢迎大家纠错和补充
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。