樊占軍 高 超
(91336部隊 河北 066000)
流控制傳輸協(xié)議(SCTP)是一種可靠的傳輸協(xié)議,它在兩個端點之間提供穩(wěn)定、有序的數(shù)據(jù)傳遞服務(wù)(類似于TCP),并且可以保護數(shù)據(jù)消息邊界(類似UDP)。然而與TCP和UDP不同的是,SCTP是通過多宿主(Multi-homing)和多流(Multi-streaming)功能提供這些收益的,這兩種功能均可提高可用性。盡管SCTP協(xié)議最初是為發(fā)送電話信號而設(shè)計的,但其帶來了一個意外的突破:它通過借鑒UDP的優(yōu)點解決了TCP的某些局限。它提供的特性使套接字初始化的可用性、可靠性和安全性都得以提高。
NAT技術(shù)作為一種關(guān)鍵的網(wǎng)絡(luò)技術(shù),不管是在廣域網(wǎng)中還是局域網(wǎng)中都起到了不可忽視的作用,其有效解決了IP地址短缺和IP地址沖突的問題。然而NAT技術(shù)在推廣之初只是為適應(yīng)TCP協(xié)議和UDP的通信而設(shè)計的,在使用SCTP的過程當(dāng)中,我們發(fā)現(xiàn)了一些普遍存在的問題,就是SCTP報文在當(dāng)前的IP網(wǎng)絡(luò)中的轉(zhuǎn)發(fā)與NAT設(shè)備無法兼容的問題,這樣就限制了SCTP協(xié)議的應(yīng)用場所。
針對NAT對SCTP產(chǎn)生限制所體現(xiàn)出來的具體問題,根據(jù)實際情況提出了新的解決方案。
與TCP相同的是,SCTP中對新連接的初始化時通過報文握手來完成的,但TCP使用的是三次握手而SCTP使用的是四次握手,當(dāng)服務(wù)器端和客戶端在沒有NAT設(shè)備的IP網(wǎng)絡(luò)中使用SCTP進行同一個層級的網(wǎng)絡(luò)進行數(shù)據(jù)傳輸時,通信能順利達成。通信的過程如圖1所示:
圖1 SCTP連接初始化過程(無NAT)
當(dāng)客戶端和服務(wù)器端分布在不同級別的兩個網(wǎng)絡(luò)中,并且它們的通信需要通過NAT設(shè)備時,通信無法達成。利用抓包軟件對數(shù)據(jù)包進行跟蹤分析,發(fā)現(xiàn)服務(wù)器端無法收到客戶端的發(fā)送的INIT請求報文,通信終端過程如圖2所示。
圖2 SCTP連接初始化過程(有NAT)
據(jù)圖2所示,分析得知報文在通過NAT設(shè)備時丟失。NAT設(shè)備為了完成完整的內(nèi)網(wǎng)和外網(wǎng)地址轉(zhuǎn)換功能,必須對傳輸層協(xié)議的端口號進行轉(zhuǎn)換。而現(xiàn)有IPV4網(wǎng)絡(luò)中大多數(shù)NAT設(shè)備對傳輸層協(xié)議的支持權(quán)限于傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報協(xié)議(UDP),不支持流控制協(xié)議(SCTP)。這導(dǎo)致現(xiàn)有商用的NAT設(shè)備收到SCTP報文后無法對其進行內(nèi)網(wǎng)與外網(wǎng)地址間的映射,而直接丟棄,造成了SCTP無法在含有NAT設(shè)備的現(xiàn)有IP網(wǎng)絡(luò)中使用。
由于NAT支持既有的用戶數(shù)據(jù)報協(xié)議(UDP),可以在客戶端把需要發(fā)送的 SCTP報文偽裝成 UDP報文進行發(fā)送,當(dāng)UDP報文抵達服務(wù)器端時,再把其還原成原來的SCTP報文就可以了。其具體實施過程如下:
在使用SCTP協(xié)議的終端的網(wǎng)絡(luò)協(xié)議棧中部署UDP封裝/解封裝層。該層位于SCTP協(xié)議層和網(wǎng)際協(xié)議IP層之間,主要工作時在SCTP報文前包裹一層UDP隧道,偽裝成UDP包,利用NAT對UDP報文原生的支持來克服NAT對SCTP協(xié)議的不兼容性。經(jīng)過UDP隧道頭包裝后的SCTP報文結(jié)構(gòu)如圖3所示:
圖3 偽裝后的SCTP報文
圖3所示經(jīng)過UDP隧道頭包裝過的SCTP報文在通過NAT設(shè)備的時候是被認為和普通的UDP報文是相同的,這樣SCTP報文就能順利的在NAT設(shè)備中進行通信了。整個通信過程關(guān)鍵就是對SCTP報文進行了UDP隧道頭的處理。處理流程如圖4所示:
圖4 SCTP報文UDP隧道頭處理過程
該流程包括以下步驟:
(1)發(fā)送端的UDP封裝層收到傳輸層發(fā)來的SCTP報文后,在SCTP報文頭前插入UDP隧道頭,它的目的IP地址和源IP地址取自于SCTP報文中的目的IP地址和源IP地址;
(2)封裝后的SCTP報文被看作為標準的UDP報文在NAT發(fā)送端的傳輸層進行處理;
(3)接收端收到NAT發(fā)送過來的UDP報文后,根據(jù)UDP隧道頭的標識符號進行判斷此報文是包裹著 UDP隧道頭的SCTP報文還是標準的UDP報文;
(4)若是UDP隧道報文,則將報文送入UDP解封裝層,該層提取UDP隧道頭中的目的IP地址和源IP地址的信息,分別填充到標準SCTP頭中的對應(yīng)域中,UDP隧道頭將會被刪掉,還原成標準的SCTP報文;
(5)若是標準的UDP報文,則送入標準的UDP協(xié)議棧進行處理。提出的內(nèi)存不影響標準TCP/IP協(xié)議棧的工作流程。
通過sniffer抓包軟件對網(wǎng)絡(luò)中的流量進行抓包分析,經(jīng)過UDP隧道頭封裝后的SCTP(INIT)報文從內(nèi)網(wǎng)地址觸發(fā),經(jīng)NAT設(shè)備轉(zhuǎn)換后到達外網(wǎng),并且可以在內(nèi)網(wǎng)中收到外網(wǎng)的回復(fù)(INIT_ACK),通信達成,測試成功。
本文從修改 NAT設(shè)備收發(fā)端的SCTP協(xié)議的部分功能出發(fā),針對NAT對IPV4網(wǎng)絡(luò)中SCTP報文阻斷的兩個問題提出了適當(dāng)?shù)慕鉀Q方法。這兩個解決方法對原IPV4網(wǎng)絡(luò)中的NAT設(shè)備不需做任何變動就可以實現(xiàn)SCTP報文在NAT設(shè)備中的通信,能夠幫助SCTP更快地實現(xiàn)在當(dāng)前網(wǎng)絡(luò)中的應(yīng)用,從部分功能上解決了SCTP和NAT設(shè)備在通信中的兼容性問題。
[1]沈伊,夏靖波,周漢勛.SCTP協(xié)議在雷達情報傳輸中的應(yīng)用研究[J],通信技術(shù),2008.
[2]李愛國.SCTP在工業(yè)以太網(wǎng)通信技術(shù)中的應(yīng)用研究.現(xiàn)代通信技術(shù),2012.2.
[3]李健.基于SCTP多歸屬主機特性的多路徑傳輸算法研究.重慶郵電學(xué)院學(xué)報,2005.