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

计网第五章(运输层)(五)(TCP拥塞控制)

目录

一、基本概念

二、拥塞控制算法

慢开始:

拥塞避免:

快重传:

快恢复:


一、基本概念

若对网络中某一资源的需求超过了该资源所能提供的可用部分(供不应求),网络性能就会变坏。

在计算机网络中的带宽、交换节点中的缓存和处理机等都是网络的资源。

如果出现拥塞而不控制,整个网络的吞吐量(单位时间内从网络输出的分组数量)会随着输入负荷的增大而下降。

就好像交通堵塞一样,公路就相当于网络资源,当车(相当于分组)过多时就会出现交通堵塞,自然就会出现到达目的地的时间变长甚至无法移动等。

在上一节提到,发送窗口的值实际是在发送方自身的拥塞窗口的值和接收方的接收窗口的值之间取较小者。

在本篇博客中,假设接收方一直有足够的缓存空间,即发送方的发送窗口由网络拥塞程度来决定。

假设A为发送方,B为接收方。发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。

拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,窗口值就会再增大一些,出现拥塞就减小一些。

判断是否出现拥塞的依据:没有按时收到应当到达的确认报文。(即发生了超时重传)。

发送方将拥塞窗口作为发送窗口swnd。

维护一个慢开始门限ssthresh状态变量。

当swnd < ssthresh时,使用慢开始算法。

当swnd > ssthresh时,停止使用慢开始算法,开始使用拥塞避免算法。

当swnd = ssthresh时,慢开始算法和拥塞避免算法都可以使用。

二、拥塞控制算法

在讨论拥塞控制时,以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位。

慢开始:

慢开始算法就是在达到慢开始门限ssthresh前,拥塞窗口值在每个轮次之后增加一倍,又因为拥塞窗口和发送窗口值相等,所以每个轮次发送窗口发送的报文段都是上个轮次的2倍。

即窗口值呈指数级增长。

“慢开始”指的是一开始向网络注入的报文段较少,并非指增长速度慢。

就好像跑步,可能刚开始比较慢,然后越来越快。

拥塞避免:

当达到慢开始门限值之后,开始使用拥塞避免算法,拥塞窗口值每个轮次之后增加1,

即窗口值呈线性增长。

在某一轮次发送方发送的报文段引起超时重传时,发送方就会判断可能发生了网络拥塞。于是就会进行以下操作:

首先将慢开始门限值缩小为发生拥塞时拥塞窗口值的一半。随后将拥塞窗口值减小为1,并重新开始慢开始算法。

“拥塞避免”是指将拥塞窗口控制为线性增长,使得网络比较不容易出现拥塞。

有时引发超时重传只是报文段在传输过程中丢失,并非是网络出现了拥塞,而因为引发发送方超时重传导致发送方误认为发生了网络拥塞。这时候重新启动慢开始算法必然会导致传输效率降低。于是就有了以下两种算法的出现。

快重传:

快重传算法采取的措施是可以让发送方尽早知道发生了个别报文段的丢失。这样发送方可以尽快进行重传,而并不是等待重传计时器超时后再重传。

这里就要求接收方不要等待自己发送数据时才捎带确认,而是立即发送确认。如果收到了失序的报文段,也要立即发出对已收到的报文段的重复确认。(注意:如果收到失序的报文段,接收方会先将其缓存下来,等待连续的报文段到达后,再按顺序处理。在之前总结TCP和UDP的对比时,也有提到使用TCP协议时,接收方从接收到的报文段中取出数据载荷部分并存储在接收缓存中,同时将接收缓存中的一些字节交付给上层。这里就很明显体现了这一点

发送方一旦收到3个连续的重复的确认后,就对相应的报文段立即进行重传。

快恢复:

在发送方收到3个连续的重复的确认后,就知道现在只是丢失了个别报文段,于是执行快恢复算法。

这时候发送方会将慢开始门限值和拥塞窗口的值都降为当前窗口值的一半,随后进行拥塞避免算法。

总结:最开始只有慢开始和拥塞避免算法,在出现超时重传时,会被误判为网络拥塞。但是实际上可能只是个别报文段丢失,所以为了提高TCP的性能,出现了快重传和快恢复两个算法。它们两个就像泡面和火腿。快重传使得发送方收到三个重复确认后可以尽快进行重传,不用等到重传计时器超时后再重传。这时候发送方就知道并未发生网络拥塞,于是执行快恢复操作。

超时重传引起的操作是慢开始门限值降为当前窗口值的一半,拥塞窗口值变为1,随后重新启动慢开始算法。

但是快恢复是慢开始门限值和拥塞窗口值都变为当前窗口值的一半,并且随后执行拥塞避免算法。

相关文章:

计网第五章(运输层)(五)(TCP拥塞控制)

目录 一、基本概念 二、拥塞控制算法 慢开始&#xff1a; 拥塞避免&#xff1a; 快重传&#xff1a; 快恢复&#xff1a; 一、基本概念 若对网络中某一资源的需求超过了该资源所能提供的可用部分&#xff08;供不应求&#xff09;&#xff0c;网络性能就会变坏。 在计算…...

windows/ubuntu怎么修改hosts文件

windows系统修改方法&#xff1a; 第一步&#xff1a;用管理员权限打开记事本&#xff0c;或者visual studio。 第二步&#xff1a;用记事本或者vs打开地址C:\Windows\System32\drivers\etc\hosts文件&#xff0c;这个时候就可以直接修改了 Ubuntu22 LTS系统修改方法&#xf…...

(日积月累版)大数据基础知识点1-关系型数据库

好久不见&#xff0c;甚是想念。 笔者最近有时间整理关于大数据的一些基础知识点&#xff0c;整理的目不在于能提升多少技能&#xff0c;关键在于巩固一些很基础的知识点&#xff0c;毕竟互联网就是基础略稳固的人比较有优势&#xff0c;在遇到或发现一些技术问题时&#xff0c…...

【开心消消乐】python实现-附ChatGPT解析

1.题目 开心消消乐 知识点编程基础:深搜、广搜 时间限制: 1s 空间限制: 256MB 限定语言:不限 题目描述: 给定一个N行M列的二维矩阵,矩阵中每个位置的数宁取值为0或1。矩阵示例如: 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的1进行反转为0,规则如下: 1)、当点击一…...

springBoot源码汇总

SpringFactoriesLoader 示例位置 SpringApplication#getSpringFactoriesInstances 加载spring.factroies下的初始化类 ClassLoader classLoader this.getClassLoader();Set<String> names new LinkedHashSet(SpringFactoriesLoader.loadFactoryNames(type, classLoade…...

代码随想录二刷day39

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣62. 不同路径二、力扣63. 不同路径 II 前言 一、力扣62. 不同路径 class Solution {public int uniquePaths(int m, int n) {int[][] dp new int[m][…...

Spring面试题7:面试官:Spring是如何进行异常处理的呢?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring是如何进行异常处理的呢? Spring通过异常处理机制来处理应用程序中的异常。它提供了多种方式来处理异常,包括以下几种: 声明式事务管理:…...

华为云云耀云服务器L实例评测|搭建您的私人影院网站

前言 本文为华为云云耀云服务器L实例测评文章&#xff0c;测评内容是云耀云服务器L实例搭建在线视频网站&#xff0c;大家可以将这个网站作为私人影院或是分享给朋友&#xff0c;但是尽量不要更广的传播&#xff0c;因为这涉及到版权问题 系统配置&#xff1a;华为云 2核2G 3M…...

Solidity 小白教程:22. Call

Solidity 小白教程&#xff1a;22. Call 这一讲我们将介绍如何利用 Call 调用合约。 Call call 是address类型的低级成员函数&#xff0c;它用来与其他合约交互。它的返回值为**(bool, data)&#xff0c;分别对应call**是否成功以及目标函数的返回值。 call是solidity官方推…...

mySQL 安装

一、windows安装包下载 mysql官网提供了两种安装方式&#xff0c;一个是zip安装&#xff0c;另一个是msi安装&#xff0c;这里简绍第一种安装方式&#xff0c;第二种简单&#xff0c;不再简绍 官网下载&#xff0c;根据自己需要选择版本&#xff1a;MySQL :: MySQL Community…...

涛然自得周刊(第 10 期):搬到海岛生活是一种什么体验

作者&#xff1a;何一涛 日期&#xff1a;2023 年 9 月 24 日 涛然自得周刊主要精选作者阅读过的书影音内容&#xff0c;周末发布。历史周刊内容可以看这里。 影音 《德雷尔一家》是一部根据书籍《希腊三部曲》改编的英剧&#xff0c;共 4 季&#xff0c;每一季豆瓣评分都超…...

pycharm中恢复原始界面布局_常用快捷键_常用设置

文章目录 1 恢复默认布局1 .1直接点击file→Manage IDE Settings→Restore Default Settings&#xff08;如下图所示&#xff09;&#xff1a;1.2 直接点击Restore and Restart&#xff0c; 然后Pycharm就会自动重启&#xff0c;重启之后的界面就是最原始的界面了 2 改变主题2.…...

docker(7):实战--安装nginx并实现反向代理

基本概念 反向代理&#xff1a;客户端向反向代理的命名空间中的内容发送普通请求&#xff0c;接着反向代理将推断向何处&#xff08;原始服务器&#xff09;转交请求&#xff0c;并将获得的内容返回给客户端。 负载均衡&#xff1a;当请求过多&#xff0c;单个服务器难以负荷…...

day-61 代码随想录算法训练营(19)一刷完结撒花

短短60天过的很快&#xff0c;但是让我养成了写博客的习惯。在训练营学到了挺多不同的思路&#xff0c;跟录友们的交流也使我受益良多。 我的感觉是&#xff0c;一道题没有思路的时候&#xff0c;要及时去看题解&#xff1b;毕竟是应试&#xff0c;第一次做的时候&#xff0c;没…...

C#中对泛型集合元素使用List.Sort()方法排序

啊&#xff01;终于整明白了&#xff01; 今天拿出一点时间研究了一下C#的List<T>如何排序&#xff0c;基本上整明白了。很多场景下&#xff0c;用这个排序还是很方便的。 //构造一个类 public class mth{//编号private string id;public string Id{get { return id; …...

【项目】在线音乐播放器测试报告

目录 项目背景 项目功能 测试计划 功能测试 登录页面的测试 测试用例 测试结果 注册页面的测试 测试用例 测试结果 音乐列表页面的测试 测试用例 测试结果 出现的bug 搜索功能的bug 问题解决 删除功能的bug 问题解决 喜欢列表页面的测试 测试用例 测试结果…...

[C++ 网络协议] 多线程服务器端

具有代表性的并发服务器端实现模型和方法&#xff1a; 多进程服务器&#xff1a;通过创建多个进程提供服务。 多路复用服务器&#xff1a;通过捆绑并统一管理I/O对象提供服务。 多线程服务器&#xff1a;通过生成与客户端等量的线程提供服务。✔ 目录 1. 线程的概念 1.1 为什…...

宝塔部署node后使用pm2管理上传文件路径失效问题

如何进行文件上传&#xff1f; node上传文件 vue3 elementPlus 组件封装 在本地或者以宝塔终端的形式允许 上传后是没问题的&#xff0c;直接默认对multer直接写入路径就可以了 const multer require(multer) const upload multer({ dest: ./public/avataruploads/ }) …...

postman-pre-request-scripts使用

一、场景 二、定义模拟接口 using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SaaS.Framework.DataTransfer; using System.Threading.Tasks;namespace SaaS.KDemo.Api.Controllers {[Route("api/[co…...

uniapp Echart X轴Y轴文字被遮挡怎么办,或未能铺满整个容器

有时候布局太小&#xff0c;使用echarts&#xff0c;x轴y轴文字容易被遮挡&#xff0c;怎么解决这个问题呢&#xff0c;或者是未能铺满整个容器。 方法1&#xff1a; 直接设置 containLabel 字段 options: { grid: { containLabel: true, },} 方法2: 间接设置&#xff0c;但是…...

学习路之PHP--laravel DingoApi

一、安装 1.进入项目目录&#xff0c;执行composer安装命令 composer require dingo/api 如果下载超时&#xff0c;换阿里云源&#xff1a; composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 2.使用以下命令可以发布 API 的配置文件到 confi…...

项目篇——java文档搜索引擎

Java 文档搜索引擎 文章目录 Java 文档搜索引擎一、分词二、完成parser 类2.1、排除非html文件2.2、解析html以下是解析 HTML 标题的方法以下是解析 对应的 URL以下是解析 HTML的正文&#xff1a; 补充&#xff1a;倒序索引 三、实现 index 类3.1、实现索引结构3.2、索引中新增…...

5.2 磁盘CRC32完整性检测

CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法&#xff0c;校验算法可以通过计算应用与数据的循环冗余校验&#xff08;CRC&#xff09;检验值来检测任何数据损坏。通过运用本校验技术我们可以实现对特定内存区域以及磁盘文件进行完整性检测&#xff0c;…...

企业内部安全与风控管理图解

企业内部安全说外部安全&#xff0c;企业领导者都非常关注&#xff0c;由于各方面原因&#xff0c;。。。力不从心&#xff0c;妥协&#xff01; 方向&#xff1a; 1、制度 结合企业实情&#xff0c;编制企业安全管理制度 2、硬件 处理常规硬件外观&#xff0c;加壳与锁定、…...

vscode基于cmake安装opencv库

一、安装相关依赖库 首先更新源 sudo apt update安装相关包 sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libjasper若是报错&#xff1a;无法定位到 libjasper软件包 则依次执行以下命令 sud…...

Web 器学习笔记(基础)

Filter 过滤器 概念&#xff1a;表示过滤器&#xff0c;是 JavaWeb 三大组件&#xff08;Servlet、Filter、Listener&#xff09;之一 作用&#xff1a;顾名思义可以过滤资源的请求&#xff0c;并实现特殊的需求 Filter 接口及它核心的 doFilter() 方法&#xff08;执行前就是…...

uniapp中vue3使用uni.createSelectorQuery().in(this)报错

因为VUE3中使用setup没有this作用域&#xff0c;所以报错 解决办法&#xff1a;使用getCurrentInstance()方法获取组件实例 import { getCurrentInstance } from vue;const instance getCurrentInstance(); // 获取组件实例 const DOMArr uni.createSelectorQuery().in(ins…...

k8s-部署

1.k8s 集群与部署 更改所有主机名字和解析 k8s1 192.168.25.11 reg.westos.org,habbor 仓库 k8s2 192.168.25.12 master&#xff0c;k8s 集群控制节点 k8s3 192.168.25.13 node&#xff0c;k8s 集群工作节点 k8s4 192.168.25.14 node&#xff0c;k8s 集群工作节点 所有节…...

Arduino驱动MMA7260三轴加速度传感器(惯性测量传感器篇)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 Arduino驱动MMA7260三轴加速度传感器芯片,可以应用到摩托车和汽车放倒报警、遥控航模、游戏手柄、人形机器人跌倒检测、硬盘冲击保护、倾斜度测量等场合。 1...

奇舞周刊第507期:通过 View Transition API 在状态之间添加丰富的过渡动画

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 通过 View Transition API 在状态之间添加丰富的过渡动画 W3C 2023 年度全球技术大会 (TPAC2023) 于今年9月 11 - 15 日召开。W3C CSS 工作组成员 Bramus Van Damme(Google) 为本届…...

成都最新疫情发布/seo推广专员招聘

1093 字符串AB (20 分) 题目链接 算法分析 依次遍历两个字符串,用on数组标记是否输出过 值为1表示输出过,值为0表示没有输出过. 代码实现 #include<bits/stdc.h> using namespace std; #define N 150 int on[N]; int main(){string a, b;getline(cin, a);getline(ci…...

整人关不掉的网站怎么做/外贸营销型网站设计

calendar是与日历相关的模块&#xff0c;calendar模块文件里定义了很多类型&#xff0c;主要有Calendar&#xff0c;TextCalendar以及HTMLCalendar类型。其中&#xff0c;Calendar是TextCalendar与HTMLCalendar的基类。该模块文件还对外提供了很多方法&#xff0c;例如&#xf…...

岳阳seo快速排名/西安网站seo公司

1、安装Chromeyum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm2、安装Seleniumpip3 install selenium3、下载ChromeDriver (注意&#xff1a;chromedriver 的大版本&#xff0c;要与Chrome 的大版本一致)wget http://npm.taobao.org/…...

wordpress的qq邮件列表qq邮件列表订阅rss源地址怎么找/企业网络营销方案策划

快速开发平台&#xff0c;简单地说就是指那些不用编码或通过少量代码&#xff0c;就可以快速开发应用程序的平台。既可以降低开发人力成本&#xff0c;又可以缩短开发时间&#xff0c;从而实现企业降本增效的价值。应用快速开发&#xff08;rapid application development, RAD…...

个人未授权做的网站/广州百度竞价外包

背景 我想使用带有Inception-Resnet_v2的keras来预测病理图像.我已经训练了模型并得到了.hdf5文件.由于病理图像非常大(例如&#xff1a;20,000 x 20,000像素),因此我必须扫描图像以获得用于预测的小补丁. 我想使用python2.7的多处理库来加速预测过程.主要思想是使用不同的子进…...

贵阳白云区疫情最新情况今天/宁波seo网站推广

二叉树结构的实现1.二叉树相关操作2.二叉树的存储结构2.1. 二叉树的顺序存储结构2.2. 二叉链表存储结构2.3 三叉链表存储结构3.二叉树的遍历的操作3.1. 递归遍历二叉树3.2. 非递归遍历二叉树3.2.1. 基于任务分析的二叉树遍历非递归算法3.2.2. 基于搜索路径分析的二叉树遍历的非…...