本篇主要基于Low的文章[1]。
符号 | 含义 |
---|---|
w s ( t ) w_s(t) ws(t) | 拥塞窗口 |
α s \alpha_s αs | vegas的窗口改变阈值 |
d s ( t ) d_s(t) ds(t) | 发送端采集到的最小rtt |
D s ( t ) D_s(t) Ds(t) | 当前的rtt |
x s ( t ) x_s(t) xs(t) | 发送速率, x s ( t ) = w s ( t ) D s ( t ) x_s(t)=\frac{w_s(t)}{D_s(t)} xs(t)=Ds(t)ws(t) |
vegas的窗口调节遵循的规则,就是在阈值
α
s
\alpha_s
αs之下,每个rtt,窗口增加1,大于阈值,每个rtt,窗口减少1。
w
s
(
t
+
1
)
=
{
w
s
(
t
)
+
1
D
s
(
t
)
,
i
f
w
s
(
t
)
d
s
(
t
)
−
w
s
(
t
)
D
s
(
t
)
<
α
s
w
s
(
t
)
−
1
D
s
(
t
)
,
i
f
w
s
(
t
)
d
s
(
t
)
−
w
s
(
t
)
D
s
(
t
)
>
α
s
w
s
(
t
)
.
e
l
s
e
(1)
\begin{equation} w_s(t+1)= \left\{ \begin{array}{lr} w_s(t)+\frac{1}{D_s(t)}, &if \frac{w_s(t)}{d_s(t)}-\frac{w_s(t)}{D_s(t)}<\alpha_s \\ w_s(t)-\frac{1}{D_s(t)}, & if \frac{w_s(t)}{d_s(t)}-\frac{w_s(t)}{D_s(t)}>\alpha_s\\ w_s(t).&else \end{array} \right. \end{equation} \tag{1}
ws(t+1)=⎩
⎨
⎧ws(t)+Ds(t)1,ws(t)−Ds(t)1,ws(t).ifds(t)ws(t)−Ds(t)ws(t)<αsifds(t)ws(t)−Ds(t)ws(t)>αselse(1)
假设一条链路(链路的带宽处理能力
c
c
c),被一条数据流独占。当数据流的发送速率大于瓶颈链路速率时,链路中出现排队现象[2] (关于发送速率的不变,并不准确,应该分开阐述,增加的是发送的窗口,链路的处理速率与ack的返回速率相同,x_s(t)的计算应该就是根据ack的返回情况计算的)。窗口的增大,以时延的增大为代价.但是链路的吞吐率没有发生变化。
设
q
s
(
t
)
=
D
s
(
t
)
−
d
s
(
t
)
q_s(t)=D_s(t)-d_s(t)
qs(t)=Ds(t)−ds(t):
d
i
f
f
=
w
s
(
t
)
d
s
(
t
)
−
w
s
(
t
)
D
s
(
t
)
=
x
s
(
t
)
D
s
(
t
)
−
d
s
(
t
)
d
s
(
t
)
(2)
diff=\frac{w_s(t)}{d_s(t)}-\frac{w_s(t)}{D_s(t)}=x_s(t)\frac{D_s(t)-d_s(t)}{d_s(t)}\tag{2}
diff=ds(t)ws(t)−Ds(t)ws(t)=xs(t)ds(t)Ds(t)−ds(t)(2)
x
s
(
t
)
=
d
i
f
f
∗
d
s
(
t
)
q
s
(
t
)
(3)
x_s(t)=\frac{diff*d_s(t)}{q_s(t)}\tag{3}
xs(t)=qs(t)diff∗ds(t)(3)
D
s
(
t
)
=
d
i
f
f
∗
d
s
(
t
)
x
s
(
t
)
+
d
s
(
t
)
(4)
D_s(t)=\frac{diff*d_s(t)}{x_s(t)}+d_s(t)\tag{4}
Ds(t)=xs(t)diff∗ds(t)+ds(t)(4)
w
s
(
t
)
=
D
s
(
t
)
x
s
(
t
)
=
d
i
f
f
∗
d
s
(
t
)
+
x
s
(
t
)
d
s
(
t
)
=
d
i
f
f
∗
d
s
(
t
)
+
c
∗
d
s
(
t
)
(5)
w_s(t)=D_s(t)x_s(t)=diff*d_s(t)+x_s(t)d_s(t)=diff*d_s(t)+c*d_s(t)\tag{5}
ws(t)=Ds(t)xs(t)=diff∗ds(t)+xs(t)ds(t)=diff∗ds(t)+c∗ds(t)(5)
根据(5)可以看出,当
d
i
f
f
<
α
diff<\alpha
diff<α,增加发送窗口,就是要增加相应的
d
i
f
f
diff
diff值。So the equilibrium point of
d
i
f
f
diff
diff is
α
s
\alpha_s
αs. And the equilibrium rate
x
s
(
t
)
=
α
s
∗
d
s
(
t
)
q
s
(
t
)
x_s(t)=\frac{\alpha_s*d_s(t)}{q_s(t)}
xs(t)=qs(t)αs∗ds(t).
q
s
(
t
)
=
α
s
∗
d
s
(
t
)
x
s
(
t
)
(6)
q_s(t)=\frac{\alpha_s*d_s(t)}{x_s(t)}\tag{6}
qs(t)=xs(t)αs∗ds(t)(6)
根据网络效率最大化公式:
U
s
′
(
x
s
)
=
q
s
=
α
s
∗
d
s
(
t
)
x
s
(7)
U'_s(x_s)=q_s=\frac{\alpha_s*d_s(t)}{x_s}\tag{7}
Us′(xs)=qs=xsαs∗ds(t)(7)
链路最小时延
d
s
(
t
)
d_s(t)
ds(t)为固定值。根据(7)求得的效用函数为:
U
s
(
x
s
)
=
α
s
∗
d
s
∗
l
o
g
(
x
s
)
(8)
U_s(x_s)=\alpha_s*d_s*log(x_s)\tag{8}
Us(xs)=αs∗ds∗log(xs)(8)
根据(5),分析下
α
s
\alpha_s
αs决定的窗口变化,争抢的到底是什么资源?窗口有两项组成,
d
i
f
f
∗
d
s
(
t
)
diff*d_s(t)
diff∗ds(t)和
c
∗
d
s
(
t
)
c*d_s(t)
c∗ds(t)。第二项就是链路的时延带宽积,与链路的处理能力适配。vegas还需要额外向链路中注入第一项描述的数据包,占有的就是链路中buffer。
我在ns3仿真平台对vega进行仿真分析,三条数据流,分别在不同时刻向网络中发送数据包。
数据流的goodput变化:
数据流1的单向传输时延:
从吞吐量图片可以看出,vegas有 later comer的效应——晚到的数据流可以获取更高的吞吐量。这是因为不同数据采样到的最小rtt(base_rtt)不同。
做了一些魔改,增加一个事件滤波器,每隔5秒重置base_rtt,看看测试结果:
时延:
改善了公平性,但是时延却不稳定了。
仿真代码[4]。
[1]Low S H, Peterson L L, Wang L. Understanding TCP Vegas: a duality model[J]. Journal of the ACM (JACM), 2002, 49(2): 207-235.
[2]TCP Fluid Model
[3]基于时延的mptcp的拥塞控制
[4] quic-on-ns3