TCP 拥塞窗口原理

2023-11-01

学过网络相关课程的,都知道TCP中,有两个窗口:

  • 滑动窗口(在我们的上一篇文章中有讲),接收方通过通告发送方自己的可以接受缓冲区大小(这个字段越大说明网络吞吐量越高),从而控制发送方的发送速度。
  • 拥塞窗口,也就是本文要讲的。

概念

一个连接的TCP双端只是网络最边缘的两台主机,他们不知道整个网络是如何工作的,因此他们不知道彼此之间的有效吞吐量。因此,他们必须找到一种方法来确定它。我们称之为拥塞窗口 (CWND)。这是在我们必须停止并等待确认之前可以发送的字节数。

拥塞窗口是决定任何时候可以发出的字节数的因素之一。拥塞窗口由发送方维护,是阻止发送方和接收方之间的链路因流量过多而过载的一种手段。这不应与发送方维护的滑动窗口相混淆,滑动窗口的存在是为了防止接收方过载。拥塞窗口是通过估计链路上有多少拥塞来计算的。

拥塞窗口对于设备来说是本地的,并且永远不会在连接上共享,这与在每个段中发送的接收器窗口不同。在任何给定时间,设备最多可以发送由接收器窗口和拥塞窗口之间的最小值指定的字节数,如下面的公式所示:

transmittable bytes = min(cwnd, rwnd)

这意味着如果拥塞窗口小于接收窗口,则设备可以在等待确认之前传输多达拥塞窗口中定义的字节数。相反,如果接收窗口小于拥塞窗口,则设备可以在等待确认之前最多传输接收器窗口中定义的字节数。

拥塞窗口根据网络拥塞动态变化。每次未确认段时,都假定是由于网络拥塞。拥塞窗口随时间演变的方式被定义为一个算法,这取决于实现。我们现在将介绍最常见的一种。该算法遵循以下规则:

  • 拥塞窗口从一个段的大小开始(大约 1KB)
  • 定义了一个拥塞窗口阈值(ssthresh)
  • 如果收到确认,并且当前拥塞窗口大小小于 ssthresh,则拥塞窗口加倍
  • 如果收到确认,但拥塞窗口大于或等于 sshthresh,则拥塞窗口增加其初始值(例如 1KB)
  • 如果一个段没有被确认从而触发重传,拥塞窗口就会减半并且 ssthresh 被放置在这个值
  • 拥塞窗口不能大于接收器窗口

该规则中包括我们经常听过的几种算法:

  • 慢启动(slow-start)
  • 拥塞避免(congestion avoidance)
  • 快速重传(fast retransmit)
  • 快速恢复(fast recovery)

算法

<
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP 拥塞窗口原理 的相关文章

  • pd.to_csv详解

    1 首先查询当前的工作路径 python view plain copy import os os getcwd 获取当前工作路径 2 to csv 是DataFrame类的方法 read csv 是pandas的方法 转自 https b
  • kafka java 性能测试_kafka集群部署以及java客户端测试

    本文主要讲述本人的集群部署kafka过程以及遇到的问题 其中 kafka版本为 kafka 2 10 zookeeper版本为 zookeeper 3 4 8 jdk 8u101 linux x64一 kafka以及zookeeper安装以
  • 例解基于UML的面向对象分析与设计

    http www cnblogs com leoo2sk archive 2008 11 08 1329468 html 摘要 本文以实例的方式 展示了如何使用UML进行面向对象的分析与设计 本文将假设读者对UML 面向对象等领域的基本内容
  • (一)演示如何最快的实现增删改查功能。

    1 创建及配置数据库工程 在数据库工程文件夹下添加对应的数据库工程 这里以DemonDB为例 DemonDB里的内容如下 主要包括模型实体类文件夹 T4文件夹 以及配置类 其中实体类文件夹主要用来创建表对应的实体模型类 T4则根据实体类模型
  • java并发编程的艺术

    文章目录 1 JAVA并发机制的底层实现原理 1 锁的状态 2 原子操作的实现原理 2 java内存模型 1 基础 2 重排序 4 JAVA并发编程基础 1 Synchronized底层指令 2 Thread join 5 JAVA中的锁

随机推荐

  • Hadoop YARN

    YARN介绍 Apache Hadoop YARN Yet Another Resource Negotiator 另一种资源协调者 是一种新的Hadoop资源管理器 YARN是一个通用资源管理系统和调度平台 可为上层应用提供统一的资源管理
  • Got minus one from a read call错误解决办法

    在我使用Oracle自带的工具sqldevloper Oracle10 11都带个工具 用起来还行 就是有点慢 登录服务器Oracle9i数据库的时候 出现了这个提示 网上一查 很多人是在执行JAVA程序的时候报了这个异常 好心人给出的明确
  • 华为社招面试笔试

    1 机试题 机试有两道题 一道题200分 120分及格 题目一 给你一个正整数n 假设有两个质数加起来等于n 问一共有多少组这样的质数 题目二 字符串匹配 给你一个父串 一个子串 求父串中子串出现的次数 温馨提示 机试题其实用暴力破解就可以
  • 使用百度地图接口实现自定义网页地图开发实现

    上午研究了下一些网站都已经实现好的地区 公交 线路等等一些基于 地图 的服务 这些服务都是基于诸如百度 谷歌地图服务接口下的二次开发 百度地图接口服务免费 而且开发文档 API介绍详细 所以本文暂先介绍如何调用百度地图服务 API http
  • java中四大作用域

    Java的四大作用域为 PageContext ServletRequest HttpSession ServletContext 下面一起了解一下Java的四大作用域吧 首先按照作用范围来算 是PageContext jsp页面
  • 路由器从外向内访问(端口转发)及从内向外访问(NAT)的配置

    路由器从外向内访问 端口转发 及从内向外访问 NAT 的配置 描述需求 最近工作上有一个需求 大致意思就是解决路由器内外访问的问题 这个问题可以分成两部分 一个是外部设备 如服务器 能主动访问路由器局域网内的主机 另一个就是内部的主机需要能
  • Java基础-反射

    反射的基本作用 关键 反射是在运行时获取类的字节码文件对象 然后可以解析类中的全部成分 反射的核心思想和关键就是 得到编译后的字节码 class 文件对象 反射的第一步 获取Class类对象 如此才可以解析类的全部成分 获取Class类的对
  • (四)PointPillars论文的MMDetection3D代码解读——网络结构篇

    四 PointPillars论文的MMDetection3D代码解读 网络结构篇 PointPillars 是一个来自工业界的模型 整体的思想是基于图片的处理框架 直接将点云从俯视图的视角划分为一个个的立方柱体 Pillars 从而构成了伪
  • php no route to host,解决 重启后zerotier无法远程连接,显示”no route to host”

    解决 重启后zerotier无法远程连接 显示 no route to host 第一步 禁用桌面环境 桌面环境重启时经常会无原无故卡住 导致远程连不上 systemctl set default graphical target 第二步
  • ubuntu 20.04 安装make_ext4fs

    制作文件系统发现 sudo make ext4fs command not found 解决方法 sudo apt install android sdk ext4 utils sudo apt install e2fsprogs sudo
  • 使用纯C语言定义通用型数据结构的方法和示例

    文章目录 前言 以实现优先队列来描述实现思想 基本类型的包装类型 比较函数 演示 总结 前言 最近一段时间在复习数据结构和算法 用的C语言 不得不说 不学个高级语言再回头看C语言根本不知道C语言的强大和完美 不过相比之下也有许多不便利的地方
  • 历时30个小时 更新到了25905.1000 版本 23H2

  • 【Vue3】之vuex的安装与配置

    安装 yarn add vuex 4 或 npm install save vuex 4 创建 新建store js store js import createStore from vuex export default createSt
  • Pyinstaller 使用说明

    安装 cmd pip install pyinstaller 也可以自己下载安装包 解压后通过执行python setup py install 使用 pyinstaller F myPython py 或者用python pyinstal
  • 用IDEA创建第一个SpringBoot程序,并开发一个JSON接口

    1 打开idea主界面选择 Create New Project 2 在弹出的页面中我们选择左侧的 Spring Initializr jdk版本选择自己安装的版本 PS jdk版本要1 8以上哦 3 下一个页面 在Group栏输入组织名
  • IDEA代码覆盖率测试

    代码覆盖率测试 1 使用idea自带的代码覆盖率工具 1 创建test文档 右击将 test 目录设置为测试文档 2 选中需要测试的类 按Ctrl shift T 创建测试类 并选中要测试的方法 在测试案例中 编写测试代码 点击Edit C
  • 小程序分包实现

    目录 一 使用场景 二 操作方式 1 建立分包文件夹 2 文件构建 3 文件配置 三 总结 一 使用场景 微小程序分包常用于代码量较大的小程序 发布时会受到大小限制 二 操作方式 1 建立分包文件夹 在项目根目录下创建分包文件夹 此处我创建
  • L1-8 乘法口诀数列

    本题要求你从任意给定的两个 1 位数字 a1 和 a2 开始 用乘法口诀生成一个数列 an 规则为从 a1 开始顺次进行 每次将当前数字与后面一个数字相乘 将结果贴在数列末尾 如果结果不是 1 位数 则其每一位都应成为数列的一项 输入格式
  • ad电阻原理图_光敏电阻的基础知识介绍

    39G电子技术 电路 电子元件等 全套资料免费领 干货下载 十天学会单片机完整版 100个实例 PPT 点击上方红字 即可获取 一 光敏电阻 光敏电阻是用硫化隔或硒化隔等半导体材料制成的特殊电阻器 表面还涂有防潮树脂 具有光电导效应 二 特
  • TCP 拥塞窗口原理

    学过网络相关课程的 都知道TCP中 有两个窗口 滑动窗口 在我们的上一篇文章中有讲 接收方通过通告发送方自己的可以接受缓冲区大小 这个字段越大说明网络吞吐量越高 从而控制发送方的发送速度 拥塞窗口 也就是本文要讲的 概念 一个连接的TCP双