1.UDP协议的特点
1.无连接:不用像TCP一样得通过三次握手先建立连接,可以不用建立连接就可以传输内容(通过DatagramPacket)数据报的形式发送.知道对端的IP和端口号就直接进行传输,类似于寄信
2.不可靠传输:发送数据报后遇到问题不会返回任何错误信息给应用层
3.面向数据报:通过数据报的形式进行传输,用户的请求或者响应都会有数据报和字符串相互转化这一步.
4.全双工通信:客户端和服务器都可以发送请求/接受响应.
2.UDP数据报的报文结构
报头:
1.源端口号
2.目的端口号
3.UDP数据长度:一个UDP数据报64KB
4.校验和:可以认为是针对数据特征进行的"摘要"(抽样调查),比如电脑的配置参数和商家的配置单
载荷:
完整的数据报内容
3.注意事项
1.UDP只有接收缓冲区没有发送缓冲区
UDP不像TCP有发送缓冲区,UDP发送数据报就接受或者会失败,发送的直接交给内核交给网络层进行解析
2.UDP大小受限:一个UDP数据报能传输的数据最大也就是64KB(包含报头)
3.基于UDP的应用层协议
NFS :网络文件系统
TFTP :简单文件传输协议
DHCP :动态主机配置协议
BOOTP :启动协议(用于无盘设备启动)
DNS :域名解析协议
当然,也包括你自己写 UDP 程序时自定义的应用层协议
4. 扩展问题
这是一个经典面试题:
1. UDP 本身是无连接,不可靠,面向数据报的协议,如果要基于传输层 UDP 协议,来实现一个可靠传输,应该如何设计?
2. UDP 大小是受限的,如果要基于传输层 UDP 协议,传输超过 64K 的数据,应该如何设计?
以上两个问题答案类似,都可以参考 TCP 的可靠性机制在 应用层 实现类似的逻辑:
例如:
引入序列号,保证数据顺序;
引入确认应答,确保对端收到了数据;
引入超时重传,如果隔一段时间没有应答,就重发数据;