夏雨峰,占 敖,吳呈瑜,王 卉
(浙江理工大學(xué) 信息學(xué)院, 杭州 浙江 310018)
媒體服務(wù)的爆炸式增長(例如,視頻會議、網(wǎng)絡(luò)直播、在線游戲等)給單一鏈路傳輸方式帶來較大的負(fù)擔(dān)[1],標(biāo)準(zhǔn)的TCP協(xié)議在傳輸過程中只允許單一鏈路進(jìn)行數(shù)據(jù)傳輸,無法滿足大帶寬傳輸要求。隨著網(wǎng)絡(luò)基礎(chǔ)設(shè)施的日益完善和移動設(shè)備的進(jìn)步,移動端設(shè)備配備多個網(wǎng)絡(luò)接口的多模終端可以隨時隨地接入無線局域網(wǎng)(802.11)、蜂窩網(wǎng)絡(luò)(LTE)、WiFi等網(wǎng)絡(luò),從而使得移動終端同時接入多個網(wǎng)絡(luò)成為可能。現(xiàn)有的蘋果的IOS[2]和三星的Galaxy[3]已經(jīng)實現(xiàn)多路網(wǎng)絡(luò)的同時接入。多互聯(lián)網(wǎng)工程任務(wù)組(IETF)也提出了MPTCP[4]和基于流控制傳輸協(xié)議(Stream Control Transmission Protocol,SCTP)[5],與SCTP相比,MPTCP是基于TCP的多路復(fù)用協(xié)議, MPTCP將TCP/IP協(xié)議模型中的傳輸層擴(kuò)展為支持多路徑傳輸?shù)腗PTCP 傳輸層,將傳統(tǒng)的TCP鏈路拓展為多個TCP子流并行鏈路,數(shù)據(jù)通過調(diào)度算法在不同的子流上傳輸,并且與傳統(tǒng)的TCP協(xié)議后向兼容而易于實現(xiàn)[6]。
MPTCP中的擁塞控制一直是該領(lǐng)域的研究熱點,Uncoupled TCP算法使用TCP經(jīng)典的擁塞控制算法Reno,是簡單的MPTCP擁塞控制算法[7],子流擁有獨立的擁塞控制過程,子流間存在較大的侵略性。為更加有效地利用網(wǎng)絡(luò)資源,文獻(xiàn)[8]提出基于瓶頸公平性的擁塞控制 (Shared Bottleneck Congestion Control,SB-CC)算法,根據(jù)顯式擁塞通知(Explicit Congestion Notification,ECN)機(jī)制將不同子流劃分到不同瓶頸集合,在瓶頸集合內(nèi)部實現(xiàn)基于子流的耦合擁塞控制,彈性地調(diào)整擁塞窗口的增大和減小。文獻(xiàn)[9]改進(jìn)的D-OLIA(Distinguish packet loss-OLIA)算法,根據(jù)時延抖動和擁塞抖動判斷丟包類型,滿足公平性并提升鏈路的吞吐量。文獻(xiàn)[10-13]是Westwood算法以及改進(jìn)的帶寬估計算法,存在帶寬估計波動較大、估計值為樣本的算數(shù)帶寬以及過高估計等問題。為解決MPTCP協(xié)議建立多路徑子流進(jìn)行數(shù)據(jù)傳輸時,子流在瓶頸處存在的公平性問題、擁塞控制算法中帶寬估計值的抖動性以及與實際鏈路帶寬值偏差較大的問題,本文提出一種基于MPTCP耦合的自適應(yīng)帶寬估計算法(ABEC-MPTCP),在滿足子流瓶頸處公平性的前提下,進(jìn)一步提高帶寬估計的準(zhǔn)確性,從而使鏈路獲得更高的吞吐量。
圖1為多路徑傳輸協(xié)議的系統(tǒng)模型,發(fā)送端和接收端都采用MPTCP,支持多路徑并行傳輸。多路徑傳輸中各個子流的連接采用標(biāo)準(zhǔn)TCP會話來提供底層傳輸,將傳統(tǒng)的數(shù)據(jù)傳輸層分解成MPTCP和TCP兩部分。為了區(qū)別于總體多路徑傳輸協(xié)議,分層的TCP子流作為MPTCP擴(kuò)展,實現(xiàn)了路徑管理、數(shù)據(jù)調(diào)度、子流接口和擁塞控制等功能。TCP子流與傳統(tǒng)的TCP一樣提供可靠的連接與數(shù)據(jù)傳輸,MPTCP源地址與目的地址建立類似于常規(guī)的TCP連接,在報文中添加了支持MPTCP協(xié)議(MP_CAPABLE)、添加子流(MP_JOIN)、數(shù)據(jù)序列號映射等選項。在建立子流連接時攜帶MP_CAPABLE包用來確認(rèn)雙方是否支持MPTCP傳輸,在添加子流時傳輸攜帶MP_JOIN數(shù)據(jù)包增加新的子流。子類型添加數(shù)據(jù)序列映射,通過數(shù)據(jù)調(diào)度將映射數(shù)據(jù)序列分配到子流發(fā)送的緩沖區(qū),根據(jù)接收端的反饋信息(RTT(Round-Trip Time)、鏈路丟包率等)對各個子流擁塞狀況進(jìn)行控制。接收端將多路徑傳輸?shù)臄?shù)據(jù)包根據(jù)雙序列號(即子流序列號和數(shù)據(jù)序列號)進(jìn)行數(shù)據(jù)聚合重組。另外,根據(jù)MPTCP擁塞控制的標(biāo)準(zhǔn)提出多路徑傳輸中擁塞控制的3個目標(biāo)[14]:
① 高性能原則:多路徑傳輸流的吞吐量至少要比單路徑傳輸最優(yōu)時的吞吐量大;
② 公平性原則:多路徑子流不應(yīng)與其他路徑共享資源中占用比單路徑時更多的容量;
③ 負(fù)載均衡原則:在滿足前兩個目標(biāo)的前提下,應(yīng)盡可能地將流量移出最擁擠的路徑。
目前大多數(shù)MPTCP擁塞控制算法中每個子流的擁塞控制都是相互獨立的,當(dāng)子流i處于擁塞避免階段接收到一個ACK應(yīng)答包時,擁塞窗口的增量為:
Δw=1/wi。
(1)
圖1 MPTCP系統(tǒng)模型Fig.1 MPTCP system model
當(dāng)MPTCP的n個子流于TCP連接共享瓶頸鏈路時,MPTCP連接的攻擊性將是TCP連接的n倍,此時并不能滿足MPTCP擁塞控制中公平性的要求。當(dāng)子流i上出現(xiàn)數(shù)據(jù)包丟失時,表示當(dāng)前鏈路發(fā)生擁塞,擁塞窗口減少為:
Δw=wi/2。
(2)
鏈路發(fā)生丟包時如果擁塞窗口盲目減半,會犧牲網(wǎng)絡(luò)的帶寬利用率或過早地使網(wǎng)絡(luò)進(jìn)入擁塞狀態(tài),甚至可能導(dǎo)致鏈路的性能差于單路徑傳輸?shù)男阅?。而傳統(tǒng)的Westwood擁塞控制算法的帶寬估計計算公式為:
(3)
式中,α取值為19/21,Bw[k]為帶寬估計值,Bw[k-1]為上一時刻的帶寬估計值,acked為接收的數(shù)據(jù)量。采用固定極點的濾波器來處理帶寬樣本,不能提供一個有偏估計值,樣本的算數(shù)帶寬不等于平均帶寬。為滿足MPTCP擁塞設(shè)計高性能的要求,擁塞窗口的更新機(jī)制需要進(jìn)行改進(jìn)。為滿足公平性和高性能的要求,本文提出耦合的自適應(yīng)帶寬估計算法。
在設(shè)計擁塞控制方案時首先要考慮MPTCP子流的侵略性,盡可能保證在瓶頸處的公平性[15]。當(dāng)鏈路處于擁塞避免狀態(tài),非耦合鏈路的子流擁塞窗口的增量為1/wi。耦合算法設(shè)wi為子流i上的擁塞窗口,segmenti為子流i上收到字節(jié)數(shù),MSSi為最大報文段長度,wtot為鏈路連接中所有子流擁塞窗口之和,則耦合鏈路的子流擁塞窗口增量為:
(4)
式中,α是用來控制MPTCP子流對TCP流侵略性的常量因子,定義為:
(5)
Westwood是修改發(fā)送端擁塞窗口的算法[16-17],通過檢測接收端返回的ACK速率,單位時間接收到的數(shù)據(jù)包數(shù)目與數(shù)據(jù)包的長度乘積與時間間隔相除的值,經(jīng)過低通濾波器平滑樣本序列獲得更加精確的結(jié)果,作為對該鏈路的帶寬估計值。該算法主要是用于鏈路發(fā)生擁塞或者丟包后利用估計的帶寬值Bw設(shè)置慢啟動閾值Ssthresh和擁塞窗口Cwnd,避免在擁塞或丟包發(fā)生時盲目的減半發(fā)送速率。本文算法是在無線網(wǎng)絡(luò)擁塞控制算法Westeood基礎(chǔ)上,對帶寬估計進(jìn)行改進(jìn),采用耦合子流帶寬的自適應(yīng)估計。
算法的流程如圖2所示,收到ACK數(shù)據(jù)包后鏈路建立連接,當(dāng)Ssthresh≥Cwnd時,則擁塞控制方案進(jìn)入慢啟動階段;當(dāng)Ssthresh 圖2 算法流程圖Fig.2 Algorithm flow chart 時間間隔的自適應(yīng)帶寬估計算法采用大于一個往返時間的T時間間隔,消除鏈路往返時間差異帶來的鏈路抖動。算法模型如圖3所示,設(shè)在T時間間隔內(nèi)收到n個數(shù)據(jù)包(L1,L2,…,L3),則T時刻內(nèi)的平均帶寬表示為: (6) 圖3 算法基礎(chǔ)模型Fig.3 Basic model of algorithm 為避免一個往返時間間隔接近于0時對帶寬估計偏差較大的影響,采用大于一個往返時間的間隔來估計平均發(fā)送時間,帶寬估計算法的偽代碼如算法1所示。 算法1 耦合的自適應(yīng)帶寬估計算法 Input:Socket,Acked,n,subflow[n],U[n],rtt,β Output:bandwidth,Ssthresh,Cwnd 1:Sk=Socket.getStatus() 2:Uk=βUk+(1-β)|Sk-Sk-1| 5:FunctionEstimateBW(rtt,Socket,α) 6:interval=rtt.getSecond() 7:packet=Socket.getLength() 8:Sk=α·Sk-1+(1-α)·packet 9:Tk=α·Tk-1+(1-α)·interval 11:FunctionSlowStart(Socket,NumAcked) 14:cwnd=Socket.getCwnd() 15:cwnd=cwnd+δ·NumAcked·cwndtot 16: returnNumAcked- 1 17:elsereturn 0 18:end if 19:FunctionCongestionAvoidance(Socket,Acked,subflow,δ) 20:i= 0,sum= 0 21:whilei 22:sum=sum+subflowi 25:cwnd=Socket.getCwnd+adder 26: returncwnd 27:FunctionIncreaseWindow(Socket,Acked,subflow,δ) 28:ssthresh=max(EstimateBW(rtt,Socket,α),2·Acked) 29:cwnd=Socket.getCwnd 30:ifcwnd≤ssthreshthen 31:Acked=SlowStart(Socket,Acked) 32:end if 33:ifcwnd>ssthreshthen 34:Acked=CongestionAvoidanceSocket(Socket,Acked,subflow,δ) 35: end if 其中,Acked是以字節(jié)為單位的段大小,interval是當(dāng)前時間,Tk-1是上一次數(shù)據(jù)包傳輸?shù)钠骄鶗r間,k和k-1表示當(dāng)前值和先前值。Sk和Tk分別是平均分組長度和平均時間間隔,同時也是濾波器的兩個濾波量。α(0<α<1)是低通濾波器的極點(濾波器增益),α的取值對算法帶寬估計有很重要的影響,當(dāng)α設(shè)置一個較大或者較小的定值時,帶寬估計值隨網(wǎng)路鏈路狀態(tài)波動而變化。在此α值的設(shè)置根據(jù)當(dāng)前鏈路的網(wǎng)絡(luò)狀態(tài)U決定,α的表達(dá)式為: (7) 式中,τk為過濾器參數(shù)決定濾波器的增益,隨著時間的變化而變化。子流鏈路正常工作時,τk的取值最小為一個RTT,并且根據(jù)當(dāng)前網(wǎng)絡(luò)狀態(tài)以及時間間隔內(nèi)的往返個數(shù)N決定,即: (8) 式中,Uk是當(dāng)前鏈路的網(wǎng)絡(luò)狀態(tài): Uk=βUk+(1-β)|sk-sk-1|。 (9) 由上述算法得出帶寬估計值Bw,將此值作為鏈路發(fā)生丟包或超時后的慢啟動閾值。 相對于原始算法,增益的大小是由多路徑的n條鏈路狀態(tài)決定的,其計算的復(fù)雜度為O(n),而對于鏈路帶寬大小估計的復(fù)雜度也為O(n),總體而言,提出算法的復(fù)雜度為O(n)+O(n)=O(n),即線性復(fù)雜度。基于上述的算法思想,子流鏈路耦合性的增加,必然會對傳輸性能較優(yōu)的鏈路產(chǎn)生影響,降低該鏈路的最大帶寬利用率。但從整體來看,提升了整個系統(tǒng)的帶寬利用率。 本文基于主流的網(wǎng)絡(luò)仿真器NS-3.29平臺實現(xiàn)[18-19],對算法進(jìn)行驗證和性能評估,主要比較本文算法以及Westwood的兩種帶寬估計算法在帶寬估計值和鏈路吞吐量上的兩個性能指標(biāo)。 仿真網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)由兩條無線鏈路組成,接收端和發(fā)送端都支持多路徑傳輸協(xié)議。路徑帶寬值設(shè)置為5 Mbit/s,往返延時設(shè)置為20 ms,鏈路的隨機(jī)錯誤率為3%。忽略仿真初始階段建立鏈路連接前1 s的統(tǒng)計數(shù)據(jù),為測試吞吐量的性能指標(biāo),隊列選擇發(fā)送2 500個數(shù)據(jù)包,其他仿真參數(shù)采用默認(rèn)值。 圖4和圖5給出了ABEC-MPTCP、Westwood以及Tustin三種算法的鏈路帶寬估計值以及傳輸?shù)钠骄掏铝俊?/p> 圖4 鏈路帶寬估計值Fig.4 Link bandwidth estimate 圖4為3種帶寬估計算法對實時鏈路帶寬的估計值。其中,Westwood算法是傳統(tǒng)固定極點濾波器的帶寬估計算法,Tustin表示為雙線性濾波帶寬估計算法。如圖4所示,Westwood算法的帶寬估計值在20 000 bit/s左右振蕩,這是鏈路振蕩的影響,不穩(wěn)定的帶寬值會影響鏈路的吞吐量;Tustin算法的帶寬估計值雖然處于一個較為穩(wěn)定的范圍,但相比于Westwood算法的估計值,該算法的帶寬估計較低,不能充分利用鏈路的帶寬資源,導(dǎo)致?lián)砣刂七^早地進(jìn)入擁塞避免階段,從而使得鏈路的吞吐量降低;ABEC-MPTCP算法的帶寬估計值保持在32 000 bit/s左右,雖然存在部分點的過高估計,但相比于Westwood算法和Tustin算法,帶寬估計值平均提高40%以上,而帶寬估計值的帶寬平均值也相對穩(wěn)定。 圖5 鏈路吞吐量Fig.5 Link throughput 圖5為鏈路吞吐量的仿真結(jié)果,圖中Tustin算法的吞吐量在2~3 s發(fā)生驟降,根據(jù)圖4可知,Tustin算法的帶寬估計值在2~3 s時也出現(xiàn)過低的帶寬估計,使其過早地進(jìn)入擁塞避免階段,導(dǎo)致吞吐量的突然降低。Westwood算法的吞吐量與Tustin算法的吞吐量相差較小,根據(jù)帶寬估計狀況可知,帶寬估計值振蕩也會降低實際鏈路的吞吐量。當(dāng)無線網(wǎng)絡(luò)使用耦合自適應(yīng)帶寬估計算法時,與其他兩種算法相比,ABEC-MPTCP算法的吞吐量明顯更高,增長幅度在40%以上,但該算法開始階段過高的帶寬估計,使得鏈路的吞吐量在開始階段也出現(xiàn)了突然的降低。 綜上所述,在本文的MPTCP仿真場景下,ABEC-MPTCP算法的吞吐量優(yōu)于Westwood的擁塞控制算法,表明ABEC-MPTCP算法的估計值是更加接近鏈路的真實值,并且可知經(jīng)過濾波器處理后的帶寬估計值相對更加平穩(wěn)。 在保證系統(tǒng)公平性和負(fù)載均衡的前提下,本文提出基于MPTCP耦合的自適應(yīng)帶寬估計算法,首先在慢啟動階段保證子流鏈路瓶頸處的公平性,再在基于時間間隔的估計算法中加入自適應(yīng)帶寬估計算法,有利于改善帶寬估計的精度與穩(wěn)定性。相比已有的算法,本文算法提升40%左右的系統(tǒng)吞吐量,這是因為自適應(yīng)的帶寬估計算法對鏈路的實時帶寬估計更加精確,時間間隔內(nèi)的平均估計值相對穩(wěn)定,更充分地利用了網(wǎng)絡(luò)資源。未來的工作,將進(jìn)一步提高帶寬估計的精確度以及估計值的穩(wěn)定性。2.3 算法的復(fù)雜度及性能分析
3 仿真和實驗結(jié)果分析
3.1 仿真場景配置
3.2 仿真結(jié)果分析
4 結(jié)論