UDP协议
一、UDP协议格式
- 16位源端口号
- 16位目的端口号
- 16位UDP长度(2^16=64KB,说明UDP发送的数据最大是64KB。如果传输的数据大于64KB,需要在应用层手动分包,多次发送,并在接收端手动拼接接收到的数据)
- 16位UDP校验和
- 数据
UDP报头结构体:
struct udp_header {
uint16_t src_port; // 源端口,网络字节序(大端)
uint16_t dest_port; // 目的端口,网络字节序
uint16_t len; // 总长度(包括头部),网络字节序
uint16_t checksum; // 校验和,网络字节序
};
二、UDP协议特点
- 无连接:拿到通信方的IP地址和端口号即可,无需建立连接
- 不可靠:没有确认机制,没有重传机制。如果因为网络故障使得某个数据无法发送给对方,UDP所在的传输层不会给应用层返回任何错误消息
- 面向数据报:应用层交给UDP多大的报文,UDP就发送多大的报文,不会将报文拆分与合并
三、UDP的缓冲区
- UDP协议没有发送缓冲区,应用层交给UDP数据,UDP就会立即将数据交给网路层
- UDP协议有接收缓冲区,但是该接收缓冲区不能保证接收到的UDP数据报顺序和发送UDP数据报的顺序一致。并且如果缓冲区满了,再到达缓冲区的UDP数据报将被丢弃
四、基于UDP的应用层协议
- NFS: 网络文件系统
- TFTP: 简单文件传输协议
- DHCP: 动态主机配置协议
- BOOTP: 启动协议(用于无盘设备启动)
- DNS: 域名解析协议