UDP
UDP:用户数据报协议(User Datagram Protocol)
首部格式
- 源端口号、目的端口号:从哪里来到哪里去
- 长度:UDP用户数据报的长度 (>=8)
- 校验和:检验整个数据报在传输中是否有错 ,有错就丢弃。
- UDP长度:UDP首部+数据长度(不算伪首部)
- 伪首部只在计算校验和时出现,不向上递交,也不向下传送。
特点
-
无连接
传输数据前不需要先建立连接,减少开销和发送数据之前的时延。 -
尽最大努力交付、不可靠,但效率高
如果数据报因网络故障无法到达,UDP协议层不会给应用层任何错误信息。 -
面向数据报
交给它什么样,它就怎么样发送,不拆分不合并。 -
适合一次性传输少量数据的网络应用。
报文长度应该适中(太长,在网络层因为MTU的限制,可能需要分片;太短,网络层进行封装时,加上IP首部可能导致头重脚轻,降低传输效率) -
没有拥塞控制,适合很多实时应用。
-
全双工通信
-
支持一对一、一对多、多对多的交互通信
缓冲区
-
没有真正意义上的发送缓冲区。
UDP因为是不可靠连接,不必保存应用进程的数据拷贝,应用进程中的数据在沿协议栈向下传递时,以某种形式拷贝到内核缓冲区,当数据链路层把数据传出后就把内核缓冲区中数据拷贝删除。因此它不需要一个真正意义上的发送缓冲区,但是任何UDP套接字还是有发送缓冲区的。
-
有接收缓冲区,但不能保证接收的顺序和发送的一致,如果缓冲区已满,后来的部分就会被丢弃。
(系统层级)一次性读取接收,然后由程序分次读取到缓冲区中。
基于UDP的应用层协议
DNS: 域名解析协议
NFS: 网络文件系统
TFTP: 简单文件传输协议
DHCP: 动态主机配置协议
BOOTP:启动协议