计算机网络 TCP------滑动窗口协议与ARQ协议

滑动窗口协议 滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量。
滑动窗口协议规定发送方和接收方都会维护一个窗口,在任何时刻其发送窗口内的数据都可以分为以下 4 类:

  • 发送了并被确认的
  • 发送了但未被确认的
  • 能发送但未发送的
  • 不能够发送的
计算机网络 TCP------滑动窗口协议与ARQ协议
文章图片


只有当接收方返回对应的确认接收消息,发送窗口才会往后面移动,根据不同的ARQ协议会有不同的实现。
ARQ协议 自动重传请求(Automatic Repeat-reQuest,ARQ),传统的一般分成为三种,即停等式(stop-and-wait)ARQ,回退n帧(go-back-n)ARQ,以及选择性重传(selective repeat)ARQ。后两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称其为连续ARQ协议。
停止等待ARQ协议 停止等待ARQ是以停止等待协议(stop-and-wait)为思想的,停止等待协议是最简单但也是最基础的数据链路层协议。
众所周知信道是不可靠的,而停止等待协议是保证传输可靠性的重要途径。该协议的内容也很简单,就是一次只发送一个分组的消息,等对方确认之后再继续发后面的,如果没有接收到确认会触发超时重传,这样可以保证对方可以收到完整的消息。
停止等待ARQ协议也可以看做是一比特滑动窗口协议,发送窗口与接收窗口都等 1 。
这里我们可以很清晰的发现上面数据传输方式的缺点:通信信道的利用率很低,传输时延大。

连续ARQ协议 为了克服停止等待ARQ的缺点,又提出了连续ARQ协议。
连续ARQ(Automatic Repeat reQuest)协议也是结合滑动窗口协议的,其在发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,而中途不需要等待对方的确认。这样信道的利用率就提高了。而发送方每收到一个确认就把发送窗口向前滑动一个分组的位置。
计算机网络 TCP------滑动窗口协议与ARQ协议
文章图片


回退n帧(go-back-n)ARQ
回退n帧ARQ可以看做是发送窗口 > 1 ,接收窗口 = 1的滑动窗口协议,这就是说接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示:到这个分组为止的所有分组都已正确收到了。
但网络状况不好的时候会出现,如发送窗口为 10 时,一次发送 10 个数据包,前面两个正确返回了,但第三个丢失了,这时发送方就得重新从第三个包开始,把后面的再传一遍,接收方也必须抛弃前面的 4 - 10 这几个帧,所以网络不佳的情况下可能会比停止等待ARQ还慢。
计算机网络 TCP------滑动窗口协议与ARQ协议
文章图片


选择重传(selective repeat)ARQ
回退n帧ARQ在出现错误帧时,发送方要把错误帧之后的所以帧重发一遍,在网络情况不佳的时候只会进一步恶化网络。
选择重传ARQ可以看做是发送窗口 > 1 ,接收窗口 > 1的滑动窗口协议,其会在接收端缓存所有收到的帧,当某个帧出现错误则只需要重传这个错误的帧即可,只有当收到的帧序号都正确了才会往高层应用传递。
选择重传ARQ的缺点是相较于回退n帧ARQ,其在服务端需要更多的缓存。

参考: 百度百科
https://blog.csdn.net/sicofield/article/details/9708311
https://blog.csdn.net/guoweimelon/article/details/50879588
【计算机网络 TCP------滑动窗口协议与ARQ协议】

    推荐阅读