打印

TCP 校验和计算

[复制链接]
3283|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kaly_liu|  楼主 | 2013-6-3 11:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TCP, tc, AC, AD
本帖最后由 kaly_liu 于 2013-6-3 15:44 编辑

根据资料手册,进行计算TCP校验和计算,但是我怎么算都不对,不知道哪里出错了··
校验和是:TCP伪首部+TCP Head +数据
以下是我的计算结果:



TCP 抓包工具 数据.zip (3.87 MB)

我计算了下,发现一个问题:我利用我计算出来的结果来填充数据校验位,然后在重新加起来发现结果是:FFFF这个是正确的,但是我算出来的校验和是0xC597却不等于原来的却是 0x83e2 . ????????

相关帖子

沙发
kaly_liu|  楼主 | 2013-6-3 15:49 | 只看该作者
我利用此工具抓得到IP包,按照IP校验和的计算方法计算,得到的IP校验和是正确的

1.png (7.26 KB )

1.png

使用特权

评论回复
板凳
kaly_liu|  楼主 | 2013-6-3 15:51 | 只看该作者
本帖最后由 kaly_liu 于 2013-6-3 15:54 编辑

真不懂那个 TCP校验中的 0x83e2 是如何得来的,高人现身指点吧~~~~

使用特权

评论回复
地板
kaly_liu|  楼主 | 2013-6-4 08:44 | 只看该作者
我算了好几个,结果都是对不上,是不是哪里没弄清楚了?????

使用特权

评论回复
5
原野之狼| | 2013-6-4 09:04 | 只看该作者
http://www.tcpipguide.com/free/t ... PPseudoHeader-2.htm

Once this 96-bit header has been formed, it is placed in a buffer, following which the TCP segment itself is placed. Then, the checksum is computed over the entire set of data (pseudo header plus TCP segment). The value of the checksum is placed into the Checksum field of the TCP header, and the pseudo header is discarded—it is not an actual part of the TCP segment and is not transmitted.

When the TCP segment arrives at its destination, the receiving TCP software performs the same calculation. It forms the pseudo header, prepends it to the actual TCP segment, and then performs the checksum (setting the Checksum field to zero for the calculation as before). If there is a mismatch between its calculation and the value the source device put in the Checksum field, this indicates that an error of some sort occurred and the segment is normally discarded.

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
kaly_liu + 3 这个我看过,但是我的问题还是没解决额~.
6
kaly_liu|  楼主 | 2013-6-4 11:27 | 只看该作者
原野之狼 发表于 2013-6-4 09:04
http://www.tcpipguide.com/free/t_TCPChecksumCalculationandtheTCPPseudoHeader-2.htm

Once this 96-bit ...

我是按照这个来计算的, TCP伪首部是我根据IP包构造来的:包括 目标IP+源IP地址+协议号+TCP总长度(我这里的总长度是  TCP头(20B)+数据长度(4B),没有包括伪首部的12B);
我有两个疑问了:
1.如果我想验证抓包工具抓到的数据是否正确,是不是就是将 TCP伪首部+TCP Head +TCP 数据 来验证这几个结果的和是不是 FFFF呢? 此时TCP校验位的值为原值,不置为0.(我加过,结果不是FFFF也不是0000)
2.如果抓包数据正确,那么我是按照如下方法进行校验的:
(1) 把校验和字段置为0;
(2)  对TCP头部中的每16bit进行二进制求和;
(3)  如果和的高16bit不为0,则将和的高16bit和低16bit反复相加,直到和的高16bit为0,从而获得一个16bit的值;
(4)  将该16bit的值取反,存入校验和字段。
◆当接收TCP包时,需要对报头进行确认,检查TCP头是否有误,算法同上2、3步,然后判断取反 的结果是否为0,是则正确,否则有错。
这里我计算了得到的校验和结果和原来的不等。

但是我计算IP校验和,结果却是可以的。

使用特权

评论回复
7
kaly_liu|  楼主 | 2013-6-4 14:55 | 只看该作者
桌面.zip (4.14 KB) 这是我的数据,可以用 TCP tool软件(1#)打开。

使用特权

评论回复
8
kaly_liu|  楼主 | 2013-6-6 16:41 | 只看该作者
原野之狼 发表于 2013-6-4 09:04
http://www.tcpipguide.com/free/t_TCPChecksumCalculationandtheTCPPseudoHeader-2.htm

Once this 96-bit ...

帮忙看看这个校验,感觉不对劲啊······
但是却可以实现和计算机的 TCP 通信···好奇怪啊
uip0.9TCP校验和 计算代码不符合 TCP协议吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

344

帖子

3

粉丝