差错检测
- 实际的通信链路都不是理想的,比特在传输过程中可能会产生差多,1可能变成0,0可能会变成1,这成为比特差错
- 一段时间内,传输错误的比特占所传输比特总数的比率成为误码率BER(Bit Error Rate)
- 使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层要解决的重要问题之一。
检错方法
-
奇偶校验
- 在待发送的数据后面添加一位的奇偶校验位,使整个数据(包括所添加的校验位在内)中"1"的个数为奇数(奇校验),或者偶数(偶校验)。
- 如果有奇数个位发生误码,则奇偶性发生变化,可检查出误码;
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
-
循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出差错检测码,(冗余码),将其添加到带传输数据的后面一起传输
- 接收方通过生成多项式来计算收到的数据是否产生了误码
- 举例说明:
小结
- 纠错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
- 想要纠正传输中的错误,可以使用冗余信息交错的纠错码进行前向纠错,但是纠错码的开销比较大,在计算机网络中较少使用
- 循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但是易于用硬件实现,因此被广泛的应用于数据链路层
- 在计算机网络中通常采用检错重传方法来纠正传输中的差错,或者仅仅是丢弃检测到差多的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务