通过wireshark抓到的tcp三次握手数据包 数据如下
** ** ** ** ** ** ** ** ** ** ** ** 08 00 45 00
00 34 39 63 40 00 80 06 66 eb ac 10 01 27 ac 10
01 2e 28 a8 01 bb 16 16 0b ef 00 00 00 00 80 02
20 00 a8 32 00 00 02 04 05 b4 01 03 03 08 01 01
04 02
ip校验和计算4500+0034+3963+4000+8006+0000(校验和位先视作0)+ac10+0127+ac10+012e=29912
2+9912=9914 9914取反=66eb和数据包吻合
tcp校验和计算(需要构造伪tcp报头)
ac10+0127+ac10+012e+0006(代表tcp协议)+0014(tcp长度20)+28a8+01bb+1616+0bef+0000+0000+8002+2000+0000(校验和位先视作0)+0000=246ff
2+46ff=4701 4701取反=b8fe
问题就在这,b8fe不等于数据包中的a832啊 我就是想知道我在哪个地方理解错了,求大牛指点,新人学习勿喷
------解决方案--------------------
应试是tcp校验和计算方法有问题,查查相关资料吧....
------解决方案--------------------
我也在弄这个校验和的问题,好像是数据也哟啊算进去,但是我现在就是不知道如何将数据分为十六位,我查过资料说是如果TCP发送数据为:03 02 12 35 那么在校验的时候就分为 :0302 1235 但是如果是奇数个数据的时候,我就不知道如何分了,比如我的TCP数据时:0x33 0x43 0x42是分成 33 43和 42 00 不?