一種基于連續丟包擁塞判斷的tcp傳輸加速方法
【技術領域】
[0001] 本發明涉及計算機網絡領域,特別涉及高丟包率廣域網環境下網絡丟包原因分 析,TCP協議擁塞判斷標準以及擁塞窗口調整算法。
【背景技術】
[0002] TCP協議是目前普遍采用的傳輸協議,在傳統的網絡環境下能夠保持高效可靠傳 輸。但是,TCP作為一種普適的傳輸協議,并沒有針對高丟包的廣域網網絡環境做出優化, 其傳輸效率有很大的提升空間。
[0003] 傳統TCP的擁塞控制機制是當發生丟包時,就將其發送方的擁塞窗口減半,從而 降低發送速率。然而,這種擁塞控制行為的前提假設是丟包是由瓶頸鏈路擁塞而引起。因 此,通過降低發送速率可以避免鏈路擁塞,達到擁塞控制的目的。但是在廣域網數據傳輸過 程中,往往存在著無線鏈路、跨洋鏈路,甚至衛星鏈路等特殊鏈路。這些特殊鏈路具有高信 道誤碼率的特點,并會由于信道誤碼而造成大量的誤碼丟包。在這種情況下,由于缺乏有效 的丟包原因區分方法,傳統TCP也會把誤碼丟包判斷為擁塞引起的,從而在網絡沒有發生 擁塞時而不必要地降低發送速率,導致了傳輸效率低下。
[0004] 在基于丟包的TCP協議中,TCPReno和TCPCubic是最為廣泛采用的擁塞控制協 議。
[0005] TCPReno采用慢啟動和擁塞避免兩個階段來增加擁塞窗口。在慢啟動階段,擁塞 窗口呈指數增加。當窗口增長到大于慢啟動閾值時,會進入擁塞避免階段,此時擁塞窗口線 性增加。當收到3個重復ACK時,則認為檢測到丟包,立即重傳丟失的包并將擁塞窗口減半。
[0006] TCPCubic協議的窗口增長函數僅僅取決于連續的兩次擁塞事件的時間間隔值, 從而窗口增長完全獨立于網絡的時延RTT。而TCPCubic的RTT獨立性質使得TCPCubic 能夠在多條共享瓶頸鏈路的TCP連接之間保持良好的RTT公平性。TCPCubic在檢測到丟 包之后會將擁塞窗口置為當前窗口的0.8倍(在Linux2. 6. 38內核中)。這種減窗方式在 無線鏈路高丟包率的場景中往往會造成擁塞窗口過小,傳輸效率低下的問題。
[0007] 另外,為了保證數據傳輸的可靠性,TCP提供了確認機制,當發送序列中某個數據 包丟失時,TCP則會重傳從最后確認的包開始的后續包,但是這也可能會重傳原本已經接收 到的數據包,從而造成TCP的性能急劇降低。為了改善這種情況,發展出了SACK(Selective Acknowledgment,選擇性確認)技術,使TCP只重新發送丟失的包,不用發送后續所有的包, 并且提供相應的機制使接收方能告訴發送方哪些數據丟失,哪些數據重發了,哪些數據已 經提前收到等。
[0008] SACK通常都是由TCP接收方產生的,如果在TCP握手時接收到對方SACK允許選 項,且本端也支持SACK,接收異常時就可以發送SACK選項通知發送方。當TCP接收方接收 到非期待序號的數據塊時,如果該塊的序號小于期待的序號,說明是網絡復制或重發的包, 可以丟棄;如果收到的數據塊序號大于期待的序號,說明中間有包被丟棄或延遲,這時會發 送SACK通知發送方出現了網絡丟包。
[0009] 由于SACK信息是通過TCP頭部的選項部分提供的,受TCP頭部長度的限制,SACK 最多能標記4組接收不連續的數據塊。
【發明內容】
[0010] 通過對丟包原因及對應的擁塞控制狀態下窗口調節的分析,本發明提供一種改進 的窗口調節算法進行TCP優化,進而提高網絡的吞吐量。
[0011] 傳統TCP在遭遇丟包時,并不區分丟包的原因,而是直接降低窗口和閾值,對吞吐 率影響巨大。實際上,在由擁塞引起的網絡丟包時,丟包往往呈現出連續性的特點,即由于 緩存溢出導致連續的數據包丟棄。而因信道錯誤出現丟包時,丟包的隨機性較強。因此,從 丟包的連續性來判斷丟包的原因,可以避免對高丟包網絡環境擁塞狀況的誤判。
[0012] 本專利的設計思路是利用連續丟包信息來區分丟包原因,根據丟包情況判斷擁 塞,避免盲目的降速。同時在擁塞窗口調整時,根據當前的擁塞狀態來調整窗口大小。
【附圖說明】
[0013] 以下結合圖和【具體實施方式】對發明作進一步的詳細說明。
[0014] 圖1是緩存隊列溢出示意圖。
[0015] 圖2是SACK確認機制示意圖。
[0016] 圖3是改進的擁塞窗口調整流程圖。
[0017] 圖4是改進前后擁塞窗口對比曲線圖。
[0018] 圖5是仿真環境下的測試拓撲圖。
【具體實施方式】
[0019] 如圖1所示,終端主機與服務器之間經過廣域網通信時,數據包會經過中間結點 (路由器或交換機)的緩存隊列。當緩存隊列內等待發送的數據包數目超過緩存的容量,則 會出現溢出丟包的問題,也即網絡出現擁塞。通常情況下,發往同一目的主機的數據包會陸 續到達,因此這種情況下的丟包會呈現出連續性的特點。
[0020] 如圖2所示,為了統計連續丟包數,本發明利用了SACK(Selective Acknowledgment,選擇性確認)機制反饋的信息,使得發送方知道哪些數據丟失。具體地, 當發送方接收到含有SACK信息的確認報文時,讀取SACK的SLE和SRE信息。SLE和SRE之 間未確認的數據段就可以反映連續丟失的字節數。
[0021] 如圖3所示,報文的最大分組長度MSS能夠在TCP報文段頭部獲得,因此,可以 計算出接收到的每兩個不連續的數據塊之間丟失報文段的數目,其計算公式如下% = (SLEi-SREgVMSS,其中叫表示接收到的第i個和第i-1個不連續數據塊之間的丟失報文 數,SLE,表示接收到的第i個不連續塊的第一個數據字節的序號,SREh表示接收到的第 i-1個不連續塊的最后一個數據字節的序號之后的序列號。易知,^的最小值為1,最大值 為當前擁塞窗口的大小。
[0022] 另外,由于SACK信息最多可以統計4組接收不連續的數據塊,在每個RTT結束時, 發送方會取叫的最大值作為當前RTT內連續丟包數N,用于衡量當前網絡的擁塞程度,也即 N=max{nj,其中 0 <i< 4。
[0023] 當N彡2時,也即出現連續丟失2個及以上的數據包時,網絡真正發生擁塞,將慢 啟動閾值為調整當前擁塞窗口值并將擁塞窗口減半;當N= 1時,也即最多只丟失1個數據 包,此時很有可能是信道錯誤而引起的丟包,具有較高的偶然性,為了避免盲目地降低發送 速率,故可以暫時保持擁塞窗口不變,等待新的反饋信息;如果沒有出現丟包,也就不會接 收到SACK信息,因此不需要對擁塞窗口做額外的調整。擁塞窗口的具體調整方法如下:
[0024]
[0025] 當N彡2時,慢啟動門限更新為:ssthreshold=cwnd。其中,cwnd表示擁塞窗口 值,ssthreshold代表慢啟動門限。
[0026] 如圖4所示,相對于傳統TCP,本算法在出現丟包時,并未盲目降窗,提高了數據的 傳輸效率。同時,借助于仿真工具,通過對本算法進行模擬環境下的性能測試,其拓撲如圖 5所示,發現相較于傳統的擁塞控制算法,傳輸相同大小的數據量,本算法的傳輸時延更低, 帶寬利用率更高。
[0027] 以上為本發明的實施方式,依據本發明公開的內容,本領域的普通技術人員能夠 顯而易見的想到的一些雷同、替代方案,均應落入本發明保護的范圍。
【主權項】
1. 一種基于連續丟包擁塞判斷的TCP加速傳輸方法,其特征為: (1) 網絡出現擁塞的判斷標準為丟包呈現出連續性特點; (2) 連續丟包數的統計方法; (3) 擁塞窗口調整算法。2. 如權利要求1所述的基于連續丟包擁塞判斷的TCP加速傳輸方法,其特征在于:網 絡出現擁塞的判斷標準為丟包呈現出連續性特點;因緩存隊列溢出而引起的鏈路擁塞往往 會導致連續性丟包,而因信道錯誤而出現的丟包具有偶然性,據此能夠更加準確地判斷鏈 路擁塞情況,從而避免在網絡沒有發生擁塞時不必要地降低發送速率,導致傳輸效率低下。3. 如權利要求1所述的基于連續丟包擁塞判斷的TCP加速傳輸方法,其特征在于:連 續丟包數的統計方法,是借助于SACK機制,獲得接收到的不連續數據塊的序號信息,由于 報文大小MSS已知,計算得到連續丟包數。4. 如權利要求1所述的基于連續丟包擁塞判斷的TCP加速傳輸方法,其特征在于:擁 塞窗口調整算法。當連續丟包數大于等于2個,認為鏈路出現擁塞,將慢啟動門限值調整為 當前擁塞窗口大小,然后將擁塞窗口減半;當連續丟包數為1個時,認為鏈路未出現擁塞, 保持當前擁塞窗口不變。5. 如權利要求1至4所述的基于連續丟包擁塞盤的TCP加速傳輸方法,其特征在于: ⑴當前RTT內,丟失報文的數目為N = HiaxIniK其中O < i彡4,Iii = (SLEi-SREiJ/ MSS,Iii表示接收到的第i個和第i-Ι個不連續數據塊之間的丟失報文數,SLEi表示接收到 的第i個不連續塊的第一個數據字節的序號,SREg表示接收到的第i-Ι個不連續塊的最后 一個數據字節的序號之后的序列號。 (2)擁塞窗口調整算法為,當NS 2時,慢啟動門限更新為: ssthreshold = cwnd。其中,cwnd表示擁塞窗口值,ssthreshold代表慢啟動門限。
【專利摘要】本發明提供了一種基于連續丟包擁塞判斷的TCP傳輸加速機制的設計。通過分析擁塞丟包和信道丟包的特點,得出擁塞丟包往往出現連續性的結論。采用TCP SACK機制檢測連續丟包數量,以此衡量網絡擁塞程度,并相應地調整擁塞窗口。經過在模擬環境和真實網絡環境下的測試驗證,發現此方法提高了數據傳輸速率,增大了網絡吞吐量。
【IPC分類】H04L12/823, H04L12/807
【公開號】CN104980365
【申請號】CN201410127574
【發明人】蘇健, 葉進, 張智衛
【申請人】廣西大學
【公開日】2015年10月14日
【申請日】2014年4月1日