侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

ip数据报首部校验和的计算

2022-11-29 星期二 / 0 评论 / 0 点赞 / 36 阅读 / 3051 字

ip数据报首部校验和的计算网络层间的数据传送特点是: 不可靠: 分组可能丢失,乱序等,不做确认; 无连接: 每个分组都独立对待; 尽力投递: 不随意放弃分组; 点到点。因为在传输过程中会受到很多的干扰

.

                             

       ip数据报首部校验和的计算

网络层间的数据传送特点是:

  不可靠:    分组可能丢失,乱序等,不做确认;

  无连接:    每个分组都独立对待;

  尽力投递: 不随意放弃分组;

  点到点。

因为在传输过程中会受到很多的干扰,ip数据包会发生改变,这时接受着收到这个ip数据包毫无意义。在这种情况下应把这样的数据包丢掉。那么怎样确定数据包发生了变化,这就用到了首部校验和。就是发送者把Ip首部的校验和外的数据全部相加再取反再放到校验和位置(如果高位有溢出的就把溢出数据加到低位)。接收者只要把整个ip数据报首部数据相加,判断是否为0,如果是0就收下,如果不是的话就扔提。

   具体实现的代码是:

  1. /*求校验和函数*/  

  2. USHORT CheckSum(USHORT *buffer, int size)  

  3. {  

  4.     unsigned long cksum=0;  

  5.     while (size > 1)   

  6.     {  

  7.         cksum += *buffer++;  

  8.         size -= sizeof(USHORT);  

  9.     }  

  10.     if (size)   

  11.     {  

  12.         cksum += *(UCHAR*)buffer;  

  13.     }  

  14.     /*对每个16bit进行二进制反码求和*/  

  15.     cksum = (cksum >> 16) + (cksum & 0xffff);  

  16.     cksum += (cksum >>16);  

  17.     return (USHORT)(~cksum);  

  18. }  



不可靠:    分组可能丢失,乱序等,不做确认;

无连接:    每个分组都独立对待;

尽力投递: 不随意放弃分组;

点到点。


.

广告 广告

评论区