计算机网络-5-4-可靠传输的工作原理-ARQ和连续ARQ

可靠传输的工作原理

我们知道,TCP发送报文的时候是交给IP层传送的,但是IP层只能提供尽最大努力服务,也就是说,TCP下面的网络层提供的是不可靠传输,因此TCP就必须采取适当的措施要使得两个运输层之间通信变得可靠。

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

  1. 传输信道不产生差错。

  2. 不管发送方以多快的速度发送数据,接收方总能及时的来处理这些数据。

然而实际的网络并不具备以上两个理想条件,但我们可以采用一些可靠传输协议,当出现差错的时候让发送方重传发送出现差错的数据,同时在接收方来不及处理的时候及时报告发送方适当降低发送数据的速度。这样一来,本来不可靠的传输信道就能够实现可靠传输了。下面从最简单的停止等待协议说起。

停止等待协议

全双工通信的双方既是发送方也是接收方,下面是我们仅考虑A发送数据而B接收数据并发送确认。因此A叫做发送方,B叫做接收方

1.无差错情况

如图5-9(a)是最简单的无差错情况:A发送分组M1,发送完就暂停发送,等待B的确认。B接收到M1就向A发送确认。A在接收到对M1的确认后,就再发送下一个分组M2。依次类推发送M2,M3。

2.出现差错

如图5-9(b):B接收到M1时检测到出现了差错,就丢弃M1,其他什么也不做(并不会通知A收到有差错的分组)。也可能是M1分组在传输过程中丢失了,这时候B当然什么也不知道。在这两种情况下,B都不会发送任何信息。可靠传输协议是这样设计的:A只要超过了一段时间仍然没有接收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组。这就叫做‘重传’。要实现如何重传,就要在每发完一个分组,就设置一个超时计时器,如果在规定的时间内收到对方的确认,就撤销已设置的超时计时器

这里应该注意一下三点:

  • A在发送完一个分组后,必须暂时保留已发送的分组的副本(在发生超时重传时使用),只有在收到相应的确认后才能清除只是保留的分组副本。

  • 分组和确认分组都必须进行编号,这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。

  • 超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。图5-9(b)中的一段虚线表示如果M1正确到达B同时A也接收到确认的过程。可见重传时间设定应该比平均往返时间更长一些。显然,如果重传时间设置的很长,那么通信的效率就会很低。但如果重传的时间设定的很短,则会产生不必要的重传,这也会浪费网络资源。然而,在运输层重传时间的准确设定是非常复杂的,这是因为已发送的分组到底会经过那些网络,以及这些网络会产生多大的时延(这取决于这些网络当时的拥塞情况),这些都是不确定因素。图5-9中把往返时间当作固定的,这里仅仅是讲述原理。关于重传时间如何选择,后面会进一步讨论。

3.确认丢失和确认差错

在图5-10(a)说明的是另一种情况。B发送的对M1的确认丢失了。A在设定的超时重传时间内没有收到确认,并无法知道是自己发送的分组出错、丢失,或者是B发送的确认丢失了。因此A在超时计时器到期后就要重传M1。现在应当注意B的动作。假定B又收到了重传的M1,这时应该采取以下两个行动。

  1. 丢弃这个重复的分组M1,不向上层交付

  2. 向A发送确认,不能认为已经发送过确认就不再发送,因为A之所以重传M1就是因为A没有收到对M1的确认。

图5-10(b)也是一种可能出现的情况。传输过程中没有出现差错,但B分组M1的确认迟到了。A会收到重复的确认。对重复的确认处理也很简单:收下后就丢弃。B仍然会收到重复的M1,并且同样要丢弃重复的M1,并重传确认分组。

通常A最终总是可以收到对所有发出去的分组的确认,如果A不断重传分组但总是收不到确认,就说明通信线路太差,不能进行通信。

使用上述的确认和重传机制,我们可以在不可靠的传输网络上实现可靠的通信。

像上述的这种可靠传输协议称之为自动重传请求ARQ(Automatic Repeat reQuest),意思是重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。

信道利用率

停止等待协议的优点是简单,但缺点是信道利用率太低了,我么可以用图5-11来说明这个问题,为了简单起见,假定在A和B之间有一条直通的信道来传送分组。

假定A发送分组需要的时间是TD。显然,TD等于分组长度除以数据率。再假定分组确认到达B后,B处理分组的时间可以忽略不计,同时立即发送一个确认。假定B发送一个确认分组需要时间为TA,如果A确认处理分组的时间也忽略不计,那么A在经过时间(TD+RTT+TA)后就可以在发送下一个分组,RTT是往返时间,因此信道的利用率\(U=TD/(TD+RTT+TA)\)

举个例子,假定1200km 的信道往返时间为RTT=20ms。分组长度为1200bit,发送速率为1Mbit/s,则可以计算出信道利用率U=5.66%,若把发送速率提高到10Mbit/s,则\(U=5.96x10^{-4}\),信道在大多数时间都是空闲的。

因此,为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输,(如图5-12)

image流水线传输就是发送方可以连续发送多个分组,不必每发完一个分组就停止等待对方的确认,这样可以使信道上一直有数据不间断的发送,显然这种传输效率可以得到很大的提高。

当使用流水线传输时,就要使用下面介绍的连接ARQ协议,滑动窗口协议

连续ARQ协议

滑动窗口协议比较复杂,是TCP协议的精髓所在。

图5-13(a)表示发送方维持的发送窗口,它的意义是:位于发送窗口内的5个分组都可以连续发出去,而不需要等待对方确认,这样,信道的利用率就提高了。

连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。图5-13(b)表示发送方接收到了对第一个分组的确认,于是把发送窗口向前移动一个分组的位置。如果原来已经发送了前5个分组,那么现在就可以发送窗口内的第6个分组了。

接收方一般采用的是累计确认的方式。这就是说,接收方不必对接收到的分组逐个发送确认。而是收到几个分组后,对按照顺序到达的最后一个分组发送确认,这就表明:到这个分组为止的所有分组都正确的收到了。

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

posted @ 2022-01-23 11:01  LilyFlower  阅读(742)  评论(0编辑  收藏  举报