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