廈門(mén)工學(xué)院,福建廈門(mén) 361024
近來(lái),隨著移動(dòng)互聯(lián)網(wǎng)的飛速發(fā)展,人們的生活方式發(fā)生了翻天覆地地變化。通過(guò)移動(dòng)通信設(shè)備來(lái)網(wǎng)絡(luò)購(gòu)物,網(wǎng)上訂餐或者是視頻會(huì)議等等,給人們的生活和工作帶來(lái)很多的便利。但是移動(dòng)互聯(lián)網(wǎng)的訪問(wèn)速度慢,訪問(wèn)失敗率高以及視頻播放不流暢等用戶(hù)體驗(yàn)差的問(wèn)題仍時(shí)常困擾著人們。因此,如何提高人們?cè)谝苿?dòng)互聯(lián)網(wǎng)的用戶(hù)體驗(yàn)成了首要問(wèn)題。
優(yōu)化服務(wù)器端的TCP協(xié)議是提高無(wú)線網(wǎng)絡(luò)中的用戶(hù)體驗(yàn)的方法之一。傳統(tǒng)的TCP協(xié)議是為有線鏈路設(shè)計(jì)的。在有線的應(yīng)用環(huán)境下,TCP對(duì)于端到端的延遲和包丟處理顯示出優(yōu)越的性能。主要原因是位出錯(cuò)率較低,鏈路性能好,主機(jī)比較固定[1]。但是在無(wú)線網(wǎng)絡(luò)接入現(xiàn)有的Internet網(wǎng)絡(luò)中,由于無(wú)線網(wǎng)絡(luò)的鏈路特性問(wèn)題,使得在沒(méi)有擁塞的情況下啟動(dòng)擁塞控制,從而使TCP在無(wú)線網(wǎng)絡(luò)中性能大大降低[2]。
本文通過(guò)NS2軟件模擬仿真幾種常用TCP算法在無(wú)線網(wǎng)絡(luò)中吞吐量和發(fā)包行為,并選出一種最適合無(wú)線網(wǎng)絡(luò)的擁塞算法,以提高人們?cè)谝苿?dòng)互聯(lián)網(wǎng)中的用戶(hù)體驗(yàn)。
TCP Reno算法是現(xiàn)有眾多算法的基礎(chǔ),包括慢啟動(dòng)、擁塞避免、快速恢復(fù)以及快速重傳機(jī)制。但它為了平衡必須周期性地產(chǎn)生一些丟包,再用AIMD(加式增加,乘式減少)的機(jī)制來(lái)調(diào)整,這樣導(dǎo)致帶寬的利用率不高。
TCP Vegas是通過(guò)計(jì)算期望值的吞吐量與實(shí)際吞吐量的差值來(lái)估計(jì)網(wǎng)絡(luò)瓶頸處的可用帶寬。這樣Vegas不用依靠丟包就能檢測(cè)到網(wǎng)絡(luò)擁塞,從而在丟包前就進(jìn)行擁塞避免,能減少數(shù)據(jù)丟包,并更有效的利用帶寬[3]。
TCP Veno 采用類(lèi)似Vegas的機(jī)制來(lái)判斷網(wǎng)絡(luò)的擁塞狀態(tài),通過(guò)判斷丟包的性質(zhì)來(lái)采取不同的擁塞控制策略。當(dāng)網(wǎng)絡(luò)處于真正的擁塞時(shí),采用TCP Reno的擁塞控制機(jī)制,當(dāng)網(wǎng)絡(luò)丟包是由誤碼等原因產(chǎn)生的隨即丟包時(shí),采用一種擁塞控制機(jī)制[4]。
TCP Westwood算法通過(guò)檢測(cè)應(yīng)答ACK返回發(fā)送端的速率估算網(wǎng)絡(luò)的可用帶寬,并利用估算出的可用帶寬計(jì)算出擁塞窗口cwnd以及慢啟動(dòng)閾值ssthresh,從而進(jìn)行流量控制以改善網(wǎng)絡(luò)的擁塞狀況[5]。


表1 無(wú)線鏈路參數(shù)配置
有線網(wǎng)絡(luò)試驗(yàn)的網(wǎng)絡(luò)拓?fù)鋱D如1所示。其中PC到路由R0之間和R1到服務(wù)器之間的鏈路配置相同帶寬1000Mbps,時(shí)延0ms,隊(duì)列類(lèi)型Drop Tail,最大隊(duì)列30000個(gè)MSS;而R0和R1之間的帶寬100Mbps,時(shí)延64ms,隊(duì)列類(lèi)型Drop Tail,最大隊(duì)列220個(gè)MSS。從上面參數(shù)中可看到,該網(wǎng)絡(luò)的瓶頸在于路由器R0與R1之間。
無(wú)線誤碼率約10-4為嚴(yán)重受干擾的信道,無(wú)線誤碼率小于10-6為干擾很小的信道,無(wú)線誤碼率在10-6~10-5之間為信道干擾的一般狀態(tài),由無(wú)線信道誤碼率BER與丟包率p存在以下關(guān)系:

其中,p(t)—丟包率;
BER—無(wú)線信道誤碼率;
packet length—報(bào)文章長(zhǎng)度。
如 在 10-6~10-5之間取誤碼率為10-5(一般干擾),每報(bào)文長(zhǎng)度為1000Byte(8000bit),則無(wú)線丟失概率為7%[6]。
因此,無(wú)線網(wǎng)絡(luò)試驗(yàn)的網(wǎng)絡(luò)拓?fù)鋱D如圖2所示。其中,智能機(jī)與訪問(wèn)點(diǎn)的距離為45m(無(wú)線網(wǎng)絡(luò)仿真中其距離最大不能超過(guò)250m,超過(guò)即沒(méi)有信號(hào)),丟包率為7%,采用MAC/802_11協(xié)議,其基本速率為1Mbps,數(shù)據(jù)速率為11Mbps,其余配置見(jiàn)表1。



圖3、圖4為有線網(wǎng)絡(luò)環(huán)境和無(wú)線網(wǎng)絡(luò)環(huán)境下Reno擁塞窗口變化圖,其中,紅線為擁塞窗口的變化,綠線代表慢啟動(dòng)門(mén)限的變化,橫坐標(biāo)為時(shí)間。從圖3中可以看出,有線鏈路發(fā)送平穩(wěn),擁塞窗口變化處于一個(gè)有限的區(qū)域內(nèi),而且沒(méi)有頻繁地切換,慢啟動(dòng)門(mén)限基本沒(méi)有發(fā)生變化。而在無(wú)線鏈路中擁塞窗口變化起伏大。
圖5和圖6為有線鏈路與無(wú)線鏈路的吞吐量仿真結(jié)果圖。圖5的有線鏈路下的TCP Reno吞吐量基本穩(wěn)定在一定范圍內(nèi),而圖6無(wú)線鏈路下的TCP Reno中,多次吞吐量被拉至零。
由圖3和圖5中,可以看出,有線鏈路吞吐量與擁塞窗口密切相關(guān),說(shuō)明了有線鏈路中包丟失主大部份原因是由于擁塞而造成的路由器緩沖區(qū)溢出。
由圖4和圖6中,可以看出,造成無(wú)線網(wǎng)性能降低的因素并不只是擁塞,還受差錯(cuò)率以及時(shí)延的影響。同時(shí)也提示了這些因素中對(duì)TCP數(shù)據(jù)傳輸?shù)挠绊懀阂驗(yàn)榇蟮难訒r(shí)使得確認(rèn)報(bào)文的返回時(shí)間較長(zhǎng),TCP發(fā)送窗口的增長(zhǎng)速度較慢;鏈路差錯(cuò)的存在造成報(bào)文段的丟失,進(jìn)而使得TCP多次將擁塞窗口置為1,重新開(kāi)始慢啟動(dòng)的過(guò)程,從而降低了TCP的發(fā)送速率,影響TCP的性能。
從圖3、圖4的擁塞窗口與圖5、圖6吞吐量的變化圖中可以看出無(wú)線鏈路較有線鏈路:擁塞窗口變化大,吞吐量波動(dòng)范圍大,吞吐量小等特點(diǎn)。
由于所設(shè)的發(fā)送速率遠(yuǎn)未達(dá)到鏈路瓶頸,本文不考慮擁塞報(bào)文丟失,故認(rèn)為信道態(tài)不佳是造成報(bào)文丟失的主要原因。各版本的TCP協(xié)議擁塞窗口及吞吐量隨時(shí)間的變化見(jiàn)圖7~圖14。
各TCP版本報(bào)文大小為1000Byte,丟包率為7%下?lián)砣翱谝?jiàn)圖7~圖10。
從圖7與圖8比較看到,由于Vegas是通過(guò)RTT提前探測(cè)網(wǎng)絡(luò)的擁塞情況,所以相對(duì)于Reno其擁塞窗口一直穩(wěn)定在一定范圍內(nèi),但擁塞窗口一直保持在較小的值。而無(wú)線上的RTT較大,因此不適用于無(wú)線網(wǎng)絡(luò)。
從圖7與圖9比較看到,與Reno算法相比,由于Veno在擁塞狀態(tài)發(fā)生時(shí),通過(guò)判斷丟包的性質(zhì)來(lái)采取不同的擁塞控制策略,所以不會(huì)盲目降低擁塞窗口的增加速度,而當(dāng)擁塞發(fā)生時(shí),發(fā)送端將擁塞窗口增速放緩,從而能使擁塞窗口更長(zhǎng)時(shí)間地保持在較大的狀態(tài)。因此,從圖中看出,在一定時(shí)間內(nèi)擁塞窗口的變化明顯小于Reno的變化。
Westwood算法通過(guò)檢測(cè)應(yīng)答ACK返回發(fā)送端的速率估算網(wǎng)絡(luò)的可用帶寬,并利用估算出的可用帶寬計(jì)算出擁塞窗口cwnd以及慢啟動(dòng)閾值ssthresh,從而進(jìn)行流量控制以改善網(wǎng)絡(luò)的擁塞狀況。但從圖9與圖10比較看到,Westwood的擁塞窗口窗口的平均值明顯比Veno擁塞窗口的平均值大。

各TCP版本分組大小為1000Byte丟包率為7%下吞吐量見(jiàn)圖11~圖14。
從上述4圖中比較,在丟包率為7%的情況下,Vegas的吞吐量最為穩(wěn)定,波動(dòng)范圍較小,相比于其他算法,Vegas將吞吐量拉至0的次數(shù)明顯較少;而相比于其他算法,Westwood算法的吞吐量的平均值最高。
本文首先對(duì)有線鏈路與無(wú)線鏈路的擁塞窗口與吞吐量進(jìn)行比較,然后幾種TCP算法以及丟包率對(duì)擁塞窗口和吞吐量的影響進(jìn)行了比較與分析,最后得出以下結(jié)論。
在無(wú)線鏈路中,如果整個(gè)網(wǎng)絡(luò)都使用Vegas算法,能達(dá)到很不錯(cuò)的效果,即更大的吞吐量和更低的丟包率。但是很顯然,這是不現(xiàn)實(shí)的。Vegas算法的帶寬競(jìng)爭(zhēng)力太弱了,比Reno算法還不激進(jìn),因此不建議采用。
Veno算法避免Reno算法盲目的將擁塞窗口減半,因此能夠維持更大的擁塞窗口,吞吐量也比Reno算法大,取得更高的帶寬利用率。其友好性和公平性也較好,與其他的TCP也具有較好的共存性。
Westwood通過(guò)對(duì)帶寬進(jìn)行估計(jì)來(lái)調(diào)整cwnd和ssthress的值,使得免受隨機(jī)丟包的影響,因此cwnd一直處于較大的位置,從而提高了吞吐量。另外,Westwood對(duì)隨機(jī)丟包不敏感,因此在以上幾種算法中,westwood在無(wú)線網(wǎng)絡(luò)丟包率較高時(shí)表現(xiàn)最好。本文建議在無(wú)線網(wǎng)絡(luò)中選用westwood算法作為擁塞控制算法。