周益帆
(杭州師范大學(xué) 錢(qián)江學(xué)院 電氣機(jī)械工程系,浙江 杭州 310012)
傳統(tǒng)的TCP協(xié)議是為有線網(wǎng)絡(luò)環(huán)境而設(shè)計(jì)的,因此TCP假定網(wǎng)絡(luò)擁塞是引起報(bào)文丟失的唯一原因,并相應(yīng)地采取擁塞控制機(jī)制。然而在無(wú)線網(wǎng)絡(luò)中,無(wú)線鏈路的高誤碼率和主機(jī)的移動(dòng)切換也能經(jīng)常引起報(bào)文丟失,而TCP仍然將這些報(bào)文丟失歸咎于網(wǎng)絡(luò)擁塞,這種錯(cuò)誤的推論最終導(dǎo)致無(wú)線網(wǎng)絡(luò)中TCP性能的嚴(yán)重下降。由于TCP協(xié)議應(yīng)用的廣泛性,如何提高TCP在無(wú)線網(wǎng)絡(luò)中的性能成為目前研究的熱點(diǎn)問(wèn)題。
在無(wú)線鏈路中,較高的誤碼率往往會(huì)造成分組丟失而產(chǎn)生重傳超時(shí)現(xiàn)象,致使TCP端到端的吞吐量較低。特別是突發(fā)性錯(cuò)誤造成的多個(gè)連續(xù)分組的丟失在無(wú)線鏈路中是經(jīng)常見(jiàn)到的,而每個(gè)分組的丟失都會(huì)引起擁塞窗口的減半,這樣就會(huì)使發(fā)送端的發(fā)送速率嚴(yán)重降低,當(dāng)然這種降低是我們不希望的。而當(dāng)擁塞窗口低于4個(gè)分段時(shí),就無(wú)法激活快速重傳/恢復(fù)算法,這樣發(fā)送端只能等待超時(shí)重傳,使TCP端到端的性能進(jìn)一步降低。
另外,頻繁變動(dòng)的移動(dòng)節(jié)點(diǎn)也會(huì)對(duì)TCP性能造成很大的影響。當(dāng)移動(dòng)節(jié)點(diǎn)移動(dòng)到一條新鏈路之前的一瞬間,如果一個(gè)家鄉(xiāng)代理通過(guò)隧道向移動(dòng)節(jié)點(diǎn)的轉(zhuǎn)交地址發(fā)送了一個(gè)數(shù)據(jù)包,在這個(gè)包到達(dá)移動(dòng)節(jié)點(diǎn)的舊鏈路時(shí),移動(dòng)節(jié)點(diǎn)已經(jīng)不能在那里接收這個(gè)數(shù)據(jù)包了。因此,發(fā)送這個(gè)數(shù)據(jù)包的節(jié)點(diǎn)上的TCP就會(huì)檢測(cè)到一個(gè)包丟失,并根據(jù)TCP/IP協(xié)議族的假設(shè)認(rèn)為網(wǎng)絡(luò)發(fā)生擁塞,于是啟動(dòng)TCP協(xié)的擁塞控制機(jī)制,開(kāi)始降低發(fā)送數(shù)據(jù)包的速率。從這里可以看出,此時(shí)定時(shí)器超時(shí)的真正原因是由于移動(dòng)節(jié)點(diǎn)離開(kāi)了原來(lái)的網(wǎng)段又沒(méi)有完成新的注冊(cè)而造成的接收不到對(duì)等主機(jī)發(fā)送的數(shù)據(jù)包,當(dāng)然也就不可能給出相應(yīng)的確認(rèn)報(bào)文,而不是因?yàn)榫W(wǎng)絡(luò)發(fā)生了擁塞。無(wú)線網(wǎng)絡(luò)下TCP協(xié)議的行為有以下幾個(gè)缺點(diǎn):
TCP的錯(cuò)誤檢測(cè)機(jī)制:這個(gè)機(jī)制不能區(qū)別不同類(lèi)型的錯(cuò)誤。TCP有一個(gè)基本假設(shè),即一旦發(fā)生連續(xù)的丟包行為,TCP就判斷網(wǎng)絡(luò)擁塞。但是這套機(jī)制搬到無(wú)線環(huán)境中會(huì)使TCP的性能大大降低,甚至不可忍受。無(wú)線網(wǎng)的各種缺陷使得丟包現(xiàn)象不一定是擁塞導(dǎo)致的,而可能是移動(dòng)導(dǎo)致的。
錯(cuò)誤恢復(fù)機(jī)制:這個(gè)機(jī)制不能針對(duì)無(wú)線環(huán)境的具體特點(diǎn) (如移動(dòng)節(jié)點(diǎn)的頻繁變動(dòng)和信道的衰弱)做出相應(yīng)的行為。
平衡協(xié)議的花銷(xiāo)以及時(shí)間的節(jié)省能力。這是考慮到使用電池的移動(dòng)終端的 有效應(yīng)用。
對(duì)于擁塞(包括前向和后向)進(jìn)行可靠且精確的檢測(cè),而不是僅僅基于RTT的鍘量,或是像標(biāo)準(zhǔn)TCP那樣直到丟包才探測(cè)到擁塞.這個(gè)機(jī)制可以解決不對(duì)稱(chēng)鏈路上的不少問(wèn)題,并且減少超時(shí) (超時(shí)機(jī)制正是基于對(duì)RTT的測(cè)量)對(duì)協(xié)議性能的影響。
端到端技術(shù)直接作用于發(fā)送端或接收端,也可同時(shí)作用于二者。由于傳輸層具有無(wú)縫、高效、獨(dú)立等特性,使端到端的方案成為解決由用戶移動(dòng)性所帶來(lái)的問(wèn)題的較好方法,它可以修復(fù)由于用戶移動(dòng)所引發(fā)的眾多問(wèn)題。而且,當(dāng)前的大部分Internet提供了一個(gè)盡最大努力(best-effort)的服務(wù):網(wǎng)絡(luò)底層結(jié)構(gòu)能夠丟棄、記錄、復(fù)制數(shù)據(jù)段,引入時(shí)延的變化,限定信息的大小等。同時(shí),應(yīng)用層協(xié)議需要確定的、按序的信息傳遞,并期望存在一種對(duì)任意大小信息都支持且適應(yīng)多重過(guò)程的網(wǎng)絡(luò)服務(wù)。端到端的方案要求使用一個(gè)有效的傳輸層,而TCP可能是最好的代表,它與網(wǎng)絡(luò)的其他部分的兼容性較好。對(duì)基于端到端協(xié)議的有一些新方法。
聰明代理機(jī)制:SMART機(jī)制與上邊提到的SACK基于相同的原理,它使用的SACK中包含了積累的確認(rèn)和已經(jīng)成功接收的報(bào)文段的序號(hào),當(dāng)發(fā)現(xiàn)序號(hào)不連續(xù)時(shí),立刻重發(fā)。顯式丟失通告機(jī)制:在ACK中增加了顯式丟失通告選項(xiàng),它能夠通告發(fā)送方數(shù)據(jù)丟失的真正原因,以區(qū)別對(duì)待與網(wǎng)絡(luò)擁塞有關(guān)及其他與網(wǎng)絡(luò)擁塞無(wú)關(guān)的數(shù)據(jù)丟失。其具體做法是:中間節(jié)點(diǎn)或者接收方若檢測(cè)到數(shù)據(jù)丟失的確與網(wǎng)絡(luò)擁塞無(wú)關(guān),就相應(yīng)地將其返回的ACK首部ELN位置位。發(fā)送方根據(jù)ELN值就可知道數(shù)據(jù)丟失的原因,重傳數(shù)據(jù)并且避免觸發(fā)不必要的TCP擁塞控制機(jī)制。其中ELN位可選擇TCP報(bào)文首部中的保留比特位來(lái)充當(dāng)。例如對(duì)于移動(dòng)主機(jī)作為接收方的情況,當(dāng)中間節(jié)點(diǎn)(基站)接收到來(lái)自移動(dòng)主機(jī)的DUPACK時(shí),若該DUPACK對(duì)應(yīng)報(bào)文的后續(xù)報(bào)文已被基站轉(zhuǎn)發(fā),則可斷定基站到移動(dòng)主機(jī)間的無(wú)線鏈路段發(fā)生了數(shù)據(jù)丟失,就將其首部中的ELN位置位,然后再將此確認(rèn)轉(zhuǎn)發(fā)至發(fā)送方。發(fā)送方接收到含有ELN位的確認(rèn)后,立即重傳丟失的數(shù)據(jù),而不是錯(cuò)誤的啟動(dòng)擁塞控制機(jī)制。
TCP SACK協(xié)議。SACK算法是在Reno算法基礎(chǔ)上進(jìn)行擴(kuò)展得來(lái)的,它在確認(rèn)包的包頭中增加了附加域,可以標(biāo)識(shí)沒(méi)有被正確接收的一個(gè)發(fā)送窗口內(nèi)的多個(gè)數(shù)據(jù)包,從而對(duì)數(shù)據(jù)包進(jìn)行有選擇地確認(rèn)和重傳。這樣,源端就能準(zhǔn)確地知道哪些數(shù)據(jù)包被正確地傳到接收端,避免了不必要的重傳,減少時(shí)延,提高網(wǎng)絡(luò)吞吐量。
非直接TCP(I-TCP)。這是使用分段連接方法的早期協(xié)議之一。這種方法在無(wú)線鏈路連接中使用常規(guī)的TCP,基站只簡(jiǎn)單的在兩個(gè)連接間雙向復(fù)制報(bào)文。I-TCP像其它的分段連接方法一樣,試圖從整個(gè)網(wǎng)絡(luò)中將無(wú)線鏈路上的報(bào)文丟失分離出來(lái),因此避免初始的TCP發(fā)送方參與無(wú)線鏈路上的恢復(fù)。由于TCP不能很好的適應(yīng)無(wú)線鏈路的特點(diǎn),造成了無(wú)線網(wǎng)絡(luò)連接段的TCP發(fā)送方經(jīng)常超時(shí),從而導(dǎo)致初始發(fā)送方停止發(fā)送報(bào)文。該方法的另一個(gè)缺點(diǎn)是,TCP端到端的語(yǔ)義被違反了,因?yàn)樵趫?bào)文還未到達(dá)目的地之前,發(fā)送方就有可能收到該報(bào)文段的ACK,這個(gè)ACK實(shí)際上只表明基站收到了相應(yīng)的報(bào)文,并非接收方真正收到了它。而且,每個(gè)報(bào)文段都要經(jīng)過(guò)兩次TCP的處理。由于TCP的狀態(tài)必須在基站之間傳輸,這個(gè)協(xié)議對(duì)于每一個(gè)TCP連接都需要在基站維持一定數(shù)量的連接狀態(tài),當(dāng)發(fā)生越區(qū)切換時(shí)處理過(guò)程就會(huì)變得復(fù)雜和緩慢。
無(wú)線TCP(W-TCP)?;臼褂脙煞N協(xié)議TCP和W-TCP,TCP用于處理有線鏈路數(shù)據(jù)的傳送,W-TCP則應(yīng)用于無(wú)線鏈路。在這個(gè)方案中無(wú)需對(duì)固定主機(jī)和移動(dòng)終端的協(xié)議進(jìn)行改動(dòng)。
當(dāng)基站接收到一個(gè)從發(fā)送方發(fā)送過(guò)來(lái)的報(bào)文段時(shí),它將這個(gè)報(bào)文段的順序號(hào)和到達(dá)時(shí)間存放到緩沖區(qū)中。每當(dāng)一個(gè)報(bào)文段被發(fā)往移動(dòng)主機(jī)時(shí),W-TCP都會(huì)把它在緩沖區(qū)中停留的時(shí)間加入到時(shí)間戳里。通過(guò)這種“欺騙”方式,發(fā)送方會(huì)在報(bào)文段真正被基站發(fā)送出去之前,就認(rèn)為它已經(jīng)被發(fā)送了。W-TCP通過(guò)這種方法延緩了TCP時(shí)鐘超時(shí)的時(shí)間,即影響RTT的估算。特別是當(dāng)一個(gè)報(bào)文段被反復(fù)重傳了多次以后,RTT的估計(jì)值將會(huì)變得很大,由于TCP采用平滑估計(jì)時(shí)間(也稱(chēng)為已平滑的RTT估計(jì)器)對(duì)下一次往返時(shí)間進(jìn)行估計(jì),發(fā)送方需要很長(zhǎng)的一段時(shí)間才能消除一個(gè)不正常的語(yǔ)義,基站在移動(dòng)主機(jī)確實(shí)收到報(bào)文段后才發(fā)送ACK到發(fā)送方。
基站在收到DUPACK或者計(jì)時(shí)器超時(shí)后,可以對(duì)丟失的報(bào)文段進(jìn)行本地重傳。如果是超時(shí)引起的重傳,W-TCP在重傳后就將發(fā)送窗口降為1個(gè)最大報(bào)文段長(zhǎng)度,因?yàn)榇藭r(shí)可能在無(wú)線網(wǎng)絡(luò)中發(fā)生了突發(fā)性的報(bào)文丟失(burst loss)。相反,如果是重復(fù)應(yīng)答引起的本地重傳,基站不做多余的處理,因?yàn)槟軌蚴盏街貜?fù)應(yīng)答幀證明此時(shí)無(wú)線信道狀況良好。
[1]文莉,無(wú)線Internet技術(shù),人民郵電出版社,2006年
[2]TCP/IP協(xié)議和服務(wù)技術(shù)參考,清華大學(xué)出版社,2004年
[3]周天翔,:通過(guò)ARQ提高無(wú)線網(wǎng)絡(luò)中的TCP吞吐量,上海交通大學(xué)學(xué)報(bào),2002