目录

文章目录

  • 目录
  • 拥塞控制
  • 拥塞窗口
  • 1、慢启动算法
  • 2、拥塞避免算法
  • 3、快速重传算法
  • 4、快恢复算法

拥塞控制

网络出现拥塞时,Segments 会被丢弃,导致 Sender 不断重传,雪上加霜。为了解决这个问题,TCP 引入了拥塞控制机制,它会在发现网络拥塞时,让 Sender 降低发送速率,避免恶性循环。

具体而言,当网络拥塞时,TCP Sender 会接收到一些反馈信息,例如;丢包报告、延迟报告等。然后 Sender 根据这些反馈信息来动态设定拥塞窗口(cwnd,congestion window),并以此为结果继续动态调整自己的发送速率。

可见,TCP 拥塞控制机制,是由 Sender 实现的针对网络拥塞状态的一种 “自适应” 机制。

拥塞窗口

拥塞窗口(cwnd)是一个动态参数,用于控制 TCP Sender 在发生网络拥塞时的发送速率。在引入 cwnd 之间,Sender 的 swnd(发送窗口)主要由 Receiver 的 rwnd(接收窗口)决定;在引入了 cwnd 之后,swnd 由 cwnd 和 rwnd 共同决定,即:swnd = min(cwnd, rwnd)。

cwnd 的数值是 TCP 拥塞控制机制的关键,其变化规律整体为:

  • 网络顺畅时,cwnd 就是根据慢启动和拥塞避免算法逐渐增大,直到出现网络拥塞。
  • 网络拥塞时,cwnd 就会根据快速快速重传和快速恢复算法迅速减少,而后在缓慢增大,周而复始。

1、慢启动算法

TCP 连接建立后,Sender 首先进入慢启动算法流程,即:逐步探测网络拥塞状况,逐步提高发包速率。

处理流程如下:

  • 建立 TCP 连接后,初始化 cwnd = 1,表示一次可以发送 1 个 MSS(Maximum Segment Size)的数据。
  • 当收到 1 个 ACK 后,cwnd += 1,表示一次可以发送 2 个 MSS。
  • 当收到 2 个 ACK 后, cwnd += 2,表示一次可以发送 4 个 MSS。
  • 当收到 4 个 ACK 后,cwnd += 4,表示一次可以发送 8 个 MSS。

慢启动过程中,Sender 指数性增长发送速率,当 cwnd 的数值 >= 慢启动阈值时(Slow Start Threshold),Sender 开始启用拥塞避免算法。

慢启动阈值也是一个动态参数,名为 ssthresh,通常为 65535Byte。

2、拥塞避免算法

拥塞避免(Congestion Avoidance)算法,经过慢启动流程后,进入拥塞避免阶段,算法会将 cwnd 的数值调整为线性增加,区别于慢启动算法时的线性增加,更缓慢一些,以更好地利用网络带宽。

拥塞避免算法的规则是,每当 Sender 收到一个 ACK 时,cwnd += 1/cwnd。

如下图,如果 ssthresh 为 8,那么当 Sender 收到 8 个 ACK 后,cwnd += 1/8,以此类推线性增加,Sender 速率逐步提升。

3、快速重传算法

在经历了慢启动和拥塞避免阶段后,在某个时刻,网络必然会到达拥塞的临界线,继而出现丢包的情况。此时,就会按照超时重传和快速重传的实现机制进行处理

  • 若执行超时重传机制:Sender 则会将 ssthresh 设为 cwnd/2、cwnd 重置为 1。然后再次回到慢启动流程,就重新开始慢启动。但显然的,这种方式最为激进,瞬间关小水管,会造成网络卡顿。

  • 若执行快速重传机制:Sender 则会将 ssthresh 设置为 cwnd、cwnd 则设置 cwnd/2 。

4、快恢复算法

如上图,当 Sender 执行快速重传后,就会进入快恢复流程,区别于超时重传算法导致的重回慢启动流程。

快速恢复算法过程中:

  • cwnd = ssthresh + 3,这个 3,正式快速重传的触发条件,3 个相同的 ACK。
  • 快速重传某个丢失的数据包。
    • 如果再收到重复的 ACK,那么 cwnd += 1;
    • 如果收到新数据的 ACK,那么 cwnd = ssthresh。
  • 回到拥塞避免算法。

互联网协议 — TCP — 拥塞控制相关推荐

  1. 互联网协议 — TCP — 拥塞控制(网络质量保障)

    目录 文章目录 目录 拥塞控制 慢启动算法 拥塞避免算法 拥塞发生算法 发生超时重传的拥塞发生算法 发生快速重传的拥塞发生算法 快速恢复算法 BBR 算法 粘包与拆包 拥塞控制 前面的流量控制是避免「 ...

  2. 协议地址结构_通信之路——用最简洁的文字告诉你互联网协议TCP/IP

    (建议在学习本篇知识时先阅读我关于OSI的文章) 在上一篇文章中,我们详细介绍了OSI模型,对每一层的功能和作用都做了解释说明.在文章的最后也说到,OSI是一个理想化的模型,因为在设计之初未能考虑到实 ...

  3. 传输层协议TCP—拥塞控制(12)

    1 拥塞控制简介 拥塞控制讲述的则是从如何避免网络拥塞的视角或者网络已经拥塞的情形下,TCP 对应的算法和处理机制.TCP 拥塞控制(对应 RFC 5681)包括4个算法(机制):慢速启动.拥塞避免. ...

  4. 互联网协议 — TCP — 滑动窗口

    目录 文章目录 目录 TCP ARQ 协议 TCP 的滑动窗口 Sender 滑动窗口 Receiver 滑动窗口 滑动窗口处理流程 窗口探测 TCP ARQ 协议 ARQ(Automatic Rep ...

  5. 互联网协议 — TCP — 性能问题解析

    目录 文章目录 目录 TCP 难以满足弱网环境的通信需求 TCP 难以满足弱网环境的通信需求 TCP 在设计之初没有考虑到现今复杂的网络环境,当你在地铁上或者火车上被断断续续的网络折磨时,你可能都不知 ...

  6. 互联网协议 — TCP/IP 网络结构

    目录 文章目录 目录 计算机网络的分层体系结构 TCP/IP 协议族 TCP/IP 分层架构 PDU(Protocol Data Unit,协议数据单元)的类型:帧.包.段.消息 数据报文的封装与解封 ...

  7. 互联网协议 — TCP/IP 分层体系结构

    目录 文章目录 目录 计算机网络的分层体系结构 TCP/IP 分层体系结构 分层协议族 分层 PDU(Protocol Data Unit,协议数据单元)类型 分层 PDU 的封装与解封装 逐层封装 ...

  8. 互联网协议 — TCP — 报文格式

    目录 文章目录 目录 TCP 传输控制协议 TCP Header TCP 的分段与拼接 基于硬件卸载的分段与组装 TSO(TCP Segmentation Offload) GSO(Generic S ...

  9. 互联网协议 — TCP — 流量控制(网络质量保障)

    目录 文章目录 目录 TCP 的流量控制 当应用程序没有及时读取缓存时 服务端系统资源非常紧张时 窗口关闭 糊涂窗口综合症 TCP 的流量控制 发送方不能无脑的发数据给接收方,要考虑接收方处理能力.如 ...

最新文章

  1. 仿微信的网络聊天室项目开发【完整源码讲解,Java一年工作经验面试题
  2. 新手入门深度学习 | 2-3:文本数据建模流程示例
  3. ML之DataScience:基于机器学习处理数据科学(DataScience)任务(数据分析、特征工程、科学预测等)的简介、流程、案例应用执行详细攻略
  4. vite2.1 最新alias别名设置方式
  5. 计算机组成与结构PLA,计算机组成与结构.doc
  6. signal(SIGPIPE, SIG_IGN);
  7. swift 去json空格_数字货币为什么要去中心化?好处是什么?
  8. ToolBar组件的使用
  9. Java-Jdk12版本下载后没有Jre的解决方案以及配置环境变量
  10. DirectoryInfo类
  11. Android自定义View【实战教程】5⃣️---Canvas详解及代码绘制安卓机器人
  12. Bellman_Ford算法(负环的单源路径)
  13. Java Hamcrest学习
  14. Ubuntu 20.04 Install Navicat
  15. maya2020卸载不干净安装不了_Maya2020安装失败怎么办?2018却可以安装?
  16. Smartbi的安装部署
  17. autojs加解密,文本/字符串的加密和解密脚本源码分享
  18. 严重:init datasource errorcom.mysql.jdbc.exceptions.jdb4.CommunicationsException:Communications link失败
  19. 浏览器源代码下载图片原图,手把手教学
  20. 命令行发送邮件并修改发送人,避免自动邮件归置到垃圾邮件

热门文章

  1. 2015 AppStore 最新审核指南
  2. 阿里巴巴十年:18个人凑出50万元启动资金
  3. Android硬编解码接口MediaCodec使用完全解析(一)
  4. 黑马王子讲座:黄金十字架战法
  5. 蓝桥云课——单词分析(C++)
  6. 使用KONGA配置Elasticsearch中的数据作为API接口
  7. Qt 之 opus编码
  8. Spring Boot重定向
  9. 直到世界的尽头(灌篮高手)铃声 直到世界的尽头(灌篮高手)...
  10. Directx11进阶之ScreenSpaceReflection(SSR)屏幕空间反射(1)