计算机网络笔记No.14

拥塞控制原理

  • 拥塞(Congestion)
    非正式定义:太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理
    表现:分组丢失(路由器缓存溢出);分组延迟过大(在路由器缓存中排队)

拥塞的成因和代价:场景1
两个senders;两个receivers; 一个路由器,无限缓存,没有重传
计算机网络笔记No.14
吞吐量、延迟与发送接收的关系:
计算机网络笔记No.14

拥塞的成因和代价:场景2
两个senders;两个receivers;一个路由器, 有限缓存;Sender重传分组

计算机网络笔记No.14
情况a: Sender能够通过某种机制获知路由器buffer信息,有空闲才发 (goodput)
情况b: 丢失后才重发:λinout
情况c:分组丢失和定时器超时后都重发,λin 变得更大
计算机网络笔记No.14

  • 拥塞的代价:
  1. 对给定的”goodput”,要做更多的工作 (重传)
  2. 造成资源的浪费

拥塞的成因和代价:场景3
四个发送方;多跳;超时/重传
计算机网络笔记No.14
计算机网络笔记No.14

  • 拥塞的另一个代价: 当分组被drop时,任何用于该分组的“上游”传输能力全都被浪费掉

拥塞控制的方法

  1. 端到端拥塞控制:(TCP采取这种方法)

    • 网络层不需要显式的提供支持
    • 端系统通过观察loss,delay等网络行为判断是否发生拥塞
  2. 网络辅助的拥塞控制:

    • 路由器向发送方显式地反馈网络拥塞信息
    • 简单的拥塞指示(1bit):SNA, DECbit, TCP/IP ECN, ATM)
    • 指示发送方应该采取何种速率

案例:ATM ABR拥塞控制计算机网络笔记No.14
计算机网络笔记No.14

TCP拥塞控制

TCP拥塞控制的基本原理:

  1. Sender限制发送速率(LastByteSent - LastByteAcked<= CongWin
    计算机网络笔记No.14
    CongWin:动态调整以改变发送速率;反映所感知到的网络拥塞

  2. 感知网络拥塞

    • Loss事件 = timeout 或3个重复ACK
    • 发生loss事件后,发送方降低速率
  3. 合理地调整发送速率:加性增—乘性减:AIMD;慢启动:SS

  • 加性增—乘性减: AIMD
    原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss
    加性增Additive Increase::每个RTT将CongWin增大一个MSS——拥塞避免
    乘性减Multiplicative Decrease: 发生loss后将CongWin减半

计算机网络笔记No.14

  • TCP慢启动: SS
    原理:当连接开始时,指数性增长
    TCP连接建立时,令CongWin=1;可用带宽可能远远高于初始速率——希望快速增长

    指数性增长:

    • 每个RTT将CongWin翻倍
    • 初始速率很慢,但是快速攀升
      计算机网络笔记No.14
      Threshold变量
      何时应该指数性增长切换为线性增长 —— 当CongWin达到Loss事件前值的1/2时
      计算机网络笔记No.14
      Loss事件发生时, Threshold 被设为Loss事件前CongWin 值的1/2
  • Loss事件的处理:

    1. 3个重复ACKs:CongWin切到一半,然后线性增长
    2. Timeout事件:CongWin直接设为1个MSS,然后指数增长,达到threshold后, 再线性增长

3个重复ACKs表示网络还能够传输一些 segments;timeout事件表明拥塞更为严重

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

解:
threshold=16/2=8 KB, CongWin=1 KB;
1个RTT后, CongWin=2 KB ,2 个RTT后, CongWin=4 KB ,3个RTT后, CongWin=8 KB
Slowstart is over;
4个RTT后, CongWin=9 KB

TCP性能分析

  • 给定拥塞窗口大小和RTT,忽略掉Slow start吗,TCP的平均吞吐率是多少?
  1. 假定发生超时时CongWin的大小为W,吞吐率是W/RTT
  2. 超时后,CongWin=W/2,吞吐率是W/2RTT
  3. 平均吞吐率为:0.75W/RTT

举例:每个Segment有1500个byte, RTT是100ms,希望获得10Gbps的吞吐率,那么:
throughput = W * MSS * 8/RTT,
则W=throughput * RTT / (MSS * 8)
throughput=10Gbps,
则W=83333

  • 吞吐率与丢包率(loss rate, L)的关系
    CongWin从W/2增加至W时出现第一个丢包,那么一共发送的分组数为
    • W/2+(W/2+1)+(W/2+2)+….+W = 3W2/8+3W/4
      W很大时,3W2/8>>3W/4,因此L ≈ 8/(3W2)
      计算机网络笔记No.14

L = 2 * 10-10,丢包率太低对网络要求太高:高速网络下需要设计新的TCP

  • TCP的公平性
    如果K个TCP Session共享相同的瓶颈带宽R,那么每个Session的平均速率为R/K
    TCP具有公平性:

计算机网络笔记No.14
但是:
计算机网络笔记No.14
————————————————————————————————————————————————————————

由于水平有限及时间仓促或疏忽大意以及其他的一些原因,文中难免会存在一些错误,如若有发现不正确的地方,还请大佬们评论或私信告之于我,以便及时纠错