王穎為
摘 要:隨著網絡不斷發展,人類面臨的入網環境越來越復雜,衛星接入上網的方案在很多情況下是個很好的選擇。但是衛星鏈路本身與傳統鏈路有所不同,有自己獨特的特性,這樣就需要改進TCP方案,使其適應衛星鏈路的環境,從而提高TCP的性能。本文初步探討了NewReno、TCP Cubic、Hybla三種典型TCP版本在衛星鏈路上的性能表現,希望能夠找出一種令TCP性能在衛星鏈路上表現得更加出色的方案。
關鍵詞:衛星鏈路;TCP性能;擁塞算法
1 研究背景
隨著互聯網的不斷發展,越來越多的人們加入網絡,適應網絡,依賴網絡,期待著隨時隨地享受網絡的便捷服務。然而,受到自然環境等因素的影響,一些地域缺乏或難以架設地面網絡設施。另外,人們還想更加自由地接入網絡,不受線路的牽絆。因此,衛星接入上網是一個不錯的方案,地球同步衛星鏈路會為移動用戶提供一個方便快捷的接入網絡。
但是,由于接入技術的改變,硬件、軟件、現實條件都發生了變化,過去常見的舊的TCP版本不能適應新應用的要求,顯示出較差的性能。總結其中原因,有如下幾點:
1.1 衛星鏈路特性對TCP性能的影響
1.1.1 傳輸距離長,導致嚴重的傳輸延遲
地球同步衛星的高度大約有36,000公里,信息在衛星與地面接收站之間傳輸大約要250毫秒。
1.1.2 誤碼率高
相對于地面鏈路,衛星鏈路的誤碼率較高,從而使數據包的錯誤率增高。
1.1.3 數據傳輸速率低
在衛星鏈路上,只有最大10Mbps的上傳速率。
1.2 TCP機制和算法對TCP性能的影響
1.2.1 三次握手
首先,一個TCP連接是通過接收端和發送端之間的“三次握手”建立的。
第一次握手:建立連接時,客戶端發送syn包(syn=x)到服務器,并進入SYN_SENT狀態,等待服務器確認(SYN:同步序列編號)。
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態。
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
在衛星鏈路上,即使是很短的數據交換,都需要至少幾秒鐘才能完成,降低了TCP的性能。
1.2.2 接收窗口rwnd的值
使用TCP發送數據時,前一個目的端發送來的數據包,會明確地規定好應用程序被允許的發送字節量,被稱為“接收窗口”。這個值,通常被設置為8KB或16KB,這嚴重限制了TCP連接通過衛星可以達到的速度。
1.2.3 默認慢啟動算法
TCP會以一個非常緩慢的速度開始發送,并緩慢增加,直到達到可用容量。這一過程需要幾個RTT,而衛星鏈路本身有嚴重的傳播延遲,因此,會花費很長的時間才能達到可用容量。當發生擁塞或其他原因的數據包丟失時,TCP的擁塞窗口值cwnd迅速減小,這個慢啟動的過程又會重新開始。
1.2.4 包丟失導致乘法減小
TCP假定任何丟包都是由擁塞造成的。每當一個數據包丟失,TCP就減小擁塞窗口,從而減小傳輸速率。例如,每當檢測到丟包事件,TCP NewReno將其傳輸速率降低為原來的50%。但是,衛星鏈路本身的誤碼率就很高,封包錯誤率就是在不發生擁塞的情況下觀察到的。此外,衛星和地面鏈路容量之間的差異也會導致TCP性能較差,大量的包丟失可能會由于這種拓撲結構的改變而發生。
2 研究方案
從前面的研究來看,我們發現衛星鏈路有著自己的特性,但TCP方案沒有很好地適應這些特性。有時候網絡并未發生擁塞,只是本身的傳輸時間長或者有丟包等事件發生,卻被誤認為是擁塞,導致發送端的擁塞窗口值cwnd驟減,信道沒有被充分利用,從而影響了TCP的性能。因而,想辦法避免擁塞,及其導致的cwnd值驟減。下面是一些TCP的新版本,用來解決這些問題。
2.1 NewReno
這一版本采用快速重傳技術和快速恢復技術。
超時重傳是TCP協議保證數據可靠性的一個重要機制,其原理是在發送一個數據以后就開啟一個計時器,在一定時間內如果沒有得到發送數據報的ACK報文,那么就重新發送數據,直到發送成功為止。這是數據丟包的情況下給出的一種修補機制。一般來說,重傳發生在超時之后,但是如果發送端接收到3個以上的重復ACK,就應該意識到,數據丟了,需要重新傳遞。這個機制不需要等到重傳定時器溢出,所以叫做快速重傳,而快速重傳以后,因為走的不是慢啟動而是擁塞避免算法,所以這又叫做快速恢復算法。
快速重傳和快速恢復旨在快速恢復丟失的數據包。沒有快速重傳和快速恢復,TCP將會使用定時器來要求傳輸暫停。在暫停這段時間內,沒有新的數據包被發送。
2.2 TCP Cubic
目前,Cubic是Linux中TCP協議的默認擁塞控制算法。它是TCP BIC的優化版本。TCP BIC的主要思想是確保對于往返時間RTT不同的各個流,能夠公平地分享衛星鏈路上提供的容量。Cubic在設計上簡化了BIC-TCP的窗口調整算法,在BIC-TCP的窗口調整中會出現一個有凹有凸的增長曲線(這里的凹和凸指的是數學意義上的凹和凸,即凹函數和凸函數),Cubic使用了一個三次函數(即一個立方函數),在三次函數曲線中同樣存在一個凹和凸的部分,該曲線形狀和BIC-TCP的曲線圖十分相似,于是該部分取代BIC-TCP的增長曲線。
在Cubic的三次函數中由凹和凸兩部分控制窗口的增長。第一部分是個凹函數,在這一階段窗口快速增長到上一次擁塞事件發生之前的大小;第二部分是個凸函數,在這一階段Cubic尋求更大的帶寬,先慢后快。Cubic的大量時間都處在凹凸函數增長區之間的一個穩定狀態上,這使得網絡在開始尋求更大帶寬之前,能夠保持穩定。
另外,Cubic與標準TCP協議最主要的區別,在于它的窗口增長函數僅僅取決于連續的兩次擁塞事件的時間間隔值,從而窗口增長完全獨立于網絡的時延RTT,Cubic的RTT獨立性質使得Cubic能夠在多條共享瓶頸鏈路的TCP連接之間保持良好的RTT公平性。
2.3 Hybla
可選擇使用PEPSal方案(在發送端修改過的端到端協議,使用TCP分離概念的衛星中繼傳輸協議)。把由衛星鏈路引發的長的RTT的影響降到最低;它加快了cwnd的增長速度,為不同RTT的連接提供相同傳輸速率。
TCP Hybla掃描窗口增量規則以確保RTT不同的流之間的公平性。當某個流的RTT的值比既定的參考RTT的值小時,Hybla的表現與NewReno一樣,否則,Hybla增加擁塞窗口的值,更加積極地補償由于RTT增加帶來的吞吐量下降。
Hybla主要解決不同RTT的公平性問題。它采用基于時延補償的方法。對于大時延網絡來說,采用這種算法可以提高傳輸效率。
3 研究結論
上面圍繞著防止發送端的擁塞窗口值cwnd驟減,充分利用信道的思路,研究了NewReno、TCP Cubic、Hybla三種典型TCP版本,我們發現它們有著各自的優勢,和與之相適應的環境。
相對來說NewReno在算法上更易實現,它改進了Reno算法,考慮了一個發送窗口內多個報文丟失的情況。Cubic主要針對可能發生高延遲的高速網絡,它的大量時間處在凹凸函數上一段較穩定的狀態上,使網絡在尋求更大帶寬前能維持穩定;另外,Cubic的窗口增長完全獨立于RTT,令RTT不同的流能公平地分享衛星鏈路上提供的容量。Hybla主要應對于含地面或衛星鏈路的異構網絡,把由衛星鏈路引發的較長RTT的影響降到最低,為不同RTT的連接提供相同傳輸速率,確保RTT不同的流之間的公平性。
[參考文獻]
[1]Alain Pirovano & Fabien Garcia.A New Survey on Improving TCP Performances over Geostationary.Network and Communication Technologies,Vol.2,No.1.2013.
[2]劉志軍,陳繼光.一種改進的高速TCP擁塞控制機制.河南科技大學學報(自然科學版),2009,30(4).
[3]高華峰.無線網絡中TCP擁塞控制機制的研究.南京郵電大學,2008.
[4]薛建生,王光興.一種基于網絡帶寬預測的TCP擁塞控制機制.小型微型計算機系統,2007,28(4).