滑动窗口与拥塞窗口_流云哭翠-ChinaUnix博客
一、滑动窗口
滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。
对ACK的再认识,ack通常被理解为收到数据后给出的一个确认。事实上该确认是指接收端已经收到确认桢以前的所有的桢。举个例子,假如接收端收到1-1024字节,它会发送一个确认号为1025的ACK,但是接下来收到的是2049-3072,它是不会发送确认号为3072的ACK,而依旧发送1025的ACK。
滑动窗口协议如图所示:
在这个图中,我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口,它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,且通告窗口大小为6。我们知道窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:
称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了T C P的接收缓存时。
当右边缘向左移动时,称之为窗口收缩。
二、拥塞窗口
迄今为止,在本章所有的例子中,发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的。但是如果在发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。一些中间路由器必须缓存分组,并有可能耗尽缓存,[Jacobson 1988]证明了这种连接方式是如何严重降低了TCP连接的吞吐量的。现在,TCP需要支持一种被称为“慢启动(slow start)”的算法。该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。
慢启动为发送方的TCP增加了另一个窗口:拥塞窗口(congestion window),记为cwnd。当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为1个报文段(即另一端通告的报文段大小)。每收到一个ACK,拥塞窗口就增加一个报文段(cwnd以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。
发送方开始时发送一个报文段,然后等待ACK。当收到该ACK时,拥塞窗口从1增加为2,即可以发送两个报文段。当收到这两个报文段的ACK时,拥塞窗口就增加为4。这是一种指数增加的关系。
转载于:https://blog.51cto.com/xiaozixu3242/998897
滑动窗口与拥塞窗口_流云哭翠-ChinaUnix博客相关推荐
- TCP的滑动窗口与拥塞窗口
因此我们先了解一下16位的窗口大小究竟有什么作用. 窗口分为滑动窗口和拥塞窗口. 滑动窗口是接受数据端使用的窗口大小,用来告知发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制 ...
- linux tcp限流脚本,TCP通过滑动窗口和拥塞窗口实现限流,能抵御ddos攻击吗
tcp可以通过滑动窗口和拥塞算法实现流量控制,限制上行和下行的流量,但是却不能抵御ddos攻击. 限流只是限制访问流量的大小,是无法区分正常流量和异常攻击流量的. 限流可以控制本软件或者应用的流量大小 ...
- 怎么禁止/开启Ubuntu自动更新升级_豆豆技术派的博客-CSDN博客_ubuntu 自动更新
怎么禁止/开启Ubuntu自动更新升级_豆豆技术派的博客-CSDN博客_ubuntu 自动更新
- 无人驾驶运动学模型——线性时变模型预测控制的思路推演过程_百叶书的博客-CSDN博客_线性时变模型预测控制 转
无人驾驶运动学模型--线性时变模型预测控制的思路推演过程_百叶书的博客-CSDN博客_线性时变模型预测控制
- TCP通过滑动窗口和拥塞窗口实现限流,能抵御ddos攻击吗
tcp可以通过滑动窗口和拥塞算法实现流量控制,限制上行和下行的流量,但是却不能抵御ddos攻击. 限流只是限制访问流量的大小,是无法区分正常流量和异常攻击流量的. 限流可以控制本软件或者应用的流量大小 ...
- TCP报文、滑动窗口、拥塞窗口解释
部分参考:https://blog.csdn.net/zhangdaisylove/article/details/47294315 源端口号:占2个字节,就是发起方的port 目的端口号:占两个字节 ...
- 子窗口控件 -windows程序设计(网易小海星的博客)
取父窗口的窗口句柄: hwndParent = GetParent (hwnd) ; 发送消息: SendMessage (hwndParent, message, wParam, lParam) ; ...
- 做百度快照入门_如何为您的博客文章拍摄屏幕快照(入门指南)
做百度快照入门 Do you want to add a screenshot to your blog post, but not sure of the best way to do it? Sc ...
- 如何改typecho主题头像_如何搭建hexo个人博客
自媒体时代,每个人都有展示自己的舞台. 你是否想过搭建一个属于自己的博客,不再为各种广告和限制而头疼? 那就入坑hexo吧!保证你一时半会儿爬不出来! 先上效果图 移动端效果图如下 是不是有一种网易轻 ...
最新文章
- 欠122亿乐视能不能“真还”?数据拆解乐视债务账单
- Ⅱ:zookeeper的相关shell命令
- 卸载cuda_NVIDIA驱动和CUDA安装
- function函数嵌套 matlab_Matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题...
- Linux下压缩工具gzip和归档工具tar及其实战shell应用
- 实验8.2 队列类的定义与实现
- Resource is out of sync with the file system
- mysqldump备份过程中都干了些什么
- 产品管理:新产品开发流程「权威指南」
- c语言程序方差的计算公式,方差计算公式
- 用java找出2个数组中重复的数字_【Java】 剑指offer(1) 找出数组中重复的数字
- 云计算的三种服务模式的讲解
- python开发工具geany_geany作为Python的编辑器好用吗?
- Shader学习笔记(三)学习Shader所需的数学基础
- SANGFOR SCSA——协议基础
- Python 解决execjs._exceptions.ProgramError: ReferenceError: document is not defined报错问题
- vs2019 android,VS2019无法安装Android SDK 28的问题
- NX启动未能注册按钮事件
- R语言入门——批量读取文件
- 多媒体计算机可以看电影听音乐,传闻Switch终于可以看电影听音乐了?
热门文章
- hdu2.1.2 How many prime numbers(计算素数的个数)
- Alpha冲刺之事后诸葛亮
- Android Studio 3.0 安装注意点
- Java 注解用法详解——@SuppressWarnings
- 深入理解Spring系列之三:BeanFactory解析
- MySQL存储过程详解 mysql 存储过程
- 我理解的session和cookie
- javascript专业八级测试答案整理
- 安装Debian 7.8 过程,以及该系统的配置过程
- d029: 求出2-100之间的所有质数(素数)