拥塞控制

简介: 拥塞控制

拥塞控制原理(网络的问题)



拥塞:


  • 非正式的定义: “太多的数据需要网络传输,超过了网络的处理能力”
  • 与流量控制不同
  • 拥塞的表现:
  • 分组丢失 (路由器缓冲区溢出)
  • **分组经历比较长的延迟(**在路由器的队列中排队)


拥塞的原因/代价


1. 场景一:


主机A 向 C发送; 主机B向D 发送。都通过一个路由器,路由器的容量(带宽) 是:R (单位: bps)


1691287258953-ae436a3f-a821-4df9-ab57-b06308d7a0a9.png


  • 2个发送端,2个接 收端
  • 一个路由器,具备 无限大的缓冲
  • 输出链路带宽:R
  • 没有重传

1691287269162-92c14de6-95a7-4ba3-96ce-fdb0faa9b34c.png


2. 场景2:


1691287679063-dc258bfb-b79b-485a-89c2-e9faf4839e04.png

  • 一个路由器,有限的缓冲
  • 分组丢失时,发送端重传
  • 应用层的输入=应用层输出:

1691287708969-042e5d15-ccaa-4933-8eed-39b9292b6b18.png


  • 传输层的输入包括重传:


1691287718220-4837f2f6-7824-4bc8-8ee3-47166583103c.png

缓冲区无限和有限的情况下 :

理想化: 发送端有完美的信息 发送端知道什么时候路由器的缓冲是可用的


1691287746988-491cd804-b26c-422d-98e9-c9aa4d239e34.png

1691287875340-656e421f-8feb-49db-8183-3316c3995f0e.png1691287917243-93e4d2b0-faca-4c1c-adbd-fae73064c83c.png


输入输出变了, 但是延迟并没有改变。和场景一中的延迟图是一样的。


1691288810018-bff59a65-2d6d-40de-aac5-eed1e1c520c6.png


现实情况: 重复


  • 分组可能丢失,由于缓冲器 满而被丢弃
  • 发送端最终超时,发送第2 个拷贝,2个分组都被传出

1691288868026-1a371874-d7a2-446d-af33-718365417517.png


输出比输入少原因:1)重传的丢失分组;2) 没有必要重传的重复分组


拥塞的“代价”:


因为有大量的重传, 所以我们并不知道网络中传输的有效数据是多少, 类比平时使用激光枪时应该是指哪打哪, 但是在月球上, 失重之后,为了打中目标,就需要抬高枪口。所以这里我们为了达到有效数据的传输量(理想的蹦出), 但是传输中又有大量的重传数据, 所以就需加大输出的量。


3. 场景3


4个发送端;多重路径;超时重传


1691288981250-561408a2-6af3-42ef-83de-8426307e4d39.png


当lamda in 等都增加时, 所有的蓝色分组都在最上方的队列中丢失,蓝色的吞吐 -> 0


又一个拥塞的代价:


当分组丢失时,任何“关于这个分组的上游传输能力” 都被浪费了


1691289042224-289b0ead-bce0-4cf8-a55a-32498134d316.png


拥塞控制方法


1. 端到端拥塞控制:


  • 没有来自网络的显式反馈(从而端系统决定加大或者降低发送速率)
  • 端系统根据延迟和 丢失事件推断是否 有拥塞
  • TCP采用的方法


2. 网络辅助的拥塞控制:


  • 路由器提供给端系统以 反馈信息


  • 单个bit置位,显示有 拥塞 (SNA, DECbit, TCP/IP ECN, ATM)


显式提供发送端可以 采用的速率


案例: ATM的异步传输网络的 ABR拥塞控制


ABR: available bit rate:


  • 提供的服务是 “弹性服务”
  • 如果发送端的路径“轻载 ”
  • 发送方使用可用带宽
  • 如果发送方的路径拥塞了
  • 发送方限制其发送的 速度到一个最小保障(1兆bps) 速率上


RM (资源管理) 信元: 一个小的分组, 只有53个字节(5个字节的头部,48个字节的数据载荷部分)


信元的范围: bit < 信元 < 分组


  • 信元在每个单位节点中仅仅耽误53个bit , 没有分组的那么大。
  • 由发送端发送,在数据信元中 间隔插入
  • RM信元中的比特被交换机设 置 (“网络辅助”)
  • NI bit: no increase in rate (轻微拥塞)速率不要 增加了 [拥塞就扔 ]
  • CI bit: congestion indication 拥塞指示
  • 发送端发送的RM 信元被接 收端返回, 接收端不做任何 改变


1691290138400-795513b9-0fb7-4bfe-a661-a992d92d2294.png


  • 在RM信元中的2个字节 ER (explicit rate)字段
  • 拥塞的交换机可能会降低信元中ER的值
  • 发送端发送速度因此是最低的可支持速率
  • 数据信元中的EFCI bit: 被拥塞的交换机设置成1
  • 如果在管理信元RM前面的数据信元EFCI被设置成了1, 接收端在 返回的RM信元中设置CI bit


TCP 拥塞控制



端到端的拥塞控制机制

如果每次都反馈相关的信息 ,那么对网络的负担就非常大了


  • 路由器不向主机有关拥塞的反馈信息


• 路由器的负担较轻

• 符合网络核心简单的 TCP/IP架构原则

  • 端系统根据自身得到的信息 ,判断是否发生拥塞,从而 采取动作


拥塞控制的几个问题


  1. 如何检测拥塞 【轻微拥塞 / 拥塞】
  2. 控制的策略是什么?
  3. 在拥塞发送时如何动 作,降低速率 【 在轻微拥塞 / 拥塞 如何降低 ? 】
  4. 在拥塞缓解时如何动 作,增加速率


拥塞感知


发送端如何探测到拥塞?


1.某个段超时了(丢失事件 ):****拥塞

1691291080380-55f11a02-653d-4b91-b2d4-c98157977b8a.png


  • 超时时间到,某个段的确认没有来 (一直重读ACK =3460的确认,只有一个正常,剩下都是冗余)
  • 原因1:网络拥塞(某个路由器缓冲区没空间了,被丢弃)概率大
  • 原因2:出错被丢弃了(各级错误,传输过程中没有通过校验,被丢弃)概率小
  • 一旦超时,就认为拥塞了,有一定误判,但是总体控制方向是对的


1.有关某个段的3次重复ACK:****轻微拥塞


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


速率控制的方法:


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


1691291607738-687cb677-510e-4c20-bc58-3a4658a44416.png


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


CongWin是动态的,是感知到的网络拥塞程度的函数


  • 超时或者3个重复ack,CongWin↓
  • 超时时:CongWin降为1MSS,进入SS阶段然后再倍增到 CongWin/2(每个RTT),从而进入CA阶段 (MSS:最大报文段大小 .**往返延时(RTT)**)
  • 3个重复ack :CongWin降为CongWin/2,CA阶段(CA: 拥塞避免)
  • 否则(正常收到Ack,没有发送以上情况):CongWin跃跃欲试↑
  • SS阶段:加倍增加(每个RTT) (SS: 慢启动)
  • CA阶段:线性增加(每个RTT)


联合控制的方法:


发送端控制发送但是未确认的量同时也不能够超过接收 窗口,满足流量控制要求


  • SendWin=min{CongWin, RecvWin}
  • 同时满足 拥塞控制和流量控制要求


拥塞控制策略:


  • 慢启动
  • AIMD:线性增、乘性减少
  • 超时事件后的保守策略


TCP拥塞控制: 慢启动


1.连接刚建立, CongWin = 1 MSS

  • 如: MSS = 1460bytes & RTT = 200 msec
  • 初始速率 = 58.4kbps

2.可用带宽可能>> MSS/RTT

  • 应该尽快加速,到达希望的 速率

3.当连接开始时,指数性增 加发送速率,直到发生丢 失的事件

  • 启动初值很低
  • 但是速度很快

1691292246501-c4a46d6b-e0d6-4fdb-bc5a-cfc423c3f6e6.png


TCP 拥塞控制:AIMD

乘性减:

丢失事件后将CongWin降为1, 将CongWin/2作为阈值,进 入慢启动阶段(倍增直到 CongWin/2)


加性增:

当CongWin>阈值时,一个 RTT如没有发生丢失事件 ,将CongWin加1MSS: 探 测


1691292328065-4a498608-9ac9-4f77-a8e4-94fb203cbdc3.png


当收到3个重复的ACKs:


  • CongWin 减半
  • 窗口(缓冲区大小)之后 线性增长


当超时事件发生时:


  • CongWin被设置成 1 MSS,进入SS阶段
  • 之后窗口指数增长
  • 增长到一个阈值(上次发 生拥塞的窗口的一半)时 ,再线性增加


3个重复的ACK表示网络 还有一定的段传输能力


超时之前的3个重复的 ACK表示“警报”


TCP 拥塞控制:超时事件后的保守策略

问: 什么时候应该将 指数性增长变成 线性?


答: 在超时之前,当 CongWin变成上 次发生超时的窗口的一半


1691292470656-c78db29b-5097-4cff-b7e2-ea0dbe5cbb04.png


实现:


  • 变量:Threshold
  • 出现丢失,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阶段


1691292690461-c2d4c845-fc6f-48b3-a61d-ec5b01224fe5.png1691293769860-a1112775-9a2d-420e-8d35-6db7ef8546f1.png


TCP吞吐量


TCP的平均吞吐量是多少,使用窗口window尺寸W和RTT来 描述?


忽略慢启动阶段,假设发送端总有数据传输


W:发生丢失事件时的窗口尺寸(单位:字节)


  • 平均窗口尺寸(#in-flight字节):3/4W
  • 平均吞吐量:RTT时间吞吐3/4W

1691293829136-f323f59b-1c56-4833-bbdb-2135e1422731.png


TCP的公平性


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

1691294032349-9b243e5e-bb25-44fc-a0f9-f8ac6dc688c8.png


为什么TCP是公平的 ?


2个竞争的TCP会话:


  • 加性增加,斜率为1, 吞吐量增加
  • 乘性减,吞吐量比例减少

1691294103411-1b96cb60-6c3a-4dfb-aec6-d0eb2bc31db5.png


公平性和 UDP


  • 多媒体应用通常不是用 TCP
  • 应用发送的数据速率希望 不受拥塞控制的节制
  • 使用UDP:
  • 音视频应用泵出数据的速 率是恒定的, 忽略数据的 丢失
  • 研究领域: TCP 友好性


公平性和并行TCP连接


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


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6天前
|
缓存 网络协议 算法
【计算机网络-传输层】TCP可靠传输、TCP流量控制、拥塞控制
【计算机网络-传输层】TCP可靠传输、TCP流量控制、拥塞控制
|
6天前
|
网络协议 算法 网络性能优化
TCP滑动窗口、流量控制及拥塞控制详解
TCP滑动窗口、流量控制及拥塞控制详解
|
5天前
|
缓存 人工智能 算法
TCP的滑动窗口和拥塞控制
TCP的滑动窗口和拥塞控制
14 0
|
6天前
|
网络协议 算法 网络性能优化
TCP 重传、滑动窗口、流量控制、拥塞控制
TCP 重传、滑动窗口、流量控制、拥塞控制
|
6天前
|
网络协议 算法 网络性能优化
|
6天前
|
缓存 网络协议 算法
【传输层】TCP、三次握手、四次挥手、可靠传输、TCP拥塞控制、慢开始、拥塞避免、快重传、快恢复
【传输层】TCP、三次握手、四次挥手、可靠传输、TCP拥塞控制、慢开始、拥塞避免、快重传、快恢复
66 0
|
6月前
|
消息中间件 缓存 网络协议
TCP协议的秘密武器:流量控制与拥塞控制
本文将深入探讨TCP协议的关键机制,包括流量控制和拥塞控制,以解密其在网络数据传输中的作用。通过了解TCP协议的工作原理,我们可以更好地理解网络通信的稳定性和可靠性,为我们的网络体验提供更安全、高效的保障。无论您是网络爱好者、技术从业者还是普通用户,本文将为您揭开TCP协议的神秘面纱,带您进入网络传输的奇妙世界。
110 0
TCP协议的秘密武器:流量控制与拥塞控制
|
6月前
|
缓存 网络协议 算法
图解TCP、UDP,流量控制,拥塞控制,一次看懂
图解TCP、UDP,流量控制,拥塞控制,一次看懂
|
算法 网络协议 中间件
TCP 拥塞控制算法
最近花了些时间在学习TCP/IP协议上,首要原因是由于本人长期以来对TCP/IP的认识就只限于三次握手四次分手上,所以希望深入了解一下。再者,TCP/IP和Linux系统层级的很多设计都可以用于中间件系统架构上,比如说TCP 拥塞控制算法也可以用于以响应时间来限流的中间件。更深一层,像TCP/IP协议这种基础知识和原理性的技术,都是经过长时间的考验的,都是前人智慧的结晶,可以给大家很多启示和帮助。
TCP 拥塞控制算法
|
缓存 网络协议 算法
四十一、TCP可靠传输、流量控制、拥塞控制
四十一、TCP可靠传输、流量控制、拥塞控制
四十一、TCP可靠传输、流量控制、拥塞控制