IP数据报首部校验和算法说明

FPGA应用篇 专栏收录该内容
23 篇文章 5 订阅


《IP数据报首部校验和算法说明》


1.  IP数据报首部校验主要用于保证IP数据报头的完整性。

2.  该算法为“反码求和校验”,”反码求和校验“是一个专用术语,区别于先求反码再求和。

3.  该算法过程如下文所示例。

    => 发送方
    i.   将校验和字段初始化为0,然后将IP报头按照16bit分成多个单元,如果报头长度不是
        16bit整数倍,则填充0;
   
    ii.  对上述各个单元(16bit)采用“反码求和”运算,即将各个单元直接相加,高位溢出位
 加到最低位(不同于通常补码运算是直接丢掉溢出位),将得到的和取其反码,填入校验和字段即可;

    iii.  IP数据报头发送完毕后,接着发送数据报内容;


    => 接收方 

    i.   将校验和字段初始化为0,然后将IP报头按照16bit分成多个单元,如果报头长度不是

         16bit整数倍,则填充0;
   
    ii.  对上述各个单元(16bit)采用“反码加法”运算,包括发送方发送的校验和字段,
         然后检查得到的结果每个数据位是否全部为1;

    iii.  如果满足,则进行下步处理,否则表明该帧数据报在传输过程中发生错误,舍弃该帧数据;


4.  “反码求和”运算示例


   例如,位宽为3bit的两个数值100b和101b进行反码求和运算。

    i.   100b + 101b = 1_001b,高位存在溢出;

    ii.  高位溢出的1,加到最低位。即 001b + 1b(溢出位) = 010b;

    iii. 上述两数反码求和结果为010b,然后取反,为101b即为校验和发送给接收端;

说明:在接收端会接收到三个数值(包含校验和),100b, 101b, 101b。

   按照“反码求和”运算,结果为

   100b + 101b + 101b = 1_110b, 溢出位加到最低位后,结果为111b,每个数据位全部为1;

 (为什么全部为1,不难理解,原码010b与反码101b求和,其结果各数据位必然为1)


备注:参考博客文章链接为http://www.360doc.com/content/15/0910/23/27653981_498345868.shtml

     








  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值