原文见my blog:[url=http://blog.chinaunix.net/u3/94771/showart.php?id=1993908]http://blog.chinaunix.net/u3/94771/showart.php?id=1993908 [align=center][color=magenta][font=宋体][size=15pt]IP[/size][/font][font=宋体][size=15pt]校验和详解[/size][/font][/color][/align] [align=left][font=宋体][size=14pt]一、[/size][/font][font=宋体][size=14pt]校验和算法[/size][/font] [/align][align=left][font=宋体][size=12pt] 之前一直只知道IP校验和算法反码求和相关的,但具体细节不清楚,今天了解了下。[/size][/font][/align][align=left][font=宋体][size=12pt] IP[/size][/font][font=宋体][size=12pt]校验和主要是用来保证数据(IP包头)的完整性的.它用的算法非常简单,就是反码求和校验.需要注意的是反码求和又叫1的补码(one'scomplement),而2的补码就是我们通常说的补码求和了.校验算法具体如下.[/size][/font][/align] [align=left][font=宋体][color=purple][size=12pt]1[/size][/color][/font][font=宋体][color=purple][size=12pt]、发送方[/size][/color][/font] [/align][align=left][font=宋体][size=12pt] i)[/size][/font][font=宋体][size=12pt]将校验和字段置为0,然后将IP包头按16比特分成多个单元,如包头长度不是16比特的倍数,则用0比特填充到16比特的倍数;[/size][/font][/align][align=left][font=宋体][size=12pt] ii)[/size][/font][font=宋体][size=12pt]对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位),将得到的和的反码填入校验和字段;[/size][/font][/align][align=left][font=宋体][size=12pt] iii)[/size][/font][font=宋体][size=12pt]发送数据包.[/size][/font][/align][align=left][font=宋体][size=12pt]