可靠传输的原理
一.为何要实现可靠传输
数据在网络传输的过程中会产生很多的情况导致发送方发送的东西接受方不一定能接受到正确的,根据不同的运用情况,需要保证接收方接受到的东西和发送方发送的东西需要保证一致,于是提出了可靠传输的概念
二.定义
发送方发送什么,接收方就能接受什么
三.停止-等待协议SW
停止等待协议(stop-and-wait)是最简单但也是最基础的数据链路层协议。它有四个基本原则:
1.确认与否认
在每个数据发送后,接收方接到后会发送ACK(确认)信号确认无误收到,发送收到ACK信号后便开始发送下一个数据。
接收方检测收到数据出现误码后,会发送NAK(否认)信号,发送方接收到NAK信号后会重新发送缓存区中的数据。
因此,在此过程中,发送方与接收方一直处于一种停止等待对方的过程,在此过程中要进行确认与否认,这也是停止-等待协议的最基本原则。
2.超时重传
接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何AIK或NAK,则重传原来的数据分组,这就叫做超时重传。
一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”
3. 确认丢失
接收方发送ACK信号后,由于传输问题出现ACK信号丢失,导致发送方没收到确认信号,重传分组,此时接收方重新接收到一样的分组,造成分组重复错误。
4.确认迟到
接收方发送ACK信号后,由于传输问题出现ACK信号迟到,导致发送方没收到确认信号,重传分组,同时开始传输下一个分组,此时ACK到达,但是此时超时重传的分组已经发送出去,接收方接收到后会发送一个一样的ACK信号。
四.传输过程中出现误码的情况(差错检测)
传输过程中可能会产生比特差错,即传输1/0时把1变成0,把0变成1,为了解决这种状况,提出了差错检测方法
在一段数间内,出阿叔错误的比特率占比特总数的比率称之为误码率BER(Bit Error Rate)
1.奇偶检测
再带发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位)中“1”的个数为奇数或偶数。
如果有奇数个位发生误码,则奇偶性发生变化,可以查出误码
局限性
当传输过程中刚好有偶数个1变化时,则无法检查出错误,由于局限性过大数据链路层中不适用这种检验方式
2.循环冗余校验CRC(Cyclie Redundancy Chek)
①步骤
1.收发双方约定好一个生成多项式G(x)
2.发送方基于待发送的数据和生成多项式计算出差错检验码(冗余码),将其添加到待传输数据的后方一起传输
3.接收方通过生成多项式来计算收到的数据是否出现误码
发送方处理:
整体做除法,根据约定的多项式次数,在待发送数据后面添加多项式最高项次数个零。然后进行除法,最后生成的余数就是冗余码,其长度应该和多项式最高次数相同。
其中除数就是生成多项式的各项系数构成的比特串。
接收方处理:
已接受数据加上余数,同生成多项式各项系数构成比特串进行除法,若余数为零则无误码,余数不为零则有误码。
常用的生成多项式
注:检错码只能检测出差错,若有差错直接丢弃,不能定位错误,若需要定位错误则需要更多的检错码,但这样的话开销较大,并且进一步增加了犯错误的概率
CRC有很好的检错能力,非常易于用硬件实现,被广泛运用于数据链路层
五.分组丢失
路由器输入队列由于空间不足,主动丢弃收到的分组,造成分组丢失
六.分组失序
由于传输过程中选择失序的问题,接收方实际收到的数据与发送方发送的分组顺序不同造成分组失序。
七.分组重复
分组在传输过程中由于某种原因在线路中滞留,导致一定时间内没有到达接收方,触发发送方超时重传机制,最终导致接收方收到了两个相同分组,造成分组重复。
成分组失序。
七.分组重复
分组在传输过程中由于某种原因在线路中滞留,导致一定时间内没有到达接收方,触发发送方超时重传机制,最终导致接收方收到了两个相同分组,造成分组重复。