一 可靠传输原理:
由于IP层只提供尽最大努力的服务,即TCP下面是不可靠的传输,所以TCP必须采取措施使通信变为可靠的。
使用下述的确认和重传机制,我们就可以在不可靠的运输网络上实现可靠的通信。
下述这种可靠运输协议常称为自动重传请求ARQ(Automatic Repeat reQuest):意思是重传的请求时自动进行的,接收方不用告诉发送方重传那个出错分组。常用的自动重传请求协议包括:停止-等待ARQ协议、连续ARQ协议(后退N ARQ协议)和选择重传ARQ协议。
(一)停止等待协议:就是每发送一个分组就停止发送,等待对方的确认,在确认收到后再发送下一个分组。
(1)无差错情况。
如下图:A发送分组M1,发送完就暂停,等待B的确认。B收到M1就发送确认。A收到M1的确认后,再发送分组M2。同样,收到对M2的确认后,A再发送M3。
(2)有差错情况:
1.出错的两种情况:
*B收到了A发送的分组M1时检测出了错误,那么就丢弃分组M1,什么也不做。
*分组M1在传送过程中丢失了,这时B当然什么都不知道。
以上两种情况,B都不会发送任何消息。
2.可靠传输协议的设计:A只要超过一段时间没有收到分组的确认,就认为刚发送的分组丢失了,就重传前面发送过的分组,即超时重传。要实现超时重传就要在每发送完一个分组设子一个超时计时器。如果在超时计时器到期之前收到确认,就撤销已设置的超时计时器。
3.注意三点:
*A在发送完一个分组后,必须暂时保存已发送分组的副本(超时重传时使用)。只有收到分组的确认后才能清除暂时保留的分组副本。
*分组和确认分组都必须进行编号。
*超时计时器设置的重传时间应该比数据在分组传输的平均往返时间更长一些。
如下图:
(3)确认丢失和确认迟到
1.确认丢失:
B的确认分组丢失了,A在设定重传时间内没有收到分组的确认,因此,在重传时间到期后就要重传分组。这时B又收到了重复的分组,这时B采取的动作:
*第一,丢弃这个重传的分组,不向上层交付。
*第二,向A发送确认。
如下图:
2.确认迟到:
A会收到重复的分组确认,A收下后丢弃。B仍然会收到重复的分组,B的采取动作如上。
如下图:
(4)信道利用率:
停止等待协议的优点是简单,缺点是信道利用率太低。
发送方可以采用流水线传输。流水线传输就是发送方可以连续发送多个分组,不必每发送一个分组停顿下来等待对方的确认,这样就可以获得很高的信道利用率。
用到流水线传输,就要利用下述的连续ARQ协议和滑动窗口协议。
(二)连续ARQ协议:
1.发送方维持一个发送窗口:位于发送窗口内的分组可以连续发送出去,不必等待对方的确认。
连续ARQ协议规定:发送方每收到一个确认,就把发送窗口向前活动一个分组的位置。如下图:
2.接收方一般都采用累积确认的方式:接收方收到几个分组后,对按序到达的最后一个分组发送确认。
*累积确认的优点:容易实现,即使确认丢失也不必重传(为什么不重传)。
*缺点:不能向发送方反映出接收方已正确收到的所有分组的信息。
例如:发送方发送5个分组给接收方,但是中间第3个分组丢失了。这时接收方只能对前两个分组进行确认,发送方无法知道后三个分组的下落,所以需要重传后三个分组。这就是Go-back-N(后退N):表示需要再退回来重传已发送过的N个分组。
(三)选择重传ARQ协议: