说说 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 的拥塞控制、慢启动、慢启动阈值、拥塞避免、快速重传和快速恢复相关推荐

  1. TCP的拥塞避免、超时重传、快速重传、快速恢复

    转自:http://blog.csdn.net/itmacar/article/details/12278769 感谢博主的辛勤成果! 为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制.最初由 ...

  2. [TCP灵魂之问]介绍一下 TCP 报文头部的字段

    TCP 报文头部的字段 源端口.目标端口 如何标识唯一标识一个连接?答案是 TCP 连接的四元组--源 IP.源端口.目标 IP 和目标端口.那 TCP 报文怎么没有源 IP 和目标 IP 呢?这是因 ...

  3. 传输层 TCP 拥塞控制(3):快速重传与快速恢复

    当出现丢包的时候,我们将重新执行慢启动,此时意味着拥塞窗口大幅度下降发送速率也会大幅度下降,当丢包场景并不是很严重的时候,我们还可以采用快速重传,与快速恢复这样一个阶段. 为何会接收到一个失序数据段? ...

  4. TCP 协议面试灵魂 12 问 | 强势整理

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | urlify.cn/rqumIn 先亮出这篇文 ...

  5. TCP协议面试灵魂10问 | 强势整理

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 来源 | urlify.cn/rqumIn 先亮出这篇文章的思维导 ...

  6. TCP 协议面试灵魂 12 问(二)

    007: 能不能说说TCP报文中时间戳的作用? timestamp是 TCP 报文首部的一个可选项,一共占 10 个字节,格式如下: kind(1 字节) + length(1 字节) + info( ...

  7. TCP 协议面试灵魂10问,建议收藏~

    Proc 先亮出这篇文章的思维导图 TCP 作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点.在此,我将 TCP 核心的一些问题梳理了一下,希望能帮到各位. 001. 能不能 ...

  8. (建议收藏)TCP协议灵魂之问,巩固你的网路底层基础

    先亮出这篇文章的思维导图:TCP 作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点.在此,我将 TCP 核心的一些问题梳理了一下,希望能帮到各位. 001. 能不能说一说 T ...

  9. TCP 协议灵魂 12 问,巩固你的网路底层基础!

    点击上方蓝色小字,关注"涛哥聊Python"重磅干货,第一时间送达 作者:神三元 原文:juejin.im/post/5e527c58e51d4526c654bf41 先亮出这篇文 ...

  10. TCP的拥塞控制--慢启动,拥塞避免,快重传,快速恢复

    拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象.这种现象跟公路网中经常所见的 ...

最新文章

  1. python requests_小白学 Python 爬虫(18):Requests 进阶操作
  2. Spark Streaming揭秘 Day16 数据清理机制
  3. 763 Hex Conversion
  4. flex实现水平居中和两栏布局
  5. 图形基本变换c语言代码,图形变换-C语言课程设计.doc
  6. HTML中del标记是什么意思,HTML del标记
  7. asp.net文件上传进度条控件(破解版~没时间限制)多项自定义 .
  8. oracle复杂的子查询,Oracle 子查询(复杂select语句)
  9. 计算机一级在线解析,2016年计算机一级试题及答案解析
  10. IOS下图片不能显示问题的解决办法
  11. nginx简介(轻量级开源高并发web服务器:大陆使用者百度、京东、新浪、网易、腾讯、淘宝等)(并发量5w)(一般网站apache够用了,而且稳定)...
  12. 设计模式 - 状态模式、职责连模式
  13. 高亮显示搜索的关键词(二)
  14. [转] linux操作系统下c语言编程入门--基础知识
  15. 区块链 以太坊 三元组是什么 state root transaction root receipt root
  16. 移动办公系统现状分析
  17. 详解Dijkstra算法(含数学证明和优化)
  18. 本地连接服务器无响应怎么解决办法,本地连接的服务器未响应
  19. sqlserver 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'test' 中的标识列插入显式值...
  20. java数据库连接Druidsql失败_Druid数据库连接池异常connection holder is null

热门文章

  1. 测试手机软件打开速度的app,一加6千分之一秒 百款APP打开速度对比
  2. 进击的海姆达尔Heimdallr,2021年链游最后一趟财富专列
  3. Windows10快捷键合集
  4. html5游戏修改,Duang! Html5游戏调试神器全新出炉!- Cocos DevTools
  5. python抢淘宝的东西-Python实现淘宝秒杀功能
  6. 在Vue中使用highlight.js
  7. python培训总结报告
  8. 规避Variable used in lambda expression should be final or effectively final而引发了方法参数值拷贝的问题
  9. MetaPAD: 从大量文本语料库中发现元模式
  10. 一文搞懂vim复制粘贴