滑动窗口协议

1.概念

     滑动窗口协议,也称为回退N步协议(Go-Back-N,GBN)中,允许发送方发送多个分组(当有多个分组可用时)而不需等待确认,但它受限于在流水线 中为未确认的分组数不能超过某个最大允许数N。滑动窗口协议是TCP使用的一种流量控制方法,此协议能够加速数据的传输。

    只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。

    收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。

  当发送窗口和接收窗口的大小都等于1时,就是停止等待协议。

  当发送窗口大于1,接收窗口等于1时,就是回退N步协议。

  当发送窗口和接收窗口的大小均大于1时,就是选择重发协议。

  协议中规定,对于窗口内未经确认的分组需要重传。这种分组的数量最多可以等于发送窗口的大小,即滑动窗口的大小n减去1(因为发送窗口不可能大于(n-1),起码接收窗口要大于等于1)。

2.工作原理

       TCP滑动窗口用来暂存两台计算机间要传送的数据分组。每台运行TCP协议的计算机有两个滑动窗口:一个用于数据发送,另一个用于数据接收。发送端待发数 据分组在缓冲区排队等待送出。被滑动窗口框入的分组,是可以在未收到接收确认的情况下最多送出的部分。滑动窗口左端标志X的分组,是已经被接收端确认收到 的分组。随着新的确认到来,窗口不断向右滑动。

       TCP 协议软件依靠滑动窗口机制解决传输效率和流量控制问题。它可以在收到确认信息之前发送多个数据分组。这种机制使得网络通信处于忙碌状态,提高了整个网络的 吞吐率,它还解决了端到端的通信流量控制问题,允许接收端在拥有容纳足够数据的缓冲之前对传输进行限制。在实际运行中,TCP滑动窗口的大小是可以随时调 整的。收发端TCP协议软件在进行分组确认通信时,还交换滑动窗口控制信息,使得双方滑动窗口大小可以根据需要动态变化,达到在提高数据传输效率的同时, 防止拥塞的发生。

      称窗口左边沿向右边沿靠近为窗口合拢,这种现象发生在数据被发送和确认时。当窗口右边沿向右移动时将允许发送更多的数据,称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。

      当右边沿向左移动时,称为窗口收缩。Host Requirements RFC强烈建议不要使用这种方式。但TCP必须能够在某一端产生这种情况时进行处理。 如果左边沿到达右边沿,则称其为一个零窗口。

3. 慢启动算法
  每个发送方位维护两个窗口:一个是接收方准许的窗口,第二个是拥塞窗口。最终允许发送的字节数以接受窗口和用死啊窗口的最小值为准。因此有效窗口是发送方认为没有问题的窗口和接收方认为没有问题的窗口中最小的那个。

  事实上拥塞控制中还定义有第三个参数:阈值,初始值为64KB。

  慢启动过程:

  (1)当一个链接建立起来以后,发送方的拥塞窗口初始化为该链接上当前使用的最大数据段值。然后发送一个最大数据段,如果该数据段在定时器过期之前确认,那么拥塞窗口变成2。以后拥塞窗口按指数级别增长。

  (2)当拥塞窗口增长到阈值的时候,指数增长停滞,从这个点开始,每次成功的传输,都会使拥塞窗口线程增长,(即每次只增长一个最大数据段)。

  (3)当超时发生时,阈值被设置为当前拥塞窗口的一半 ,而拥塞窗口被充值为一个最大数据段,之后使用相同的慢启动算法来决定网络的处理能力。

4.名词解释

(1)停止等待协议

(2)回退N步协议 

(3)选择重传

    GBN协议(Go-Back-N,GBN)允许发送方用多个分组“填充流水线”,因此避免了停止等待协议中所提到的信道利用率的问题。然而,GBN协议也存在性能上的问题。尤其是当窗口的长度和带宽时延积都很大,在流水线中会有很多分组时更是如此。一个单个分 组的差错就引起GBN重传大量分组,而其中的许多分组根本没有必要重传。随着信道差错率的增加,流水线可能会被这些没有必要重传的分组填满。

  选择重传(SR)协议通过让发送方近重传那些换衣在接受方出错(即分组丢失或受损)的分组,从而避免了不必要的重传。这种个别的、按需的重传要求接受方逐个地确认正确接受的分组。再次用窗口长度N来限制流水线中为完成、未被确认的分组数。然而,与GBN不同的是,发送方已经接收到了对窗口中某些分组的ACK。

时间: 2024-07-29 02:18:20

滑动窗口协议的相关文章

转:TCP/IP详解--举例明白发送/接收缓冲区、滑动窗口协议之间的关系

原文地址:http://blog.csdn.net/yusiguyuan/article/details/21439633#1536434-tsina-1-74921-66a1f5d8f89e9ad52626f6f40fdeadaa  TCP/IP详解--举例明白发送/接收缓冲区.滑动窗口协议之间的关系. 一个例子明白发送缓冲区.接受缓冲区.滑动窗口协议之间的关系. 在上面的几篇文章中简单介绍了上述几个概念在TCP网络编程中的关系,也对应了几个基本socket系统调用的几个行为,这里再列举一个例

一篇带你读懂TCP之“滑动窗口”协议

前言 你现在的努力,是为了以后有更多的选择. 在上一篇文章通过"表白"方式,让我们快速了解网络七层协议了解了网络七层协议. 接下来我们要把重心放在网络传输的可靠性上面.一起来看TCP协议,它是如何解决网络传输不可靠的问题.这其中有个很关键的部分,就是我们的滑动窗口协议. 从工程学角度上,我们来看一看滑动窗口协议,它到底解决了一个怎样的问题? 滑动窗口协议: TCP协议的使用 维持发送方/接收方缓冲区 缓冲区是 用来解决网络之间数据不可靠的问题,例如丢包,重复包,出错,乱序 在TCP协议

可靠传输数据概述之RDT到滑动窗口协议的发展

主要思想是有限状态机. RDT1.0 RDT1.0是模拟信道可靠的情况下. RDT1.0存在的问题: 信道完全可靠是理论的模型 RDT2.0 RDT2.0是模拟信道不可靠的情况下(数据位翻转,但不丢失分组),解决信息发送接收的问题,加入checksum校验位. 发送方在发送完成后会进入一个等待确认的状态,当收到接收方返回的消息为ACK时才会让上层进入下一次调用,否则会重新发送消息. 接收方在接收到信息后会对消息进行校验,当信息校验成功后,会发送ACK,否则发送NAK. RDT2.0存在的问题:

tcp协议头窗口,滑动窗口,流控制,拥塞控制关系

参考文章 TCP 的那些事儿(下) http://coolshell.cn/articles/11609.html tcp/ip详解--拥塞控制 & 慢启动 快恢复 拥塞避免 http://blog.csdn.net/kinger0/article/details/48206999 TCP window Full http://blog.csdn.net/abccheng/article/details/50503457 名词解释 MTU:maximum transmission unit,最大

tcp 滑动窗口网络传输协议动态演示

我是一个菜鸟,只为了有好东西和大家分享! 最近项目中遇到一个让我很纠结的问题,为什么浏览器下载速度我测试可以达到1兆,而当我用sperf测试服务器到我本机单纯的传输速度的时候,速度最大超不过200kb/s.首先应该明白的是浏览器是单线程,而传输速度却惊奇的达到1兆,我在vs中测试一个单纯的下载,速度也是1兆.那么到这里,我想到了可能是tcp  滑动窗口协议,协议的动态图,我付了链接. 不喜勿喷,我是菜鸟.    http://histrory.visualland.net/tcp_swnd_tu

TCP滑动窗口与回退N针协议

[转]TCP 滑动窗口协议/1比特滑动窗口协议/后退n协议/选择重传协议 2014-1-5阅读884 评论0 本文转自 http://www.cnblogs.com/ulihj/archive/2011/01/06/1927613.html 滑动窗口协议 一图胜千言,看下面的图,简单解释下: 发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口.发送方的窗口大小由接受方确定,目的在于控制发送速度,以免接受方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞.下面图中的4,5,6号数据帧

TCP/IP 协议中的滑动窗口

一个例子明白发送缓冲区.接受缓冲区.滑动窗口协议之间的关系. 在上面的几篇文章中简单介绍了上述几个概念在TCP网络编程中的关系,也对应了几个基本socket系统调用的几个行为,这里再列举一个例子,由于对于每一个TCP的SOCKET来说,都有一个发送缓冲区和接受缓冲区与之对应,所以这里只做单方向jiāo流,不做互动,在recv端不send,在send端不recv.细细揣摩其中的含义. 一.recv端 在监听套接字上准备accept,在accept结束以后不做什么操作,直接sleep很久,也就是在r

tcp滑动窗口与拥塞控制

TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现.一.滑动窗口协议     所谓滑动窗口协议,自己理解有两点:1. "窗口"对应的是一段可以被发送者发送的字节序列,其连续的范围称之为"窗口":2. "滑动"则是指这段"允许发送的范围"是可以随着发送的过程而变化的,方式就是按顺序"滑动".在引入一个例子来说这个协议之前,我觉得很有必

TCP/IP可靠的原理 滑动窗口 拥塞窗口

TCP和UDP处在同一层---运输层,但是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个"拨打电话"的过程,等到通信准备结束才开始传输数据,最后结束通话.所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文,这一经时重申了很多遍了. 把TCP保证可靠性的简单工作原理摘抄如下 应用数据被分割成TCP认为最适合发送的数据块.这和