精神空虚的时候,就把自己学习的到东西记下来,这样可以安慰内心,日无所废。枯燥而无创造的生活,让我拿什么自慰?
照例,博客是对[1]的解读,代码实现在[2]。TCP-LP的主要思想和LEDBAT[3]相似,将自身流量摆到一个较低的位置,链路中存在带宽就主动占用,当估计链路要接近拥塞的时候,主动向TCP出让带宽。这样的拥塞控制机制,使得TCP-LP适合文件资源的传输。这种比基于丢包的拥塞控制机制提前感知网络拥塞状况的算法,一般都是基于网络时延的。
d
m
i
n
d_{min}
dmin,
d
m
a
x
d_{max}
dmax,分别是网络数据包经历的最小与最大单向时延。
d
m
a
x
−
d
m
i
n
d_{max}-d_{min}
dmax−dmin反应的就是网络中的排队时延变化情况。TCP中有个选项,可以数据包打上发送时的时戳。
网络中的控制信号为
s
d
i
sd_i
sdi,根据采集到的单向时延进行平滑计算:
KaTeX parse error: \tag works only in display equations
若
s
d
i
sd_i
sdi满足下式,则将发送窗口降低一半。
KaTeX parse error: \tag works only in display equations
下面,证明,TCP-LP能够提早感知网络拥塞,及时出让带宽。假设一条瓶颈链路上存在TCP、TCP-LP流。瓶颈链路的容量为
C
C
C,链路中存在的缓冲区大小为
Q
Q
Q。两条数据流的rtt分别为
r
t
t
h
,
r
t
t
l
rtt_{h},rtt_{l}
rtth,rttl。h、l表示高低优先级。TCP和TCP-LP感知网络拥塞的时刻分别为
t
h
,
t
l
t_h,t_l
th,tl。假设0时刻两条数据流的发送带宽和达到
C
C
C。每个rtt,两条数据流的窗口变化为分别增加
α
h
,
α
l
\alpha_{h},\alpha_{l}
αh,αl,就是在拥塞避免阶段,窗口大小随时间线性变化。根据TCP fluid model[4],队列长度的导数满足
Q
˙
(
t
)
=
∑
x
i
(
t
)
−
C
\dot Q(t)=\sum{x_i(t)}-C
Q˙(t)=∑xi(t)−C。
KaTeX parse error: \tag works only in display equations
可以求得:
t
l
=
2
Q
δ
/
(
α
l
/
r
t
t
l
+
α
h
/
r
t
t
h
)
t_l=\sqrt{2Q\delta/(\alpha_{l}/rtt_{l}+\alpha_{h}/rtt_{h})}
tl=2Qδ/(αl/rttl+αh/rtth),其中
δ
\delta
δ反映的就是瓶颈链路目前的buffer占用情况,原理可以类比[5]。同理可以求得,
t
h
=
2
Q
/
(
α
l
/
r
t
t
l
+
α
h
/
r
t
t
h
)
t_h=\sqrt{2Q/(\alpha_{l}/rtt_{l}+\alpha_{h}/rtt_{h})}
th=2Q/(αl/rttl+αh/rtth)。
TCP-LP提前响应链路拥塞,需要满足,
t
l
+
r
t
t
l
<
t
h
t_l+rtt_l<t_h
tl+rttl<th。之后的论文就是推算,怎么选取相应的阈值。
在文章[6],我对TCP-LP在ns3平台上进行了仿真分析。代码开源。
[1]TCP-LP: Low-Priority Service via End-Point Congestion Control(2006-ton)
[2]TCP-LP module for Linux 2.6.x
[3]基于UDP拥塞控制-LEDBAT
[4]TCP Fluid Model
[5]tcp拥塞控制vegas的数学分析
[6] TCP-LP 仿真分析