摘?要:根據SCTP協議多宿的特性,提出一種基于可用帶寬的Primary destination address選擇策略方案,可以提高吞吐量并降低丟包率,在仿真平臺NS2上得到了改進算法的驗證。
關鍵詞:SCTP? 多宿? 可用帶寬?? 仿真
?
IP電話的發展使通過信令" title="信令">信令網關在IP網絡中組建IP信令網成為可能。通過已有的數據網絡處理語音、數據、信令,可以減少建立和維護多個網絡的費用。在PSTN中,NO.7信令仍有重要作用。IETF的信令傳輸工作組(SIGTRAN)為了在IP網絡上傳輸NO.7信令制定了新的流控制傳輸協議" title="傳輸協議">傳輸協議SCTP(Stream Control Transfer Protocol:RFC2960)[1][7],主要用于IP網絡中承載PSTN信令。由于SCTP具有適合Internet數據和多媒體傳輸 的特性,并可能成為下一代的傳輸層協議,因此SCTP成為當前研究的熱點。
1 SCTP協議介紹
1.1 SCTP協議簡介
SCTP被看做“超級TCP”,它不僅沿用了TCP的一些性質,能夠提供可靠傳輸服務,確保數據無誤按序地通過網絡,而且擴展了TCP的許多功能。
SCTP與TCP的最大" title="最大">最大區別就是SCTP采用了多歸屬(Multi-homing)[2]的機制,因此SCTP中的偶聯概念要比TCP中的連接概念含義更廣。一個偶聯的兩個SCTP端點都向對方提供一個SCTP端口號和一個IP地址列表,每個偶聯都由兩個SCTP端口號和兩個IP地址列表來識別,多歸屬的端點可以接入到不同類型的網絡。所以SCTP能在兩個端點間建立穩固的通信。一個SCTP偶聯可以包含多個可能的起源與目的地址的組合,這些組合包含在每個端點的傳送地址列表中。這樣使得一個偶聯可以在多個傳輸路徑間選擇和切換,提高了網絡容錯的能力,從而在SCTP中一個多歸屬的主機會因為網絡物理上的故障導致通信中斷的情況將很少發生。
SCTP支持關聯的多流(Multiple Streams),允許把一個關聯的數據流分成多個子流來同時處理,在傳輸過程中,只需保持子流內部有序而不必保持整個數據流的順序,子流不會因為傳輸問題而阻塞其他子流,保持互不干擾,這樣就避免了其他流中數據丟失造成的隊頭阻塞情況;支持對SYN泛洪攻擊的抵抗;用戶數據無錯誤無重復地確認傳輸通過分組序列間隙報告和選擇性重發來實現;SCTP采用了與TCP相似的流量控制和擁塞控制算法,引用了慢啟動機制;在數據分組的確認和重傳機制上,采用了選擇性確認,在一定程度上提高了傳輸效率。
1.2 SCTP工作方式
SCTP是一個面向連接的傳輸協議,在傳輸數據前,網絡兩端需要建立一個通信連接,在SCTP中,這個連接稱為關聯(Association)。圖1是一個關聯的例子。
?
所謂的關聯可以這樣表述:Association={[10.13.61.10,161.10.31.20:101]:[128.10.11.2:201] },這樣一個SCTP的關聯可以擁有兩條端到端的通信路徑,一條是10.13.61.10到128.10.11.2,另一條是161.10.31.20到128.10.11.2,這就體現了SCTP的多宿性。當關聯建立起來后,協議會把數據流分成多個子流,通過某條路徑來傳輸各子流的數據。當前路徑不能使用時,關聯會自動查找自己的路徑列表,確定一條可用的路徑來繼續傳輸。
2 基于可用帶寬測試的改進方法
2.1改進原理
SCTP作為一種新興的、并未廣泛應用的協議,存在很多可以改進的地方。本文針對其多宿的特點提出了一種性能改進的方法和基于可用帶寬的Primary destination address選擇策略,以提高SCTP的傳輸性能。
如果能在關聯建立初始化或需要調整Primary destination address時選擇一個可用帶寬最大的通信連接,就能夠提高傳輸的速度,并且動態地根據網絡情況適當地調整通信路徑。圖2給出了TCP(Reno)、SCTP和改進SCTP的一個比較。縱坐標表示當前連接所占用的帶寬,橫坐標表示時間。對于某一條網絡路徑,在擁塞點前,三個傳輸協議的動作基本相同。擁塞出現后,三個協議都會采用相似的擁塞控制算法,調整速率,占用的帶寬都會顯著減少。當擁塞非常嚴重,原來路徑很難正常使用時,SCTP會自動調整通信連接,即轉移本關聯目的地址。而改進SCTP會根據現有的幾個可用連接,選擇一條可用帶寬最大的通信連接,所以占用帶寬在調整后不會小于一般SCTP占用帶寬。對于TCP,最幸運的情況是TCP不會中斷,而是一直維持一個占用帶寬很小的通信連接。所以,在調整點后,可以看到出現了三個明顯的分支。
?
2.2 改進方案
改進SCTP的方案首先確定Primary destination address調整時機,其次確定一個及時而且比較準確的可用帶寬測試模塊,選擇可用帶寬最大的通信連接。
本文考慮了三個Primary destination address調整時機:SCTP關聯初始化、SCTP關聯正在使用的連接遇到嚴重的網絡擁塞和關聯正在使用的連接出現故障中斷。SCTP關聯初始化時,通過測試現有幾個連接的可用帶寬,找到對應最大帶寬的傳輸接口" title="傳輸接口">傳輸接口來設定Primary destination address。關聯正在使用的連接遇到嚴重的網絡擁塞時,如果擁塞持續時間過長,就應該考慮改變傳輸接口,以提高傳輸速度。關聯正在使用的連接出現故障中斷時,SCTP默認方式是尋找一個可用的通信連接;而改進的方式是在測試可用帶寬后,選擇一個帶寬最大的連接,找到對應最大帶寬的傳輸接口來設定Primary destination address。
帶寬測試模塊用來發現一個可用帶寬最大的通信連接,作為改進SCTP的一個輔助模塊應該在較短時間內發現可用帶寬。這里需要使用自加載周期性探測流SLoPS(Self-Loading Periodic Stream)帶寬測試算法,如工具pathload[3][4]、pathchirp[5]的算法等來設計測試模塊。根據現有連接的可用帶寬,選擇可用帶寬最大的通信連接。
2.3方案實現
調整SCTP源代碼如下:
void SctpAgent::RtxMarkedChunks(SctpRtxLimit_E eLimit)
{
……
?//原SCTP調整Primary destination的方法,注釋掉
//spRtxDest = GetNextDest(spCurrBuffNodeData->spDest);?
//新的Primary destination設置方法,上述一行代碼替代為下面代碼
spRtxDest = GetInterfaceMaxAW();
……
}
SctpDest_S SctpAgent::GetInterfaceMaxAW()
{
(1)掃描除當前Primary destination外的每個接口,在其上執行自載流折半查找算法BinarySearchSL(),測試多個接口對應路徑的可用帶寬;
(2) 從測試結果中找出可用帶寬最大的路徑,返回該路徑對應的目的接口;
}
long BinarySearchSL(SctpDest_S *)
{
//自載流折半查找算法實現;
}
3 實驗仿真
仿真軟件采用NS2[6],版本為2.29。仿真網絡結構如圖3,網絡中布置的兩個主機H0和H1都是多宿的,H0配置有if0、if1和if2三個接口,H1配置有if0、if1和if2三個接口。另外還有6個中間節點N0、N1、N2、N3、N4和N5。這樣,在主機H0與H1之間形成了三條路徑:(H0_if0,N0,N3,H1_if0)、(H0_if1,N1,N4,H1_if1)和(H0_if2,N2,N5,H1_if2)。
?H0 向H1發送300KB的數據,應用層采用FTP協議,傳輸層采用SCTP協議,比較下面三個場景下數據傳輸花費的時間,仿真時間為10秒。
?
場景一,原SCTP實現,網絡中沒有背景流量。
場景二,原SCTP實現,模擬在擁塞時默認調整primary-destination的情況。鏈路" title="鏈路">鏈路(N0,N3)上有CBR流,速率為490kbps,形成擁塞;鏈路(N1,N4)上有CBR流,速率為100kbps,可用帶寬為400kbps;鏈路(N2,N5)空閑,可用帶寬為500kbps,路徑(H0_if0,N0,N3,H1_if0)不可用,SCTP自動把傳輸路徑轉向下一個可用路徑(H0_if1,N1,N4,H1_if1),調整primary-destination為H1的if1。
場景三,改進的SCTP實現,模擬SCTP在擁塞時根據可用帶寬最大路徑調整primary-destination的情況。鏈路(N0,N3)上有CBR流,速率為490kbps,形成擁塞;鏈路(N1,N4)上有CBR流,速率為100kbps,可用帶寬為400kbps;鏈路(N2,N5)空閑,可用帶寬為500kbps。路徑(H0_if0,N0,N3,H1_if0)不可用,改進SCTP,及時發現三條傳輸路徑上的可用帶寬,并選擇可用帶寬最大的路徑(H0_if2,N2,N5,H1_if2),調整primary-destination為H1的if2。
圖4對比了這三種場景的數據傳輸時間和丟包數。場景一因為沒有背景流量,網絡狀況良好,所以傳輸時間最快;場景二因為網絡中出現了擁塞,傳輸時間延長了;場景三中也出現了擁塞,由于及時選擇了可用帶寬最大路徑作為新路徑的策略,所以傳輸時間明顯要少于場景二;場景一中丟包情況最少,場景二和場景三因為擁塞出現了較多的丟包,二者丟包數目相當也說明采用本文的SCTP改進策略,不會為原來的SCTP帶來其它不良影響。
?
圖5反映了在10秒的仿真過程中,場景二、三中SCTP關聯的連接可使用的帶寬情況。此圖說明,場景三中由于按最大可用帶寬調整了傳輸路徑,擁塞發生后,原有的數據傳輸仍有較大的可用帶寬提供使用。
?
從上述數據來看,根據最大可用帶寬來調整Primary destination address,可以提高SCTP的吞吐量,加快傳輸速度。
本文提出的基于可用帶寬Primary destination address選擇策略的SCTP協議改進,在仿真平臺上進行了驗證性實驗,證明改進后可以提高網絡性能參數,同時存在測量可用帶寬程序運行時間長等缺點,有待下一步改進。
參考文獻
[1]?STEWART R, XIE Q. RFC 2960: Stream control transmissionprotocol[S].2000.
[2]?IYENGAR J R. Concurrent multipath transfer using sctpmultihoming. In SPECTS 2004,San Jose, July 2004.
[3] ?JAIN M, DOVROLIS C. Pathload: A measurement tool for end-to-endAvailable bandwidth. Passive and active measurements workshop, Fort Collins CO., 2002-03.
[4] ?JAIN M and DOVROLIS C. End-to-End available bandwidth: measurement methodology, dynamics, and relation
?with TCP throughput. IEEE/ACM Trans. on Networking,?2003,11(4):537-549.
[5]?RIBEIRO V, RIEDI R, BARANIUK R, et al. Pathchirp:efficient available bandwidth estimation for network paths.?In Proceedings of passive and active measurements (PAM)?workshop, Apr. 2003.
[6]? The Network Simulator-ns-2 [EB/OL].?http://www.isi.edu/nsnam/ns/
[7]? 信息產業部電信研究院.流控制傳送協議(SCTP) 技術規范(V1.0)[S],2000.