数据链路层---差错检测和纠正
目录
帧同步虽然可以区分每个数据帧的起始和结束,但是还没有解决数据正确传输的两方面问题:一、如果有帧出现了错误?二、如果有帧丢失了?这都是数据链路层确保向网络层提供可靠数据传输服务解决的问题,也就是数据链路层的差错控制功能。
要实现差错控制功能,就必须具备两种能力:一是具备发现差错的能力,二是具备纠正错误的能力。
一、差错检测
在数据链路层检测数据传输错误的方法一般是通过对差错编码进行校验来实现,常见的有奇偶校验码(PCC)和循环冗余校验(CRC)。
PCC就不用多说了,在最后设置一个奇偶校验位。
循环冗余校验是一种根据传输或保存的数据而产生固定位数校验码的方法,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收端进行检验确定数据是否发生变化。
二、差错纠正
1、反馈检测法
就是在接收端接收完一帧数据后,向发送端发送所接收到的完整数据帧,发送端在收到接收端发送的反馈信息后,通过对比保存在缓存中原来该帧的数据来判断接收端是否正确接收到了该数据帧,如果判断出了错,则发送端向接收端发送一个DEL字符及相应的帧信息,提示接收端删除对应的帧,然后重发该帧;否则表示接收端已正确接收了对应帧。但是如果传输过程中数据全部丢失的话,这种方法就无效了,因为接收端没有接收到这帧数据,自然也就不会向发送端发送反馈信息。为了解决这个问题,通常在数据发送时引入计时器来限定接收端发回反馈信息的时间间隔。当发送端发送一帧数据的同时启动计时器,若在限定时间间隔内没有收到接收端的反馈信息,即计时器超时,则可认为传输的对应帧出错,或丢失,继而发送端知道需要重发该帧,同时,为了避免同一帧数据可能被多次重复传送(计时器规定时间外到达),引发接收端多次收到同一帧并将其递交给网络层的危险,采用对发送的帧进行编号的方法,即同一个帧的编号是一样的,这样接收端便能从帧编号来区分是否是新来的帧。
2、空闲重发请求方案
可以看出,“反馈检测法”中一帧数据会在信道中至少往返传输两次,传输效率低,事实上一般并没有采用这种差错控制方法。而是采用一种称为“自动重发请求”的方法。其实现原理就是先让发送端将要发送的数据帧附加一定的校验码(PCC或CRC等)一起发送,接收端则根据检错码对数据帧进行错误检测,若发现错误,就返回请求重发的响应&#x