[TCP灵魂之问]TCP 的拥塞控制、慢启动、慢启动阈值、拥塞避免、快速重传和快速恢复
说说 TCP 的拥塞控制?
- 流量控制发生在发送端跟接收端之间
- 而TCP 的拥塞控制主要处理的问题是,整个网络环境,网络特别差,特别容易丢包的情况。
对于拥塞控制来说,TCP每条连接都需要维护两个核心状态:
- 拥塞窗口(Congestion Window,cwnd):
是指目前自己还能传输的数据量大小;接收窗口(rwnd)是接收端给的限制拥塞窗口(cwnd)是发送端的限制 发送窗口大小 = min(rwnd, cwnd)
- 慢启动阈值(Slow Start Threshold,ssthresh)
涉及到的算法有这几个:
- 慢启动
采用一种保守的算法来慢慢地适应整个网路,这种算法叫慢启动;
过程:
1.首先,三次握手,双方宣告自己的接收窗口大小
2.双方初始化自己的拥塞窗口(cwnd)大小
3.在开始传输的一段时间,发送端每收到一个 ACK,拥塞窗口大小加 1,
也就是说,每经过一个 RTT,拥塞窗口 翻倍。
如果说初始窗口为 10,
那么第一轮 10 个报文传完且发送端收到 ACK 后,拥塞窗口 变为 20,
第二轮变为 40,第三轮变为 80,依次类推。
直到达到慢启动阈值
- 拥塞避免
达阈值后,如何来控制拥塞窗口的大小;
原来每收到一个 ACK,拥塞窗口加1,现在到达阈值了,拥塞窗口只能加: 1/拥塞窗口
以前一轮 RTT 下来,cwnd翻倍,现在cwnd只是增加 1 而已。
慢启动和拥塞避免是一起作用的,是一体的。
- 快速重传和快速恢复
快速重传
如果发生了丢包,数据不是按序到达,接收端则重复发送之前的ACK
比如第5个包丢了,即使第6、7个包到达的接收端,接收端也一律返回第4个包的ACK。
收到 3 个重复的 ACK ,意识到丢包,马上重传;
选择性重传
ACK 报文SACK属性,通过left edge和right edge已经收到区间
快速恢复
发送端收到三次重复ACK之后,发现丢包觉得现网络已经有些拥塞了,会进入快速恢复阶段
发送端如下改变:
拥塞阈值降低为 cwnd 的一半
cwnd 的大小变为拥塞阈值
cwnd 线性增加
结合图片更好理解:
[TCP灵魂之问]TCP 的拥塞控制、慢启动、慢启动阈值、拥塞避免、快速重传和快速恢复相关推荐
- TCP的拥塞避免、超时重传、快速重传、快速恢复
转自:http://blog.csdn.net/itmacar/article/details/12278769 感谢博主的辛勤成果! 为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制.最初由 ...
- [TCP灵魂之问]介绍一下 TCP 报文头部的字段
TCP 报文头部的字段 源端口.目标端口 如何标识唯一标识一个连接?答案是 TCP 连接的四元组--源 IP.源端口.目标 IP 和目标端口.那 TCP 报文怎么没有源 IP 和目标 IP 呢?这是因 ...
- 传输层 TCP 拥塞控制(3):快速重传与快速恢复
当出现丢包的时候,我们将重新执行慢启动,此时意味着拥塞窗口大幅度下降发送速率也会大幅度下降,当丢包场景并不是很严重的时候,我们还可以采用快速重传,与快速恢复这样一个阶段. 为何会接收到一个失序数据段? ...
- TCP 协议面试灵魂 12 问 | 强势整理
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | urlify.cn/rqumIn 先亮出这篇文 ...
- TCP协议面试灵魂10问 | 强势整理
点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 来源 | urlify.cn/rqumIn 先亮出这篇文章的思维导 ...
- TCP 协议面试灵魂 12 问(二)
007: 能不能说说TCP报文中时间戳的作用? timestamp是 TCP 报文首部的一个可选项,一共占 10 个字节,格式如下: kind(1 字节) + length(1 字节) + info( ...
- TCP 协议面试灵魂10问,建议收藏~
Proc 先亮出这篇文章的思维导图 TCP 作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点.在此,我将 TCP 核心的一些问题梳理了一下,希望能帮到各位. 001. 能不能 ...
- (建议收藏)TCP协议灵魂之问,巩固你的网路底层基础
先亮出这篇文章的思维导图:TCP 作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点.在此,我将 TCP 核心的一些问题梳理了一下,希望能帮到各位. 001. 能不能说一说 T ...
- TCP 协议灵魂 12 问,巩固你的网路底层基础!
点击上方蓝色小字,关注"涛哥聊Python"重磅干货,第一时间送达 作者:神三元 原文:juejin.im/post/5e527c58e51d4526c654bf41 先亮出这篇文 ...
- TCP的拥塞控制--慢启动,拥塞避免,快重传,快速恢复
拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象.这种现象跟公路网中经常所见的 ...
最新文章
- python requests_小白学 Python 爬虫(18):Requests 进阶操作
- Spark Streaming揭秘 Day16 数据清理机制
- 763 Hex Conversion
- flex实现水平居中和两栏布局
- 图形基本变换c语言代码,图形变换-C语言课程设计.doc
- HTML中del标记是什么意思,HTML del标记
- asp.net文件上传进度条控件(破解版~没时间限制)多项自定义 .
- oracle复杂的子查询,Oracle 子查询(复杂select语句)
- 计算机一级在线解析,2016年计算机一级试题及答案解析
- IOS下图片不能显示问题的解决办法
- nginx简介(轻量级开源高并发web服务器:大陆使用者百度、京东、新浪、网易、腾讯、淘宝等)(并发量5w)(一般网站apache够用了,而且稳定)...
- 设计模式 - 状态模式、职责连模式
- 高亮显示搜索的关键词(二)
- [转] linux操作系统下c语言编程入门--基础知识
- 区块链 以太坊 三元组是什么 state root transaction root receipt root
- 移动办公系统现状分析
- 详解Dijkstra算法(含数学证明和优化)
- 本地连接服务器无响应怎么解决办法,本地连接的服务器未响应
- sqlserver 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'test' 中的标识列插入显式值...
- java数据库连接Druidsql失败_Druid数据库连接池异常connection holder is null
热门文章
- 测试手机软件打开速度的app,一加6千分之一秒 百款APP打开速度对比
- 进击的海姆达尔Heimdallr,2021年链游最后一趟财富专列
- Windows10快捷键合集
- html5游戏修改,Duang! Html5游戏调试神器全新出炉!- Cocos DevTools
- python抢淘宝的东西-Python实现淘宝秒杀功能
- 在Vue中使用highlight.js
- python培训总结报告
- 规避Variable used in lambda expression should be final or effectively final而引发了方法参数值拷贝的问题
- MetaPAD: 从大量文本语料库中发现元模式
- 一文搞懂vim复制粘贴