挑战408——一周网咯——运输层(2)

在不可靠的传输网络上实现可靠通信

我们知道,IP层之间的交付时尽最大努力传输的。所以TCP必须采用适当的措施和方式才能保证TCP层之间的可靠传输。可靠传输协议,就是当出现差错的时候重传出现差错的数据。当接收方来不及处理接收的数据的时候就适当放低发送速度

停止等待协议

停止等待,顾名思义,就是在发送完一个分组之后就停止发送分组,等待对方的确认。于是在这个的基础上有三种可能。

  1. 正常发送,并确认
    挑战408——一周网咯——运输层(2)
  2. 发送的报文丢失
    这种情况,一般停止等待协议会在报文发送之前,设立一个 计时器,当计时器结束后仍然没有收到B发来的确认报文,就可以认为发送的报文丢失了,于是进行重传。
    挑战408——一周网咯——运输层(2)
  3. 对方的确认报文并没有丢失,只是迟到了
    这个时候,A接收到确认报文,并丢弃。
    挑战408——一周网咯——运输层(2)
    如果A总是重传分组,且总是收不到对方的确认,就可以认为此时网络线路太差,不能通信。

连续的ARQ协议

刚刚上述所说的,当报文丢失或者发送方未收到确认的时候,就自动重传丢失的报文,这种协议称为自动请求重传协议,简称ARQ协议
但是如果每发送一次报文都要等待计时器的计时后才可以发送下一个,这样效率太低。
挑战408——一周网咯——运输层(2)
如果一次性发送方发送多个报文,而不用每发一次就等待下来一个确认,这样信道上就一直有数据传输,传输的速率更快。(类比计算机组成原理中的指令流水线就很好理解)。
挑战408——一周网咯——运输层(2)
这种采用流水线传输的协议,称为连续的ARQ协议

连续的ARQ协议

即使采用一次性发送多个报文的方式,也不能无限制一次性发送多少个报文。发送窗口,就是一次性可以连续发送多少个报文而不用等待确认。例如下图中,位于发送窗口的5个分组都可以同时发送:
挑战408——一周网咯——运输层(2)
当发送方收到确认后,就把发送窗口往前挪一个分组的位置。
挑战408——一周网咯——运输层(2)
当5个分组都收到确认的时候,窗口到了6-10之间。于是重复上述操作。
一般的,接收方会只发送最后收到的分组的确认(上诉例子中是对5的确认),表明5之前的所有报文都正确接收了。这样的确认方式称为累计确认
这个时候考虑这样的情况,假如之前的5个分组都发出去了,但是其中的3分组丢失了,这样根据累计确认的规则,发送方返回2的确认,也就是表明3-5这三个分组可能都没有收到。这个时候,只好把后面3个分组再重传一次。这种重传叫做get-backN。即退回来重传已经发过的N个分组(即使分组4,分组5已经收到,只是3没有收到)。