公司中需要转发UDP数据包,但是wireshark抓包显示checksum error
请问UDP数据包的校验和是怎么计算的,有没有例子解释一下?
谢谢
这里我们假定一个15字节的数据报。
10011001 00010011 --153.19
00001000 01101000 --8.104
10101011 00000011 --171.3
00001110 00001011 --14.11
00000000 00010001–0和17
00000000 00001111–15
00000100 00111111–1087
00000000 00001101–13
00000000 00001111–15
00000000 00000000–全0(校验和)
01010100 01000101–数据
01010011 01010100–数据
01001001 01001110–数据
01000111 00000000–数据和填充项
是运行抓包软件的电脑发出的包UDP计算错误,还是其它设备发给电脑的包UDP校验错误?一般来说通过电脑发UDP包,都是通过封装好的socket函数法,不需要自己去写校验的。如果是其它设备发的,可以上网搜一下UDP校验的计算,或者参考一些开源协议栈比如UIP, LWIP。如果是电脑自己发出的包校验和错误,那可能原因是这样:现在的网卡大多带一点加速功能,这个加速功能就是硬件计算IP和TCP和UDP校验和,所以电脑程序发送的时候就不必花时间计算校验和了,可以节约一部分CPU资源。然后从抓包原理来说,wireshark并不能从网口抓到电脑自己发出的包,它实际上只能抓到程序送到网卡的数据,而这个数据是没有计算校验和的,所以wireshark解析出来就是错误的校验和。