计算机网络-可靠传输-停止等待协议

如题所述

第1个回答  2022-07-30
全双工通信的双方既是发送方也是接收方。下面为了讨论问题的方便,我们仅考虑A发送数据而B接收数据并发送确认。 因此A叫做发送方,而B叫做接收方 。因为这里是讨论可靠传输的原理,因此把传送的数据单元都称为分组,“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

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

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

这里应注意以下三点:

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

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

①注:在可靠传输的协议中,也可以在检测出有差错时发送“否认报文”给对方。这样做的好处是能够让发送方及早如道出现了差错。不过由于这样处理会使协议复杂化,现在实用的可靠传输协议都不使用这种否认报文了。

②注:编号并不是一个非常简单的问题。分组编号使用的位数总是有限的,同一个号码会重复使用。例如,10位的编号范围是0~1023。当编号增加到1023时,再增加一个号就又回到0,然后重复使用这些号码。因此,在所发送的分组中,必须能够区分开哪些是新发送的,哪些是重传的。对于简单链路上传送的帧,如采用停止等待协议,只要用1位编号即可,也就是发送完0号帧,收到确认后,再发送1号帧,收到确认后,再发送0号帧。但是在运输层,这种编号方法有时并不能保证可靠传输。

第三,超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。图5-9(b)中的一段虚线表示如果M正确到达B同时A也正确收到确认的过程。可见重传时间应设定为比平均往返时间更长一些。显然,如果重传时间设定得很长,那么通信的效率就会很低。但如果重传时间设定得太短,以致产生不必要的重传,就浪费了网络资源。然而,在运输层重传时间的准确设定是非常复杂的,这是因为已发送出的分组到底会经过哪些网络,以及这些网络将会产生多大的时延(这取决于这些网络当时的拥塞情况),这些都是不确定因素。图5-9中把往返时间当作固定的(这并不符合网络的实际情况),只是为了讲述原理的方便,关于重传时间应如何选择, 选择确认SACK 。

图5-10(b)说明的是另一种情况,B所发送的对M1的确认丢失了。A在设定的超时重传时间内没有收到确认,并无法知道是自己发送的分组出铝、丢失,或者是B发送的确认丢失了。因此A在超时计时器到期后就要重传M1,现在应注意B的动作,假定B又收到了重传的分组M1。这时应采取两个行动。第一,丢弃这个重复的分组M1,不向上层交付;第二,向A发送确认,不能认为已经发送过确认就不再发送,因为A之所以重传M1就表示A没有收到对M,的确认。

图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是往返时间。因为仅仅是在时间TD内才用来传送有用的数据(包括分组的首部),因此信道的利用率U可用下式计算: U=TD/TD +RTT+TA (5-3)

请注意,更细致的计算还可以在上式分子的时间TD内扣除传送控制信息(如首部)所花费的时间。但在进行粗略计算时,用近似的式(5-3)就可以了。

我们知道,(5-3)式中的往返时间RTT取决于所使用的信道。例如,假定1200km的信道的往返时间RTT=20ms。分组长度是1200bit,发送速率是1Mbit/s。若忽略处理时间和TA(TA一般都远小于TD), TD=1200/1*10^6 ,信道的利用率U=5.66%。但若把发送速率提高到10Mbit/s,则U=5.96×10^(-4)。信道在绝大多数时间内都是空闲的。

从图5-11还可看出,当往返时间RTT远大于分组发送时间TD时,信道的利用率就会非常低。还应注意的是,图5-11并没有考虑出现差错后的分组重传。若出现重传,则对传送有用的数据信息来说,信道的利用率就还要降低。

为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输(如图5-12所示)。流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一真有数据不间断地在传送。显然,这种传输方式可以获得很高的信道利用率。
相似回答