使用wireshark这款软件来分析UDP包,UDP报文为了方便读者复现,直接使用官网提供的包文件说明
准备UDP分析报文
从wireshark官网下载UDP分析包:tpncp_udp.pcap,使用wireshark打开tpncp_udp.pcap,这里我们选择第4个UDP报文,数据长度len=12,选择一个尽可能小一点的数据包,后面计算校验和字段减少些运算
分析UDP报文
点击/双击第4个UDP报文,可以看到运输层的协议使用UDP协议,UDP数据大小为12,IP网际层也需要使用到,运输层在首部字段校验和需要使用到伪首部
信息,也就是IP网际层的信息
1. 分析UDP的首部格式
贴一个UDP 的首部格式,方便对应
我们可以看出,字段分别对应(16进制)
- 源端口:097c
- 目的端口:0978
- 长度:0014
- 校验和:60e3
2. 校验UDP的首部格式值来源
长度:0014,10进制为20字节
从UDP 用户数据报计算得出,UDP 用户数据报长度 = UDP 首部 + UDP 用户数据报的数据部分
,计算得出20字节,正确
从IP数据报计算得出,UDP 用户数据报长度 = IP数据报长度 - IP首部长度
,计算得出20字节,正确
校验和:60e3,二进制为0110 0000 1110 0011
计算方法可以参考上一篇博客:校验和字段计算需要使用到伪首部
伪首部字段对应
计算,将数据每16位为一组
二进制 | 含义说明 | 报文中信息 |
00001010 00000100 | 源IP地址 | 10.4(10进制) |
00000010 00101100 | 2.44(10进制) | |
00001010 00000100 | 目的IP地址 | 10.4(10进制) |
01100000 01100100 | 96.100 (10进制) | |
00000000 00010001 | 全0 IP数据报文协议字段 | 0.17(10进制) |
00000000 00010100 | 长度 | 20 (10进制) |
00001001 01111100 | 源端口 | 2428(10进制) |
00001001 01111000 | 目的端口 | 2424(10进制) |
00000000 00010100 | 长度 | 20 (10进制) |
00000000 00000000 | 校验和置为0 | |
00010101 00011001 | 数据 | 09(16进制) |
00000000 00001000 | 数据 | 7c(16进制) |
00000000 00000010 | 数据 | 09(16进制) |
00000000 00000000 | 数据 | 78(16进制) |
00000000 00000000 | 数据 | 00(16进制) |
00000000 00110100 | 数据(共12字节) | 14(16进制) |
校验和详细计算过程
0000101000000100
0000001000101100
+ ----------------
= 0000110000110000
------------------------
0000110000110000
0000101000000100
+ ----------------
= 0001011000110100
------------------------
0001011000110100
0110000001100100
+ ----------------
= 0111011010011000
------------------------
0111011010011000
0000000000010001
+ ----------------
= 0111011010101001
------------------------
0111011010101001
0000000000010100
+ ----------------
= 0111011010111101
------------------------
0111011010111101
0000100101111100
+ ----------------
= 1000000000111001
------------------------
1000000000111001
0000100101111000
+ ----------------
= 1000100110110001
------------------------
1000100110110001
0000000000010100
+ ----------------
= 1000100111000101
------------------------
1000100111000101
0000000000000000
+ ----------------
= 1000100111000101
------------------------
1000100111000101
0001010100011001
+ ----------------
= 1001111011011110
------------------------
1001111011011110
0000000000001000
+ ----------------
= 1001111011100110
------------------------
1001111011100110
0000000000000010
+ ----------------
= 1001111011101000
------------------------
1001111011101000
0000000000000000
+ ----------------
= 1001111011101000
------------------------
1001111011101000
0000000000000000
+ ----------------
= 1001111011101000
------------------------
1001111011101000
0000000000110100
+ ----------------
= 1001111100011100
------------------------
计算结果为1001111100011100
取反为0110000011100011
,对应16进制6e03
将校验和6e03填写值该字段
以上就是分析用户数据报UDP全过程