IP首部校验和的算法
2016-06-06 16:53
274 查看
IP/ICMP/IGMP/TCP/UDP/等协议的校验和算法是相同的,采用的都是将数据流视为16位整数流进行重复的叠加计算。
计算校验和的步骤:
(1)把校验和字段置为0。
(2)对IP头部的每16bit进行二进制求和。
(3)如果和的高16位不位0,则将和的高16位和低16位反复的相加,直到和的16位为0,从而获得一个16位的值。
(4)将该16位的值取反,存入校验和字段。
例如:
IP报头
45 00 00 31
89 F5 00 00
6E 06 00 00 //校验字段
DE B7 45 5D //源IP地址
C0 A8 00 DC //目的IP地址
根据如上的IP报头,可以求得校验和为:
4500+0031+89F5+0000+6E06+0000+DEB7+455D+C0A8+00DC = 322C4
由于计算的和为322C4的高16位不为0,所以将和的高16位和低16位进行反复的相加,直到和的高16位位0为止。
0003+22C4 = 22C7然后将结果进行取反操作~22C7 = DD38则DD38为最终的校验和。
计算校验和的步骤:
(1)把校验和字段置为0。
(2)对IP头部的每16bit进行二进制求和。
(3)如果和的高16位不位0,则将和的高16位和低16位反复的相加,直到和的16位为0,从而获得一个16位的值。
(4)将该16位的值取反,存入校验和字段。
例如:
IP报头
45 00 00 31
89 F5 00 00
6E 06 00 00 //校验字段
DE B7 45 5D //源IP地址
C0 A8 00 DC //目的IP地址
根据如上的IP报头,可以求得校验和为:
4500+0031+89F5+0000+6E06+0000+DEB7+455D+C0A8+00DC = 322C4
由于计算的和为322C4的高16位不为0,所以将和的高16位和低16位进行反复的相加,直到和的高16位位0为止。
0003+22C4 = 22C7然后将结果进行取反操作~22C7 = DD38则DD38为最终的校验和。
相关文章推荐
- 安装apache solr
- Fedora 安装vim失败的原因
- 横竖屏切换总结-布局改变和数据保存
- 技术培训|RAC 宕机罪犯案情探析之子游标预告
- Js作用域与作用域链详解
- TensorFlow博客翻译——用TensorFlow在云端进行机器学习
- ionic开发笔记
- python请求java Selenium Webdriver
- 使用session常见的异常类型
- [注意]未做的题(线段树)
- 对OpenStack安全加固以应对来自Compute节点的攻击
- weblogic 设置多少个GC线程合适
- Quartz与Spring的集成
- Nginx作为反向代理时传递客户端IP的设置方法
- 排序--堆排序
- 银行卡识别
- leetcode 之 Verify Preorder Serialization of a Binary Tree
- 确定按钮
- java编程方式生成CA证书
- Python的socket模块源码中的一些实现要点分析