我有一个关于如何计算互联网校验和的问题。我在书中找不到任何好的解释,所以我在这里问。
看一下下面的例子。
将发送以下两条消息: 10101001和00111001。校验和是用1的补码计算的。到目前为止,我明白了。但是总和是如何计算的呢?一开始我以为可能是XOR,但事实似乎并非如此。
10101001
00111001
--------
Sum 11100010
Checksum: 00011101然后当他们计算消息是否正常到达时。再说一次,总和是如何计算的?
10101001
00111001
00011101
--------
Sum 11111111
Complement 00000000 means that the pattern is O.K.发布于 2010-10-21 20:57:49
它使用加法,因此得名"sum“。10101001 + 00111001 = 11100010。
例如:
+------------+-----+----+----+----+---+---+---+---+--------+
| bin value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | result |
+------------+-----+----+----+----+---+---+---+---+--------+
| value 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 169 |
| value 2 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 57 |
| sum/result | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 226 |
+------------+-----+----+----+----+---+---+---+---+--------+发布于 2010-10-21 21:16:57
如果你所说的互联网校验和指的是TCP校验和,那么有一个很好的解释here,甚至还有一些code。
当您计算校验和时,请记住,它不仅是数据的函数,也是“伪头”的函数,“伪头”将源IP、目标IP、协议和TCP数据包的长度放入要进行校验和的数据中。这将TCP元数据绑定到IP报头中的某些数据。
对于这一点,TCP/IP Illustrated Vol 1是一个很好的参考资料,并详细解释了所有这些内容。
发布于 2014-03-12 23:28:19
互联网校验和的计算使用补码算法。考虑正被校验和的数据是一个8位整数序列。首先,你需要使用1补码算法将它们相加,然后取结果的1补码。
注意:当将数加1补码运算时,需要将MSB的进位添加到结果中。例如,考虑3(0011)和5(0101)的相加。
3'->1100 5‘->10100 0110进位为1,因此我们有0111(1的补码表示为-8)。
校验和是在上一步中获得的结果的1的补码。因此,我们有1000个。如果不存在进位,我们只需补充在求和阶段获得的结果。
https://stackoverflow.com/questions/3987603
复制相似问题