1 / 5
文档名称:

二进制反码求和运算方法.doc

格式:doc   页数:5页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

二进制反码求和运算方法.doc

上传人:xgs758698 2016/6/11 文件大小:0 KB

下载得到文件列表

二进制反码求和运算方法.doc

文档介绍

文档介绍:二进制反码求和 0和0 相加是 0,0和1 相加是 1,1和1 相加是 0 但要产生一个进位 1 ,,则最后得到的结果要加上溢出的进位 1( 可能是多個 1)。 IP/ICMP/IGMP/TCP/UDP 等协议的校验和算法都是相同的,算法如下: 在发送数据时,为了计算 IP 数据包的校验和。应该按如下步骤: (1 )把 IP 数据包的校验和字段置为 0; (2 )把首部看成以 16 位为单位的数字组成,依次进行二进制反码求和; (3 )把得到的结果存入校验和字段中。在接收数据时,计算数据包的校验和相对简单,按如下步骤: (1 )把首部看成以 16 位为单位的数字组成,依次进行二进制反码求和,包括校验和字段; (2 )检查计算出的校验和的结果是否等于零(反码应为 16个0 ); (3 )如果等于零,说明被整除,校验是和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。所谓的二进制反码求和,即为先进行二进制求和,然后对和取反。计算对 IP 首部检验和的算法如下: (1 )把 IP 数据包的校验和字段置为 0; (2 )把首部看成以 16 位为单位的数字组成,依次进行二进制求和(注意:求和时应将最高位的进位保存,所以加法应采用 32 位加法); (3 )将上述加法过程中产生的进位(最高位的进位)加到低 16 位(采用 32 位加法时, 即为将高 16 位与低 16 位相加,之后还要把该次加法最高位产生的进位加到低 16 位) (4 )将上述的和取反,即得到校验和。其中,二进制反码求和的计算方法: 1001100100010010 0000100001101001 1010101100000010 00001********** 0000000000010001 0000000000001111 00000********** 0000000000001101 0000000000001111 0000000000000000 01010********** 0101001101010100 0100100101001111 01000********** __________________________________ 10010********** 部分和 1 --> 第 15 列的进位 1 --> 第 16 列的进位__________________________________ 10010**********和 0110100100010011 校验和图 B-1 二进制记法的部分和 1 ,当我们加第 1列( 最右边一列) 的时候,我们得到 8 。在二进制中,数 8是 1000 。我们保留最右边的 0 ,把其余的位进到第 2 列,第 3 列和第 4 列。 2 ,当我们加第 2 列时,我们计入从第 1 列来的进位。结果是 7 ,它是二进制的 0111 。我们保留第一个位( 最右边的) ,把其余 011 进位给第 3 列、第 4 列和第 5 列。 3 ,对每一列重复以上过程。 4 ,当我们加完最后一列时,我们有两个 1 没有列可以进行进位。这两个 1 在下一个步骤中应与部分和(Partial sum) 相加。 和如果最后一列没有进位,那么部分和就是和。但是,如果还有额外的列( 在本例中,