TCP 滑动窗口(已经发出等待对方确认的队列)协议
滑动窗口协议是TCP使用的一种流量控制方法,该协议允许发送方在停止并等待确认前可以连续发送多个分组。TCP是如何通过滑动窗口协议实现流量控制的?本博文将为您详细介绍该协议及其工作原理。
什么是滑动窗口协议?
一图胜千言,看下面的图。简单解释下,发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口。发送方的窗口大小由接受方确定,目的在于控制发送速度,以免接受方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞。下面图中的4,5,6号数据帧已经被发送出去,但是未收到关联的ACK,7,8,9帧则是等待发送。可以看出发送端的窗口大小为6,这是由接受端告知的(事实上必须考虑拥塞窗口cwnd,这里暂且考虑cwnd>rwnd)。此时如果发送端收到4号ACK,则窗口的左边缘向右收缩,窗口的右边缘则向右扩展,此时窗口就向前“滑动了”,即数据帧10也可以被发送。
下面就滑动窗口协议做出更详细的说明,这里为了简单起见设定发送方窗口大小为2,接受方大小为1。看下面图:
一:初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;
二:发送方打开0号窗口,表示已发出0帧但尚确认返回信息。 此时接收窗口状态不变;
三:发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之 前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;
四:接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不 变;
五:发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变
六:发送方继续发送2号帧,2号窗口 打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态 仍不变;
七:接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;
八:发送方收到接收方发来的1号帧收毕的确认信 息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。
1比特滑动窗口协议?
上面说的只是滑动窗口协议的理论,实际应用中又有不同。首先就是停等协议(stop-and-wait),这时接受方的窗口和发送方的窗口大小都是1,1个比特就够表示了,所以也叫1比特滑动窗口协议。发送方这时自然发送每次只能发送一个,并且必须等待这个数据包的ACK,才能发送下一个。虽然在效率上比较低,带宽利用率明显较低,不过在网络环境较差,或是带宽本身很低的情况下,还是适用的。看下面的流程图:
后退n协议?
停等协议虽然实现简单,也能较好的适用恶劣的网络环境,但是显然效率太低。所以有了后退n协议,这也是滑动窗口协议真正的用处,这里发送的窗口大小为n,接受方的窗口仍然为1。具体看下面的图,这里假设n=9:
首先发送方一口气发送10个数据帧,前面两个帧正确返回了,数据帧2出现了错误,这时发送方被迫重新发送2-8这7个帧,接受方也必须丢弃之前接受的3-8这几个帧。
后退n协议的好处无疑是提高了效率,但是一旦网络情况糟糕,则会导致大量数据重发,反而不如上面的停等协议,实际上这是很常见的,具体可以参考TCP拥塞控制。
选择重传协议?
后退n协议的另外一个问题是,当有错误帧出现后,总是要重发该帧之后的所有帧,毫无疑问在网络不是很好的情况下会进一步恶化网络状况,重传协议便是用来解决这个问题。原理也很简单,接收端总会缓存所有收到的帧,当某个帧出现错误时,只会要求重传这一个帧,只有当某个序号后的所有帧都正确收到后,才会一起提交给高层应用。重传协议的缺点在于接受端需要更多的缓存。
TCP 滑动窗口(已经发出等待对方确认的队列)协议相关推荐
- 计算机网络:TCP滑动窗口的流量控制和拥塞控制
1. 前言 最近在研究网络通信底层通信原理,所以不得不复习一波计算机网络传输控制协议.那么对于程序开发人员,了解底层网络通信原理,对于我们理解BIO.NIO网络通信十分重要.所以对于程序开发人员来说, ...
- TCP三次握手和四次挥手?TCP如何保证可靠性?什么是TCP滑动窗口?
TCP三次握手和四次挥手? 三次握手 tcp3handshake.gif tcp3handshake2.gif tcp3handshake3.gif tcp3handshake4.gif 四次挥手 t ...
- TCP 滑动窗口(快速重传)
目录 一.滑动窗口的来由 二.滑动窗口 1.滑动窗口模型 2.滑动窗口可能出现的状况 (1) 客户端发送的报文丢了(快重传机制) (2) 服务端发送的ACK丢了(先收到了排序靠后的ACK) 三.滑动窗 ...
- TCP滑动窗口、流量控制及拥塞控制详解
一.TCP滑动窗口 TCP虽然是面向字节流的,但是TCP传输的单元确实报文段.一个TCP报文段分为首部和数据部分.TCP首部前20个字节是固定的,后面有4N个字节是可选的.因此,TCP首部最小字节数是 ...
- TCP/IP(十一)TCP滑动窗口和拥塞控制
目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等.这些协议又可以根据数据吞吐量来大致分成两大类:(1)交互数据类型,例如telnet,ssh,这种类型的协议在大 ...
- TCP滑动窗口机制(附图例)
文章目录 前言 一.滑动窗口的引出 二.流量控制 2.1 16位窗口大小 2.2 发送缓冲区 2.3 逐步解析滑动窗口运作 三.快重传机制 四.拥塞控制(仅供参考) 五.延迟应答与捎带应答(略) 总结 ...
- 计算机网络之TCP滑动窗口
文章目录 计算机网络之TCP滑动窗口 1.详细讲一下TCP的滑动窗口 2. 聊聊 TCP 的滑动窗口 计算机网络之TCP滑动窗口 1.详细讲一下TCP的滑动窗口 在进行数据传输时,如果传输的数据比较大 ...
- TCP滑动窗口(发送窗口和接受窗口)
TCP窗口机制 TCP header中有一个Window Size字段,它其实是指接收端的窗口,即接收窗口.用来告知发送端自己所能接收的数据量,从而达到一部分流控的目的. 其实TCP在整个发送过程中, ...
- tcp滑动窗口_面试必备TCP(三):滑动窗口
之前说过TCP协议头部的组成,不清楚可以点击这里,TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输. 每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口:一个用于接收数据, ...
最新文章
- C语言截取指定长度子字符串方法
- Marvelous Designer衣袖设计教程
- 资深程序员感叹:表妹成绩好却无奈辍学开理发店,月入6万,上大学没用!网友:那是你没用!...
- 深入理解卷II ---ICS源代码下载
- 26个导航设计非常独特的网站案例欣赏
- U3D 扩展方法 Dotween tolua
- ###Fedora下安装Retext
- margin塌陷问题
- 庖丁解牛TLD(二)——初始化工作(为算法的准备)
- 截获android屏幕服务,如何捕获android设备屏幕内容?
- beanutil 批量copy_BeanUtils.copyProperties 需要getset方法支持
- 如何设计java线程安全类_如何设计线程安全的Java程序
- 这些迹象表明公司即将裁员
- 请说说你对标签语义化的理解?
- KindEditor 4.1.10 (2013-11-23)首行空格不能显示在编辑器内
- SLAM大神总结(转载)
- 专题实验 字符集(全球化支持)
- java基础大概_Java基础知识(一)
- java fields是_一个快速生成R2.java中fields的插件
- 推荐几个最好用的CRM软件,本人亲测