本帖最后由 dffzh 于 2025-7-25 17:06 编辑
#申请原创#
@21小跑堂
UDP协议,即User Datagram Protocol,用户数据报协议,是一种面向无连接的、不可靠的、面向数据报、低开销和全双工的网络传输层通信协议,主要用于网络上收发数据,比如对实时性和低延迟要求高、且可以容忍少量数据丢失的场合,如实时游戏、视频会议和直播流媒体等。 UDP协议的报文格式如下图所示:
为了便于大家更好地理解UDP协议,作者通过Wireshark工具捕捉UDP报文,并对照UDP协议格式进行详细讲解。 抓取的报文数据如下图红色方框所示:
双击打开后,里面的标注了User Datagram Protocol的即为UDP报文,如下图红色方框所示:
1、源端口:Source Port UDP协议中的端口是一种逻辑意义上的端口,端口号的范围为0~65535,即两个字节; 通信发起者的端口号,总共16位(2字节); 对应报文为0xf6d2,即63186:
2、目的端口:Destination Port 通信接收者的端口号,总共16位(2字节); 对应报文为0x0e76,即3702:
3、长度:Length 该字段为整个UDP协议包的长度,即包括源端口2字节+目的端口2字节+长度2字节+校验和2字节+数据可变字节=固定8字节+数据可变字节,该字段长度总共16位(2字节),即数据报最大为64KB; 对应报文为0x0444,即1092个字节=8字节+数据1084字节:
4、校验和:Checksum 这个字段大家应该都比较熟悉,经常在标准或自定义的通信协议中用来监测数据通信过程中是否出现错误报文,总共16位(2字节);UDP本身使用的是一种比较简单的校验和计算方式,在某些情况下,为了提高校验稳定性和准确性,可以考虑使用循环冗余校验(Cyclic Redundancy Check,CRC)算法,MD5算法,SHA-3算法或SHA-256算法等。 对应报文为0x520a:
5、数据(载荷):Data(Payload) 该字段即为UDP的数据部分,更专业的描述好像是有效载荷,如果有,则会显示在报文里面; 对应报文为Data内容:
由于UDP数据报的最大长度是64KB+8Byte,约等于64KB,如果需要传输超过64KB的数据报,可以通过以下方案进行: 数据分段(Data Segmentation):将数据分割成多个 UDP数据报后进行发送,并在接收端进行重新组装; 使用TCP协议:理论上TCP单次传输的字节数是没有上限的,如果需要传输大量数据或者超过UDP最大报文长度的数据,TCP协议无疑是更好的选择。 以上通过Wireshark工具捕捉的UDP协议报文对UDP协议的各个字段进行了详细阐述,希望可以加深大家对UDP协议的理解,如有不足之处,欢迎来贴补充和分享~~。
|