从维基百科页面 :
校验和字段是头部和文本中所有16位字的补码和的16位补码。
为什么在总结头文件和文本中的16位之后,是计算TCP校验和的补充?
补码用于使校验和validation更简单 – 不是再次计算校验和,然后将计算值与头中的校验和字段(在总和数据的中间)进行比较,就可以求和(使用补码算术)头中的所有16位字(包括校验和字),并将结果与零进行比较。
这可能是因为所有零的值是有意义的(从RFC 793 ):
在计算校验和时,校验和字段本身被replace为零。
所以它可以保留这个意义,防止校验和确实为零的情况发生。
检查结果为零是有问题的,因为所有的ZERO也是由断电的设备或没有电源产生的。 结果是一切都有更多的保证硬件正常运作。
补码是比较复杂的术语,用于逐个分析比特而不是整个单元(即,AND / OR / XOR / NOT)。
使用补码运算 ,因为TCP是在20世纪70年代为70年代计算机devise的,其中大部分使用补码运算。 现代计算机使用的二进制补码algorithm的兴起,直到20世纪70年代末和80年代的个人计算机才真正开始。