Multipath TCP(MPTCP) Congestion Control抛砖引玉
Posted dog250
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Multipath TCP(MPTCP) Congestion Control抛砖引玉相关的知识,希望对你有一定的参考价值。
MPTCP是一个全新的古老协议,从效果上看,它对标准TCP的扩展主要体现在两方面:
- 多路径切换:应用程序无感知的前提下在多条链路之间进行切换。
- 负载均衡:使用多条路径同时传输,提高链路带宽利用率。
似乎人们对多路径切换更感兴趣,几乎所有MPTCP的资料上都会介绍MPTCP在Wi-Fi和3G之间的透明切换能力,但有趣的是,定义MPTCP的RFC6182中(详见Section 2. Goals1)并没有提到这一点,路径备份似乎是一个附加的功能。
从本质(而不是从表面)上看,MPTCP是一个支持流量调度的资源分配协议。MPTCP将同一连接的每条路径上的数据流抽象成subflow,将所有的subflow路径上的带宽看作一个资源池,在该资源池中进行动态流量调度。
池化带宽资源,是分组交换网统计复用的极致体现。引用一段MPTCP网站blog的原话:
Since the early days of computer networks, statistical multiplexing, failure resilience and load balancing have played a key role in enabling networks to carry a growing amount of traffic. However, many of the techniques that are used today were designed under the assumption that they needed to have a local impact. Many of these designs missed the opportunity of considering the problem of pooling all the available resources as an end-to-end problem. 2
对此,先来个感官上的认识。
两条连接A和B,两条100Mbps的路径供它们使用,先看标准TCP的带宽分配情况:
但如果部署了MPTCP,在带宽资源分配上将更具弹性:
面对池化的带宽资源,MPTCP的核心任务就是资源分配和流量调度,目标就是最大化资源利用率。
互联网协议必须遵守公平原则,作为需要长期与标准TCP混部的MPTCP,TCP友好性必须是其一个内在特征,MPTCP必须在保证不损害标准TCP的前提下,最大化带宽资源利用率。这个任务最终由MPTCP Congestion Control负责。
为了理解这一切背后的动力学,先看MPTCP Congestion Control的三大目标:
- 目标1:保证所有subflow总带宽不小于最佳subflow标准TCP带宽。
- 目标2:保证所有subflow任意子集总体带宽不大于该子集最佳subflow标准TCP带宽。
- 目标3:在所有subflow之间进行动态流量调度,保证目标1和目标2的前提下最大化带宽利用率。
下文将基于MPTCP Coupled Congestion Control算法介绍。
将所有可用subflow path视为一整体,统一实施AIMD。设一条MPTCP连接的subflow set为 R R R, w r w_r wr为subflow r r r的cwnd,则:
w t o t a l = Σ r ∈ R w r w_{total}=\\Sigma_{r\\in R}w_r wtotal=Σr∈Rwr
因此,最朴素的MPTCP AIMD算法显而易见,对于所有subflow:
- 未发生丢包时实施AI: w r = w r + 1 w t o t a l w_r=w_r+\\dfrac{1}{w_{total}} wr=wr+wtotal1
- 发生丢包时实施MD: w r = max { 1 , w r − w t o t a l 2 } w_r=\\max\\{1,w_r-\\dfrac{w_{total}}{2}\\} wr=max{1,wr−2wtotal}
丢包包括拥塞丢包和随机丢包,一条subflow subpath丢包率高表现为buffer过小或线路噪声大,无论如何均会导致该subpath的cwnd过小,天然满足了MPTCP的目标3。
总体来讲,目标3只需要利用为拥塞subflow计算一个较小的cwnd即可满足,这是对反馈环的利用。The way to achieve resource pooling is to effectively “couple” the congestion control loops for the different subflows.
但以上算法存在以下问题:
- 每条subflow丢包率差异很大,固定数量的MD行为会将高丢包率subflow饿死。
- 每条subflow的AI行为会抢占标准TCP流量的带宽,违背了公平性原则。
为避免高丢包率subflow被饿死,MD行为需要修正,不再MD等量cwnd,改为MD与该subflow cwnd等比例的cwnd:
- 发生丢包时实施MD:
w
r
=
max
{
1
,
w
r
−
w
r
2
}
w_r=\\max\\{1,w_r-\\dfrac{w_r}{2}\\}
wr=max{1,wr−2wr}
这样可以确保任意subflow cwnd保持一定的比例。
公平性的保证稍微复杂些,需要额外的约束。
将MPTCP的目标1和目标2的约束写成数学形式:
- 目标1约束: Σ r ∈ R w r R T T r ≥ max r ∈ R w r T C P R T T r \\Sigma_{r\\in R}\\dfrac{w_r}{RTT_r}\\geq\\max_{r\\in R}{\\dfrac{w_r^{TCP}}{RTT_r}} Σr∈RRTTrwr≥maxr∈RRTTrwrTCP
- 目标2约束: Σ r ∈ ( S ∣ S ⊆ R ) w r R T T r ≥ max r ∈ ( S ∣ S ⊆ R ) w r T C P R T T r \\Sigma_{r\\in (S|S\\subseteq R)}\\dfrac{w_r}{RTT_r}\\geq\\max_{r\\in (S|S\\subseteq R)}{\\dfrac{w_r^{TCP}}{RTT_r}} Σr∈(S∣S⊆R)RTTrwr≥maxr∈(S∣S⊆R)RTTrwrTCP
解法如下:
- 对于目标1,需要控制AI系数来保证所有 w r w_r wr增量至少达到最佳subpath标准TCP的效果。
- 对于目标2,需要为每次AI行为设置一个上界,保证其不超过标准TCP的对应AI增量。
用数学表述即:
- 未发生丢包时实施AI: w r = w r + min { α w t o t a l , 1 w r } w_r=w_r+\\min \\{\\dfrac{\\alpha}{w_{total}},\\dfrac{1}{w_r}\\} wr=wr+min{wtotalα,wr1}
求解 α \\alpha α即可。
下面将用两种方法推导出 α \\alpha α的值,首先采用MPTCP论文里的方法3,然后介绍我自己的方法。
按照Design, implementation and evaluation of congestion control for multipath TCP这篇论文中的简化模型推导,如下:
设
p
r
p_r
pr为subflow path
r
r
r的丢包率,按照数据包守恒,AI和MD速率需要相互抵消:
( w r R T T r ( 1 − p r ) ) α w t o t a l = ( w r R T T r p r ) w r 2 (\\dfrac{w_r}{RTT_r}(1-p_r))\\dfrac{\\alpha}{w_{total}}=(\\dfrac{w_r}{RTT_r}p_r)\\dfrac{w_r}{2} (RTTrwr(1−pr))wtotalα=(RTTrwrpr)2wr
对于
p
r
p_r
pr< 以上是关于Multipath TCP(MPTCP) Congestion Control抛砖引玉的主要内容,如果未能解决你的问题,请参考以下文章 (OK) 小米8-dipper手机 通过 MPTCP 访问 具有公网 IP 的Fedora 31中的 Nginx服务器 - 成功