TCP的拥塞控制(详解)

2023-10-27

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞

在计算机网络中数位链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。

出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降
在这里插入图片描述
当输入的负载到达一定程度 吞吐量不会增加,即一部分网络资源会丢失掉,网络的吞吐量维持在其所能控制的最大值,转发节点的缓存不够大这造成分组的丢失是拥塞的征兆。
TCP的四种拥塞控制算法
1.慢开始
2.拥塞控制
3.快重传
4.快恢复
假定
1.数据是单方向传送,而另一个方向只传送确认
2.接收方总是有足够大的缓存空间,因而发送发发送窗口的大小由网络的拥塞程度来决定
3.以TCP报文段的个数为讨论问题的单位,而不是以字节为单位
在这里插入图片描述
示例如下:
传输轮次:发送方给接收方发送数据报文段后,接收方给发送方发回相应的确认报文段,一个传输轮次所经历的时间就是往返时间RTT(RTT并非是恒定的数值),使用传输轮次是为了强调,把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个报文段的确认,拥塞窗口cwnd会随着网络拥塞程度以及所使用的拥塞控制算法动态变化。

在tcp双方建立逻辑链接关系时, 拥塞窗口cwnd的值被设置为1,还需设置慢开始门限ssthresh,在执行慢开始算法时,发送方每收到一个对新报文段的确认时,就把拥塞窗口cwnd的值加一,然后开始下一轮的传输,当拥塞窗口cwnd增长到慢开始门限值时,就使用拥塞避免算法。

慢开始:
假设当前发送方拥塞窗口cwnd的值为1,而发送窗口swnd等于拥塞窗口cwnd,因此发送方当前只能发送一个数据报文段(拥塞窗口cwnd的值是几,就能发送几个数据报文段),接收方收到该数据报文段后,给发送方回复一个确认报文段,发送方收到该确认报文后,将拥塞窗口的值变为2,

发送方此时可以连续发送两个数据报文段,接收方收到该数据报文段后,给发送方一次发回2个确认报文段,发送方收到这两个确认报文后,将拥塞窗口的值加2变为4,发送方此时可连续发送4个报文段,接收方收到4个报文段后,给发送方依次回复4个确认报文,发送方收到确认报文后,将拥塞窗口加4,置为8,发送方此时可以连续发送8个数据报文段,接收方收到该8个数据报文段后,给发送方一次发回8个确认报文段,发送方收到这8个确认报文后,将拥塞窗口的值加8变为16,

当前的拥塞窗口cwnd的值已经等于慢开始门限值,之后改用拥塞避免算法。

拥塞避免:
也就是每个传输轮次,拥塞窗口cwnd只能线性加一,而不是像慢开始算法时,每个传输轮次,拥塞窗口cwnd按指数增长。同理,16+1……直至到达24,假设24个报文段在传输过程中丢失4个,接收方只收到20个报文段,给发送方依次回复20个确认报文段,一段时间后,丢失的4个报文段的重传计时器超时了,发送发判断可能出现拥塞,更改cwnd和ssthresh.并重新开始慢开始算法,如图所示:
在这里插入图片描述在这里插入图片描述
快速重传:
发送方发送1号数据报文段,接收方收到1号报文段后给发送方发回对1号报文段的确认,在1号报文段到达发送方之前,发送方还可以将发送窗口内的2号数据报文段发送出去,接收方收到2号报文段后给发送方发回对2号报文段的确认,在2号报文段到达发送方之前,发送方还可以将发送窗口内的3号数据报文段发送出去,

假设该报文丢失,发送方便不会发送针对该报文的确认报文给发送方,发送方还可以将发送窗口内的4号数据报文段发送出去,接收方收到后,发现这不是按序到达的报文段,因此给发送方发送针对2号报文段的重复确认,表明我现在希望收到的是3号报文段,但是我没有收到3号报文段,而收到了未按序到达的报文段,发送方还可以将发送窗口中的5号报文段发送出去,接收方收到后,发现这不是按序到达的报文段,因此给发送方发送针对2号报文段的重复确认,表明我现在希望收到的是3号报文段,但是我没有收到3号报文段,而收到了未按序到达的报文段,,发送方还可以将发送窗口内的最后一个数据段即6号数据报文段发送出去,接收方收到后,发现这不是按序到达的报文段,因此给发送方发送针对2号报文段的重复确认,表明我现在希望收到的是3号报文段,但是我没有收到3号报文段,而收到了未按序到达的报文段,

此时,发送方收到了累计3个连续的针对2号报文段的重复确认,立即重传3号报文段,接收方收到后,给发送方发回针对6号报文的确认,表明,序号到6为至的报文都收到了,这样就不会造成发送方对3号报文的超时重传,而是提早收到了重传。
在这里插入图片描述
在这里插入图片描述

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

TCP的拥塞控制(详解) 的相关文章

  • c++实现图的操作(最小生成树和最短路径)

    题目描述 1 图的深度优先搜索演示 要求 图采用邻接表存储结构 编程实现图的创建 图的深度优先搜索递归算法 2 图的广度优先搜索演示 要求 图采用邻接表存储结构 编程实现图的创建 图的深度优先搜索递归算法 3 求带权无向图的最小生成树问题
  • VueRouter4简介

    第十四节 VueRouter4 x简介 基本用法 路由懒加载 打包分析 动态路由 路由嵌套 相关Api 一 简介和基本用法 1 简介 官网地址 https next router vuejs org zh introduction html
  • 详解随机梯度下降法(Stochastic Gradient Descent,SGD)

    深度学习最常用的优化方法就是随机梯度下降法 但是随机梯度下降法在某些情况下会失效 这是为什么呢 带着这个问题我们接着往下看 一个经典的例子就是假设你现在在山上 为了以最快的速度下山 且视线良好 你可以看清自己的位置以及所处位置的坡度 那么沿
  • 递归的本质理解

    什么是递归 函数里面调用函数本身 这就是递归 public int factorial int n if n lt 1 return 1 return n factorial n 1 先有 递 再有 归 递 是将问题拆分成子问题来解决 子问
  • vue 高德地图 实时路况

    先放效果图 1 准备工作 路况信息只需要使用web端即可实现 2 代码部分 1 在 public index html中引入 2 在需要用到地图的页面中
  • c语言valotile关键字

    volatile 是一种类型修饰符 提醒编译器他后面所定义的变量随时都有可能改变 因此编译后的程序每次需要存储或读取这个变量的时候 都会直接从变量地址中 内存中 读取数据 如果没有volatile关键字 则编译器可能优化读取和存储 可能暂时
  • Python爬虫案例:爬取世界大学排行榜,做数据可视化

    前言 闲的一匹 高三生没多久就要高考了 还有四个月 也是快了 咱来看看世界大学的排行榜 采集一下 做个可视化 看看有没有你心仪的学校 嘿嘿 知识点 动态数据抓包 requests发送请求 结构化 非结构化数据解析 开发环境 python 3
  • CCF-CSP真题《202212-3 JPEG 解码》思路+python,c++满分题解

    想查看其他题的真题及题解的同学可以前往查看 CCF CSP真题附题解大全 试题编号 202212 3 试题名称 JPEG 解码 时间限制 1 0s 内存限制 512 0MB 问题描述 问题背景 四年一度的世界杯即将画上尾声 在本次的世界杯比
  • RT-Thread 中龙芯1C的网络lwip升级到2.1.0

    RT Thread 龙芯1C 智龙开发板 的网络lwip升级到2 1 0 1 硬件平台 智龙开发板V3 42 2 软件平台 RT Thread 4 0 0 其中LWIP 2 1 0 3 问题描述 一直使用 RT Thread 软件平台 配套
  • (史上最全总结)总体方差,样本方差,标准差,抽样方差,标准误差,均方误差,协方差 ...........

    文章目录 数学期望 color blue 数学期望 数学期望 总体和样本 color blue 总体和样本 总体和样本
  • arcgis for javascript TileLayer 自定义高德地图图层

    效果如图 一 创建自定义切片层 要创建自定义图块层 您必须调用BaseTileLayer类的createSubclass 方法 命名自定义层为TintLayer 由于这一层需要知道在哪里访问预定义的图块 我们将创建一个属性 应用程序将为图层
  • Android开发:登录/注册界面的编写

    目录 新建一个空项目 或Activity 在xml中绘制登录界面 关掉ActionBar 运行 最终效果图 后记 在实际开发中 几乎所有的APP都会涉及到用户注册 登录页面的制作 因此本文以Android Studio为开发环境 教大家编写
  • Springboot参数校验和异常处理

    Springboot参数校验和异常处理 参数校验 异常处理 参数校验 pom xml文件添加依赖
  • 2022年4月8日字节跳动机抖音APP推荐实习面试题

    1 AUC是什么 如何计算AUC AUC 随机取一个正样本和一个负样本 正样本的预测值大于负样本预测值的概率 AUC计算的关键是找到所有正样本预测值大于负样本预测值的正负样本对 首先 需要将样本按照预测值进行从小到大排序 最小score对应
  • 爬虫技术和爬虫需求现状和展望

    技术社区中流行的爬虫技术相当多 很多人喜欢基于Python的 也有人喜欢用C 很多人由于系统集成开发和跨平台的需要倾向于java 我就属于后者 其实就原理来说 爬虫组件都是差不多的 无头浏览器 最能够说明爬虫的特性 它们被设计创造出来 大部
  • ACE_Message_Block功能简介

    ACE Message Block在Ace中用来表示消息的存放空间 可用做网络通信中的消息缓冲区 使用非常频繁 下面将在如下方简单的介绍一下ACE Message Block相关功能 创建消息块 释放消息块 从消息块中读写数据 数据的拷贝
  • Linux下设置归档路径不生效,缺少log_archive_config导致归档路径被禁用

    10g的DATA GUARD的一个主要特点就是引入了log archive config参数 如果缺少这个参数 可能会导致归档路径被禁用 看别人建立DATA GUARD时碰到了这个问题 当时觉得比较有意思 于是特意重现一下 当前是一个已经配
  • spring boot中动态增加数据源并且通过sharding-jdbc做分库分表查询

    最近项目中需要通过数仓对接数据出去 需要手动写一些查询 需要支持分库分表的场景 所以就选择了 google guava 做内存缓存 通过redis做持久化缓存 通过sharding jdbc实现跨表查询 一下贴的是几个主要的类 1 数据库信
  • 使用代码来使用 JS 的 download 库来下载资源

    如题 用以下代码来使用 JS 的 download 库来下载资源 引入 download 库 import download from downloadjs 要下载的文件的 URL 和文件名 const fileUrl https exam
  • unable to boot the simulator,无法启动模拟器已解决

    我在百度上所搜的都是以前的老方法 新版的Mac已经没有Recovery了 因此我只好去bing上查找资料 方法很简单 用Mac安装镜像进入Recovery模式 然后输入 csrutil disable 就行了 剩下的和原来的方法一致

随机推荐

  • 浮点数和整数之间的转换

    当一个整数int i 12345被强制转换为一个FLOAT型变量 float f float i 假设sizeof int 32 float为单精度 sizeof float 32 那么i 12345 十进制 000000000000000
  • UE4_聚合图

    UE4 聚合图
  • 【Python 1-0】10个学习Python的理由以及Python的优势有哪些?

    Python的由来 首发地址 Python的创始人是吉多 范罗苏姆 1989年他在阿姆斯特丹的CWI工作 圣诞节期间 吉多 范罗苏姆为了打发圣诞节的无聊 决定开发一个新的脚本解释程序 作为ABC 语言的一种继承 之所以选择Python作为编
  • Maven覆盖私服上的jar包,本地仓库无法更新的问题

    在上传第三方jar包到私服环境时 第一次上传成功后 突然发现上传的jar包有问题 但是因为已经指定了版本号 并且是release版本的jar包 因为不想更换版本号 所以再重复上传正确的jar包 就会出现如下错误 一种解决办法是指定另外一个版
  • Gitflow工作流程

    在工作场合实施Git的时候 有很多种工作流程可供选择 此时反而会让你手足无措 本文罗列了企业团队最常用的一些Git工作流程 包括Centralized Workflow Feature Branch Workflow Gitflow Wor
  • Container命令ctr,crictl的用法

    Container命令ctr crictl的用法 版本 ctr containerd io 1 4 3 containerd 相比于docker 多了namespace概念 每个image和container 都会在各自的namespace
  • 通过Vue.js的axios请求WFS数据并处理请求回来的XML文件

    前端小白的第一个博客 前言 这个是在GIS开发过程中遇到的一个小问题 因为里面包含了蛮多的知识点 故将其记录 废话不多说进入正文 正文 此次需要解决的问题是通过wfs接口来获取到一些需要的内容 然后以这些内容为基础进行一系列的操作 以下展示
  • 1.3远程控制及文件传输

    我们经常用的是Windows操作系统 又经常需要与Ubuntu进行文件传输 同时为了能在Windows上操作我们的Ubuntu 这里推荐一个文件传输和一个远程控制的程序 文件传输WinSCP 官方下载地址 https sourceforge
  • VsCode官网快速下载

    VsCode官网 以Win10下载为例 问题描述 下载时 发现速度很慢 甚至会没有下载速度 如下图 解决方法 右键复制这个下载链接 将其前半部分修改为vscode cdn azure cn 例如 原下载链接 https az764295 v
  • Codeforces 600C Make Palindrome 【贪心 找字典序最小回文串】

    一 题目概述 C Make Palindrome time limit per test 2 seconds memory limit per test 256 megabytes input standard input
  • 如何在Anaconda安装opencv,下面分享一下教程

    1 首先下载opencv安装包 下载地址 https download csdn net download qq 42375391 12333992 2 安装完成后 在Anaconda Prompt内使用pip install完整路径文件名
  • 算法:模拟思想算法

    文章目录 实现原理 算法思路 典型例题 替换所有问号 提莫攻击 N字型变换 外观序列 总结 本篇总结的是模拟算法 实现原理 模拟算法的实现原理很简单 就是依据题意实现题意的目的即可 考察的是你能不能实现题目题意的代码能力 算法思路 没有很明
  • openwrt 自动签到插件-食用指南

    目录 openwrt 自动签到插件下载 openwrt 插件安装需要的依赖 openwrt 插件安装 文件上传 openwrt 自动签到配置 设置详情 Cookie获取失败 解决方法 Charles 抓包获取Cookie openwrt 配
  • 计算机设备问题代码43,双击unknown device由于该设备有问题Windows已将其停止(代码 43)怎么办解决教程...

    金士顿U盘做的启动盘 8G 在别人的电脑上储存文件正常 但在自己的电脑上无法识别 在设备管理器中显示黄色叹号 属性显示 该设备存在问 题 windows已将其停止 代码43 本机win7系统 别人电脑为XP系统 已将 禁用 注册表 dos设
  • Linux 阻塞IO(等待队列)原理及架构

    一 阻塞操作 阻塞操作是指在执行折本操作时 若不能获得自愿 则挂起进程直到满足可操作性的条件后在进行操作 被挂起的进程进入休眠状态 被从调度器的运行队列移走 直到等待的条件被满足 假设recvfrom函数是一个系统调用 阻塞不是低效率 如果
  • vue -- 验证码

  • 25-python函数(低阶)

    一 函数的作用 函数的本质就是将一段具有独立功能的代码块整合到一个整体并命名 在需要的时候通过调用函数名完成某种需求 以提高代码的利用率 从而在稳定系统的同时减轻程序员的工作 二 函数的使用过程 函数使用分为两个步骤 先定义 后调用 定义函
  • Java设计模式之状态模式

    本文继续介绍23种设计模式系列之策略模式 何时使用 State模式在实际使用中比较多 适合 状态 的切换 因为我们经常会使用If else if else 进行状态切换 如果针对状态的这样判断切换反复出现 我们就要联想到是否可以采取Stat
  • Android相机-架构3

    目录 引言 1 Android相机的整体架构 2 相机 HAL 2 1 AIDL相机HAL 2 2 相机 HAL3 功能 3 HAL子系统 3 1 请求 3 2 HAL和相机子系统 3 2 1 相机的管道 3 2 2 使用 Android
  • TCP的拥塞控制(详解)

    在某段时间 若对网络中某一资源的需求超过了该资源所能提供的可用部分 网络性能就要变坏 这种情况就叫做网络拥塞 在计算机网络中数位链路容量 即带宽 交换结点中的缓存和处理机等 都是网络的资源 若出现拥塞而不进行控制 整个网络的吞吐量将随输入负