有線網(wǎng)絡(luò)主要是由于擁塞產(chǎn)生數(shù)據(jù)包的丟失,稱為擁塞丟包。無線網(wǎng)絡(luò)存在高誤碼率,無線信道由于噪聲、鏈路錯(cuò)誤而產(chǎn)生頻繁的數(shù)據(jù)包丟失,稱為隨機(jī)丟包。在無線網(wǎng)絡(luò)中,TCP錯(cuò)誤地將隨機(jī)丟包當(dāng)成擁塞丟包,采取不必要的擁塞控制,降低數(shù)據(jù)發(fā)送速率,引起吞吐量下降。如何區(qū)分擁塞丟包和隨機(jī)丟包并采取相應(yīng)的策略是無線網(wǎng)絡(luò)中TCP的研究重點(diǎn)。 TCP Veno是基于Reno、Vegas這兩個(gè)版本提出的。它通過對(duì)擁塞避免、快速重傳和快速恢復(fù)的改進(jìn),判斷無線網(wǎng)絡(luò)中的擁塞狀況,采取不同的擁塞控制策略,提升無線網(wǎng)絡(luò)的性能。當(dāng)TCP Veno認(rèn)為網(wǎng)絡(luò)的丟包是由于高誤碼率造成的時(shí)候,就采用改進(jìn)的擁塞控制機(jī)制;相反,當(dāng)網(wǎng)絡(luò)的狀態(tài)處于擁塞時(shí),就采用傳統(tǒng)的TCP擁塞控制機(jī)制。TCP Veno提升了TCP在單跳無線網(wǎng)絡(luò)中的性能,大量研究已經(jīng)表明,TCP Veno在蜂窩通信網(wǎng)絡(luò)中性能得到較好的提升。
Vegas通過計(jì)算期望吞吐量和實(shí)際吞吐量的差值來估計(jì)網(wǎng)絡(luò)瓶頸處的可用帶寬。Veno采用這種策略來判斷網(wǎng)絡(luò)中連接是否處于擁塞狀態(tài)。
Veno在發(fā)送端測(cè)量?jī)蓚€(gè)速率,一個(gè)是發(fā)送速率的期望值(Expected),另一個(gè)是發(fā)送速率的實(shí)際值(Actual),計(jì)算公式如下:
Expected = cwnd/BaseRTT
Actual=cwnd/RTT
式中,cwnd是當(dāng)前的發(fā)送窗口大小,BaseRTT是測(cè)量到往返時(shí)延中的最小值,RTT是最近一次測(cè)量到的往返時(shí)延值,兩者間的差值定義為Diff:
Diff = Expected - Actual
當(dāng)RTT>BaseRTT時(shí),表明網(wǎng)絡(luò)的瓶頸帶寬處堆積了數(shù)據(jù)包。如果用N來表示該處堆積的數(shù)據(jù)包個(gè)數(shù),則有如下表達(dá)式:
RTT = BaseRTT +N/Actual
上式右側(cè)表示網(wǎng)絡(luò)瓶頸處的數(shù)據(jù)包堆積會(huì)引起往返時(shí)延的增加。重新整理后,可得到如下表達(dá)式:
N= Actual×(RTT-BaseRTT) = Diff×BaseRTT
TCP Veno中設(shè)置一個(gè)閾值b,通過比較N和b判斷是否發(fā)生了擁塞,即區(qū)分隨機(jī)丟包和擁塞丟包。如果N超過閾值b,認(rèn)定原因是擁塞丟包;反之,則認(rèn)定為隨機(jī)丟包。經(jīng)過實(shí)驗(yàn)證明,閾值b取3比較合理。
(1)TCP Veno的擁塞避免算法采取如下策略:
當(dāng)cwnd>ssthresh時(shí),即進(jìn)入擁塞避免階段時(shí),
如果N<b,發(fā)生隨機(jī)丟包,則每收到1次新的ACK,使cwnd=cwnd+1/cwnd;
否則N≥b,發(fā)生擁塞丟包,則每2次收到新的ACK,使cwnd=cwnd+1/cwnd。
在發(fā)生隨機(jī)丟包和擁塞丟包兩種不同情況下,TCP Veno對(duì)cwnd的線性增加采取不同的控制策略。如果判斷發(fā)生隨機(jī)丟包,則cwnd線性增加的程度和TCP Reno一樣;如果判斷發(fā)生擁塞丟包,則cwnd線性增加的程度減緩。因?yàn)樵陬A(yù)測(cè)網(wǎng)絡(luò)中可能存在擁塞時(shí),減緩cwnd的線性增加,即減緩數(shù)據(jù)傳輸速率的增加,可使得連接能夠盡可能長(zhǎng)時(shí)間地處于較大的窗口值,從而提高TCP的效率。
(2)TCP Veno的快速重傳和快速恢復(fù)算法采取如下策略:
如果N<b,此時(shí)發(fā)生隨機(jī)丟包,則使ssthresh=cwnd×(4/5),cwnd=ssthresh+3;
否則N≥b,表示發(fā)生擁塞丟包,則使ssthresh=cwnd/2,cwnd=ssthresh+3。
TCP發(fā)送端確認(rèn)數(shù)據(jù)包丟失依據(jù)兩種情況:一是重傳定時(shí)器超時(shí);二是收到3個(gè)及以上重復(fù)的ACK。快速重傳是指收到3個(gè)重復(fù)ACK就確認(rèn)數(shù)據(jù)包丟失,然后重傳丟失的數(shù)據(jù)包并調(diào)整cwnd和ssthresh的大小,快速重傳之后執(zhí)行快速恢復(fù)。所以如果判斷發(fā)生隨機(jī)丟包,則只是適度降低閾值ssthresh,可以使連接從一個(gè)較大的窗口值開始執(zhí)行擁塞避免,提高TCP吞吐量;若判斷發(fā)生擁塞丟包,則將閾值ssthresh減半,減小窗口緩解擁塞。
無線環(huán)境的高誤碼率對(duì)TCP性能產(chǎn)生很大影響。因?yàn)楦哒`碼率引起數(shù)據(jù)包丟失,通常被認(rèn)為是擁塞,采取擁塞控制機(jī)制,但是實(shí)際網(wǎng)絡(luò)中并沒有擁塞產(chǎn)生。所以頻繁的擁塞控制降低了傳輸速率,導(dǎo)致吞吐量下降。TCP Veno采取測(cè)量網(wǎng)絡(luò)擁塞狀況的方法,判斷擁塞丟包還是隨機(jī)丟包,采取不同的擁塞控制機(jī)制。新的擁塞控制機(jī)制針對(duì)隨機(jī)丟包盡量保持傳輸速率,適當(dāng)減小擁塞窗口,提升吞吐量。