数据校验之Checksum算法

校验和(Checksum)是网络协议使用的数据错误检测方法,并且被认为比LRC(纵向冗余校验,Longitudinal Redundancy Check,LRC),VRC和CRC(循环冗余校验(Cyclic Redundancy Codes,CRC))更可靠。此方法在发送方使用校验和生成器,在接收方使用校验校验器

在发送方,数据由校验和生成器分为n位长度的相等子单元。该位通常为16位长度。然后使用一个称赞方法将这些子单元加在一起。该和为n位。然后对得到的位进行补充。这个称为校验和的补充和被附加到原始数据单元的末尾,然后被发送到接收器。
 

 



接收器在接收到数据+校验和之后,将其传递给校验和检查器。校验和检查器将此数据单元划分为多个等长的子单元,并将所有这些子单元相加。这些子单元还包含校验和作为子单元之一。然后对结果位进行补码。如果补余结果为零,则表示数据没有错误。如果结果不为零,则意味着数据包含错误,并且Receiver拒绝该错误。

 

 

接收器在接收到数据+校验和之后,将其传递给校验和检查器。校验和检查器将此数据单元划分为多个等长的子单元,并将所有这些子单元相加。这些子单元还包含校验和作为子单元之一。然后对结果位进行补码。如果补余结果为零,则表示数据没有错误。如果结果不为零,则意味着数据包含错误,并且Receiver拒绝该错误。


示例–
如果要发送的数据单元是10101001 00111001,则在发送方站点和接收方站点使用以下过程。

发件人网站:

10101001        subunit 1  
00111001        subunit 2        
11100010        sum (using 1s complement)       
00011101        checksum (complement of sum)



传输到接收器的数据是–

接收者网站:

10101001        subunit 1  
00111001        subunit 2     
00011101        checksum 
11111111        sum
00000000        sum's complement

Result is zero, it means no error.

优点:
校验和可检测所有涉及奇数位数的错误以及涉及偶数位数的错误。

缺点:
主要问题是,如果一个子单元的一个或多个位被损坏,一个子单元的一个或多个对应位被损坏,并且第二个子单元中一个或多个相反值的对应位也被损坏,则错误将无法检测到。这是因为这些列的总和保持不变。


示例–
如果与校验和一起发送的数据是10101001 0011100100011101。但是在目的地接收的数据是0 0101001 1 0111001 00011101。

接收者网站:

00101001              1st bit of subunit 1 is damaged
10111001              1st bit of subunit 2 is damaged
00011101              checksum
11111111              sum
00000000              Ok 1's complement

尽管数据已损坏,但未检测到错误。

 

参考:

https://www.geeksforgeeks.org/error-detection-code-checksum/

https://blog.csdn.net/ZCShouCSDN/article/details/94131769

  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值