说说 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. 《妙解Hibernate 3.X》读书笔记一-Hibernate概述及环境搭建
  2. linux mint 相关环境配置
  3. PHP登录状态判定的思路
  4. Java初学者的学习思路与建议
  5. android滚轮实现时间年月日选择
  6. 吴恩达《机器学习》学习笔记十一——应用机器学习的建议
  7. setTimeout(〒︿〒) 请原谅我一直以来对你的忽视
  8. JProfiler分析内存泄漏
  9. Spring Cloud Gateway替代zuul作为API网关(一)
  10. sql注入工具--Sqlmap
  11. 计算机网络网线制作工具有,网线制作工具 网线水晶头制作过程详解(视频+图文教程)...
  12. 手机计算机文件夹加密文件,手机文件夹加密锁软件加密步骤【图文教程】
  13. Mindspore | lenet 模型代码
  14. 华为交换机关闭网口_华为交换机监控口配置命令图文教程
  15. 浅谈a++ 与a--
  16. matlab模糊度函数,模糊函数 matlab 模糊度
  17. 天气太冷不想出被窝?来DIY一个离线语音控制器
  18. 快速填充表格中的空单元格
  19. 第四章web服务器之httpd
  20. 机器人感知-视觉部分(Robotic Perception-Vision Section)

热门文章

  1. win10家庭中文版自动更新解决办法
  2. java程序员面试笔试宝典4.1基本概念
  3. 国际标准智商测试题目
  4. STM32通过SPI读W25Q64的ID时钟分析
  5. k8s免fq下载镜像
  6. 30天自制操作系统 学习笔记1
  7. 使用php的curl爬去青果教务系统 课表(转)
  8. 解决: The server encountered an internal error that prevented it from fulfilling this request.
  9. for_each(pbegin, pend, work);#include<algorithm>
  10. LDC(logic data center)与传统的(Internet Data Center-IDC)架构对比与优势(淘宝双十一经典案例解析)