计算机网络——22TCP拥塞

TCP拥塞

TCP拥塞控制机制

端到端的拥塞控制机制

  • 路由器不向主机有关拥塞的反馈信息
    • 路由器的负担较轻
    • 符合网络核心简单的TCP/IP架构原则
  • 端系统根据自身得到的信息,判断是否发生拥塞,从而采取动作

拥塞控制的几个问题

  • 如何检测拥塞
    • 轻微拥塞
    • 拥塞
  • 控制策略
    • 在拥塞发送时如何动作,降低速率
      • 轻微拥塞,如何降低
      • 拥塞时,如何降低
    • 在拥塞缓解时如何动作,增加速率

TCP拥塞感知

发送端如何探测到拥塞

  • 某个段超时了(丢失事件 ):拥塞
    • 超时时间到,某个段的确认没有来
    • 原因1:网络拥塞(某个路由器缓冲区没空间了,被丢弃)概率大
    • 原因2:出错被丢弃了(各级错误,没有通过校验,被丢弃)概率小
    • 一旦超时,就认为拥塞了,有一定误判,但是总体控制方向是对的

在这里插入图片描述

  • 有关某个段的3次重复ACK:轻微拥塞
    • 段的第1个ack,正常,确认绿段,期待红段
    • 段的第2个重复ack,意味着红段的后一段收到了,蓝段乱序到达
    • 段的第2、3、4个ack重复,意味着红段的后第2、3、4个段收到了 ,橙段乱序到达,同时红段丢失的可能性很大(后面3个段都到了, 红段都没到)
    • 网络这时还能够进行一定程度的传输,拥塞但情况要比上面好

TCP速率控制方法

如何控制发送端发送的速率

  • 维持一个拥塞窗口的值(主要手段) :CongWin (表示发送方往网络中的注入字节数)
  • 发送端限制 已发送但是未确认 的数据量(的上限): LastByteSent - LastByteAcked ≤ CongWin
  • 从而粗略地控制发送方的往网络中注入的速率

在这里插入图片描述

  • CongWin是动态的,是感知到的网络拥塞程度的函数
    • 超时或者3个重复ack,CongWin下降
      • 超时时:CongWin降为1MSS,进入SS阶段然后再倍增到 CongWin(原) / 2(每个RTT),从而进入CA阶段
      • 3个重复ack :CongWin降为CongWin/2,CA阶段
    • 否则(正常收到Ack,没有发送以上情况):CongWin跃跃欲试上升(这是为了满足“在不发生拥塞的情况下提高吞吐率”的目的)

TCP拥塞控制和流量控制的联合动作

联合控制的方法

  • 发送端控制发送但是未确认的量同时也不能超过接收窗口,满足流量控制要求
    • SendWin = min { CongWin , RecvWin }
    • 同时满足 拥塞控制和流量控制要求

TCP慢启动

  • 连接刚建立, CongWin = 1 MSS
    • 如: MSS = 1460bytes & RTT = 200 msec
    • 初始速率 = 58.4kbps
  • 可用带宽可能 >> MSS/RTT
    • 应该尽快加速,到达希望的速率
  • 当连接开始时,指数性增加发送速率,直到发生丢失的事件
    • 启动初值很低
    • 但是速度很快
  • 当连接开始时,指数性增 加(每个RTT)发送速率 直到发生丢失事件
    • 每一个RTT, CongWin加倍
    • 每收到一个ACK时, CongWin加1(相当于每个RTT,CongWin加倍)
    • 慢启动阶段:只要不超时或 3个重复ack,一个RTT, CongWin加倍

在这里插入图片描述

  • 总结:
    • 初始速率很慢,但是加速却是指数性的
    • 指数增加,SS时间很短,长期来看可以忽略

AIMD

  • 乘性减: 丢失事件后将CongWin降为1(ss阶段通常可忽略,故相当于直接减少到 CongWin/2 ),将CongWin/2作为阈值,进入慢启动阶段(倍增直到 CongWin/2)
  • 加性增: 当 CongWin >阈值时,一个 RTT 如没有发生丢失事件,将 CongWin 加1MSS : 探测(也就是主键添加,探测是否到达阈值)

在这里插入图片描述

改进

  • Q:什么时候应该将指数性增长变成线性?
  • A:在超时之前,当CongWin变成上次发生超时的窗口的一半

在这里插入图片描述

实现:

  • 变量:Threshold
  • 出现丢失(超时或者3个ACK),Threshold设置成CongWin的1/2

总结:TCP拥塞控制

  • 当CongWin<Threshold, 发送端处于慢启动阶段( slow-start), 窗口指数性增长.
  • 当CongWin > Threshold, 发送端处于拥塞避免阶段 (congestion-avoidance), 窗口线性增长.
  • 当收到三个重复的ACKs (triple duplicate ACK), Threshold设置成 CongWin/2, CongWin=Threshold+3.
  • 当超时事件发生时timeout, Threshold=CongWin/2 CongWin=1 MSS,进入SS阶段

TCP发送端拥塞控制

事件状态TCP发送端行为解释
以前没有收到ACK的data,被ACKed慢启动(SS)CongWin = CongWin + MSS,If (CongWin > Threshold),状态变成“CA”每一个RTT CongWin 加倍
以前没有收到ACK的data,被ACKed 拥塞避免(CA)CongWin = CongWin+MSS * (MSS/CongWin)线性增加, 每一个RTT对CongWin 加一个1 MSS
通过收到3个重复的ACK,发现丢失的事件SS or CAThreshold = CongWin/2, CongWin = Threshold+3, 状态变成“CA”快速重传, 实现乘性的减,CongWin 没有变成1MSS.
超时SS or CAThreshold = CongWin/2,CongWin = 1 MSS,状态变成“SS”进入slow start
重复的ACKSS or CA对被ACKed 的segment, 增加重复ACK的计数CongWin and Threshold不变

TCP拥塞控制FSM

在这里插入图片描述

TCP吞吐量

TCP的平均吞吐量是多少,使用窗口window尺寸W和RTT来 描述?
(忽略慢启动阶段,假设发送端总有数据传输)

  • W:发生丢失事件时的窗口尺寸(单位:字节)
    • 平均窗口尺寸(#in-flight字节):3/4W
    • 平均吞吐量:一个RTT时间吞吐3/4W, avg TCP thruput = 3/4 * (W/RTT) bytes/sec
      由下图所示,w/2→w所需要的时间是2RTT

在这里插入图片描述

因此 T = (w/2 + w) / (2*RTT) = 3w/4RTT

在这里插入图片描述

TCP 公平性

公平性目标: 如果 K个TCP会话分享一个链路带宽为R的 瓶颈,每一个会话的有效带宽为 R/K

2个竞争的TCP会话:

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

公平性和 UDP

  • 多媒体应用通常不是用 TCP
    • 应用发送的数据速率希望 不受拥塞控制的节制
  • 使用UDP:
    • 音视频应用泵出数据的速率是恒定的, 忽略数据的丢失
      也就是UDP会抢占TCP的资源

公平性和并行TCP连接

  • 2个主机间可以打开多个并行的TCP连接
  • 例如: 带宽为R的链路支持了 9个连接;
    • 如果新的应用要求建1个TCP连接,获得带宽R/10
    • 如果新的应用要求建11个TCP连接,获得带宽R/2

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

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

相关文章

javascript在现实中的应用

JavaScript是一种非常强大的编程语言,在现实世界中有广泛的应用。它最初被设计用于网页交互,但随着时间的发展,其用途已经大大扩展。以下是JavaScript在现实中的一些主要应用: 1. **网页开发**: - **前端开发**: JavaScript是…

Http基础之http协议、无状态协议、状态码、http报文、跨域-cors

Http基础 HTTP基础HTTP协议请求方法持久连接管线化 无状态协议使用Cookie状态管理 状态码1XX2XX OK200 OK204 NO Content206 Content-Range 3XX 重定向301302304307 4XX400401403404 5XX500503 HTTP报文请求报文响应报文通用首部字段Cache-ControlConnectionDate请求首部字段Ac…

智能时代的领航者:人工智能的前沿探索

智能时代的领航者:人工智能的前沿探索 人工智能的定义与发展历程 人工智能(Artificial Intelligence,AI)是指通过模拟、延伸人类智能的理论、方法、技术及应用系统,以实现智能化的机器或软件。人工智能的发展经历了符…

Linux系统中已经可用的重要的网络和故障排除命令

在Linux系统中,网络设置、问题查找和故障修复是系统管理的重要技能,对于开发人员来说,了解Linux故障排除命令对于日常任务十分有帮助。 本文将介绍在Linux系统中已经可用的重要的网络和故障排除命令。 以下是已经存在于Linux机器上的故障排…

2024可以实现月入过万的抖店,适合新手做吗?

我是电商珠珠 过完年了,一些新手都在找项目,觉得自己能做的项目很少。每个人身边或多或少都有做电商的人,都说做电商可以年入百万什么的,于是找到了抖店,但是对于抖店并不了解,不知道抖店适不适合自己。 …

JVM 第四部分—垃圾回收相关概念 2

System.gc() 在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存 然而System.gc()调用附带一个免责声明,无法保证对垃…

博途PLC 面向对象系列之“双通气缸功能块“(SCL代码)

1、面向对象系列之找对象 https://rxxw-control.blog.csdn.net/article/details/136150027https://rxxw-control.blog.csdn.net/article/details/1361500272、博途PLC 面向对象系列之"单通气缸功能块" https://rxxw-control.blog.csdn.net/article/details/1363399…

如何使用pip安装和生成requirements.txt

使用 pip freeze 命令可以列出当前环境中已安装的所有 Python 包及其版本信息,并将其输出保存到 requirements.txt 文件中。可以使用重定向 (>) 将命令的输出写入文件中 pip freeze > requirements.txt使用 pip install 命令可以从 requirements.txt 文件中安…

Spark(1)-wordCount入门

1. 创建Maven项目 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

JavaScript继承 寄生组合式继承 extends

JavaScript继承 1、JS 的继承到底有多少种实现方式呢? 2、ES6 的 extends 关键字是用哪种继承方式实现的呢? 继承种类 原型链继承 function Parent1() {this.name parentlthis.play [1, 2, 3] }function Child1() {this.type child2 }Child1.prototype new Parent1(…

三天学会阿里分布式事务框架Seata-seata事务日志mysql持久化配置

锋哥原创的分布式事务框架Seata视频教程&#xff1a; 实战阿里分布式事务框架Seata视频教程&#xff08;无废话&#xff0c;通俗易懂版&#xff09;_哔哩哔哩_bilibili实战阿里分布式事务框架Seata视频教程&#xff08;无废话&#xff0c;通俗易懂版&#xff09;共计10条视频&…

navicat16

Navicat16: 链接: https://pan.baidu.com/s/1vIfX0qEEL4mhBrsEzD_-lw?pwdy3fi 提取码: y3fi 破解教程视频&#xff1a;2023年Navicat16破解教程(小白教程)_哔哩哔哩_bilibili

1、云原生安全之K8S的部署与常用命令

文章目录 1、常用命令1.1、基本信息查看1.2、日志查看与问题排查1.3、进入pod与pod内部文件导出1.4、环境搭建相关1.5、镜像相关1.6、电脑重启后,重启k8s服务1.7、关于k8s的持久卷二、k8s的部署2.1、配置环境2.1.1、安装所需工具2.1.2、修改主机名2.1.3、编辑hosts2.1.4、其他…

第13集《灵峰宗论导读》

《灵峰宗论》导读。诸位法师&#xff0c;诸位同学&#xff0c;阿弥陀佛&#xff01;&#xff08;阿弥陀佛&#xff01;&#xff09; 请大家打开讲义第38面。 丙三、结示 这一科是《正见篇》的结示。《正见篇》主要的是要引导我们能够正确地观察生命的真相。生命的真相就是说…

【RISC-V 指令集】RISC-V DSP 扩展指令集介绍(二)

前言&#xff1a; 本笔记是基于对RISC-V DSP扩展指令集文档总结的&#xff0c;《P-ext-proposal.pdf》文档的关键内容如下&#xff1a; 主要介绍了RISC-V的P扩展指令集及其相关细节。 首先&#xff0c;对P扩展指令进行了概述&#xff0c;并列出了其与其他扩展重复的指令。 …

Java 的notify 可能导致死锁原因详解

假设有一个共享资源库 ResourcePool&#xff0c;它内部维护了两类资源&#xff1a;ResourceTypeA 和 ResourceTypeB。现在有两个线程 Thread1 和 Thread2&#xff0c;它们都需要从资源库中分别获取一种资源才能继续执行。Thread1 需要 ResourceTypeA 而 Thread2 需要 ResourceT…

上位机图像处理和嵌入式模块部署(当前机器视觉新形态)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 过去的机器视觉处理&#xff0c;大部分都是集中在上位机、或者是服务器领域&#xff0c;这种形式维持了很长的时间。这种业务形态下&#xff0c;无…

windows 11 蓝牙突然消失

解决方法&#xff1a; 1.WinX&#xff0c;点击设备管理器 2.选中蓝牙&#xff0c;右键更新驱动。 3.然后就可以出现了&#xff0c;如下图

Django多个app配置多个域名访问

环境&#xff1a;Python 3.8.1 Django 2.2.12 项目目录结构&#xff1a; CellMiddle -- 项目根目录 ├─task --- 需求系统 │ ├─migrations │ ├─static │ └─templates ├─logs --- 日志目录 ├─doc --- 文档系统 │ ├─data │ ├─migrations │ ├─st…

程序员是如何看待“祖传代码”的?

目录 ​编辑 程序员是如何看待“祖传代码”的&#xff1f; 一、什么是“祖传代码”&#xff1f; 二、“祖传代码”的利弊 1. 可以节省开发成本 2. 可能引入安全隐患 3. 可能增加系统的维护难度 三、祖传代对程序员的影响 1. 丰富程序员的技能和知识 2. 提高程序员的创…