3.5可靠传输实现机制——停-等协议

  • 三种可靠传输的实现机制
    • 停止-等待协议(SW)
    • 回退N帧协议(GBN)
    • 选择重传协议(SR)
  • 这三种可靠传输的机制的基本原理并不仅仅局限于数据链路层,可以应用到计算网络体系结构的各层协议中

停止-等待协议

  • 我们想象的理想情况

    • 发送方发送数据,接收方在收到数据后,进行差错检测,没有差错就发送ACK,有差错就发NAK,接收方在收到ACK后,就会发送下一个数据分组,在收到NAK后,就发送之前发送的那个分组,这样就做到了可靠传输
  • 实际情况1:

    • 在发送方发送数据时,该数据包丢失了,接收方收不到数据分组,就不会发送ACK或者NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。
    • 为了解决该问题,可以再发送方发送完一个数据分组时,启动一个超时计时器,如果超过了超时计时器所设置的重传时间,儿发送方仍然接收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就是超时重传。
    • 一般可以将重传时间选为略大于“从发送方到接收方的平均往返时间”。
  • 实际情况2:

    • 既然发送方发送的数据分组可能会丢失,那么接收方发送的确认分组也可能会丢失,这时发送方没有收到来自接收方的确认ACK或NAK,启动超时重传,接收方接收到这个分组,如何判断这个分组是重复的分组还是新的分组呢
    • 为了避免分组重复这种传输错误,必须给每一个分组带上序号
    • 对于停止等待协议,由于每发送一个数据分组就停止等待只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组序号不同即可,因此用一个比特来编号就够了
  • 实际情况3:

    • 既然数据分组需要编号,那么确认分组是否也需要编号呢?
    • 发送方发送了分组,接收方也受到了分组,但是这个确认分组在传输过程中超时了,启动了发送方的重传机制,在ACK报文到达发送方之前,发送方又重传了该分组,之后接收到了第一个报文的确认ACK,误以为是刚刚重传报文的ACK,于是发送第二个数据包,这样对第一个数据包进行了两次确认,于是要给接收方发送的确认分组进行编号

注意事项

  • 接收端检测数据分组有误码时:将其丢弃并等待发送方的超时重传,但对于误码率较高的点对点链路,为了使发送方尽早重传,也可以给发送方发送NAK分组
  • 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号,由于停止等待协议的停-等特性,只需要1个比特编号就够了,既编号0和1
  • 为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用的比特数量一样,数据链路层一般不会出现ACK分组迟到的问题,因此,在数据链路层实现停止-等待协议可以不用给ACk分组编号
  • 超时计时器设置的重传时间应仔细选择,一般可将重传时间宣威略大于送发送方到接收方的平均往返时间
    • 在数据链路层点对点的往返时间比较确定,重传时间比较好设定
    • 然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易

停等协议的信道利用率

  • 举例说明
    这里是使用电磁波作为传输媒介,电磁波的速度是2*10的8次方每秒

  • 当往返时延RTT远大于数据帧的发送时延TD时(例如使用卫星链路),信道利用率非常低

  • 若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低

  • 为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,既后退N帧协议GBN和选择冲噢穿协议SR

  • 例子:

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐