持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
今天我们进行数据链路层当中差错检测的讲解。
差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错: 1可能会变成0,而0也可能变成1。这称为比特差错。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
奇偶校验
在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中"1" 的个数
为奇数(奇校验)或偶数(偶校验)。
换句话说,采用奇校验,若比特1的数量奇性改变,可以检查出错误;奇性不改变,则无法检查出错误。采用偶校验,着比特1的数量的偶性改变,可以检查出错误;偶性不改变,则无法检查出错误。
如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;
如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检) ;
循环冗余校验CRC(Cyclic Redundancy Check)
收发双方约定好一个生成多项式G(x);
发送方基于待发送的数据和生成多项式计算出差错检测码 (冗余码),将其添加到待传输数据的后面一起传输;
接收方通过生成多项式来计算收到的数据是否产生了误码;
练习1
解答:
练习2
解答:
总结
检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。
循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。
今天的学习就到此结束了,我们下一篇文章见!bye~