Chinaunix首页 | 论坛 | 博客
  • 博客访问: 313472
  • 博文数量: 82
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-13 10:58
文章分类

全部博文(82)

文章存档

2018年(2)

2017年(9)

2016年(71)

我的朋友

分类: 嵌入式

2016-08-08 20:44:53

1. 发送前,例如ip首部有20字节,将两字节checksum字段置为0x0000,再每次取两个字节相加。若相加后有进位到第三、四字节,则将第三、四字节再加到前两个字节上。
   重复以上步骤,直到将20个字节加完。最后取所有相加和的低两字节取反码,得到checksum字段。

2. 接收后校验,和1相同,将首部20字节的每两字节的反码加起来,若和为0,则说名收到的报文正确。

3. 求首部校验和的C代码
  1. unsigned short checksum(unsigned short *buf,int nword)
  2. {
  3.     unsigned long sum;
  4.     for(sum = 0; nword > 0; nword--)
  5.     {
  6.         sum += *buf++;
  7.         sum = (sum >> 16) + (sum & 0xffff);
  8.     }
  9.     return ~sum;
  10. }

阅读(1862) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~