查看: 7001|回复: 8

ip校验和计算例子

[复制链接]
发表于 2010-6-27 14:57:02 | 显示全部楼层 |阅读模式
本帖最后由 saibei 于 2010-6-28 08:11 编辑

校验和的计算以前总搞不明白
今天总算搞清楚了
查rfc1071,里面提到1's complement sum ,1's complement其实就是反码
1's complement sum就是反码求和
查维基百科:
对两个反码表示形式的数字做加法,首先需要进行常规的二进制加法,但还需要在和的基础上加上进位
例子见

求得的结果取反就是校验和。
接收方做检验时候,算法一样,但最后不用取反。
用excel做了个例子

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

 楼主| 发表于 2010-6-27 14:58:28 | 显示全部楼层
附件中上半部分是校验和的计算,下半部分是校验
回复

使用道具 举报

发表于 2010-6-27 21:36:59 | 显示全部楼层
有点复杂啊,谢谢楼主的分享。。。。。。。。。。。。
回复

使用道具 举报

 楼主| 发表于 2010-6-27 21:56:34 | 显示全部楼层
其实不复杂
就是用excel实现复杂了点
回复

使用道具 举报

发表于 2010-6-27 22:29:00 | 显示全部楼层
IP校验和是对数据包的哪些字段进行的校验,哪些字段的变化是不会影响校验和的,如果LZ能再解释下,本贴就是精华帖了!
回复

使用道具 举报

 楼主| 发表于 2010-6-27 22:56:28 | 显示全部楼层
那些书上倒是说得挺清楚,我就是一直感觉书上对那算法说得不明白,看rfc,又感觉一堆术语不明白。

这个算法适用于好几个协议,整理一下各协议的校验和算法的不同也是好的。等有时间查一查整理出来。

关于1's complement,可以参考以下

有些书直接翻译为反码,实质内容是对,但和rfc就不好对应,也没个注释
有些书直接翻译为补码,就太容易和常用的补码混淆了

几周前看rfc1071,就卡住在这里,今天总算查到了。
有谁英语好的可以尝试翻译一下这个文档
——————————————————————————————
昨天对一个英语文章做注释,碰到如下的句子:
    It is the 1’s complement of the 1’s complement sum of all the 16-bit words in the TCP header and data
      这是关于TCP头部校验和字段(checksum field)的说明。句中的complement意思为“补码”。对于学习计算机科学的人来说,补码不算什么新鲜,现在新鲜的是这篇英语文章出现的是“1’s complement” ,翻译出来应该是“1的补码”,对于这个笔者以前也没有碰到过,到网上查吧!网上查询的结果,“1’s complement”关键字出现的不少,但都是英文关键字,没有对应的中文翻译与解释,所以先看英语的,最后自己做解释吧。
    补码:补码是计算机中二进制数表达负数的办法,这样可以在计算机中把两个数的减法变成加法。补码形式有1的补码和2的补码,其中1的补码用在IPTCP的校验和中;平时学生在计算机科学中学习的补码是2的补码(即正数的补码和原码相同,负数补码按原码相应的正数按位取反再加1)。
    只是平时中文教材及中文翻译的书中,对此并不多加解释,一律翻译作补码。比如《Computer Network》(Andrew S. Tanenbaum )在中国的翻译版《计算机网络》(清华大学出版社)对于TCP头部的校验和是这样翻译的:
    (原文)The checksum algorithm is simply to add up all the 16-bit words in one's complement and then to take the one's complement of the sum.
    (译文)校验和的算法是简单地将所有16位字以补码形式相加,然后再对相加和取补。
    仔细对比一下本文最上部笔者所碰到的句子,和刚才这个句子意思是一样的。这个没有注明是1的补码,翻译时只是以“补码”说明,也许译者并不想在这里多费口舌,因为说明1的补码实在是一个比较麻烦的事情,笔者在这里翻译时还是把“1的补码”给翻译出来了,以让大家注意这个1的补码并不是平常学的那个2的补码。
    笔者只是在此讨论翻译,不是在讨论补码。1的补码较复杂,如果有兴趣,可以上网查找 RFC1071 ,这是TCP校验和权威的官方说明。
回复

使用道具 举报

发表于 2010-6-28 13:38:59 | 显示全部楼层
这个方面我也是弱项,谢谢您的分享。
回复

使用道具 举报

发表于 2010-10-15 09:21:43 | 显示全部楼层
第一次看这个 不是太懂
回复

使用道具 举报

发表于 2010-12-20 15:39:45 | 显示全部楼层
感谢分享 学习中!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表