数据链路层差错检测:CRC(循环冗余检验)

 

1、循环冗余检验(CRC):

在发送端,先把数据划分为祖,假定每组K个比特。现假定待传送的数据M = 101001(k=6)。CRC运算就是在数据M后面添加提供差错检测的n位冗余码,然后构成一个帧发送出去,一共发送(k+n )位。在所要发送的数据后添加冗余码,显然增大了数据传输的开销,但却可以进行差错检测。当传输可能出现差错时,付出的代价往往是很值得的。

2、n位冗余码计算:

用二进制的模2运算进行2^n乘M的运算,这相当于在M后面添加n个0 ,得到的(k+n )位的数除于收发双方实现商定的长度为(n + 1)位的除数P,得出的商是Q而余数是R(n位,比P少一位)。

3、除数P:

用生成多项式P(X)表示上面的除数(假定n+1位),P(X) = X^3 + X^2 + 1则P = 1101。

即P(X) = X^n+ X^(n-2) + ….+ X^2 +1 , P = 101…101。

4、检测:

在接收端把收到的数据以帧为单位进行CRC检测:把收到的每一个帧除于同样的除数(模2运算),然后检查得到的余数R,如果传输过程无差错,经过CRC检测得到的余数肯定是0 。

 

1)、R = 0,则判定这个帧没有差错,就接受。

2)、R!= 0,则判定这个帧有差错,就丢弃。

 

5、例子:

M = 101001 (即 k = 6)。假定除数生成多项式P(X) = X^3 + X^2 + 1;则除数P 为1101 (即 n = 3)。经模2 除法运算的结果余数R = 001 ,这个余数就作为冗余码拼接在M的后面发送出去。这种为了进行差错检测添加的冗余码常称为帧检验序列FCS。因此加上冗余码之后发送的帧是101001001(即2^n M + FCS)。

数据链路层差错检测:CRC(循环冗余检验)

在数据链路层,发送端帧检验序列FCS的生成和接收端的CRC 检验都是用硬件完成的,处理很迅速,因此并不会延误数据的传输。最后强调,在数据链路层仅仅使用CRC差错检测技术,则只能做到对帧的无差错接受,但还不是可靠传输。