关于如何计算互联网校验和,我有一些问题.我从书中找不到任何好的解释,所以我在这里问.我不确定这是否是正确的地方,所以如果我在错误的地方询问,我很抱歉.
如果你看下面的例子.发送以下两条消息:10101001和00111001.校验和以1的补码计算.到目前为止我明白了.但总和如何计算?起初我以为它可能是XOR,但似乎并非如此.
10101001
00111001
--------
Sum 11100010
Checksum: 00011101
Run Code Online (Sandbox Code Playgroud)
然后当他们计算出msg是否到达OK时.又一次如何计算总和?
10101001
00111001
00011101
--------
Sum 11111111
Complement 00000000 means that the pattern is O.K.
Run Code Online (Sandbox Code Playgroud)
它使用加法,因此命名为"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 |
+------------+-----+----+----+----+---+---+---+---+--------+
Run Code Online (Sandbox Code Playgroud)
如果通过因特网校验你的意思是TCP校验和有一个很好的explination 这里,甚至一些代码.
当您计算校验和时,请记住它不仅仅是数据的函数,还包括"伪标头",它将源IP,目标IP,协议和TCP数据包的长度放入要校验和的数据中.这将tcp元数据与IP头中的某些数据联系起来.
TCP/IP Illustrated Vol 1是一个很好的参考,并详细解释.