差错检测

实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这称为比特差错

在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

FCS用于让接收方的数据链路层检查是否产生误码。

奇偶校验

漏检率高,计算机网络的数据链路层一般不用奇偶校验。

循环冗余校验CRC(Cyclic Redundancy Check)

例题:待发送的信息为101001,生成多项式为G(x)= x^3+ x^2+ 1,计算余数。

解析:1.构造被除数 待发送信息后面添加生成多项式最高次数个0

2.构造除数 生成多项式各项系数构成的比特串

3.做“除法”

4.检查余数 余数的位数应与生成多项式最高次数相同,如果位数不够,则在余数前补0来凑足位数。

例题:接收到的信息为101101001,生成多项式为G(x)= x^3 +x^2+l,判断传输是否误码?

解析:1.构造被除数 接收到的信息就是被除数

2.构造除数 生成多项式各项系数构成的比特串

3.做“除法”

4.检查余数 余数为0,可认为传输过程无误码;余数不为0,可认为传输过程产生误码。

检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误

要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用

循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层

在计算机网络中通常采用我们后续中将要讨论的检错重传方式来纠正传输中的差错或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。