1.UDP协议的特点

1.无连接:不用像TCP一样得通过三次握手先建立连接,可以不用建立连接就可以传输内容(通过DatagramPacket)数据报的形式发送.知道对端的IP和端口号就直接进行传输,类似于寄信

2.不可靠传输:发送数据报后遇到问题不会返回任何错误信息给应用层

3.面向数据报:通过数据报的形式进行传输,用户的请求或者响应都会有数据报和字符串相互转化这一步.

4.全双工通信:客户端和服务器都可以发送请求/接受响应.

2.UDP数据报的报文结构

python dbc根据值描述解析报文_网络

python dbc根据值描述解析报文_网络协议_02

报头:

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 的可靠性机制在 应用层 实现类似的逻辑:



例如:



引入序列号,保证数据顺序;

引入确认应答,确保对端收到了数据;

引入超时重传,如果隔一段时间没有应答,就重发数据;