可靠传输的工作原理
TCP发送的报文是交给IP层传送的。但IP层只能提供尽最大努力服务也就是说,TCP下面的网络所提供的是不可靠的传输。因此TCP必须采用适当的措施才能使得两个运输层之间的通信变得可靠。可以使用下面这些协议。
停止等待协议
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
1. 无差错情况和出现差错的情况
出现差错时应注意以下三点:
- A在发送完一个分组后,必须暂时保留已发送的分组副本(为发生超时重传时使用)。只有在收到相应的确认后才能清除暂时保留的分组副本。
- 分组和确认分组都必须进行编号。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。
- 超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。
2. 确认丢失和确认迟到的情况:
图a中假定B又收到了重传分组M2,这时应采取两个行动:
- 丢弃这个重复的分组M2,不向上层交付。
- 向A发送确认,不能认为已经发送过确认就不再发送,因为之所以重传M2就表示A没有收到对M2的确认。
图b在传输过程中没有出现差错,但B对分组M1的确认迟到了。A会收到重复的确认对重复的确认处理:收下后就丢弃,B仍然收到重复的M1,并且同样要丢弃重复的M1,并重传确认分组。
像上面的这种可靠传输协议称为自动重传请求ARQ。意思是重传的请求是自动进行的。接收方不需要请求发送方重传某个出错的分组。
连续ARQ协议
连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。下图b表示发送方收到了对第1个分组的确认,于是把发送窗口向前移动一个分组的位置。如果原来已经发送了前5个分组,那么现在就可以发送窗口内的第6个分组了。
接收方一般都是采用累积确认的方式。这就是说接收方不必对收到的分组逐个发送确认,而是可以在收到几个分组后对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
累积确认优点:容易实现,即使确认丢失也不必重传。
累积确认缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。