Chinaunix首页 | 论坛 | 博客
  • 博客访问: 533084
  • 博文数量: 102
  • 博客积分: 3165
  • 博客等级: 中校
  • 技术积分: 1232
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-09 16:38
文章存档

2016年(1)

2013年(14)

2012年(6)

2011年(22)

2010年(57)

2009年(2)

我的朋友

分类: 系统运维

2010-03-29 15:12:33

在IP报文头中有16bit的首部校验和字段,它是根据IP首部计算所得,但并不包括后面的payload。
这是由于ICMP、IGMP、UDP、TCP在它们各自的首部中有覆盖头部和数据的检验和字段。
 
 
检验和的计算:
 
1 把16bit的检验和字段置为零
2 计算所有16位字(仅首部)之和
3 把得到的和求反码(按位取反),得到检验和
4 把检验和存储在检验和字段中
 
 
检验和的检测:
 
1 计算所有16位字之和
2 接受报文中已包含了检验和,所以如果传输过程没有差错,则上一步结果应为全1
3 全1接受报文,并交由上层协议进一步处理;若非全1则证明有误,IP层丢弃该数据,但是不生成差错报文,由上层协议发现丢失的数据并进行重传。
 
 
ICMP,IGMP,TCP,UDP各自首部有检验和负责对各自协议内容进行校验(首部+数据)。计算方法与上同。
 
 
IP报文由于各个16bit字的值的限制,求和进位过程中不会产生溢出。(有待进一步实际验证
 
 
阅读(5644) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~