浅谈计算机网络中的三种可靠传输机制

计算机网络中,有不可靠传输服务和可靠传输服务。不可靠传输服务对传输过程中出现的差错(比特差错、分组丢失、分组失序和分组重复)不做处理,但是可靠传输服务需要对传输过程中出现的差错进行有效的解决,保证发送方发送了什么数据接收放就收到什么数据,这就需要用到可靠传输机制去实现了。

ARQ协议

自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ包括停止-等待ARQ协议连续ARQ协议选择重传ARQ协议

停止-等待ARQ协议

停止等待协议是为了实现可靠传输的,它的基本原理就是发送方给接收方发送数据分组,接收方收到后对其进行差错检测。若没有误码,则接收该数据分组,并给发送方发送确认分组,简称为ACK。发送方收到对所发送数据分组的确认分组后,才能发送下一个数据分组。若检测到误码,则丢弃该分组,并给发送方发送否认分组,简称为NAK,发送方收到对所发送数据分组的否认分组后,立刻重传该数据分组。发送方发送一个数据分组后,并不能立刻将该分组从缓存中删除,只有在收到针对该数据分组的确认分组后,才能将其从缓存中删除,并发送下一个分组。

若发送分组在传输的过程中丢失了,接收方收不到数据分组,就不会发送ACK或NAK,发送方就会一直处于等待接收方ACK或NAK的状态。

为解决该问题,可在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,即超时重传

一般将重传时间设为略大于从发送方到接收方的平均往返时间。

既然发送方发送的数据分组可能丢失,那么接收方发送的确认或否认分组也就有可能丢失,从而造成发送方对之前所发送数据分组的超时重传。假设该重传的数据分组正确到达了接收方,则接收方如何判断该数据分组是否是一个重复的分组呢?

为避免分组重复这种错误,必须给每个数据分组带上序号。对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号足够了。

接收方丢弃重复的数据分组,并给发送方发送针对该数据分组的确认分组,以免发送方对该数据分组的再次超时重传。发送方收到针对0号数据分组的确认分组,就可以发送下一个数据分组了,其序号为1。

既然数据分组需要编号,确认分组是否需要编号呢?发送方发送0号数据分组,接收方正确接收后给发送方发送确认分组。由于某些原因,该确认分组迟到了。这会导致发送方对0号数据分组的超时重传。在重传的0号数据分组的传输过程中,发送方收到了迟到的确认分组,于是发送1号数据分组。接收方收到重传的0号数据分组后,发现这是一个重复的数据分组,将其丢弃。并针对该数据分组,给发送方发送确认分组,以免发送方再次超时重传该数据分组。那么问题来了,发送方如何知道这是对0号数据分组的重复确认还是对1号数据分组的确认呢? 如果对确认分组也进行编号,就可以使发送方避免这种误判。

优缺点:

优点: 简单

缺点: 信道利用率低,等待时间长

情况分析

  1. 无差错情况:发送方发送分组,接收方在规定时间内收到,并且回复确认.发送方再次发送。
  2. 出现差错情况(超时重传):停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为 自动重传请求 ARQ 。另外在停止等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认。连续 ARQ 协议 可提高信道利用率。发送维持一个发送窗口,凡位于发送窗口内的分组可连续发送出去,而不需要等待对方确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组位置的所有分组都已经正确收到了。
  3. 确认丢失和确认迟到

确认丢失 :确认消息在传输过程丢失。当A发送M1消息,B收到后,B向A发送了一个M1确认消息,但却在传输过程中丢失。而A并不知道,在超时计时过后,A重传M1消息,B再次收到该消息后采取以下两点措施:1. 丢弃这个重复的M1消息,不向上层交付。 2. 向A发送确认消息。(不会认为已经发送过了,就不再发送。A能重传,就证明B的确认消息丢失)。

确认迟到 :确认消息在传输过程中迟到。A发送M1消息,B收到并发送确认。在超时时间内没有收到确认消息,A重传M1消息,B仍然收到并继续发送确认消息(B收到了2份M1)。此时A收到了B第二次发送的确认消息。接着发送其他数据。过了一会,A收到了B第一次发送的对M1的确认消息(A也收到了2份确认消息)。处理如下:1. A收到重复的确认后,直接丢弃。2. B收到重复的M1后,也直接丢弃重复的M1。

连续ARQ协议/回退N(Go-Back-N)

连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。

发送方

  • 发送窗口尺寸Wt的取值范围是1 < Wt <= 2^n - 1,其中,n是构成分组序号的比特数量。Wt = 1 停止-等待协议;Wt > 2^n - 1,接收方无法分辨新旧数据分组。

  • 发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;

  • 发送方只有收到对以发送数据分组的确认时,发送窗口才能向前相应滑动;
  • 发送方收到多个重复确认时,可在重传计时器超时前尽早开始重传,由具体实现决定;
  • 发送方发送窗口内某个已发送的数据分组产生超时重发时,其后续在发送窗口内且已发送的数据分组也必须全部重传。

接收方

  • 接收方的接收窗口尺寸Wr的取值范围是Wr = 1,因此接收方只能按序接收数据分组;
  • 接收方只接收序号落在接收窗口内且无误码的数据分组,并且将接收窗口向前滑动一个位置,与此同时给发送方发回相应的确认分组。为了减少开销,接收方不一定每收到一个按序到达且无误码的数据分组就给发送方发回一个确认分组,而是可以在连续收到好几个按序到达且无误码的数据分组后,才针对最后一个数据分组发送确认分组,称为累计确认;或者可以在自己有数据分组要发送时才对之前按序接收且无误码的数据分组进行捎带确认。
  • 接收方收到未按序到达的数据分组,除丢弃外,还要对最近按序接收的数据分组进行确认。

优缺点:

优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。

缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。

选择重传ARQ协议

发送方

  • 发送窗口尺寸Wr的取值范围为1 < Wt <= 2^(n - 1),其中,n是构成分组序号的比特数量。
  1. Wt = 1,与停止-等待协议相同

  2. Wt > 2^(n - 1),接收方无法分辨新,旧数据分组

  • 发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;
  • 发送方只有按序收到对已发送数据分组的确认时,发送窗口才能向前相应滑动;若收到未按序到达的确认分组时,对其进行记录,以防止其相应数据分组的超时重发,但发送窗口不能向前滑动。

接收方

  • 接收窗口尺寸Wr的取值范围是1 < Wr <= Wt
  1. Wr = 1,与停止-等待协议相同

  2. Wr > Wt,无意义

  • 接收方可接收未按序到达但没有误码且序号落在接收窗口内的数据分组;为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认。
  • 接收方只有在按序接收数据分组后,接收窗口才能向前相应滑动。

优缺点:

优点: 不需要发送没必要的帧,效率高

缺点: 相对于回退N复杂度高