0
我试图手动计算各种UDP数据包的校验和,但是我总是得到与Wireshark中显示的结果相比的错误结果。下面是我如何做到这一点的例子:我的UDP校验和计算每次都会给出错误的结果
Source Address: 192.168.0.103 (0xC0A8, 0x0067)
Destination Address: 192.168.0.1 (0xC0A8, 0x0001)
Source Port: 57090 (0xDF02)
Destination Port: 8000 (0x1F40)
Packet length: 19 (0x0013)
Data: hello world (0x6865, 0x6C6C, 0x6F20, 0x776F, 0x726C, 0x6400)
Expected checksum: 0xEDFD (from wireshark)
据我所知,UDP校验和与下列变量计算:
Source IP + Destination IP + 17 (0x0011 - protocol code) + 10 (0x000A - pseudoheader length) + Source Port + Destination Port + UDP Packet Length + Data
所有这些群体中的16位。
所以我的计算是(以相同的顺序):
0xC0A8 + 0x0067 + 0xC0A8 + 0x0001 + 0x0011 + 0x000A + 0xDF02 + 0x1F40 + 0x0013 + 0x6865 + 0x6C6C + 0x6F20 + 0x776F + 0x726C + 0x6400
上述款项的结果是:
0x511F4
现在,因为结果比0xFFFF的高我这样做:
0x11F4 + 0x0005 = 0x11F9
翻转位之后,我得到的结果:
0xEE06 <- which, as you can see, it is different from the expected one
所以我的问题是我做错了什么?我总是得到几乎在wireshark中显示的结果。
下面是Wireshark的里面包的截图,作为参考 https://www.evernote.com/l/AWl0H1AGoxpGX4_zjgDlVBcytJM-HP_PvQE
这里有一个RFC。你读过了吗? – EJP
是的,我读了RFC768。 – Ibrahim