首部检验和怎么计算?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了首部检验和怎么计算?相关的知识,希望对你有一定的参考价值。

参考技术A

IP首部校验和的计算方法:

把校验和字段清零,对每16位(2字节)进行二进制反码求和, 反码求和的意思是先对每16位求和,再将得到的和转为反码。

IP数据报校验只对首部进行校验,不对数据部分进行校验。把首部看成16位为单位的数字组成,依次进行二进制反码求和,再把结果依次存入校验和字段中即可。

扩展资料:

将发送的进行检验和运算的数据分成若干个16位的位串,每个位串看成一个二进制数,这里并不管字符串代表什么,是整数、浮点数还是位图都无所谓。将IP、UDP或TCP的PDU首部中的检验和字段置为0,该字段也参与检验和运算。

对这些16位的二进制数进行1的补码和(one's complement sum)运算,累加的结果再取反码即生成了检验码。将检验码放入检验和字段中。

其中1的补码和运算,即带循环进位(end round carry)的加法,最高位有进位应循环进到最低位。反码即二进制各位取反,如0111的反码为1000。

参考资料来源:百度百科-效验和

IP数据报的首部检验和

如图所示

按单位(半字节、字节、双字节)换算,然后以双字节(16位整型,Big Endian)为单位进行累加。最后取反。
例如:
第一个域长度是4位,内容是十进制的4,二进制是0100;第二个域长度是4位,内容是十进制的5,二进制是0101;第三个域长度是8位,内容是十进制的0,二进制是0000 0000。

因此第一个16位值是 0100 0101 0000 0000。
第四个域长度是16位,内容是十进制的28,二进制是 0000 0000 0001 1100。

因此第二个16位值是 0000 0000 0001 1100。
……以此类推。
参考技术A 好处是,可以减少IP数据报的处理复杂度,提高数据报的处理速度。坏处是,这样做实际上把检验的任务交给了上层协议(如传输层),增加了上层协议的复杂性。

以上是关于首部检验和怎么计算?的主要内容,如果未能解决你的问题,请参考以下文章

IP数据报的首部检验和

IPv4检验和计算

IP校验和

如何计算UDP/TCP检验和checksum

什么是校验和?

IP数据报首部校验和算法