对于某个ip首部,如“45000028ea6340003406c117 72705ddfc0a80a5d”,
要校验ip首部,首先把首部按每16bit进行求和,也就是:
sum = 0x4500 + 0x0028 + 0xea63 + 0x4000 + 0x3406
+ 0xc117 + 0x7270 + 0x5ddf + 0xc0a8 + 0x0a5d
= 0x3 fffc
然后进行如下操作:
while (sum>>16) sum = (sum & 0xffff) + (sum >> 16);
对于上面的结果则是:sum = 0xfffc + 0x3 = 0xffff
最后得出结果如果为0xffff则表示正确.
具体请见RFC1071