熊曉將
(中國空間技術研究院,北京 100094)
傳輸控制協議(Transfer Control Protocol,TCP)是目前應用廣泛的互連網傳輸協議。傳統的TCP協議包含4 個擁塞控制算法:慢啟動(Slow Start)、擁塞避免(Congestion Avoidance)、快速重傳(Fast Retransmit)、快速恢復(Fast Recovery)。這4個擁塞控制算法相互關聯,合稱為TCP-Reno算法,在Allman等人所著的TCP 標準協議備忘錄RFC2581中有詳細的描述[1]。
在選擇衛星鏈路的標準傳輸協議時,TCP是首選的傳輸層協議,但試驗和理論研究表明,如果把有線環境的端到端數據傳輸TCP 協議直接用到衛星鏈路中,則在長時延、高誤碼、間歇性中斷等因素的影響下,其擁塞控制機制將不能正常工作,使網絡的帶寬利用率低下,網絡的吞吐量下降,嚴重制約了數據傳輸的效率和能力。
國內外在衛星鏈路的擁塞控制機制和算法方面已做了很多研究,提出了很多改進衛星鏈路上TCP擁塞控制協議性能的方案。文獻[2-5]針對衛星鏈路對TCP 性能的影響,提出了TCP 分片、快速啟動、顯式擁塞通告、鏈路錯誤通告、分離誤碼和擁塞等方法,提高衛星鏈路上的TCP 性能。Internet工程任務組(IETF)在1997年成立了工作組,專門研究衛星信道上的TCP/IP性能,如文獻[6]中建議增大TCP 初始窗口尺寸。NASA 的格林(Glenn)研究中心、路易斯(Lewis)研究中心、法國信息與自動化研究所(INRIA)、俄亥俄州立大學(Ohio)等單位也在從事衛星鏈路上TCP性能的研究,并通過實驗提出了一些改進衛星鏈路上TCP 性能的技術措施[7-8]。國內也有一些大學和研究機構展開了提高衛星網上TCP擁塞控制性能方面的研究[9-10]。
本文介紹了一種基于探測機制的擁塞控制算法,通過發送低優先級且不攜帶有用信息的啞元來探測網絡資源的可用性,改進了原有的慢啟動及快速算法,并形成了新的突然啟動和迅速恢復算法,經仿真驗證,能夠有效提高TCP連接的初始階段以及鏈路出錯條件下的吞吐量。可為提高衛星鏈路TCP協議的性能提供參考。
基于探測機制[11]的擁塞控制算法,目的是保證與TCP協議兼容性良好的情況下,提高衛星網絡TCP的吞吐量性能,特別是鏈路誤碼率高的情況下的吞吐量。該算法針對衛星鏈路長時延、高誤碼的特點,設計了一種高效的TCP 擁塞控制機制,如圖1所示,4個核心算法分別為突然啟動、擁塞避免、快速重傳和迅速恢復。其中,突然啟動和迅速恢復算法就是在傳統的慢啟動和快速恢復基礎上的改進。
改進算法的設計思想,在于它使用一種低優先級且不包含任何有用數據的報文段(即啞元)來探測網絡的擁塞情況。使用啞元的目的主要是用于探測端到端連接網絡資源的可用性,啞元應答的順利標志著網絡情況良好,網絡正存在著未被使用的資源,發送方可以增大擁塞窗口;而一旦發生網絡擁塞,低優先級IP 包攜帶的啞元將被首先丟棄。由于啞元不含任何有用的數據,其丟棄率不但可以反映網絡擁塞情況,而且丟棄的啞元不需要被重傳。

圖1 基于探測機制的擁塞控制流程Fig.1 Congestion control flow based on detection mechanism
為了避免長時延衛星鏈路慢啟動造成的吞吐量低的問題,在一個新連接的開始采用了新的突然啟動算法。突然啟動算法將會持續一個往返時間(Rround-trip Time,RTT),隨即發送端將進入擁塞避免階段,其基本思路如下。
在連接的開始階段,擁塞窗口(congestion window,cwnd)的大小Scwnd及變量w被分別初始化設置為1和0,并且在發送完第1個數據段后,它每隔時間α(α=tRTT/Srwnd)就發送1個啞元(tRTT表示往返的時間,Srwnd代表接收窗口(receive window,rwnd)的大小,也是擁塞窗口的最大值)。這樣,在第一個RTT 內發送了一個數據段和Srwnd-1個啞元。啞元到達接收端后,如果網絡中有未使用的資源,那么它們的確認信號(acknowledgement,ACK)將會到達發送端。突然啟動結束時,發送端會收到這些ACK 信號并開始執行擁塞避免算法。因此,由于w=0,一旦收到啞元的ACK,發送端將增加擁塞窗口。在一個RTT 之后,擁塞窗口會迅速增長,從連接建立的開始,突然啟動比傳統的慢啟動達到接收窗口大小的時間要快,僅需要2個RTT的時間。需要注意的是,發送端在連接建立的初始階段必須能夠估計RTT,即在3 次握手階段獲得RTT 的值。
迅速恢復算法替代傳統快速恢復算法的目的,主要是解決由于鏈路錯誤導致衛星鏈路吞吐量性能下降的問題。
新的迅速恢復算法,將保留傳統快速恢復算法對所有丟包均是由于網絡擁塞引起的假設,因為TCP 層不知道引起網絡擁塞的確切原因,即到底是網絡擁塞還是鏈路錯誤。
設置以下幾個變量:
(1)a表示允許發送端發送的啞元數量,a>0時,允許發送啞元;
(2)Nseg表示未被確認的數據報文,為能否發送新數據的判據,即Scwnd大于Nseg時,允許發送新的數據;
(3)w:作為Scwnd是否增長的判據,即若w=0,則Scwnd增加一個報文大小;若w>0,則w的值遞減1,而Scwnd的值保持不變。通過w的調節可以達到與傳統TCP的友好與兼容;
(4)tretr:為丟失的數據報文重傳的時刻,令其等于當前的時刻t;
(5)tRTO:表示數據包從發送到失效的時間間隔。
迅速恢復階段的過程如下:
(1)發送端每收到一個數據報的ACK 信號,將Scwnd增加一個報文段大小,并檢測是否可以發送新的數據;
(2)若Scwnd大于未確認數據報文Nseg,則發送新數據報文;
(3)如果不能發送新數據,即Scwnd小于或等于未確認數據報文Nseg,則發送端檢測a的值,若a>0,發送端發送兩個啞元并將a的值減2;
(4)若收到了啞元的ACK,只有w=0時Scwnd增加,否則Scwnd保持不變而將w的值減1;
(5)當丟失的報文被確認后,Scwnd減小到發現發現丟包之前的大小,a被置0,迅速恢復算法結束,開始執行擁塞避免算法;
(6)如果在t≥(tretr+tRTO)時刻,發送端仍處于迅速恢復階段,在tRTO時間之內重傳數據報和啞元的ACK 都未曾收到,這表明網絡發生了嚴重的擁塞,應立即終止迅速恢復,開始執行突然啟動。
如果網絡未發生擁塞,丟包只是由于發生了鏈路錯誤,那么所有的啞元都會到達接收端,發送端會收到所有啞元的應答ACK。先到的Scwnd/2個啞元的ACK 將使得變量w減小至0,且擁塞窗口并不增加,而隨后到達的其余Scwnd/2個啞元的ACK 會將擁塞窗口增加恢復到Scwnd。結果在很短的時間內,Scwnd就恢復到檢測到丟包時的大小。
如果丟包真的是由于發生了擁塞,那么發生擁塞的路由器在每個RTT 時間內能處理Scwnd個數據段。因而,網絡只能容納Scwnd/2個具有高優先級的數據包,以及在迅速恢復階段中發送的啞元中一半,即Scwnd/2個啞元。收到啞元的ACK 后,變量w將會更新并減小至0,而擁塞窗口此時并不會增加,即在網絡發生擁塞時,迅速恢復算法與傳統的快速恢復算法的表現相同。
仿真選用OPNET Technologies 公司的OPNET Modeler網絡仿真平臺軟件。
圖2為簡化的OPNET 仿真網絡模型,仿真環境為同步衛星系統。在簡化的模擬場景中,用路由器代表地面站網關,通過對數據速率、傳輸延遲和誤碼率的設置模擬衛星鏈路環境,以減小實現的復雜性。由于迅速恢復算法主要解決的是鏈路出錯時吞吐量性能下降的問題,因而構造了出現鏈路差錯時的網絡模型。

圖2 出現鏈路差錯時仿真的網絡模型Fig.2 Simulation network model in the condition of link errors
仿真使用的是文件傳輸協議(File Transfer Protocol,FTP)業務類型,參數設置見表1。

表1 仿真參數設置Table 1 Simulation parameter
對基于探測機制的擁塞控制算法的仿真驗證分為以下兩種情形:
(1)網絡正常情況下對突然啟動算法的性能驗證;
(2)鏈路出現差錯的情況下對迅速恢復算法的性能驗證。
為了驗證算法的性能,仿真的內容包括接收確認ACK 及吞吐量的比較。
圖3為網絡正常的情況下,對突然啟動算法的性能驗證。

圖3 網絡正常時啟動算法的ACK 比較Fig.3 ACK Comparison of start algorithm when network in order
由圖3仿真結果可知:在網絡正常的情況下,在新連接建立的起始階段,由于衛星鏈路長時延的影響,傳統TCP-Reno慢啟動算法直接應用于衛星鏈路,性能要比在地面網絡應用的效果差;若在衛星鏈路中采用突然啟動算法,由于采用了探測機制,突然啟動比慢啟動達到rwnd窗口大小的時間要快,這也表明了在衛星鏈路連接建立的起始階段,突然啟動又比慢啟動傳送數據的速度要快得多。
圖4為鏈路出現差錯的情況下對迅速恢復算法的性能驗證,仿真時假設在107s出現一個報文丟棄。

圖4 鏈路出錯時恢復算法的吞吐量比較Fig.4 Throughput comparison of recovery algorithm in the condition of link errors
由圖4 可知:在鏈路出現差錯的情況下,傳統TCP-Reno快速恢復算法直接應用于衛星鏈路,性能比在地面網絡應用的效果差;通過啞元的發送與確認,對網絡容量進行了有效探測,迅速恢復算法在擁塞避免階段的窗口明顯增加,因而迅速恢復算法的吞吐量在衛星鏈路中應用的性能又要優于傳統的TCP-Reno快速恢復算法。
衛星鏈路長時延、高誤碼的特點使得TCP的數據傳輸性能下降,本文基于探測機制的擁塞控制改進算法,采用對網絡資源的探測機制,可以有效解決衛星鏈路慢啟動以及鏈路錯誤造成的吞吐量低的問題。仿真結果表明,該算法可提高和改善衛星鏈路中TCP 的吞吐量,不涉及中間節點的改造,并與傳統的TCP協議兼容。
(References)
[1]Allman M.TCP congestion control[S/OL].[2012-02-21].http://datatracker.ietf.org/doc/rfc2581
[2]Balakrishnan H.A comparison of mechanisms for improving TCP performance over wireless links[R].New York:IEEE,1997
[3]Pamanabhan V N,Katz R.TCP fast start:a technique for speeding up web transfer[R].New York:IEEE,1998
[4]Floyd S.TCP and explicit congestion notification[R/OL].[2012-03-11].http://citeseerx.ist.psu.edu
[5]Durst R C,Miller G J,Travis E J.TCP extensions for space communications[R/OL].[2010-04-11].http://citeseerx.ist.psu.edu
[6]Allman M,Floyd S,Partridge C.Increasing TCP’s initial window[S/OL].[2009-11-12].http://datatracker.ietf.org/doc/rfc2414
[7]Lakshman T V,Madhow U.The performance of TCP/IP for networks with high bandwidth delay products and random loss[R].New Yok:IEEE,1997:336-350
[8]Alman M.Improving TCP performance over satellite channels[D].Ohio:Ohio University,1997:27-35
[9]劉春霞.衛星網傳輸層擁塞控制協議研究[D].哈爾濱:哈爾濱工程大學,2001
Liu Chunxia.Research on congestion control protocol of transmission layer in satellite network[D].Harbin:Harbin Engineering University,2001(in Chinese)
[10]羅萬明,林闖,閻保平.TCP/IP 擁塞控制研究[J].計算機學報,2001,24(1):1-18
Luo Wanming,Lin Ge,Yan Baoping.Research on TCP/IP congestion control[J].Computer Transaction,2001,24(1):1-18(in Chinese)
[11]Akyildiz I F,Morabito G,Palazzo S.Research issues for transport protocols in satellite IP networks[R].New York:IEEE,2001:44-48