千家信息网

ip首部校验和计算

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,IP首部校验和的计算方法:1.把校验和字段清零。2.然后对每16位(2字节)进行二进制反码求和,反码求和的意思是先对每16位求和,再将得到的和转为反码。接下来详细描述反码求和的步骤:看下面的代码算法:
千家信息网最后更新 2026年11月01日ip首部校验和计算

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

1.把校验和字段清零。

2.然后对每16位(2字节)进行二进制反码求和,反码求和的意思是先对每16位求和,再将得到的和转为反码。

接下来详细描述反码求和的步骤:看下面的代码

算法:

SHORT checksum(USHORT* buffer, int size)
{
unsigned long cksum = 0;
while(size>1)
{
cksum += *buffer++;
size -= sizeof(USHORT);
}
if(size)
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum>>16) + (cksum&0xffff);
cksum += (cksum>>16);
return (USHORT)(~cksum);
}

参数buffer是指向16位整数的指针,刚开始指向的是IP首部的起始地址,参数size是IP首部的大小。while循环是将IP首部的内容以16位为单元加在一起,如果没有整除(即size还有余下的不足16位的部分),则加上余下的部分,此时的cksum就是相加后的结果,这个结果往往超出了16位,因为校验和是16位的,所以要将高16位和计算得到的cksum再加工。

再加工第一步:cksum = (cksum>>16) + (cksum&0xffff); sum>>16是将高16位移位到低16位,sum&0xffff是取出低16位,相加得到新的cksum。

再加工第二步:cksum += (cksum>>16); 第一步相加时很可能会产生进位,因此要再次把进位移到低16位进行相加。  

这样就加工好了,接下来就是取反,并强制转换为16位,这样就得到了最终的校验和。

校验和计算出来了,接下来就是该如何校验:

接收方进行校验时,也是对每16位进行二进制反码求和。接收方计算校验和时的首部与发送方计算校验和时的首部相比,多了一个发送方计算出来的校验和。因此,如果首部在传输过程中没有发生差错,那么接收方计算的结果应该为全一,因为接收方计算除校验和以外的部分得到值是校验和的反码,再加多出来的校验和当然是全一了。



附加:

IP头:

4500 0046

17d9 0000

4011 ec1d(校验字段)

ac1c 0f3b

ac1c 0f3d

计算:4500 + 0046 +17d9 + 0000 + 4011+ ec1d +ac1c + 0f3b + ac1c + 0f3d

取出的和相加再取反->即为应填充的校验和

当接受到IP数据包时,要检查IP头是否正确,则对IP头进行检验,方法同上:

计算:

4500 + 0046 +17d9 + 0000 + 4011+ ec1d +ac1c + 0f3b + ac1c + 0f3d 它们的和相加得出的一个数再次相加为FFFF,得到的结果是全一,正确。

得到的结果是全一,正确。




反码 结果 收方 加工 接下来 就是 部分 二进制 再次 参数 字段 指向 方法 个数 代码 内容 单元 地址 大小 字节 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网加科技 为想互联网科技怎么样 科技赋能下的互联网金融 互联网科技官网 A股互联网金融科技公司 互联网金融 科技金融 壕鑫互联网络科技 互联网科技类展会 湖南洣水互联网科技有限公司扣款 互联网科技实习生岗位职责 南山科技园互联网公司有哪些 晓花互联网科技有限公司网址 迪庆互联网科技招生 企晟互联网信息科技有限公司 科技大学互联网 35岁以上互联网科技行业 南京一网一红互联网科技有限公司 广州三三互联网科技有限公司 宁波允成互联网科技有限公司 伍佰万互联网科技是干嘛的 互联网黑科技 互联网科技公司经营范围 广州百单互联网科技有限公司 互联网金融监管科技数据 互联网 科技创新 腾讯科技 互联网女皇 深圳市运趣互联网科技有限公司 广西互联网科技孵化中心 高科技互联网发展前景如何 神州科技互联网有限公司
0