TCP的拥塞控制_基础知识_四种拥塞控制方法

TCP的拥塞控制

一.拥塞控制的基本概念

  • 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫作拥塞
    • 计算机网络中的链路容量(带宽)、交换节点中的缓存和处理机等都是网络的资源
  • 若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
    在这里插入图片描述

二.拥塞控制的基本方法

首先,先对比流量控制与拥塞控制
流量控制:以接收方的接收能力控制发送方(源点)的发送速率只与特定的点对点通信的发送方和接收方之间的流量有关
拥塞控制:源点根据各方面因素,按拥塞控制算法自行控制发送速率全局性问题,涉及网络中所有的主机、路由器等

总结:流量控制是接收方限制发送方的流量,拥塞控制是根据全局的情况,设置了拥塞窗口,限制发送.


从控制论的角度分类,可分为开环控制和闭环控制

开环控制:

  • 试图用良好的设计来解决问题。
  • 从一开始就保证问题不会发生。
  • 一旦系统启动并运行起来,就不需要中途修正。

当网络的流量特征可以准确规定且性能要求可以事先获得时,适合使用开环控制。

闭环控制:

  • 基于反馈的控制方法,包括以下三个部分:
    • 监测网络拥塞在何时、何地发生。
    • 把拥塞发生的相关信息传送到可以采取行动的地方。
    • 调整网络的运行以解决拥塞问题。

当网络的流量特征不能准确描述或者当网络不提供资源预留时,适合使用闭环控制。因特网采用的就是闭环控制方法。


衡量网络拥塞的一些指标:

  • 由于缓存溢出而丢弃的分组的百分比
  • 路由器的平均队列长度
  • 超时重传的分组数量
  • 平均分组时延和分组时延的标准差

根据拥塞信息的反馈形式,可将闭环拥塞控制算法分为显示反馈算法和隐式反馈算法.

显示反馈算法:从拥塞节点(即路由器)向源点提供关于网络中拥塞状态的显式反馈信息。

隐式反馈算法:源点自身通过对网络行为的观察(例如超重传或往返时间RTT)来推断网络是否发生了拥塞。TCP采用的就是隐式反馈算法

拥塞控制并不仅仅是运输层要考虑的问题。显式反馈算法就必须涉及网络层。虽然一些网络体系结构(如ATM网络)主要在网络层实现拥塞控制,但因特网主要利用隐式反馈在运输层实现拥塞控制。

三.TCP的四种拥塞控制的方法

慢开始,拥塞避免,快重传,快恢复

为了集中精力讨论拥塞控制算法的基本原理,假定如下条件
1.数据是单方向传送的,而另一个方向只传送确认。
2.接收方总是有足够大的接收缓存空间,因而发送方的发送窗口的大小仅由网络的拥塞程度来决定,也就是不考虑接收方对发送方的流量控制。
3.以TCP最大报文段MSS(即TCP报文段的数据载荷部分)的个数作为讨论问题的单位,而不是以字节为单位(尽管TCP是面向空节流的)


首先,先来认清概念swnd,cwnd,rwnd
在这里插入图片描述
图解:

发送窗口的大小由接收窗口和拥塞窗口共同决定

加入慢开始门限
在这里插入图片描述

(一)慢开始算法与拥塞避免算法

最开始的拥塞窗口为cwnd=1,防止一开始数据传输量过大,造成拥塞.
假设慢开始门限值ssthresh=16,也就是说cwnd增大到16之后,切换算法为拥塞避免算法.

慢开始算法开始的过程:指数增长,一个传输轮次结束,也就是一个RTT的时间结束,cwnd由1变2,2变4,4变8…
在这里插入图片描述
拥塞避免算法开始的过程:线性增长,不同与慢开始算法的指数增长,拥塞避免每次只+1.
在这里插入图片描述
假如,出现了部分报文段丢失的情况,重传计时器超时,此时拥塞窗口变为1,重新开始慢开始算法,同时慢开始门限值/2.


总结:直观图如下:
在这里插入图片描述
图解:

“慢开始”是指一开始向网络注入的报文段少,而并不是指拥塞窗口cwnd的值增长速度慢。 “拥塞避免”也并非指完全能够避免拥塞,而是指在拥塞避免阶段将cwnd值控制为按线性规律增长,使网络比较不容易出现拥塞。

(二) 快重传算法和快恢复算法(改进TCP性能)

快重传算法有什么用?

  • 采用快重传算法可以让发送方尽早知道发生了个别TCP报文段的丢失。
  • “快重传”是指使发送方尽快(尽早)进行重传,而不是等重传计时器超时再重传
    • 这就要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段要立即发出对已收到的报文段的重复确认
    • 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的重传计时器超时再重传。

在这里插入图片描述
图解:

对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞而错误地把拥塞窗口cwnd的值减为1。实践证明,使用快重传可以使整个网络的吞吐量提高约20%。


快恢复算法有什么用?

  • 与快重传算法配合使用的是快恢复算法,发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段,于是不启动慢开始算法,而是执行快恢复算法
    • 发送方将慢开始门限ssthresh的值和拥塞窗口cwnd的值都调整为当前cwnd值的一半,并开始执行拥塞避免算法
    • 也有的快恢复实现是把快恢复开始时的cwnd值再增大一些,即cwnd=新ssthresh+3.
      • 既然发送方收到了3个重复的确认,就表明有3个数据报文段已经离开了网络。
      • 这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中。
      • 可见现在网络中不是堆积了报文段而是减少了3个报文段,因此可以适当把cwnd值增大一些。

总结:直观图如下:

在这里插入图片描述

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

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

相关文章

spring boot 配置多数据源 踩坑 BindingException: Invalid bound statement (not found)

在上一篇:《【已解决】Spring Boot多数据源的时候,mybatis报错提示:Invalid bound statement (not found)》 凯哥(凯哥Java) 已经接受了,在Spring Boot配置多数据源时候,因为自己马虎,导致的一个坑。下面&a…

Notepad++:多行数据操作

1)删除关键字之后(或之前)的所有字符 删除s之后(包含s)的所有内容;快捷键:s.*$ 替换成功 删除s之前(包含s)的所有内容;快捷键:^.*s 2&#xff09…

深度学习中的张量维度

1 深度学习中的张量 在深度学习框架中,Tensor(张量)是一种数据结构,用于存储和操作多维数组。张量可以被视为一种扩展的矩阵,它可以具有任意数量的维度。 在深度学习中,张量通常被用来表示神经网络的输入…

Spring Cloud微服务 - Eureka注册中心详解与实际项目应用

简介 在如今的软件开发领域,微服务架构已成为一种流行的架构模式,它将一个大型应用拆分成多个小的、独立运行的微服务。而为了管理这些微服务的注册与发现,Spring Cloud提供了Eureka注册中心。本文将深入探讨Eureka注册中心的工作原理&#…

PowerDesigner生成数据字典

这里写自定义目录标题 1,创建物理模型2,创建数据源连接3,获取表4,创建报告 先看下最终效果 1,创建物理模型 2,创建数据源连接 填写数据源连接信息 测试连接是否成功 3,获取表 连接刚创建的数…

使用多个GBASE南大通用DataAdapter 填充 DataSet

一个 DataSet 可以与很多GBASE南大通用DataAdapter 对象一起使用。每个GBASE南大通用DataAdapter 都可用于填充一个或多个 DataTable 对象并将更新解析回数据源。DataRelation 对象可以在本地添加到 DataSet,这样您就可以关联来自不同数据源的数据。一个或多个 GBAS…

Springboot数据校验与异常篇

一、异常处理 1.1Http状态码 HTTP状态码是指在HTTP通信过程中,服务器向客户端返回的响应状态。它通过3位数字构成,第一个数字定义了响应的类别,后两位数字没有具体分类作用。以下是常见的HTTP状态码及其含义: - 1xx(信…

react基于antd二次封装分页组件Pagination

目录 react基于antd二次封装分页组件Pagination组件PaginationCom使用组件 react基于antd二次封装分页组件Pagination 组件PaginationCom import { Pagination } from antd; import propTypes from "prop-types"; import React from react;const PaginationCom (p…

网络安全工作者应该注意的八大事项!

1、珍惜给老板汇报的机会 能够称为“企业家”的老板,往往都是“管理学”的精英,也往往对生产安全工作略知一二,在向其汇报工作时,请突出重点、言简意赅,在抛出问题的同时,一定要提出相应的解决措施&#x…

[PyTorch][chapter 8][李宏毅深度学习][Back propagation]

前言: 反向传播算法(英:Backpropagation algorithm,简称:BP算法)是一种监督学习算法,常被用来训练多层感知机。 它用于计算梯度计算中,降低误差。 目录: 链式法则 模型简介(Model) 损失函…

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用 前言 跟往期sobol区别: 1.sobol计算依赖于验证集样本,无需定义变量上下限。 2.SW-ELM自带激活函数,计算具有phi(x)e^x激…

Unity--解析ET6接入ILRuntime实现热更

前言 1.介绍 ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新。学习交流聚集地 介绍 — ILRuntime …

第二证券:诱多诱空是指什么?股民该如何应对?

诱多诱空是指什么? 诱多诱空各指代主力的一类操盘行为。诱多是指主力有意营建股价上涨的假象,从而诱使不知情股民买入该股,主力趁机抛售股票离场,因为本身股价上涨靠主力一手织造,主力撤资后股价会回落,买…

Python:读取文件的文件名、后缀名

import os import pathlib fp "D:/data/outputs/abc.jpg" os.path.basename(fp) # 带后缀的文件名 # abc.jpgpathlib.Path(fp).stem # 不带后缀的文件名 # abc fp_1 os.path.splitext(fp)[0] fp_1.split(/)[-1] # 不带后缀的文件名 # abc basename os.path.bas…

麻雀规则解析器

规则解析器 上一篇讲的规则设计器的成果只是JSON数据,具体的规则执行则由不同的解析器来执行和编译。 目前市场上的规则引擎很多。但其实大部分都是表达式引擎,相当于对动态表达式进行编译和解析 Java语言的有:Drools(业界有名)、Janino、…

【程序员】程序员的护城河:技术、创新还是沟通?

在IT行业,我们深知程序员在保障系统安全、数据防护以及网络稳定方面的重要作用。他们是我们现代社会的护城河,用代码构筑着我们的未来。但是,程序员的护城河又是什么呢?是技术能力的深度?是对创新的追求?还…

Next.js 学习笔记(三)——路由

路由 路由基础知识 每个应用程序的骨架都是路由。本页将向你介绍互联网路由的基本概念以及如何在 Next.js 中处理路由。 术语 首先,你将在整个文档中看到这些术语的使用情况。以下是一个快速参考: 树(Tree):用于可…

2023-12-18 C语言实现一个最简陋的B-Tree

点击 <C 语言编程核心突破> 快速C语言入门 C语言实现一个最简陋的B-Tree 前言要解决问题:想到的思路:其它的补充: 一、C语言B-Tree基本架构: 二、可视化总结 前言 要解决问题: 实现一个最简陋的B-Tree, 研究B-Tree的性质. 对于B树, 我是心向往之, 因为他是数据库的基…

云原生系列2-CICD持续集成部署-GitLab和Jenkins

1、CICD持续集成部署 传统软件开发流程&#xff1a; 1、项目经理分配模块开发任务给开发人员&#xff08;项目经理-开发&#xff09; 2、每个模块单独开发完毕&#xff08;开发&#xff09;&#xff0c;单元测试&#xff08;测试&#xff09; 3、开发完毕后&#xff0c;集成部…

3A服务器 (hcia)

原理 认证&#xff1a;验证用户是否可以获得网络访问权。 授权&#xff1a;授权用户可以使用哪些服务。 计费&#xff1a;记录用户使用网络资源的情况 实验 步骤 1.配置ip地址 2.配置认证服务器 aaa authentication-scheme datacom&#xff08;认证服务器名字&#xf…