文章目录
拥塞控制的方法
网络辅助的拥塞控制
- ATM 网络使用的是弹性服务
- 当没有拥塞的时候使用可用带宽
- 如果出现拥塞,那么限制发送速度降低到最低阈值
- ATM 网络发送的内容包括两个部分:
- data cell (数据信元)
- RM cell (资源管理信元)
- 在数据信元的间隔中发送若干个资源管理信元,如果网络发生轻微的拥塞,那么 交换机 将 RM 信元的 NI bit 位设置为 1,当信息到达目标服务器之后,再返回原服务器,原服务器就可以知道网络发生了轻微的拥塞,而不再增加发送速率
- 而如果发生了严重的拥塞,CI bit 位被置 1 来标志发送端应该降低发送速率
- 除了 NI 和 CI 标志位,还提供一个 ER 标志位,这个标志位可以 在 RM 信元经过交换机的时候获得交换机当前允许的最大带宽,从而在返回发送服务器的时候让发送服务器可以依照网络中交换机当前的状态来调整发送的流量。
- 但是这样的方式提供拥塞控制会导致网络的负担加重
端到端的拥塞控制——TCP 拥塞控制
- 不依赖与网络中心提供的信息和服务
- 只靠延迟和丢失事件来推断网络中是否存在拥塞问题
- 发生在网络的边缘而非网络中心
如何检测拥塞
轻微拥塞
- 有关某个 segment 的 3 次冗余的 ACK,代表可能发生了轻微的拥塞
拥塞
- 超时(丢失事件):某些 segment 的分组由于缓冲区用完而被抛弃掉,或者是传输过程中 segment 收到某些干扰发生了错误,而在接收方未通过校验发生错误,这两种都会导致接收方发生超时,这时候,发送方可以假定拥塞发生
控制策略
- 发送端已发送但是未确认的数据量的上限是 CongWin
- 以此限制发送方往网络中注入数据的速率是
r
a
t
e
≈
C
o
n
g
W
i
n
R
T
T
rate\approx \frac{CongWin}{RTT}
rate≈RTTCongWin RTT 是往返延迟
轻微拥塞
- 3 个冗余 ACK:CongWin 降低为 CongWin / 2, CA 阶段
拥塞
- 超时的时候,CongWin 降为1MSS,进入 SS 阶段,然后再倍增到 CongWin/2 (每个 RTT),从而进入 CA 阶段
SS 阶段:加倍增加的阶段(每个 RTT)——慢启动阶段
CA 阶段:线性增加的阶段(每个 RTT)——拥塞避免阶段
流量控制 & 拥塞控制
- TCP 做流量控制和拥塞控制是一体化处理的
TCP 慢启动 + 拥塞避免
-
连接刚建立,CongWin = 1MSS
-
然后在后面没经过一个 RTT 都将传输的段的数量翻倍,直到发生了超时(重度拥塞)或者3个ack(轻度拥塞)
-
如果在 8个 MSS 翻倍成 16 个 MSS 的时候发生了超时,表示 8 MSS 是个警戒值,那么在下一个 RTT 的时候 MSS 又会降为 1 然后随着 RTT 指数增加到 8,如果到 8 依然没事,那么就转为 CA 线性增长试探(因为 8 是上一次超时的警戒值);这时候随着 RTT, MSS 的值逐步为 9, 10, 11, 12 的线性增长。如果这种情况在 10个 MSS 的位置又发生了超时,那么下一次依然从 1MSS 开始,只不过现在的警戒值变成了 5,并在到达 5 之后线性增长。
-
如果 MSS 在 8,9,10 线性增长的时候在 10 的位置发生了 3个冗余 ACK 标志 的轻微拥塞,那么处理方式就不同了,发送方不会在下一个 RTT 中从 0 开始,而是直接减半发送速率,然后进入 CA 阶段,即比 超时的时候少了一个 慢启动阶段
-
总结一下就是:
- 如果发生了超时(重度拥塞),那么下一个 RTT 将会重新进入慢启动,并且到达警戒值后采取 MSS 线性增长的方式增加发送速率
- 如果发生了 3 次冗余 ACK(轻度拥塞),那么下一个 RTT 将会直接从发生拥塞的 MSS 的一般速率开始线性增长,省去了一个慢启动阶段
-
线性增加 & 乘性减:CA 阶段是线性增加,当发生拥塞,就会断崖式(乘性)减少到 0 或者 一半 的发送速率
TCP 拥塞控制总结
CongWin = Threshold + 3 这里的 3 是 3 个冗余的 ACK
平均吞吐量
T = W 2 + W 2 R T T = 3 W 4 R T T T = \frac{\frac{W}{2}+W}{2RTT}=\frac{3W}{4RTT} T=2RTT2W+W=4RTT3W
- 其中 W 代表在未经接收方确认的情况下,发送方能够发送的最大的字节数量(拥塞窗口值),那么拥塞控制的动作会导致这个值在 W 2 \frac{W}{2} 2W 到 W W W 之间变化,因此平均值是 W 2 + W 2 \frac{\frac{W}{2}+W}{2} 22W+W,因此除以 RTT 之后得到的就是平均的吞吐量
因为 SS 慢启动阶段的速度非常快,这段时间可以忽略不计