关于IP首部校验和计算的解答
来源:互联网 发布:软件可靠性测试方案 编辑:程序博客网 时间:2024/06/06 06:45
|
上面太长,我只想说最后的几句
|
上一个程序已经看到,sum是一个32位整形,而我们要的效验和是16位的,所以必须要把前面16位和计算得到
的sum再加工,得到最后的answer,这个加工过程看似简单,但我开始是没搞清楚的,后来经过CUBBS上的
兄弟们帮忙,搞清楚了,所以在这里贴一下~~
1).sum=(sum>>16)+(sum&0xffff);
这句是“把sum的高16位加到低16位”,具体分析:(sum>>16)是将高16位移位到低16位,
(记住此时sum值是没有变的哦~),此时这个括号的值就是sum的高16位的值(但在低16位位置上);
(sum&0xffff)是取出sum的低16位,按位与应该都能理解(此时sum的值依然是没变的哦~),
最终,“+”前的高16位值和“+”后的低16位值相加(虽然一个是高16位值一个是低16位值,
但现在它们的位置都在低16位,所以相加)
得到新的sum.
可以把句子"复杂化":
sum1=sum>>16;
sum2=sum&0xffff;
sum=sum1+sum2;
2).sum+=(sum>>16);
(这一句差点没想出来,嘿嘿)这句的意思是:把sum的进位加到低16位。效验和是要加进位的,在上一步中
sum已经变化了,高低16位都已经加到低16位,但不要忽略了可能的进位,因为是多个16位和,所以进位是
常有的事,这就是这一句的作用.
3).answer=~sum;
answer是2B的(不是骂它哈),所以4B的sum取反,再赋值给answer,answer取到低16位。
GAME OVER
说简单不简单,说复杂不复杂,需要注意几个地方:
1.sum值在计算的第一步中,位移和按位与sum的值是始终不变的;
2.不能忽略进位;
3.怎样把32位的变量的值弄成2B;
- 关于IP首部校验和计算的解答
- IP首部校验和的计算
- ip首部校验和计算
- 计算ip首部校验和
- ip首部校验和计算
- ip首部校验和计算
- ip首部校验和计算
- ip首部校验和计算
- ip首部校验和计算
- ip首部校验和计算
- ip首部校验和计算
- IP首部校验和计算
- IP首部的校验和字段是怎么计算的?
- IP首部校验和计算及1的补码
- IP首部校验和计算原理
- 对IP首部校验和的理解
- IP首部校验和的算法
- 关于IP协议首部长度的计算
- 国际MES供应商与产品大全
- 无废话JavaScript(下)
- spring mvc中常用的几个controller
- 必须掌握的八个DOS命令
- grup退出方法
- 关于IP首部校验和计算的解答
- 七个受用一生的心理寓言
- 将Excel中的数据导入到SQL Server 2000数据库中
- 删除部分浏览器为图片添加的默认边框
- Linux主题 -- 待阅读或测试
- 关于CRC校验
- 拖动数据到div
- Ethereal协议分析系统介绍
- Element Picker (C#, Regular Expression)