计算机网络 链路层: CRC校验码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yonggie/article/details/89738501

我们在大学《计算机网络》或者是《计算机组成原理》中学过CRC校验码。

做个总结。

不想看原理直接翻到例子那里,简洁明了。

循环冗余校验码,是众多校验码中的一种,是用来校验发送过来的数据是否被修改过的码。

原理

他们的简单工作原理,可以用一个10进制的不严谨例子表示。

首先接收方和发送方要共同约定,发送的数字都能被3整除。(或者是被别的质数整除)

那么发送方在发23的时候,要先计算23/3=7余2,那么发送方要发送23-2=21给接收方。

接收方收到21要先检测能否被3整除,如果能,那么数据是没被篡改过的。

(你可能会问,那我发送方本身就要发送21怎么办?我发送22、23都变成了21! 是的,这个例子不严谨,但是重点是它的原理,原理是双方约定能够被一个数整除

显然我们在传输信息的时候,信息都是01串。每一个01串都可以对应成一个多项式。

怎么对应?比如10101,对应成 x^4+x^2+x^0(也就是对应2的多少次幂啦)

我们发送的01串,对应成一个多项式,我们把这个叫做M(x)这就找到了“被除数”。

上面的例子中双方要约定一个都能整除的除数,这个“除数”在这里叫做“生成多项式”,双方要约定一个都能整除的01串。怎么约定?这个国际有标准,比如CRC-12、CRC-16、CRC-CCITT等等。 这样子我们就找到了“除数”,我们把这个叫做G(x)。

算商怎么算?

先把M(x) 乘 G(x)的最高次幂 ,得到的多项式叫做T(x),

也就是先把发送的信息串向左移动,空出来的补0,腾出空间来给校验位。

举个例子,要发送010111,“除数”是101, 那么要腾出来3个位置,给余数,变成010111000.

再把M(x)/G(x)得到校验多项式(也就是“余数”),

体现在01串上是  信息串除以生成多项式的对应串,这样也得到了除数对应的01串(这个除法算出的余数)。

然后T(x)加上这个校验多项式。

体现在01串上的操作就是  信息串后面腾出来的位置变成了余数对应的二进制串 。

上面啰嗦了很多,是不是不明朗,直接看例子

假设要发送 1101011011 ,生成多项式G(x) 对应的串10011。

先向左位移5位变成 1101011011 00000, 然后算余数 位移后的串除以G(x)对应串,算出余数

然后 这个余数和 位移后的信息串做模2运算,这就是要发送的串了!(其实也就是把腾出来的0用余数填充上,注意余数要右对齐。)

那么接收方只要把发送方发的串除以生成多项式对应的串发现能整除则数据没损失。

:-(      它的原理讲起来很啰嗦……我也没什么办法简化呀^_^。。

注意除法的时候要模2运算哦!

什么是模2运算? 相同为0,不同为1。

猜你喜欢

转载自blog.csdn.net/Yonggie/article/details/89738501
今日推荐