可靠传输的停等协议导致传输效率很差,有什么方式可以改进呢?
可以使用流水线传输:允许发送方在收到收到ACK之前继续发送分组。
如图所示,停等协议,在接收到用户的确认信息之前,一直处于空闲转台,信道的利用效率很低。为此我们可以使用流水线的机制提高效率,也就是在等待过程中接着发送若干分组,同时在信道中传播。
这要求要有更大的***范围,同时要求发送方和接收方拥有更多的缓存空间。
TCP通过使用滑动窗口实现流水线传输。常见的滑动窗口协议有两种:GBN和SR.
- GBN(Go-Back-N,回退N步)
GBN使用累积确认机制.
发送方设置窗口尺寸为N:最多允许N个分组未被确认,接收方收到ACK时会附带当前获取到当前获取到的分组的序号,同时要添加一个计时器,当时间到了之后,还未收到确认的分组,就会重新发送。(还未确认的分组,指当前收到ACK中,最大序号后的所有分组)。
接受方,只会记录当前需要获取的报文的序号,当接收到正确的报文之前,序号加一,对于乱序到达的报文,直接丢弃,同时发送当前需要的序号报文的ACK。
- SR(Selective Repeat协议,选择重传)
与GBN相比,SR的接收方有一个缓存滑动窗口,用于对每个分组进行单独确认,发送方只重传没有收到ACK的分组,这就意味着需要为每个分组单独设置一个定时器,以方便进行超时重传。
发送方和GBN类似,但是重传的时候只重传所有未被确认的,只有当滑动窗口前面连续多个报文被确认接收时,滑动窗口移动。
接收方当接收的消息在滑动窗口内时,会发送ACK(N),如果按序到达,就会移动滑动窗口,不是的话,就会缓存乱序到达的。
如果在滑动窗口之前的,说明之前接受报文的ACK丢失了,重传ACK,
如果在滑动窗口之后的,就直接丢弃。
以上就是两个常见的滑动窗口协议,能够有效的提升可靠传输的性能。