本發(fā)明涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種基于SCTP的網(wǎng)絡(luò)地址轉(zhuǎn)換方法。
背景技術(shù):
流量控制協(xié)議(SCTP)是一種用以IP網(wǎng)絡(luò)中新的傳輸層協(xié)議,其基于TCP協(xié)議的基礎(chǔ)上改進(jìn)而來,并與IPv6網(wǎng)絡(luò)協(xié)議相結(jié)合,以在IP網(wǎng)絡(luò)上傳輸消息為目的的一種傳輸層協(xié)議。SCTP結(jié)合了用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol,UDP)保留邊界的報(bào)文傳輸和TCP可靠有序的特點(diǎn)。同時(shí),SCTP還支持多歸屬功能和多流功能,尤其是多歸屬功能使得SCTP可以用于異構(gòu)網(wǎng)絡(luò)接入場(chǎng)景中,作為異構(gòu)網(wǎng)絡(luò)無縫切換首選的傳輸層解決方案,有效彌補(bǔ)了TCP或者UDP無法解決異構(gòu)網(wǎng)絡(luò)切換問題的不足,使得SCTP在IPv6網(wǎng)絡(luò)進(jìn)入目前主流的IPv4網(wǎng)絡(luò)之中,用于構(gòu)建異構(gòu)接入網(wǎng)絡(luò)無縫切換的應(yīng)用場(chǎng)景。
供應(yīng)商(例如云計(jì)算供應(yīng)商)都是同時(shí)租用多條鏈路來為功用戶提供互聯(lián)網(wǎng)接入或者云計(jì)算產(chǎn)品服務(wù)。由于IPv4地址資源有限,因此需要進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換。NAT網(wǎng)關(guān)通過IP包頭地址和協(xié)議頭端口轉(zhuǎn)換來實(shí)現(xiàn)內(nèi)網(wǎng)與外網(wǎng)間的通信。為了充分利用有限的IP地址資源,經(jīng)過NAT轉(zhuǎn)換后的內(nèi)網(wǎng)地址會(huì)分布在供應(yīng)商的服務(wù)器的資源池中,并通過負(fù)載均衡設(shè)備實(shí)現(xiàn)內(nèi)網(wǎng)地址分配,以實(shí)現(xiàn)用戶對(duì)特定資源或者應(yīng)用所發(fā)起的訪問,以實(shí)現(xiàn)負(fù)載均衡。
SCTP在實(shí)現(xiàn)可靠傳輸和擁塞控制機(jī)制源于傳統(tǒng)的TCP。與TCP相比,SCTP增加了對(duì)多宿主(Multi-horming)的支持。一個(gè)SCTP報(bào)文包含了一個(gè)公共的報(bào)文頭(common header)與若干數(shù)據(jù)塊(chunk)。每個(gè)數(shù)據(jù)塊中既可以包含控制信息,也可以包含用戶數(shù)據(jù)。除了INIT、INIT_ACK和SHUTDOWN_COMPLETE外,其他類型的多個(gè)數(shù)據(jù)塊可以捆綁在一個(gè)SCTP報(bào)文中,以滿足對(duì)低層時(shí)適合通路(Maximum Transmission Unit,MTU)大小的要求。
但是,在現(xiàn)有NAT網(wǎng)關(guān)在SCTP多宿主的數(shù)據(jù)包轉(zhuǎn)發(fā)過程中,存在內(nèi)網(wǎng)與外網(wǎng)SCTP兩端無法建立數(shù)據(jù)報(bào)文鏈接的問題。其原因是,基于現(xiàn)有技術(shù)中的SCTP在用戶與服務(wù)器建立鏈接的過程中,需要通過四次握手以完成鏈接。雖然現(xiàn)有技術(shù)中存在對(duì)UDP包頭的再封裝技術(shù),但是這種現(xiàn)有技術(shù)并不適合多宿主的場(chǎng)合,因?yàn)樵诙嗨拗鞯膱?chǎng)合,Client端與Server端之間IP地址是無法實(shí)現(xiàn)有效識(shí)別,從而導(dǎo)致握手失敗。由于在多次握手過程中,會(huì)向?qū)Χ嗣枋霰径说亩噫溌返刂罚捎趦?nèi)網(wǎng)與外網(wǎng)的IP地址的描述方式的差異,從而導(dǎo)致本端與對(duì)端之間無法互通,并且存在操作不透明的缺陷。在現(xiàn)有技術(shù)中,為了在多宿主的應(yīng)用場(chǎng)景下,需要在Client端與Server端之間均執(zhí)行相應(yīng)的配置操作,從而存在配置繁瑣的問題。
有鑒于此,有必要對(duì)目前云服務(wù)的服務(wù)器中的網(wǎng)關(guān)及防火墻中的NAT功能或者NAT設(shè)備進(jìn)行優(yōu)化,以解決上述問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于公開一種基于SCTP的網(wǎng)絡(luò)地址轉(zhuǎn)換方法,用以在多宿主的應(yīng)用環(huán)境下的網(wǎng)絡(luò)地址轉(zhuǎn)換,以實(shí)現(xiàn)內(nèi)網(wǎng)與外網(wǎng)兩端的主機(jī)能夠識(shí)別對(duì)端的網(wǎng)絡(luò)地址,以建立多宿主環(huán)境下的SCTP鏈接,同時(shí)提高網(wǎng)絡(luò)地址轉(zhuǎn)換過程的透明性。
為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明提供了基于SCTP的網(wǎng)絡(luò)地址轉(zhuǎn)換方法,其特征在于,根據(jù)已知的內(nèi)網(wǎng)與外網(wǎng)的IP參數(shù)列表分別預(yù)先構(gòu)建彼此獨(dú)立且被配置以形成為互為映射關(guān)系的兩個(gè)哈希表,在建立SCTP偶聯(lián)時(shí),對(duì)通過查找兩個(gè)哈希表,將內(nèi)網(wǎng)IP與外網(wǎng)IP作整體替換。
作為本發(fā)明的進(jìn)一步改進(jìn),該方法具體包括以下步驟:
S1、在建立SCTP偶聯(lián)的過程中,根據(jù)外網(wǎng)IP構(gòu)建握手信息中的INIT或者INIT_ACK所包含的IP chunk參數(shù),并根據(jù)IP chunk參數(shù)的格式將外網(wǎng)IP映射到預(yù)先構(gòu)建的第一哈希表中,根據(jù)內(nèi)網(wǎng)IP構(gòu)建握手信息中的INIT及INIT_ACK所包含的IP chunk參數(shù),并根據(jù)IP chunk參數(shù)的格式將內(nèi)網(wǎng)IP映射到預(yù)先構(gòu)建的第二哈希表,所述第一哈希表與第二哈希表之間配置為映射關(guān)系;
S2、篩選出INIT或者INIT_ACK所包含的IP chunk參數(shù)的幀結(jié)構(gòu),根據(jù)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方向,在第一哈希表或者第二哈希表中查找到含源端IP地址集中的IP chunk參數(shù),計(jì)算對(duì)應(yīng)IP chunk參數(shù)的哈希值;
S3、以步驟S2中的哈希值為索引,遍歷查找第二哈希表,以根據(jù)第一哈希表和第二哈希表的映射關(guān)系,找到第一哈希表所對(duì)應(yīng)的預(yù)先構(gòu)建的含外網(wǎng)IP地址集的IP chunk參數(shù),并作整體替換。
作為本發(fā)明的進(jìn)一步改進(jìn),所述INIT及INIT_ACK的參數(shù)類型是0x1或0x2;所述IP chunk參數(shù)的參數(shù)類型是0x5或0x6。
作為本發(fā)明的進(jìn)一步改進(jìn),還包括,當(dāng)數(shù)據(jù)報(bào)文自外網(wǎng)發(fā)送至內(nèi)網(wǎng)時(shí),執(zhí)行DNAT操作;當(dāng)數(shù)據(jù)報(bào)文自內(nèi)網(wǎng)發(fā)送至外網(wǎng)時(shí),執(zhí)行SNAT操作。
作為本發(fā)明的進(jìn)一步改進(jìn),所述在執(zhí)行步驟S3之后,包括:重新計(jì)算SCTP包頭校驗(yàn)值的步驟。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:在SCTP多宿主建立偶聯(lián)的過程中,避免了握手信息中由于存在多IP時(shí)需要進(jìn)行逐條轉(zhuǎn)換并替換的缺陷,降低了網(wǎng)絡(luò)地址轉(zhuǎn)換的復(fù)雜性,減低了NAT設(shè)備的負(fù)荷。
附圖說明
圖1為基于本發(fā)明在一種網(wǎng)絡(luò)實(shí)例中基于SCTP進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換的示意圖;
圖2為SCTP的數(shù)據(jù)格式圖;
圖3為INIT的數(shù)據(jù)格式圖;
圖4為INIT_ACK的數(shù)據(jù)格式圖;
圖5為由內(nèi)網(wǎng)IP構(gòu)建的INIT及INIT_ACK的數(shù)據(jù)格式圖;
圖6為根據(jù)INIT及INIT_ACK的幀結(jié)構(gòu)查找本端IP地址集或者對(duì)端IP地址集的數(shù)據(jù)格式圖。
圖7為預(yù)先構(gòu)建并被配置為映射關(guān)系的第一哈希表與第二哈希表的示意圖;
具體實(shí)施方式
下面結(jié)合附圖所示的各實(shí)施方式對(duì)本發(fā)明進(jìn)行詳細(xì)說明,但應(yīng)當(dāng)說明的是,這些實(shí)施方式并非對(duì)本發(fā)明的限制,本領(lǐng)域普通技術(shù)人員根據(jù)這些實(shí)施方式所作的功能、方法、或者結(jié)構(gòu)上的等效變換或替代,均屬于本發(fā)明的保護(hù)范圍之內(nèi)。
請(qǐng)參圖1至圖6所示出的本發(fā)明一種基于SCTP的網(wǎng)絡(luò)地址轉(zhuǎn)換方法的一種具體實(shí)施方式。
在本實(shí)施方式中,SNAT操作是指,內(nèi)網(wǎng)設(shè)備經(jīng)過防火墻(或路由器等)接入到互聯(lián)網(wǎng)時(shí),按內(nèi)網(wǎng)設(shè)備的所具有的不同IP地址,對(duì)應(yīng)選擇不同的外網(wǎng)接口(電信、聯(lián)通等)。即,根據(jù)源IP地址在網(wǎng)絡(luò)出口進(jìn)行對(duì)應(yīng)設(shè)置。DNAT操作是指,外網(wǎng)(互聯(lián)網(wǎng))用戶訪問向內(nèi)網(wǎng)防火墻的外網(wǎng)IP所提供的服務(wù)(http、ssh、ftp等)時(shí),將防火墻外網(wǎng)IP提供的服務(wù)映射回防火墻的DMZ服務(wù)器或者內(nèi)網(wǎng)服務(wù)器。
預(yù)先構(gòu)建內(nèi)網(wǎng)IP與外網(wǎng)IP的參數(shù)列表并建立相關(guān)哈希表為索引,對(duì)SCTP多宿主(multi-homing)情況下的雙向握手信息,如INIT及INIT_ACK所包含的內(nèi)網(wǎng)地址或者外網(wǎng)地址集作整體替換,避免了握手信息攜帶多IP情況下依次對(duì)所含IP進(jìn)行比對(duì)替換,降低了替換的復(fù)雜度,從而高效建立SCTP多宿主鏈接,降低了NAT設(shè)備對(duì)內(nèi)、外網(wǎng)在IP地址轉(zhuǎn)換過程中的復(fù)雜性與可靠性。
需要說明的是,在本說明書中術(shù)語“內(nèi)網(wǎng)”與術(shù)語“外網(wǎng)”是相對(duì)而言的,術(shù)語“源IP地址”與術(shù)語“目的IP地址”也是相對(duì)而言的,并可根據(jù)數(shù)據(jù)報(bào)文的流向確定“內(nèi)網(wǎng)”與“外網(wǎng)”、“源IP地址”與“目的IP地址”。
本實(shí)施例所示出的基于SCTP的網(wǎng)絡(luò)地址轉(zhuǎn)換方法用于在建立SCTP偶聯(lián)過程中用于為內(nèi)網(wǎng)與外網(wǎng)兩端的主機(jī)(HOST)正確識(shí)別對(duì)端的IP地址,從而建立SCTP多宿主(Multi Homing)鏈接。
參圖1所示,根據(jù)已知內(nèi)網(wǎng)IP、外網(wǎng)IP及端口信息對(duì)內(nèi)網(wǎng)IP、外網(wǎng)IP的IP地址進(jìn)行替換。IP地址和端口分別包含源IP地址和目的IP地址,SCTP源端口和目的端口。
首先根據(jù)數(shù)據(jù)報(bào)文的數(shù)據(jù)流轉(zhuǎn)發(fā)方向,分別對(duì)IP頭部Source Address或Destination Address對(duì)進(jìn)行NAT操作。
若數(shù)據(jù)報(bào)文從網(wǎng)關(guān)或防火墻內(nèi)部發(fā)往外部(即外網(wǎng)),則進(jìn)行SNAT操作。例如,將源IP地址由172.16.1.2替換為NAT設(shè)備外部地址10.10.1.2相應(yīng)代碼如下所示:ip->ip_src.s_addr=outerIp。
若數(shù)據(jù)報(bào)文從網(wǎng)關(guān)或防火墻外部發(fā)往內(nèi)部(即內(nèi)網(wǎng)),則進(jìn)行DNAT操作。例如,將目的IP地址由10.10.1.2替換為NAT設(shè)備外部地址172.16.1.2,則相應(yīng)代碼如下所示:ip->ip_dst.s_addr=innerIp。
結(jié)合圖7所示,在本實(shí)施例中,避免了對(duì)內(nèi)網(wǎng)IP或者內(nèi)網(wǎng)IP進(jìn)行過多描述,降低了NAT設(shè)備的開銷,提高了建立SCTP偶聯(lián)過程中的網(wǎng)絡(luò)地址轉(zhuǎn)換效率。該基于SCTP的網(wǎng)絡(luò)地址轉(zhuǎn)換方法具體包括以下步驟。
步驟S1、在建立SCTP偶聯(lián)的過程中,根據(jù)外網(wǎng)IP構(gòu)建握手信息中的INIT或者INIT_ACK所包含的IP chunk參數(shù),并根據(jù)IP chunk參數(shù)的格式將外網(wǎng)IP映射到預(yù)先構(gòu)建的第一哈希表10中,根據(jù)內(nèi)網(wǎng)IP構(gòu)建握手信息中的INIT及INIT_ACK所包含的IP chunk參數(shù),并根據(jù)IP chunk參數(shù)的格式將內(nèi)網(wǎng)IP映射到預(yù)先構(gòu)建的第二哈希表20,所述第一哈希表10與第二哈希表20之間配置為映射關(guān)系。在本實(shí)施例中,步驟S1所構(gòu)建出的IP chunk參數(shù)的數(shù)據(jù)格式參圖5中虛線框中的內(nèi)容所示。
該步驟S1中,該INIT或者INIT_ACK的參數(shù)類型是0x1或0x2。SCTP、INIT及INIT_ACK的數(shù)據(jù)格式分別參圖2、圖3及圖4所示。
需要說明的是,在本實(shí)施方式中,該第一哈希表10與第二哈希表20均根據(jù)握手信息中的INIT及INIT_ACK所包含的IP chunk參數(shù)預(yù)先構(gòu)建并存儲(chǔ)于計(jì)算機(jī)中,當(dāng)然可僅根據(jù)INIT或者INIT_ACK中任意一個(gè)消息類型所含的IP chunk參數(shù)單獨(dú)預(yù)先構(gòu)建該第一哈希表10與第二哈希表20,用以表征內(nèi)網(wǎng)IP與外網(wǎng)IP的屬性。
在本實(shí)施方式中,篩選出INIT或者INIT_ACK所包含的IP chunk的幀結(jié)構(gòu)的代碼如下所示:
示范性的,參圖1所示,在本實(shí)施例中,在網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備(NAT)內(nèi)部使用了三個(gè)外網(wǎng)IP,即172.10.1.2、172.12.1.2、172.14.1.2,而在網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備(NAT)則分別映射10.10.1.0/24、10.12.1.0/24和10.14.1.0/24的網(wǎng)絡(luò)。
內(nèi)網(wǎng)IP構(gòu)建出如圖5所示出的由內(nèi)網(wǎng)IP構(gòu)建的INIT及INIT_ACK的格式圖。
步驟S2、篩選出的INIT或者INIT_ACK所包含的IP chunk參數(shù)的幀結(jié)構(gòu),根據(jù)數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)方向,在第一哈希表10或者第二哈希表20中查找含源端IP地址集中的IP chunk參數(shù),并計(jì)算IP chunk參數(shù)的哈希值。其中,IP chunk參數(shù)的參數(shù)類型是0x5或0x6。實(shí)現(xiàn)該步驟S2的代碼如下所示:
步驟S3、以步驟S2中計(jì)算得到的哈希值為索引,遍歷查找第二哈希表20,并根據(jù)第一哈希表10與第二哈希表20的映射關(guān)系,找到第一哈希表10所對(duì)應(yīng)的預(yù)先構(gòu)建的外網(wǎng)IP地址集的IP Chunk參數(shù),并作整體替換。
在進(jìn)行INIT或INIT_ACK含IP chunk參數(shù)的內(nèi)網(wǎng)與外網(wǎng)之間實(shí)現(xiàn)NAT轉(zhuǎn)換時(shí),只需對(duì)從網(wǎng)關(guān)或防火墻內(nèi)部發(fā)往外部的報(bào)文數(shù)據(jù)進(jìn)行SNAT操作,從外部發(fā)往網(wǎng)關(guān)或防火墻內(nèi)部的無需操作,相應(yīng)代碼如下所示:
rte_memcpy(chunk_dst,chunk_outerIP,chunk_len);
在步驟S3中,若遍歷查找失敗,則根據(jù)現(xiàn)有技術(shù)中的NAT轉(zhuǎn)換方法逐一檢查INIT及INIT_ACK中所對(duì)應(yīng)的IP并逐一進(jìn)行替換,且相應(yīng)代碼如下所示:
由于上述步驟S3中,對(duì)SCTP消息進(jìn)行了修改,需要對(duì)SCTP checksum進(jìn)行重新計(jì)算,以避免由于SCTP checksum校驗(yàn)失敗被鏈路上其他協(xié)議棧丟棄,SCTP checksum的具體計(jì)算方法不在本專利描述范圍內(nèi),并可參考https://tools.ietf.org/html/rfc4960所示。
優(yōu)選的,在步驟S3執(zhí)行完畢之后,還包括重新計(jì)算SCTP包頭校驗(yàn)值(CRC)的步驟,以保證數(shù)據(jù)報(bào)文在經(jīng)過NAT設(shè)備執(zhí)行網(wǎng)絡(luò)地址轉(zhuǎn)換后,數(shù)據(jù)的一致性與正確性。
上文所列出的一系列的詳細(xì)說明僅僅是針對(duì)本發(fā)明的可行性實(shí)施方式的具體說明,它們并非用以限制本發(fā)明的保護(hù)范圍,凡未脫離本發(fā)明技藝精神所作的等效實(shí)施方式或變更均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
對(duì)于本領(lǐng)域技術(shù)人員而言,顯然本發(fā)明不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本發(fā)明。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化囊括在本發(fā)明內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。
此外,應(yīng)當(dāng)理解,雖然本說明書按照實(shí)施方式加以描述,但并非每個(gè)實(shí)施方式僅包含一個(gè)獨(dú)立的技術(shù)方案,說明書的這種敘述方式僅僅是為清楚起見,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)將說明書作為一個(gè)整體,各實(shí)施例中的技術(shù)方案也可以經(jīng)適當(dāng)組合,形成本領(lǐng)域技術(shù)人員可以理解的其他實(shí)施方式。