简单介绍TCP实现可靠传输的两个协议

143 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天

理想的传输有以下两个特点:

  1. 传输信道不产生差错
  2. 不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据

在理想的传输条件下,不需要采取任何措施就能实现可靠传输,但在实际的网络中,没有任何网络能具备理想传输的条件,我们必须使用一些可靠传输的协议,在不可靠的传输信道中实现可靠传输

停止等待协议

每次发完一个分组就停止发送,等待对方的确认,在规定时间内收到确认后再发送下一个分组,如下图:

noErrorsituation.jpg 但如果在规定时间内没有收到接收方的确认,则会重新发送,称作超时重传,如下几种情况:

errorSituation.jpg

lose&late.jpg

  1. 接收方接收时分组时检测到了其内有差错,就会将其丢弃,不会通知发送方

  2. 分组在传输过程中丢失,同样接收方收不到消息,也不会通知发送方

  3. 接收方接收到分组,返回确认通知,但确认通知在传输过程中丢失,这时发送方同样会再次进行超时重传,接收方接收到重传分组后会进行如下处理

    1. 丢弃重传来的重复分组,不向上层交付
    2. 向A发送确认通知
  4. 接收方接收到分组,返回确认通知,但确认通知超时抵达,会进行如下处理:

    1. 发送方收到迟来的确认通知,进行丢弃
    2. 接收方收到重复的分组,丢弃后重新发送确认通知

实现停止等待的一些要点:

  • 暂存——在发送一个分组后,发送方必须暂存已发送的分组的副本,以备重发
  • 编号——对发送的每个分组和确认都进行编号
  • 在超时重传中,超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些,防止不必要的重传。

停止等待协议可以帮助我们简单实现无差错传输,但是信道利用率会降低!于是我们接下来看流水线传输👇

连续ARQ协议

inArow.jpg

流水线传输:在收到确认通知之前,发送方连续发出多个分组,由于信道上一直有数据不间断地传送,流水线传输可获得很高的信道利用率。

三个概念:

  • 发送窗口——发送方维持一个发送窗口,位于发送窗口内的分组都可以被连续发送出去,而不需要等待对方的确认。
  • 发送窗口滑动——发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
  • 累计确认——接收方对按序到达的最后一个分组发送确认,表示:到这个分组为止的所有分组都已经正确收到了

使用累计确认方式的优点是容易实现,即使确认丢失也不必重传,但缺点是不能向发送方反映出接收方已经正确收到的所有分组的信息。

连续ARQ协议采用Go-back-N(回退N),表示需要再退回来重传已经发送过的N个分组,当通信线路质量不好时,连续ARQ协议会带来负面的影响。