数据链路层有三个基本问题:
(1)封装成帧;
(2)透明传输;
(3)差错检测:
在差错检测中,传输差错中分为两大类:
1.比特差错:比特在传输过程中产生差错:1可能变为0,0可能变为1.
在一段时间内,传输错误的比特占所传输总数的比特总数的比率称为误码率.
2.帧丢失、帧重复或帧失序:如
//3个帧 [#1]-[#2]-[#3]
[#1]-[#3] //帧丢失[#2]
[#1]-[#2]-[#2]-[#3] //帧重复[#2]
[#1]-[#3]-[#2] //帧失序
所以在数据链路层中则采用循环冗余校验CRC(Cyclic Redundancy Cheak)的检错技术来实现无比特差错的传输。即CRC校验并不能保证可靠传输,只是做到对帧的无差错接受(凡是接收端数据链路层接受的每一个帧均无比特差错).
校验方法:
1.在发送端,先把数据划分为组,假定每组K个比特,假定发送数据M=101001(k=6);
2.生成冗余码,在数据M后面添加差错检测用的n位冗余码,方法:
(1)首先将对M进行乘以2^n的运算,即在M后面补n个0;
(2)以多项式系数确定n+1位长度的除数P;
(3)得到(k+n)位的数除以除数P(模2运算==异或运算),最后得到余数R;
(4)将这个余数R作为冗余码相加(拼接)在数据M的后面.(将这种为了进行检错而添加的冗余码称为帧检验序列FCS(Frame Cheak Sequence)).
3.构成一个帧发送出去,一共发送(k+n)位;
4.接收端接收到的数据以帧为单位进行CRC检验:收到的每一个帧都除以同样的除数P(模2运算(异或)),然后检查得到余数R
(1)若R=0,则判定这个帧没有差错,就接受;
(2)若R!=0,则判定这个帧有差错,直接丢弃.
以上除数一般以多项式系数表示:用多项式P(X)=X^3+X^2+1,则P=1101(n+1位,即n==3),多项式P(x)称为生成多项式.
以上面的步骤和M=101001(k=6)举例:
(1)M*2^3=101001000;
(2)除以除数P:
(3)101001000+001=101001001,构成一个帧发送出去......
(4)接收端接收检测.......
以上CRC检验是一种广泛应用的多项式编码,其又称多项式码,具有良好的数学结构,易于实现,发送端编码器和接收端检测译码器实现较为简单,具有十分强的检错能力,其中FCS的生成与CRC检验其依靠这些硬件处理很迅速,不会延误数据的传输。