计算机网络——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.hqwc.cn/news/503611.html

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

相关文章

Java中封装的解析

在 Java 中,封装是一种将类的内部实现细节隐藏起来,只向外部暴露必要的接口的机制。这样可以提高代码的安全性、可维护性和可重用性。 封装的主要目的是保护类的内部状态不被外部直接访问,同时提供公共的方法来操作这些状态。通过封装&#…

【airtest】自动化入门教程(三)Poco操作

目录 一、准备工作 1、创建一个pthon脚本 2、光标位置 2、选择Android 3、选择yes 二、定位元素 三、poco基于设备/屏幕 方式 1、poco.click( (x,y))基于屏幕点击相对坐标为x,y的位置 2、poco.get_screen_size() 3、poco.swipe(v1,v2)基于屏幕从v1位置滑到…

物联网与智慧城市:科技驱动下的城市智能化升级之路

一、引言 随着科技的不断进步和城市化进程的加速,物联网与智慧城市的结合已经成为推动城市智能化升级的关键力量。物联网技术以其强大的连接和数据处理能力,为智慧城市的建设提供了无限可能。本文旨在探讨物联网如何助力智慧城市的构建,以及…

midjourney提示词语法

更高级的提示可以包括一个或多个图像URL、多个文本短语和一个或更多个参数 Image Prompts 可以将图像URL添加到提示中,以影响最终结果的样式和内容。图像URL总是位于提示的前面。 https://docs.midjourney.com/image-prompts Text Prompt 要生成的图像的文本描述。…

什么是Vue组件?如何在Vue中定义一个组件?

在前端开发中,Vue.js是一种流行的JavaScript框架,用于构建交互式的Web界面。Vue组件是Vue.js中非常重要的概念,它允许我们将UI划分为可重用、独立和功能性的代码块。在Vue.js中,每个组件都有自己的HTML模板、JavaScript逻辑和CSS样…

C++_map与set

目录 一、set 1、set的用法 2、multiset 二、map 1、map的用法 2、map的operator[] 3、multimap 结语 前言: C中的map和set容器属于关联式容器,与序列式容器不同的地方在于(序列式容器即vector、list,其底层是由线性数据…

国际光伏展

国际光伏展即国际光伏产业展览会,是全球范围内最具规模和影响力的光伏产业展览会之一。光伏展是一个专门展示和推广光伏技术和产品的平台,汇聚了全球各类光伏企业、研究机构和专家学者,是光伏行业交流、合作和发展的重要场所。 国际光伏展通常…

java中开源json处理库介绍

在Java生态系统中,有几个常用的开源库用于处理JSON数据。这些库各有特点,适用于不同的场景。下面我将介绍几个流行的Java JSON处理库,包括它们的基本情况、主要特点和核心API。 Jackson 基本情况 Jackson是一个流行的Java库&…

Tomcat服务部署、优化

一 Tomcat的基本介绍 Tomcat概念 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。 当在一台机器上配置好Apache 服务器…

uniApp 调整小程序 单个/全部界面横屏展示效果

我们打开uni项目 小程序端运行 默认是竖着的一个效果 我们打开项目的 pages.json 给需要横屏的界面 的 style 属性 加上 "mp-weixin": {"pageOrientation": "landscape" }界面就横屏了 如果是要所有界面都横屏的话 就直接在pages.json 的 gl…

FlinkSQL ChangeLog

01 Changelog相关优化规则 0101 运行upsert-kafka作业 登录sql-client,创建一个upsert-kafka的sql作业(注意,这里发送给kafka的消息必须带key,普通只有value的消息无法解析,这里的key即是主键的值) CREA…

python3.x的在线与离线安装纯净版

由于计划搭建一套使用python自动分析日志的流程,发现我们的测试环境CentOS 7仍然没有安装python3,无法使用这些新的库。Python 3在设计上着重提升了语言的一致性和易用性,它引入了许多关键改进,此外,Python 3环境拥有丰…