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