> 文档中心 > TCP的可靠传输-停止等待协议

TCP的可靠传输-停止等待协议

TCP是可靠的传输协议,停止等待协议是保证TCP可靠传输的其中一种措施

正常传输

正常的TCP通信是这样的:

分析:在正常传输时,发送端发每发送一段数据,接受端就要确认一下并给出答复(就像你给喜欢的人表白一下,你问对方能做你对象吗,对方答应了,那么你才可以说接下来的话)

出现差错

如果对方没有应答,那可能就是下面这种情况:

当对方还没有答应你时,你在说我带你去吃饭,是不是会被别人当傻子呀,这个时候,你稍等一下,再重新问一次,当对方答应了,你才能说带她去吃饭。

分析:在进行数据传输的时候,也是上边这种情况,当发送方将一个数据分组发送过去后,对放迟迟没有回应,那么可以认为这个数据分组在传输过程中已经丢失了。在这种情况下,接受端不会回应任何信息,而接受端在每一次发送数据分组后,都会设置一个超时计时器。如果接受端在超时计时器到期之前收到了对方的确认,就撤销超时计时器,如果没有收到确认就会重新发送这个数据分组。

注意:发送方在发送完一个数据分组后,必须暂时保留已发送的分组的副本,在发生超时重传的时候使用,只有在按时收到对方的确认信息后才会清楚保留的副本。

分组和确认分组都必须进行编号。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认(这里其实指的是传输层所用的滑动窗口协议,后续会进行详细叙述,现在是在链路层,只需要用一位编号即可)

超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些(在介绍超时重传时会详细叙述)。

确认丢失和确认迟到

上述超时重传的前提有两种情况:

一,发送端发送的数据在传输中丢失了,接收方根本就没有收到;

二,接收方收到了来自发送方的数据分组,但它回应的确认信息在传输途中丢失了

现在假设其中一种情况发生了,需要重传,当重传之后可能又会有这样一个问题,我发送端之前丢失的数据分组又回来了或者之前丢失的确认信息又回来了,而且传输到了接受端(发送端),那么此时接受端就有两份相同的数据(或者两份确认信息),此时采取的措施是丢弃重复的分组数据或确认信息。即,收到重复就丢弃。

图解:

 

谈到这里,我们可能已经看出了停止等待协议的缺点:它的信道利用率太低了,我们没发一个数据就确认一次,这样太耗费时间,那么我们如何解决呢?

接下一篇,滑动窗口 !!!

书本网