刚刚到操场完成了大学第一个 5 公里慢跑,现在神清气爽。
今天学到了数据链路层,看到了各种差错编码,例如奇偶校验码,循环冗余校验码(CRC
)等等,都是在数据后面加个冗余信息用于判断。
D => DR(R 为差错检验或者纠正比特)
奇偶校验码
奇偶校验码比较简单了,就是在一串数据后面加一位,用来凑够奇数个(奇校验)或偶数个(偶校验)1
。
举个栗子:
奇校验:
01100110 => 01100110(1)
偶校验
01100110 => 01100110(0)
二维奇偶校验
二维奇偶校验就是同时检验每行,每列的奇偶校验,可以纠错。
举个栗子(下面都是偶校验):
无错情况
有错 & 纠错
CRC 校验
这才是重头戏,检错能力极强,据说准确率可达99%
。先来看看它的算法:
- 将原数据比特
视为一个二进制数(本来就是二进制) - 发送接收双方约定一个
位的生成函数 ,也是用二进制表示。 - 找出一个
位 CRC
比特,附带在 后面用于冗余校验码。
检错的时候,就看看
需要注意的是这里的整除,并不是平常所用的除法,而是 模 2 除法 ,就是长除的时候减法用 异或 来计算,也就是不进位。
所以可以这样来找
因为这里是用 异或 来代替加减法(不进位),所以上式可看做加法,那么
例如:
求 R
最后求得
校验
最后来校验一下所求的结果是否正确,就是拿
结果是显然的。。