聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> IP头部校验和计算

IP头部校验和计算

时间:2019-09-04 15:39:56    下载该word文档

unsigned short checksum(unsigned short *buf, int nword)

{

unsigned long sum;

for(sum = 0; nword > 0; nword--)

sum += *buf++;

sum = (sum>>16) + (sum&0xffff);

sum += (sum>>16);

return -sum;

}

让我们假设一个IP头数据,来解cksum的惑



IP头数据:



01000101 /*ver_hlen*/

00000000 /*tos*/

00000000 00000010 /*len*/

00000000 00000000 /*id*/

00000000 00000000 /*offset*/

00000100 /*ttl*/

00010001 /*type*/

00000000 00000000 /*cksum(0)*/

01111111 00000000 00000000 00000001 /*sip*/

01111111 00000000 00000000 00000001 /*dip*/

(1)16比特分组;

(2)校验和清0

(3)求所有16比特之和

01000101 00000000 /*ver_hlen*/

00000000 00000010 /*len*/

---------------------

01000101 00000010

00000000 00000000 /*id*/

---------------------

01000101 00000010

00000000 00000000 /*offset*/

---------------------

01000101 00000010

00000100 00010001 /*ttl*//*type*/

---------------------

01001001 00010011

00000000 00000000 /*cksum(0)*/

---------------------

01001001 00010011

01111111 00000000 /*sip*/

---------------------

11001000 00010011

00000000 00000001 /*sip*/

---------------------

11001000 00010100

01111111 00000000 /*dip*/

---------------------

101000111 00010100

00000000 00000001 /*dip*/

---------------------

101000111 00010101 sum

(4)把求得的和模216-1

00000000 00000001 (sum>>16)

01000111 00010101 (sum&0xffff)

---------------------

01000111 00010110

(5)(4)的基础上求二进制反码

10111000 11101001 cksum

说白了就是循环加,然后在取反!







对方机器调用checksum()计算校验和,如果校验和为0表明IP包传输正确

-----------------------------------------------------------

01000101 /*ver_hlen*/

00000000 /*tos*/

00000000 00000010 /*len*/

00000000 00000000 /*id*/

00000000 00000000 /*offset*/

00000100 /*ttl*/

00010001 /*type*/

10111000 11101001 /*cksum(0)*/

01111111 00000000 00000000 00000001 /*sip*/

01111111 00000000 00000000 00000001 /*dip*/



01000101 00000000

00000000 00000010

---------------------

01000101 00000010

00000000 00000000

---------------------

01000101 00000010

00000000 00000000

---------------------

01000101 00000010

00000100 00010001

---------------------

01001001 00010011

10111000 11101001

---------------------

100000001 11111100

01111111 00000000

---------------------

110000000 11111100

00000000 00000001

---------------------

110000000 11111101

01111111 00000000

---------------------

111111111 11111101

00000000 00000001

---------------------

111111111 11111110 sum



00000000 00000001 (sum>>16)

11111111 11111110 (sum&0xffff)

----------------------

11111111 11111111





~sum

00000000 00000000



现在我们所用的机器设备大多数是使用二进制补码算法进行计算的

免费下载 Word文档免费下载: IP头部校验和计算

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服