IP首部检验和

来源:百度知道 编辑:UC知道 时间:2024/05/30 13:14:30
求助:关于“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首部在传输过程中没有发生任何差错”

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

看不明白 不是很懂
问题是 你都知道你那里不明白 为什么不在现实中问呢 一句话的事 网上估计很难

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
我知道的是这样子的。

一个一个的来解答楼主的问题吧。
(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