写在前面:本文章是针对《计算机网络第七版》的学习笔记
因为IP层提供的是不可靠的,尽最大努力的传输,因此TCP如果要实现可靠的传输需要采取适当的措施。
停止等待:每发送完一个分组就停止发送,等待对方的确认。在收到确认之后,再发送下一个分组。
1.1 无差错情况
如图a:
-
A先发完分组M1,发完就等待B确认;
-
B收到M1则向A发送确认;
-
A收到B的确认再发送M2,以此类推...
1.2 超时重传
如图b:
-
B在接收M1时出现检测差错,则丢失B。或者,B没有收到M1。这两种情况下,B都不发确认信息;
-
A只要在规定时间内没有收到B的确认消息,则重传M1。
这里的重传实现需要注意三个方面:
-
A每发送一个分组,需要保留该分组的副本,只有收到确认消息后才能删除。
-
分组和确认分组都必须编号。
-
超时重传的时间应该比数据平均往返时间更长一点。
1.3 确认丢失和确认迟到
确认丢失,如图a:
B所发送的对M1的确认丢失了,则A只要超时了就重传,直到收到B的确认为止。这时B可能收到重复的M1:
-
丢弃这个分组,不向上层交付;
-
向A发送确认。
确认丢失,如图b:
B对A的确认迟到了,A可能收到重复的确认。这时,A收到重复的确认直接丢弃,B收到重复的分组后也直接丢弃,并向A发送确认。
1.4 信道利用率
停止等待协议的优点是简单,但是信道利用率低。为了提高信道利用率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输(如下图所示)。流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不断的传输。如果要实现这种流水线传输,则需要使用连续ARQ协议。