为什么 TCP 校验和会被反转?

为什么 TCP 校验和会被反转?

来自维基百科页面

校验和字段是报头和正文中所有 16 位字的二进制补码和的 16 位二进制补码。

为什么在将报头和文本中的 16 位相加后,要取其补码来计算 TCP 校验和?

答案1

采用补码是为了简化校验和验证——不需要再次计算校验和,然后将计算出的值与报头中的校验和字段(位于求和数据的中间)进行比较,而是可以对报头中所有 16 位字(包括校验和字)求和(使用补码算法),然后将结果与零进行比较。

答案2

这可能是因为全零的值是有意义的(从RFC 793):

在计算校验和时,校验和字段本身被替换为零。

因此它可以保留这个含义,以防校验和真的为零。

答案3

校验结果为零是有问题的,因为所有零也是由断电设备或没有电源的东西产生的。如果结果为全一,则可以更好地保证硬件正常运行。

二进制补码是一个更复杂的术语,用于逐个分析位而不是将其作为整个单元进行分析(即 AND/OR/XOR/NOT)。

答案4

补码运算之所以使用二进制补码,是因为 TCP 是 20 世纪 70 年代为当时的计算机设计的,当时的大多数计算机都使用二进制补码算法。现代计算机使用的二进制补码算法直到 20 世纪 70 年代末和 80 年代的个人计算机才真正开始流行。

相关内容