IP首部检验和

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IP首部检验和相关的知识,希望对你有一定的参考价值。

求助:关于“IP首部检验和”原理实在搞不懂。在网上找了个例子,过程太简单,看不懂。
IP的首部如下(各个部分的含义我懂):
45 00 00 2e
be 55 00 00
7a 11 51 ac
de b7 7e e3
c0 a8 12 7a
他解释的过程如下:
检验和计算:
首先,把检验和字段置为0。
45 00 00 2e
be 55 00 00
7a 11 00 00<----检验和置为0
de b7 7e e3
c0 a8 12 7a
其次,对整个首部中的每个16 bit进行二进制反码求和,求和值为3ae50,然后3+ae50=ae53(这是根据源代码中算法 cksum = (cksum >> 16) + (cksum & 0xffff) 进行的 ) 最后,ae53+51ac=ffff。因此判断ip首部在传输过程中没有发生任何差错。

我没有看懂的地方:(1)怎么样通过二进制反码计算得到3ae50这个数的(我算不到,希望高手一步步的算我看)。(2)“然后3+ae50=ae53” 这一步是干什么?为什么这么算? (3)“最后,ae53+51ac=ffff” 这怎么就推断“ip首部在传输过程中没有发生任何差错”

换句话说,我关键不懂的是关于 二进制反码求和 是怎么算的(不要给我百度词条的那个鬼东东),就用上面的这个例子教我算算。 这个问题我搞了好久了,看明白了分全给。

一个一个的来解答楼主的问题吧。
(1)反码求和是先求反码再求和,而正数的反码是本身,上面的IP首部转换成二进制如下:
0100 0101 0000 0000 0000 0000 0010 1110
1011 1110 0101 0101 0000 0000 0000 0000
0111 1010 0001 0001 0000 0000 0000 0000
1101 1110 1011 0111 0111 1110 1110 0011
0011 0000 1010 1000 0001 0010 0111 1010
因为是每16bit进行二进制反码求和,所以转换如下:
0100 0101 0000 0000
0000 0000 0010 1110
1011 1110 0101 0101
0000 0000 0000 0000
0111 1010 0001 0001
0000 0000 0000 0000
1101 1110 1011 0111
0111 1110 1110 0011
0011 0000 1010 1000
0001 0010 0111 1010
对这10个16Bit的二进制码进行求和就可以得到3ae50的结果,二进制求和比较简单,在这边略过。
(2)为什么要3+ae50=ae53?
因为IP 、UDP、ARP、TCP的检验和是16bit,而3ae50是18bit,所以需要对3ae50进行转换,即3+ae50。我的理解是这样的,不知楼主是否赞同?
(3) 为什么要进行 ae53+51ac=ffff?
检验和分为发送端的检验和与接收端的检验和。发送端校验和为ae53,接收端收到数据之后将按照同样地方法计算校验和,如果发送端校验和加上接收端校验和为FFFF,则表示部首传输没有发生错误。
参考技术A BAFF(FFFF-4500)+FFD1(FFFF-002e)+......+ED85(FFFF-127a)=3AE50=AED3
接收端:
BAFF(FFFF-4500)+FFD1(FFFF-002e)+......+ED85(FFFF-127a)+(FFFF-AED3)=
AED3+FFFF-AED3=FFFF
若传输出错:
则为 (!AED3+FFFF-AED3)!=FFFF
我知道的是这样子的。
参考技术B 看不明白 不是很懂
问题是 你都知道你那里不明白 为什么不在现实中问呢 一句话的事 网上估计很难本回答被提问者采纳

首部检验和怎么计算?

参考技术A

IP首部校验和的计算方法:

把校验和字段清零,对每16位(2字节)进行二进制反码求和, 反码求和的意思是先对每16位求和,再将得到的和转为反码。

IP数据报校验只对首部进行校验,不对数据部分进行校验。把首部看成16位为单位的数字组成,依次进行二进制反码求和,再把结果依次存入校验和字段中即可。

扩展资料:

将发送的进行检验和运算的数据分成若干个16位的位串,每个位串看成一个二进制数,这里并不管字符串代表什么,是整数、浮点数还是位图都无所谓。将IP、UDP或TCP的PDU首部中的检验和字段置为0,该字段也参与检验和运算。

对这些16位的二进制数进行1的补码和(one's complement sum)运算,累加的结果再取反码即生成了检验码。将检验码放入检验和字段中。

其中1的补码和运算,即带循环进位(end round carry)的加法,最高位有进位应循环进到最低位。反码即二进制各位取反,如0111的反码为1000。

参考资料来源:百度百科-效验和

以上是关于IP首部检验和的主要内容,如果未能解决你的问题,请参考以下文章

首部检验和怎么计算?

IP校验和

IP数据报首部校验和算法

什么是校验和?

IPv4检验和计算

TCP/IP协议栈--IP首部选项字段的分析