一種用于帶寬預留網(wǎng)絡的tcp擁塞控制方法
【專利摘要】本發(fā)明涉及一種用于帶寬預留網(wǎng)絡的TCP擁塞控制方法,包括:檢測網(wǎng)絡鏈路中當前的可用帶寬、TCP連接的往返最小時時延以及TCP連接的平均數(shù)據(jù)包大??;依據(jù)可用帶寬、往返最小時延以及平均數(shù)據(jù)包大小,計算TCP滑動窗口的啟動閾值T;將所述TCP滑動窗口的初始大小設置為啟動閾值T,然后直接進入擁塞避免階段;在數(shù)據(jù)包的傳輸過程中,一旦發(fā)生丟包或超時現(xiàn)象,將當前擁塞窗口的大小降為T,重新進入擁塞避免階段。
【專利說明】—種用于帶寬預留網(wǎng)絡的TCP擁塞控制方法
【技術(shù)領域】
[0001]本發(fā)明涉及網(wǎng)絡通信領域,特別涉及一種用于帶寬預留網(wǎng)絡的TCP擁塞控制方法。
【背景技術(shù)】
[0002]傳輸控制協(xié)議TCP (Transmission Control Protocol)廣泛應用于網(wǎng)絡和計算機通信等領域中,其主要特點是數(shù)據(jù)傳輸可靠性好。近年來,計算機網(wǎng)絡迅猛發(fā)展,計算機網(wǎng)絡已經(jīng)不再局限于原來的有線、單一同構(gòu)網(wǎng)絡,而是呈現(xiàn)高度異構(gòu)化的趨勢。為了更高效率地利用網(wǎng)絡帶寬,提高吞吐率,近年來國內(nèi)外學者對目前應用十分廣泛的高速網(wǎng)絡、無線網(wǎng)絡等特定網(wǎng)絡進行了相應的優(yōu)化,比如針對高速網(wǎng)絡的BIC、FAST以及CUBIC等算法;針對無線網(wǎng)絡的Veno、Westwood等算法。而在實際網(wǎng)絡中,有一類網(wǎng)絡,其帶寬是通過預留方式進行分配的,同時TCP連接的可用帶寬大小范圍是明確可知的,包括廣播電視網(wǎng)、電信網(wǎng)等。目前學者并未對針對該類網(wǎng)絡的這個特點進行改進。
[0003]分組交換網(wǎng)絡中,當需要傳送的分組數(shù)目太多時,會出現(xiàn)鏈路帶寬資源有限而導致網(wǎng)絡傳輸性能下降的情況,也就是擁塞。當網(wǎng)絡中發(fā)生擁塞時,會出現(xiàn)數(shù)據(jù)丟失,時延增大,網(wǎng)絡吞吐量下降等現(xiàn)象,嚴重時會導致“擁塞崩潰”現(xiàn)象。為了避免TCP在連接建立初期,往網(wǎng)絡中發(fā)送大量的數(shù)據(jù)包,導致網(wǎng)絡擁塞,傳統(tǒng)的TCP擁塞控制算法引入了慢啟動機制。所謂的慢啟動機制,具體來說,當新建連接時,滑動窗口(Cwnd)初始化為I個最大報文段(MSS)大小,發(fā)送端開始按照擁塞窗口大小發(fā)送數(shù)據(jù),每當有一個報文段被確認,cwnd就增加I個MSS大小。這樣cwnd的值就隨著網(wǎng)絡往返時間(Round Trip Time, RTT)呈指數(shù)級增長。TCP使用了一個叫慢啟動門限(ssthresh)的變量,當cwnd超過該值后,慢啟動過程結(jié)束,進入擁塞避免階段。對于大多數(shù)TCP實現(xiàn)來說,ssthresh的值是65536 (同樣以字節(jié)計算)。擁塞避免的主要思想是加法增大,也就是cwnd的值不再指數(shù)級往上升,開始加法增加。此時當窗口中所有的報文段都被確認時,cwnd的大小加1,cwnd的值就隨著RTT開始線性增加,這樣就可以避免增長過快導致網(wǎng)絡擁塞,慢慢的增加調(diào)整到網(wǎng)絡的最佳值。當發(fā)生丟包或者超時時,對cwnd和ssthresh進行相應的調(diào)整。
[0004]參考圖1,現(xiàn)有技術(shù)中的TCP擁塞控制方法總體上包括三個階段:
[0005]一、慢啟動(Slow Start)階段
[0006]當一個TCP連接建立時,發(fā)送方將擁塞窗口 CWND初始化為該連接上當前使用的最大數(shù)據(jù)段長度,然后發(fā)送一個最大的數(shù)據(jù)段。如果在定時器過期之前收到該數(shù)據(jù)段的確認ACK,則將TCP的擁塞窗口增加一個數(shù)據(jù)段的字節(jié)數(shù),從而使擁塞窗口變成兩倍的最大數(shù)據(jù)段大小,然后發(fā)送兩個數(shù)據(jù)段。當擁塞窗口達到η個數(shù)據(jù)段時,如果所有η個數(shù)據(jù)段都被及時確認,則擁塞窗口增加η個數(shù)據(jù)段所對應的字節(jié)數(shù)。即每一次被確認的數(shù)據(jù)段都會使擁塞窗口加倍,使得擁塞窗口呈現(xiàn)指數(shù)形式的增長。
[0007]二、擁塞避免(Congestion Avoidance)階段
[0008]當擁塞窗口增長到慢啟動門限值(ssthresh)時,TCP就進入擁塞避免階段,每一次成功的傳輸都會使擁塞窗口線性地增長,即發(fā)送方每收到一個ACK,就將擁塞窗口增加一個數(shù)據(jù)段的大小。
[0009]三、快速重傳(FastRetransmit)與快速恢復(Fast Recovery)階段
[0010]當數(shù)據(jù)包超時時,TCP認為網(wǎng)絡發(fā)生了擁塞??焖僦貍鳈C制是指當TCP發(fā)送端收到3個或以上重復的ACK時,即認為數(shù)據(jù)包已經(jīng)丟失,則重傳丟失的數(shù)據(jù)包,同時將慢啟動門限值設置為當前擁塞窗口的一半,而不必等到重傳定時器超時。
[0011]“快速恢復”是指當收到3個重復ACK時,TCP最后進入的不是擁塞避免階段,而是快速恢復階段??焖僦貍骱涂焖倩謴退惴ㄒ话阃瑫r使用??焖倩謴褪腔凇胺纸M守恒”的原則的,即同一時刻在網(wǎng)絡中傳輸?shù)臄?shù)據(jù)分組數(shù)量是恒定的,只有當一個老的分組離開之后才允許向網(wǎng)絡注入一個新的分組。發(fā)送端每收到一個重復的ACK,則認為已經(jīng)有一個數(shù)據(jù)包離開了網(wǎng)絡,于是將擁塞窗口加上一個數(shù)據(jù)段的字節(jié)數(shù)。具體來說快速恢復的主要步驟是:
1.當收到3個重復ACK時,把ssthresh設置為cwnd的一半,把cwnd設置為ssthresh的值加3,然后重傳丟失的報文段,加3的原因是因為收到3個重復的ACK,表明有3個“老”的數(shù)據(jù)包離開了網(wǎng)絡;2.再收到重復的ACK時,擁塞窗口增加I ;3.當收到新的數(shù)據(jù)包的ACK時,把cwnd設置為第一步中的ssthresh的值。原因是因為該ACK確認了新的數(shù)據(jù),說明從重復ACK時的數(shù)據(jù)都已收到,該恢復過程已經(jīng)結(jié)束,可以回到恢復之前的狀態(tài)了,也即再次進入擁塞避免狀態(tài)。
[0012]從對現(xiàn)有技術(shù)中的TCP擁塞控制方法的描述可以看出,該方法中所采用的慢啟動機制會降低網(wǎng)絡資源利用率,在一次傳輸過程中,需要經(jīng)過幾個RTTOxnmd trip time)的時間才能使連接充分利用可用的信道帶寬。這對于帶寬是預留分配的且TCP連接的可用帶寬大小范圍是明確可知的帶寬預留網(wǎng)絡并不十分合適,容易降低此類網(wǎng)絡的網(wǎng)絡資源利用率。
【發(fā)明內(nèi)容】
[0013]本發(fā)明的目的在于克服現(xiàn)有技術(shù)中的TCP擁塞控制方法容易降低帶寬預留網(wǎng)絡的網(wǎng)絡資源利用率的缺陷,從而提供一種能夠有效提高帶寬利用率的方法。
[0014]為了實現(xiàn)上述目的,本發(fā)明提供了一種用于帶寬預留網(wǎng)絡的TCP擁塞控制方法,包括:
[0015]步驟I)、檢測網(wǎng)絡鏈路中當前的可用帶寬、TCP連接的往返最小時時延以及TCP連接的平均數(shù)據(jù)包大??;
[0016]步驟2)、依據(jù)步驟I)所得到的可用帶寬、往返最小時延以及平均數(shù)據(jù)包大小,計算TCP滑動窗口的啟動閾值T ;
[0017]步驟3)、將所述TCP滑動窗口的初始大小設置為驟2)計算得到的啟動閾值T,然后直接進入擁塞避免階段;
[0018]步驟4)、在數(shù)據(jù)包的傳輸過程中,一旦發(fā)生丟包或超時現(xiàn)象,將當前擁塞窗口的大小降為T,重新進入擁塞避免階段。
[0019]上述技術(shù)方案中,所述滑動窗口啟動閾值T的計算方法為:
[0020]T = BWE*RTTmin/PacketSize ;
[0021]其中,BWE表示鏈路的可用帶寬,RTTmin表示鏈路的往返最小時延,PacketSize表示TCP連接的平均數(shù)據(jù)包大小。
[0022]上述技術(shù)方案中,所述帶寬預留網(wǎng)絡具有以下特點:網(wǎng)絡的帶寬是通過預留方式進行分配的;TCP連接的可用帶寬大小范圍是明確可知的。
[0023]本發(fā)明的優(yōu)點在于:
[0024]1、適用于帶寬預留網(wǎng)絡,擁塞窗口大小能夠快速增長至理想狀態(tài),減少慢啟動帶來的帶寬損耗,提高了系統(tǒng)帶寬的利用率。
[0025]2、通過對啟動閾值的設置,可以滿足多類業(yè)務的帶寬需求。
【專利附圖】
【附圖說明】
[0026]圖1是現(xiàn)有技術(shù)中的TCP的擁塞控制算法擁塞窗口變化示意圖;
[0027]圖2為本發(fā)明方法的流程圖;
[0028]圖3為本發(fā)明方法中的一種具體的擁塞窗口變化示意圖。
【具體實施方式】
[0029]現(xiàn)結(jié)合附圖對本發(fā)明作進一步的描述。
[0030]參考圖2,本發(fā)明的用于帶寬預留網(wǎng)絡的TCP擁塞控制方法包括以下步驟:
[0031 ] 步驟I)、檢測網(wǎng)絡鏈路中當前的可用帶寬、TCP連接的往返最小時時延以及TCP連接的平均數(shù)據(jù)包大小。
[0032]對于一個TCP連接,該連接中所傳輸?shù)母鱾€數(shù)據(jù)包的大小以及各個數(shù)據(jù)包的往返時延都是可以測量得到的,因此根據(jù)往返時延和數(shù)據(jù)包大小的歷史數(shù)據(jù),即可得到往返最小時延以及平均數(shù)據(jù)包大小。鏈路的可用帶寬也可通過現(xiàn)有技術(shù)測量得到。
[0033]步驟2)、依據(jù)步驟I)所得到的可用帶寬、往返最小時延以及平均數(shù)據(jù)包大小,計算TCP滑動窗口的啟動閾值T。
[0034]所述滑動窗口啟動閾值T的計算方法為:
[0035]T = BWE*RTTmin/PacketSize ;
[0036]其中,BWE表示鏈路的可用帶寬,RTTmin表示鏈路的往返最小時延,PacketSize表示TCP連接的平均數(shù)據(jù)包大小。
[0037]啟動閾值T的計算方法并不限于上述計算公式,在其他實施例中,也可以采用其他計算公式,如將上述可用帶寬、往返最小時延以及平均數(shù)據(jù)包大小的計算結(jié)果再乘以或除以某一因子。
[0038]步驟3)、根據(jù)步驟2)計算得到的啟動閾值T,將所述TCP滑動窗口的初始大小設置為T,然后直接進入擁塞避免階段,即每收到一個ACK,就將擁塞窗口增加一個數(shù)據(jù)段的大小。
[0039]步驟4)、在數(shù)據(jù)包的傳輸過程中,一旦發(fā)生丟包或超時現(xiàn)象,將當前擁塞窗口的大小降為T,重新進入擁塞避免階段。
[0040]將本發(fā)明的上述方法與現(xiàn)有技術(shù)進行比較可以發(fā)現(xiàn),本發(fā)明的方法通過設置啟動閾值T能夠直接進入擁塞避免階段,避開慢啟動階段,且在整個數(shù)據(jù)包的傳輸過程中,如圖3所示,滑動窗口的大小等于或在閾值T之上,這有助于提高網(wǎng)絡的資源利用率。
[0041]最后所應說明的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限制。盡管參照實施例對本發(fā)明進行了詳細說明,本領域的普通技術(shù)人員應當理解,對本發(fā)明的技術(shù)方案進行修改或者等同替換,都不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應涵蓋在本發(fā)明的權(quán)利要求范圍當中。
【權(quán)利要求】
1.一種用于帶寬預留網(wǎng)絡的TCP擁塞控制方法,包括: 步驟I)、檢測網(wǎng)絡鏈路中當前的可用帶寬、TCP連接的往返最小時時延以及TCP連接的平均數(shù)據(jù)包大?。? 步驟2)、依據(jù)步驟I)所得到的可用帶寬、往返最小時延以及平均數(shù)據(jù)包大小,計算TCP滑動窗口的啟動閾值T ; 步驟3)、將所述TCP滑動窗口的初始大小設置為驟2)計算得到的啟動閾值T,然后直接進入擁塞避免階段; 步驟4)、在數(shù)據(jù)包的傳輸過程中,一旦發(fā)生丟包或超時現(xiàn)象,將當前擁塞窗口的大小降為T,重新進入擁塞避免階段。
2.根據(jù)權(quán)利要求1所述的用于帶寬預留網(wǎng)絡的TCP擁塞控制方法,其特征在于, 所述滑動窗口啟動閾值T的計算方法為:
T = BWE*RTTmin/PacketSize ; 其中,BWE表示鏈路的可用帶寬,RTTmin表示鏈路的往返最小時延,PacketSize表示TCP連接的平均數(shù)據(jù)包大小。
3.根據(jù)權(quán)利要求1所述的帶寬預留網(wǎng)絡的TCP擁塞控制算法,其特征在于,所述帶寬預留網(wǎng)絡具有以下特點:網(wǎng)絡 的帶寬是通過預留方式進行分配的;TCP連接的可用帶寬大小范圍是明確可知的。
【文檔編號】H04L12/841GK103929370SQ201310011894
【公開日】2014年7月16日 申請日期:2013年1月11日 優(yōu)先權(quán)日:2013年1月11日
【發(fā)明者】劉磊, 王獻冠, 鄭艷偉, 劉孝圣 申請人:中國科學院聲學研究所, 北京海力匯通數(shù)字系統(tǒng)技術(shù)有限公司