当前位置: 首页 > news >正文

计算机网络第3章-TCP协议(2)

TCP拥塞控制

TCP拥塞控制的三种方式:

慢启动、拥塞避免、快速恢复

慢启动

当一条TCP连接开始时,cwnd的值是一个很小的MSS值,这使得初始发送速率大约为MSS/RTT。

在慢启动状态,cwnd的值以1个MSS开始并且每当传输的报文段首次被确认就增加一个MSS,直

到出现超时或者丢包现象。

每增加一个MSS的长度,就会多发送一个MSS长度的报文段。

因此慢启动状态下,发送速率是以指数形式增加的。

例如:

一个MSS/RTT的速率被记作一个α。

则第一次传输后为2α。(2的一次方)

第二次传输后为4α。(2的二次方)

第三次传输后为8α(2的三次方)

慢启动的结束也是很有意思的:

如果存在一个拥塞,则TCP发送方将cwnd重新置为1并重新开始慢启动过程。

并且将第二个状态变量ssthresh(“慢启动阈值”)设置为cwnd/die

第二种方式是:

速率直接与ssthresh相关联,即检测到拥塞的时候,ssthresh就减少一半,当到达或者超过

ssthresh时,结束慢启动并且TCP转移到拥塞避免模式。

最后一种方式:

检测到三个亢余ACK,TCP就执行一种快速重传,并且进入到快速恢复状态。

拥塞避免

一旦进入拥塞避免状态,cwnd的值大约为上一次遇到阻塞的值的一半。

这也导致TCP无法通过一个RTT就将cwnd的值翻倍,而时每个RTT只将cwnd的值增加一个MSS,

而不是像慢启动一样进行指数形式增长。

拥塞避免的结束和慢启动差不太多,如果出现超时,cwnd的值被置为1个MSS。

丢包出现,ssthresh的值被置为cwnd的一半。

快速恢复

在快速恢复中,对于引起TCP进入快速恢复状态的缺失报文段,对收到的每个亢余ACK,cwnd增

加一个MSS。最终,当对丢失报文段的最后一个ACK到达时,TCP在降低cwnd后进入拥塞避免状态。

但是如果出现超时,快速恢复在执行如同在慢启动和拥塞避免中相同的动作后,迁移到慢启动状态。

总结

TCP拥塞控制在每个RTT时间内,cwnd线性(加性)增加1MSS,然后出现三个亢余ACK事件时,

cwnd减半(乘性减)。

因此TCP拥塞控制通常被称为“加性增、乘性减。”

下面是TCP拥塞控制造成的一种“锯齿”行为。

相关文章:

计算机网络第3章-TCP协议(2)

TCP拥塞控制 TCP拥塞控制的三种方式: 慢启动、拥塞避免、快速恢复 慢启动 当一条TCP连接开始时,cwnd的值是一个很小的MSS值,这使得初始发送速率大约为MSS/RTT。 在慢启动状态,cwnd的值以1个MSS开始并且每当传输的报文段首次被…...

SQL注入——二次注入漏洞

文章目录 SQL注入——二次注入漏洞1. 二次注入原理2. 二次注入需要具备的两个条件3. 二次注入实例4. 总结 SQL注入——二次注入漏洞 1. 二次注入原理 在第一次插入恶意数据的时候,只是对其中的特殊字符进行了转义,在写入数据库的时候还是原来的字符&am…...

【c++|opencv】二、灰度变换和空间滤波---1.灰度变换、对数变换、伽马变换

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 灰度变换、对数变换、伽马变换 1. 灰度变换 #include <iostream> #include <opencv2/opencv.hpp>using namespace std; using namespace c…...

【vue3】子传父-事件总线-mitt(子组件派发事件,父组件接收事件和传递的参数)

安装库&#xff1a;cnpm install mitt 封装 eventbus.ts&#xff1a; src->utils->eventbus.ts //eventbus.tsimport mitt from mittconst emitter mitt()export default emitter使用 B2.vue&#xff1a; //B2.vue <template><div class"aa">…...

【杂记】java 大集合进行拆分

日常中需要对一个大的集合进行拆分成多个小集合&#xff0c;其主要思路为&#xff1a; 设置需要拆分多少个小集合 A大集合里面有多少条数据 B计算出每个集合里面有多个条数据 CB/A计算出看是否存在余数 DB%A采用集合(List.subList())的方法对大集合进行拆分,循环A变进行集合拆…...

select...for update 锁表了?

在MySQL中&#xff0c;事务A中使用select...for update where id1锁住了&#xff0c;某一条数据&#xff0c;事务还没提交&#xff0c;此时&#xff0c;事务B中去用select ... where id1查询那条数据&#xff0c;会阻塞等待吗&#xff1f; select...for update在MySQL中&#…...

使用ControlNet生成视频(Pose2Pose)

目录 ControlNet 介绍 ControlNet 14种模型分别是用来做什么的 ControlNet 运行环境搭建 用到的相关模型地址 ControlNet 介绍 ControlNet 是一种用于控制扩散模型的神经网络结构&#xff0c;可以通过添加额外的条件来实现对图像生成的控制。它通过将神经网络块的权重复制到…...

基于Docker使用Minikube

1. 查看并操控Minikube状态信息 Minikube相当于docker中的一个container&#xff0c;可以在Docker Desktop中看到并操控Minikube container的相关状态&#xff1a; 通过以下命令查看当前docker中的container&#xff1a; % docker ps CONTAINER ID IMAGE …...

Stable Diffusion系列(一):古早显卡上最新版 WebUI 安装及简单操作

文章目录 Stable Diffusion安装AnimateDiff插件适配sdxl模型适配 Stable Diffusion使用插件安装界面设置基础文生图加入lora的文生图 Stable Diffusion安装 我的情况比较特殊&#xff0c;显卡版本太老&#xff0c;最高也就支持cuda10.2&#xff0c;因此只能安装pytorch1.12.1&…...

ruoyi框架前端vue部署生产环境教程

前端有子目录&#xff0c;后端有项目名称&#xff0c;请看第3种 第1种 前端nginx没有子目录&#xff0c;后端也没有访问的项目名。这种是最简单的。 vue.config.js 只需要修改target中的IP和端口&#xff0c;就是后端访问的IP和端口 # vue.config.js devServer: {host: 0.…...

leetcode第369周赛

2917. 找出数组中的 K-or 值 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数&#xff1a; 只有在 nums 中&#xff0c;至少存在 k 个元素的第 i 位值为 1 &#xff0c;那么 K-or 中的第 i 位的值才是 1 。 返回 nums …...

如何在维格云中自动新增一行或多行数据?

简介​ 在日常使用维格云中,通常会出现一张表中有数据发生变化时,需要另一张表同时新增一些数据,比如: 项目管理中,每新增一个项目,都要在任务表中产生若干个固定的任务;或一个任务要自动生成若干子任务当一笔订单状态变为成交后,可能要在客户成功表中新增一行记录;帮…...

Three.js 开发引擎的特点

Three.js 是一个流行的开源 3D 游戏和图形引擎&#xff0c;用于在 Web 浏览器中创建高质量的三维图形和互动内容。以下是 Three.js 的主要特点和适用场合&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作…...

k8s声明式资源管理方式

Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#xff1a;主要用于 api 接口之间消息的传递 YAML 格式&#xff1a;用于配置和管理&#xff0c;YAML 是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 YAML 语法格式&#xff1a; ●大小写…...

unity性能优化__Statistic状态分析

在Unity的Game视图右上角&#xff0c;我们会看到有Stats选项&#xff0c;点击会出现这样的信息 我使用的Unity版本是2019.4.16 一、Audio&#xff0c;顾名思义是声音信息 1&#xff1a;Level:-74.8dB 声音的相对强度或音量。通常&#xff0c;音量级别以分贝&#xff08;dB&a…...

Linux Spug自动化运维平台公网远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…...

3DES算法

简介 本文基于.NET的C#实现3DES算法的加密和解密过程。可以用在加密软件、加密狗等。 代码下载链接&#xff1a;https://download.csdn.net/download/C_gyl/88487942 使用 第一种方法 加密 KeySize&#xff1a;128(16字节)&#xff0c;192&#xff08;24字节&#x…...

手机电池寿命检测

安卓 - 应用商店下载“安兔兔” -accubattery 下载地址 accubattery汉化版下载-Accubattery pro中文免费版(电池检测)下载 v1.5.11 安卓专业版-IT猫扑网...

Vue项目搭建及使用vue-cli创建项目、创建登录页面、与后台进行交互,以及安装和使用axios、qs和vue-axios

目录 1. 搭建项目 1.1 使用vue-cli创建项目 1.2 通过npm安装element-ui 1.3 导入组件 2 创建登录页面 2.1 创建登录组件 2.2 引入css&#xff08;css.txt&#xff09; 2.3 配置路由 2.5 运行效果 3. 后台交互 3.1 引入axios 3.2 axios/qs/vue-axios安装与使用 3.2…...

AVL树、红黑树的介绍和实现[C++]

本文主要对AVL树和红黑树的结构和实现方法进行一定的介绍&#xff0c;仅实现部分接口。 目录 一、AVL树 1.AVL树的概念 2.AVL树节点的定义 3.AVL树的插入 4.AVL树的旋转 1. 新节点插入较高左子树的左侧——左左&#xff1a;右单旋 2. 新节点插入较高右子树的右侧——右…...

电脑安装双系统

电脑安装双系统 本次是在Windows 10的环境下安装Ubuntu的系统。 1、可能需要的准备工作 首先打开cmd输入msinfo32的命令查看电脑的BIOS的模式是不是UEFI,如下所示&#xff1a; 本次安装系统基于以上的BIOS模式下。此外如果遇到安装之后不能跳转到ubuntu系统的问题&#xff…...

从VBS到VBE:一次搞懂Windows脚本编码器的前世今生与实战避坑

从VBS到VBE&#xff1a;Windows脚本编码器的技术考古与安全实践 在Windows系统管理的工具箱里&#xff0c;VBScript&#xff08;VBS&#xff09;曾经是自动化任务的瑞士军刀。尽管如今PowerShell和现代编程语言已成为主流&#xff0c;但理解VBScript及其编码器&#xff08;VBE&…...

鸿蒙ArkUI视频播放器开发实战:从AVPlayer到自定义控制与性能优化

1. 项目概述&#xff1a;为什么要在鸿蒙上做视频播放器&#xff1f;最近在捣鼓鸿蒙应用开发&#xff0c;发现社区里关于多媒体处理&#xff0c;特别是视频播放的深度分享还不多。很多开发者拿到Video组件&#xff0c;照着官方Demo跑起来一个播放界面就觉得完事了。但真要把一个…...

2026四大主流收银系统深度横评:商拓、柚子、商琦云与银阁仕实战对比

在零售和餐饮行业数字化转型的浪潮中&#xff0c;收银系统早已超越了简单的“算账工具”范畴&#xff0c;成为了门店运营的中枢神经。很多店主在选型时容易陷入一个误区&#xff1a;只盯着硬件价格或者界面好不好看&#xff0c;却忽略了系统在高峰期的稳定性、数据链路的打通能…...

合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测等技术应用

合成孔径雷达干涉测量&#xff08;Interferometric Synthetic Aperture Radar, InSAR&#xff09;技术作为一种新兴的主动式微波遥感技术&#xff0c;凭借其可以穿过大气层&#xff0c;全天时、全天候获取监测目标的形变信息等特性&#xff0c;已在地表形变监测、DEM生成、滑坡…...

OBS遮罩插件深度指南:15种特效解决直播画面优化的5大痛点

OBS遮罩插件深度指南&#xff1a;15种特效解决直播画面优化的5大痛点 【免费下载链接】obs-advanced-masks Advanced Masking Plugin for OBS 项目地址: https://gitcode.com/gh_mirrors/ob/obs-advanced-masks OBS高级遮罩插件&#xff08;OBS Advanced Masks&#xff…...

从NUCLEO板载调试器到独立ST-LINK:打造高效STM32开发环境

1. 为什么需要独立ST-LINK调试器&#xff1f; 很多STM32开发者刚开始接触NUCLEO开发板时&#xff0c;都会发现板子上自带了一个ST-LINK调试器。这个设计本来是为了方便初学者快速上手&#xff0c;但随着项目复杂度提升&#xff0c;你会发现这个板载调试器存在不少限制。比如每次…...

T507-H平台Linux实时化实战:RT-Preempt补丁移植与性能调优

1. 项目概述与背景最近在做一个车载信息娱乐系统的预研项目&#xff0c;客户对系统的响应延迟有硬性指标要求&#xff0c;这就逼得我们必须对底层Linux内核的实时性做深度优化。选型阶段&#xff0c;我们盯上了全志的T507-H平台&#xff0c;这是一颗面向汽车电子的四核A53处理器…...

【亲测免费】 YMODEM发送端程序C代码

YMODEM发送端程序C代码 【下载地址】YMODEM发送端程序C代码 YMODEM发送端程序C代码 项目地址: https://gitcode.com/open-source-toolkit/8ede80 资源文件介绍 文件名 YMODEM.7z 文件描述 本资源文件包含了一个完整的YMODEM发送端程序的C代码&#xff0c;适用于STM3…...

5步实用指南:永久解锁Cursor Pro高级功能的完整解决方案

5步实用指南&#xff1a;永久解锁Cursor Pro高级功能的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your t…...