【计算机网络笔记】TCP的拥塞控制机制

news2024/11/25 22:39:52

系列文章目录

什么是计算机网络?
什么是网络协议?
计算机网络的结构
数据交换之电路交换
数据交换之报文交换和分组交换
分组交换 vs 电路交换
计算机网络性能(1)——速率、带宽、延迟
计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率
计算机网络体系结构概念
OSI参考模型基本概念
OSI参考模型中非端-端层(物理层、数据链路层、网络层)功能介绍
OSI参考模型中端-端层(传输层、会话层、表示层、应用层)功能介绍
TCP/IP参考模型基本概念,包括五层参考模型
网络应用的体系结构
网络应用进程通信
网络应用对传输服务的需求
Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)
Cookie技术
Web缓存/代理服务器技术
传输层服务概述、传输层 vs. 网络层
传输层——多路复用和多路分用
传输层——UDP简介
传输层——可靠数据传输原理之Rdt协议
传输层——可靠数据传输之流水线机制与滑动窗口协议
传输层——TCP特点与段结构
传输层——TCP的可靠数据传输
TCP连接管理(图解三次握手和四次挥手)
传输层——拥塞控制原理与解决方法


  • 系列文章目录
  • TCP拥塞控制的基本原理
  • 加性增 —乘性减: AIMD
  • 慢启动: SS
  • 什么时候应该从SS切换到AIMD?
  • TCP拥塞控制算法总结
  • 例题


TCP拥塞控制的基本原理

  • Sender限制发送速率。LastByteSent-LastByteAcked <= CongWin 让发送的最后一个Byte的序列号减去接收的最后一个确认的Byte的序列号小于等于CongWin。这样我们只需要修改CongWin这个值就可以限制发送速率。

    在这里插入图片描述

  • CongWin(拥塞窗口)的大小需要动态地调整。

那需要能够感知和判断网络拥塞。怎么做呢?我们可以定义一个loss事件,当超时或者收到3个重复 ACK时往往意味着网络拥塞了,那发生这个事件的时候就降低速率。

能够感知和判断网络拥塞之后需要合理地调整发送速率。这里有两个机制:

  • 加性增 —乘性减: AIMD
  • 慢启动: SS

下面来看看这两种机制什么意思、怎么做的。

加性增 —乘性减: AIMD

原理

  • 加性增:线性地、逐渐地增加发送速率谨慎探测可用带宽,直到发生loss事件;
  • 乘性减:一旦发生loss事件就要快速地降低速率。

方法:AIMD

  • 加性增:每个RTT 将CongWin增大一个MSS(最大的段的长度)。这种思想是拥塞避免。
  • 乘性减:发生loss后将CongWin减半。

TCP的拥塞控制在运行的时候可能如下图所示,想锯齿一样。

在这里插入图片描述

慢启动: SS

TCP连接建立时,CongWin初始化为1,所以初始的速率很小很保守。那可用的带宽可能远远高于初始速率。那如果这时采用线性增长的话需要很长时间,这就是一种浪费。所以我们希望刚开始增长时候是快速地增长。这样就做到了虽然初始很慢,但是后面可以快速地将速率提高。

所以原理是:

  • 当连接开始时,CongWin指数性增长。
  • 每个RTT 将CongWin翻倍
  • 收到每个ACK进行操作

在这里插入图片描述

什么时候应该从SS切换到AIMD?

这需要依赖Threshold变量。它表示CongWin达到Loss 事件前值的1/2 时。

实现方法:当SS指数性增长达到了Threshold的时候就转变成线性增长AIMD,进入拥塞避免机制。

在这里插入图片描述

更细致的考虑一下Loss事件的处理:

  • 收到3个重复ACKs:把CongWin切到一半,然后然后线性增长。比如上面图中的黑线。
  • 发生Timeout事件:将CongWin直接设为 1 个MSS,然后指数增长,达到threshold 后, 再线性增长。比如上面图中的蓝线。

为什么处理方法不一样呢?因为Timeout事件表明拥塞更严重,那速率就要降地更多。

TCP拥塞控制算法总结

When CongWin is below Threshold, sender in slow-start phase, window grows exponentially;当拥塞窗口小于Threshold时,发送方位于慢启动阶段,拥塞窗口指数增长;

When CongWin is above Threshold, sender is in congestion-avoidance phase, window grows linearly;当拥塞窗口大于Threshold时,发送方位于拥塞避免阶段,拥塞窗口线性增长;

When a triple duplicate ACK occurs, Threshold set to CongWin/2 and CongWin set to Threshold;当收到三个重复ACK时,Threshold 被减为拥塞窗口的一半,拥塞窗口也减半;

When timeout occurs, Threshold set to CongWin/2 and CongWin is set to 1 MSS. 当发生超时时,Threshold减为拥塞窗口的一半,并且拥塞窗口被置为1

下面是一张更细致的图:

在这里插入图片描述

下面是TCP拥塞控制算法伪代码:

在这里插入图片描述

例题

题目:一个TCP连接总是以1 KB的最大段长发送TCP段,发送方有足够多的数据要发送。当拥塞窗口为16 KB时发生了超时,如果接下来的 4 个RTT(往返时间)时间内的TCP段的传输都是成功的,那么当第 4 个RTT时间内发送的所有TCP 段都得到肯定应答时,拥塞窗口大小是多少?

解答:发生超时事件后,threshold会降为拥塞窗口的一半也就是8KB,拥塞窗口CongWin会变为一个MSS最大段长度也就是1KB。这时发送方进入慢启动阶段也就是指数增长阶段,1 个RTT后, CongWin=2 KB,2 个RTT后, CongWin=4 KB ,3 个RTT后, CongWin=8 KB,这时到达threshold值了,所以这时慢启动就结束了,就进入了拥塞避免阶段也就是线性增长阶段,那么再发生一个RTT也就是4 个RTT后, CongWin=9 KB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1179345.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.27每日一题(常系数线性非齐次方程的特解)

常系数非齐次线性方程的特解如何假设&#xff08;两种&#xff09;形式&#xff1a; 1、题目中 e 的 x 次幂以及 1&#xff0c;都是第一种&#xff1a;1可以看成为e的0次幂 注&#xff1a;题目给的多项式是特殊的形式&#xff0c;我们要设为一般的形式的多项式 2、题目中sin…

git使用全解析 | git的原理 配置 基础使用 分支 合并

文章目录 1 git初步了解1.1 git的安装1.2 git原理模型1.3 git基础配置1.4 git基础用法1 将文件加入暂存区2 查看当前的git仓库状态3 删除文件4 commit 将暂存区文件加入本地git版本仓库5 查看提交历史 更改 2 分支2.1 创建分支2.2 查看分支2.3 切换分支2.4 内容比较 3 合并 本文…

【单片机基础小知识-如何通过指针来读写寄存器】

寄存器的本质就是内存&#xff0c;RAM&#xff0c;而指针是可以对内存进行操作的&#xff0c;因此可以通过指针来读写寄存器。 如何读取以下一片地址&#xff1a; 步骤1、首地址 结构体&#xff0c;它所占用的内存空间大小与它内部成员有关。 构造一个28字节的类型 type…

nginx知识点-1

#因为是最小化安装&#xff0c;先安装vim编辑器&#xff0c;net-tools查看端口&#xff0c;psmisc可以使用killall命令bash-completion tab补全命令(需要重启生效)[rootlocalhost ~]# yum -y install net-tools psmisc vim bash-completion [rootlocalhost ~]# tar zxvf nginx-…

报错Could not resolve placeholder ‘driver‘ in value “${driver}“

这是我的报错&#xff1a; 原因是我的applicationContext.xml文件加载properties文件径错误&#xff1a; 应该把路径改成这样就可以了&#xff1a;

强化学习中值的迭代

一、价值的迭代 策略迭代的一个缺点是&#xff0c;其每次迭代都涉及策略评估&#xff0c;这本身可能是一个漫长的迭代计算&#xff0c;需要多次遍历状态集。如果策略评估是迭代进行的&#xff0c;那么只有当趋近于vπ时才会收敛。我们是否必须等待完全收敛&#xff0c;还是可以…

mac电脑系统清理软件CleanMyMac X2024破解版下载

基本上&#xff0c;不管是win版还是Mac版的电脑&#xff0c;其装机必备就是一款电脑系统清理软件&#xff0c;就比如Mac&#xff0c;目前在市面上&#xff0c;电脑系统清理软件是非常多的。 对于不熟悉系统的用户来说&#xff0c;使用一些小众工具&#xff0c;往往很多用户都不…

如何快速部署Apache服务器并使用内网穿透实现远程连接

Apache服务安装配置与结合内网穿透实现公网访问 文章目录 Apache服务安装配置与结合内网穿透实现公网访问前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpo…

nacos配置中心docker部署、配置及 goLang 集成使用

为什么需要配置中心 平时我们写一个demo的时候&#xff0c;或者说一个单体的应用&#xff0c;都会有一个配置文件&#xff0c;不管是 json文件或者yaml文件&#xff0c;里面包含了redis,mysql,es等信息&#xff0c;如果我们修改了配置文件&#xff0c;往往我们需要重启&#x…

【面试题01】找出数组中的最长前缀

题目1&#xff1a;如图&#xff0c;finally中的输出语句会执行吗&#xff1f;&#xff08;另外自己去考虑虚拟机退出、catch中抛异常、try中抛异常、守护线程等相关问题&#xff09; 题目2&#xff1a;Byte"hello"报错吗&#xff1f;Byte7报错吗&#xff1f; 不会报…

服务器的操作系统,你选择哪些?

OpenCloudOS CentOS CentOS Stream Ubuntu Debian Windows Server

【c++】——类和对象(中)——默认成员函数(上)

【学习目标】 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 目录 一.类的6个默认成员函数 二. 构造函数 2.1 概念 2.2.特性 三.析构函数 3.1.概念 3.2 特性 四.拷贝构造函数 4.1.概念 4.2.特性 一.类的6个默认成员函数 如果一个类中什么成员…

解决 SSLError: HTTPSConnectionPool(host=‘huggingface.co‘, port=443)

看我的回答&#xff1a; https://github.com/huggingface/transformers/issues/17611#issuecomment-1794486960 能问这个问题的都是网络不太好的&#xff0c;你懂的&#xff0c;所以答案全是解决网络的。 得益于这个回答&#xff1a;#17611 (comment) 看了一下代码&#xf…

Apache Doris (五十三): Doris Join类型 - Shuffle Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. shuffle Join的原理

学信息系统项目管理师第4版系统36_结语

1. 尘埃落定 10月28日首考&#xff0c;到11月5日结束&#xff0c;尘埃落定&#xff0c;尘归尘、土归土了。 软考机考第一次吃螃蟹&#xff0c;几家欢喜几家愁&#xff0c;高项的选择题和案例题反馈简单&#xff0c;原书原文的考法&#xff0c;不过属于犄角旮旯那种。 中级则普…

GPT-4V:AI在教育领域的应用

OpenAI于9月25日发布了最新的GPT-4V模型&#xff0c;为ChatGPT引入了语音和图像功能&#xff0c;为用户提供更多元化的使用方式。这次更新将为用户带来更便捷、直观的交互体验&#xff0c;用户可以直接拍照上传并针对照片内容提出问题。OpenAI的最终目标是构建安全、有益的人工…

WindowsServer2019-搭建FTP服务器

这里写自定义目录标题 一、基础配置IP地址安装FTP服务检查连通性Windows10连接FTP服务 二、了解和使用FTP具体模块及其配置1、FTP IP地址和域限制2、FTP SSL设置3、FTP当前会话4、FTP防火墙5、FTP目录浏览6、FTP请求筛选7、FTP日志8、FTP身份验证9、FTP授权规则10、FTP消息11、…

数据结构(五):哈希表及面试常考的算法

一、哈希表介绍 1、定义 哈希表&#xff0c;也叫散列表&#xff0c;是根据关键码和值 (key和value) 直接进行访问的数据结构&#xff0c;通过key和value来映射到集合中的一个位置&#xff0c;这样就可以很快找到集合中的对应元素。例如&#xff0c;下列键(key)为人名&#xf…

5、Python中的变量和表达式:变量的定义、赋值和数据类型转换

文章目录 Python中的变量和表达式:变量的定义、赋值和数据类型转换变量的定义变量的赋值数据类型转换注意事项表达式总结Python中的变量和表达式:变量的定义、赋值和数据类型转换 Python是一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。在Python编程中,变量和表…

docker安装达梦数据库镜像并初始化实例设置数据库大小写不敏感

全文参考文章Docker - 通过容器安装部署达梦数据库教程 以及docker安装达梦V8数据库 UTF-8及大小写敏感问题 一、安装部署达梦数据库 下载完成之后使用FileZilla上传到服务器上面 启动命令 创建dm8的容器并设置大小写不敏感运行 docker run -d -p 5236:5236 \ --restartalwa…