專(zhuān)利名稱(chēng):一種tcp連接與sctp連接互通的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信令通信的技術(shù)領(lǐng)域,特別是涉及一種TCP連接與SCTP連接互通的方法及一種TCP連接與SCTP連接互通的裝置。
背景技術(shù):
在過(guò)去的20年內(nèi),作為一種可靠的數(shù)據(jù)傳輸方式,TCP提供了許多應(yīng)用服務(wù),但隨著IP網(wǎng)的多業(yè)務(wù)化,尤其是VolP的發(fā)展,TCP出現(xiàn)了很多局限性,例如對(duì)于VolP信令及異步基于事務(wù)應(yīng)用的處理。為適應(yīng)IP網(wǎng)成為電信運(yùn)營(yíng)核心網(wǎng)的發(fā)展趨勢(shì),IETF的信令傳輸工作組(SIGTRAN) —直在研究和制定IP網(wǎng)新一代的傳輸協(xié)議,并在IETF RFC 2960中定義了流控制傳輸協(xié)議(SCTP,Stream Control Transmission Protocol)。SCTP 是面向連接的可靠傳送協(xié)議,它向上層應(yīng)用提供了下列服務(wù)應(yīng)用數(shù)據(jù)的無(wú)錯(cuò)誤無(wú)重復(fù)的可靠傳輸; 根據(jù)檢測(cè)到的MTU長(zhǎng)度進(jìn)行數(shù)據(jù)包分段處理,避免IP層的分段;在多個(gè)流間的用戶(hù)消息有序遞交及單用戶(hù)消息按到達(dá)順序遞交的選項(xiàng);以及,通過(guò)支持關(guān)聯(lián)的多宿端特性,實(shí)現(xiàn)網(wǎng)絡(luò)級(jí)容錯(cuò)。目前,IEFT將SCTP傳輸層協(xié)議作為主要研究目的,與TCP和UDP共筑于IP層之上。同TCP —樣,SCTP提供面向連接的、點(diǎn)到點(diǎn)的可靠傳輸,它繼承了 TCP強(qiáng)大的擁塞控制、 數(shù)據(jù)包丟失發(fā)現(xiàn)等功能,任何在TCP上運(yùn)行的應(yīng)用都可被移至SCTP上運(yùn)行。不同于TCP的是,SCTP提供了許多對(duì)于信令傳輸很重要的功能,同時(shí),對(duì)于其他一些對(duì)性能和可靠性有額外需要的應(yīng)用,它能提供傳輸優(yōu)勢(shì)來(lái)滿(mǎn)足這些需要。SCTP和TCP最大的區(qū)別在于SCTP對(duì)多宿(multihoming)和部分有序(partialordering)的支持。SCTP的多宿使得每個(gè)端點(diǎn)可被多個(gè)傳輸?shù)刂吩L(fǎng)問(wèn)到,選擇不同傳輸?shù)刂窌?huì)導(dǎo)致兩個(gè)端點(diǎn)間不同的數(shù)據(jù)路徑。由于TCP協(xié)議使用非常廣泛而且歷史悠久,基于TCP協(xié)議開(kāi)發(fā)的上層應(yīng)用程序非常豐富,并廣泛地使用在各種通信設(shè)備系統(tǒng)中;而SCTP協(xié)議是一種新的傳輸協(xié)議,相比于 TCP協(xié)議有很多優(yōu)勢(shì),如安全性、多歸屬、多流等特性。但是,由于SCTP協(xié)議及其上層應(yīng)用的開(kāi)發(fā)是比較新的,而且很多功能特性也在逐漸完善中,很多上層應(yīng)用協(xié)議,如Diameter協(xié)議、SIP協(xié)議就規(guī)定其底層傳輸協(xié)議既可以使用TCP協(xié)議,也可以使用SCTP協(xié)議。在這種情況下,有些廠(chǎng)商使用的底層傳輸協(xié)議是TCP協(xié)議,而另外一些廠(chǎng)商使用的底層傳輸協(xié)議卻是SCTP協(xié)議。如果把使用TCP協(xié)議的上層應(yīng)用協(xié)議強(qiáng)制升級(jí)為使用SCTP協(xié)議作為底層傳輸協(xié)議,則會(huì)耗費(fèi)很大的人力、物力和成本,同時(shí)需要對(duì)正在使用的設(shè)備進(jìn)行升級(jí)。因而, 如何采用一個(gè)TCP協(xié)議和SCTP協(xié)議互通的機(jī)制來(lái)完成底層傳輸協(xié)議的屏蔽,實(shí)現(xiàn)上層應(yīng)用協(xié)議的正常信令通信,成為本領(lǐng)域技術(shù)人員迫切希望解決的一個(gè)技術(shù)問(wèn)題?,F(xiàn)有技術(shù)中,有一個(gè)開(kāi)源的TCP協(xié)議和SCTP協(xié)議互通轉(zhuǎn)換方法(Transparent TCP-to-SCTP Translation Shim Layer),其互通轉(zhuǎn)換方法原理為將TCP協(xié)議的Socket操作映射到SCTP協(xié)議的Socket操作上,即在Shim Layer層將TCP的函數(shù),如connect、recv 禾口 send 等,映射為 SCTP 協(xié)議的函數(shù),如 sctp_connectx、sctp_recvmsg 及 sctp_sendmsg 等,其本質(zhì)上是在Shim Layer層中實(shí)現(xiàn)了一個(gè)模擬層,將TCP協(xié)議的Socket請(qǐng)求映射成為SCTP協(xié)議的Socket請(qǐng)求,其最終使用的傳輸協(xié)議還是SCTP協(xié)議。 具體可以參考圖1所示的一個(gè)TCP客戶(hù)機(jī)(TCP Client)和SCTP服務(wù)器(SCTP Server)使用Shim Layer來(lái)TCP連接與SCTP連接互通的示意圖。在網(wǎng)絡(luò)上傳輸?shù)膮f(xié)議是SCTP協(xié)議,上層應(yīng)用是調(diào)用TCP協(xié)議的Socket接口(TCP Socket)來(lái)實(shí)現(xiàn)TCP客戶(hù)機(jī)和SCTP服務(wù)器之間的通信。為了實(shí)現(xiàn)二者的互通,通過(guò)Shim Layer層將上層應(yīng)用調(diào)用的 TCP 協(xié)議 Socket 操作(TCP Socket)映射為 SCTP 協(xié)議的 Socket 操作(SCTPSocket),這樣上層應(yīng)用真實(shí)調(diào)用的Socket操作實(shí)際為SCTP協(xié)議的操作,Shim Layer層實(shí)現(xiàn)了 TCP協(xié)議和SCTP協(xié)議共性的封裝,屏蔽了二者差異的部分,最終實(shí)現(xiàn)了與SCTP服務(wù)器建立傳輸連接 (SCTPASS0CIATI0N)。可以理解,采用這種方法,對(duì)上層應(yīng)用如Diameter協(xié)議其調(diào)用的是TCP協(xié)議的 Socket接口操作,而實(shí)際上通過(guò)一個(gè)Shim Layer (中介層)將其映射到SCTP協(xié)議的Socket 操作上,最終底層的傳輸協(xié)議的是SCTP協(xié)議。然而,這種現(xiàn)有技術(shù)存在以下技術(shù)缺陷1.使用不靈活,需要修改上層應(yīng)用的TCP\IP協(xié)議棧來(lái)實(shí)現(xiàn),當(dāng)使用的TCP/IP協(xié)議棧是操作系統(tǒng)的協(xié)議棧時(shí),還可能需要重新編譯內(nèi)核來(lái)完成Shim Layer層的添加;2.無(wú)法進(jìn)行非阻塞模式的TCP協(xié)議的Socket數(shù)據(jù)收發(fā)。這主要是因?yàn)镾him Layer 層是應(yīng)用驅(qū)動(dòng)型的,即當(dāng)應(yīng)用在Socket上以阻塞模式請(qǐng)求一個(gè)動(dòng)作時(shí),如Connect或者 Recv,需要通過(guò)Shim Layer層來(lái)將其替換成SCTP協(xié)議的相應(yīng)函數(shù),并且返回其執(zhí)行結(jié)果; 但是當(dāng)采用非阻塞模式時(shí),通過(guò)Select或Poll輪詢(xún)將無(wú)法進(jìn)行相應(yīng)的替換,即Select或者Poll無(wú)法識(shí)別是真實(shí)的SCTP協(xié)議的Socket還是采用Shim Layer層來(lái)模擬TCP協(xié)議的上層應(yīng)用。3.由于Shim Layer層是獨(dú)立的,因此應(yīng)該適配于任何的上層應(yīng)用,但TCP協(xié)議數(shù)據(jù)是流格式,每次收發(fā)報(bào)文可能不是完整的,而SCTP協(xié)議是面向報(bào)文的協(xié)議,每次收發(fā)數(shù)據(jù)邊界都是完整的,如果在Shim Layer層不做處理,則可能會(huì)出現(xiàn)TCP不完整的數(shù)據(jù)包在 SCTP協(xié)議上傳輸而導(dǎo)致對(duì)端接收錯(cuò)誤。因而,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問(wèn)題就是如何創(chuàng)新地提出一種使用TCP連接或者SCTP連接的上層應(yīng)用協(xié)議之間的信令通信機(jī)制,以在不對(duì)現(xiàn)有的上層應(yīng)用及其運(yùn)行的系統(tǒng)進(jìn)行任何修改,不對(duì)上層應(yīng)用的使用進(jìn)行任何限制的基礎(chǔ)上,提高上層應(yīng)用信令傳輸?shù)恼_性及可靠性。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種TCP連接與SCTP連接互通的方法及裝置, 用以在不對(duì)現(xiàn)有的上層應(yīng)用及其運(yùn)行的系統(tǒng)進(jìn)行任何修改,不對(duì)上層應(yīng)用的使用進(jìn)行任何限制的基礎(chǔ)上,提高上層應(yīng)用信令傳輸?shù)恼_性及可靠性。為了解決上述問(wèn)題,本發(fā)明公開(kāi)了一種TCP連接與SCTP連接互通的方法,包括接收源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求,所述請(qǐng)求攜帶有源端與目標(biāo)端的地址信息;所述源端、目標(biāo)端中一端為T(mén)CP主機(jī),另一端為SCTP主機(jī);依據(jù)所述源端與目標(biāo)端的地址信息,發(fā)起目標(biāo)端的通信連接建立過(guò)程;當(dāng)所述目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立過(guò)程。 優(yōu)選的,當(dāng)所述源端為T(mén)CP主機(jī),目標(biāo)端為SCTP主機(jī)時(shí),所述目標(biāo)端通信連接建立的過(guò)程包括向所述SCTP主機(jī)發(fā)送INIT報(bào)文;接收所述SCTP主機(jī)發(fā)送的INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;向所述SCTP主機(jī)發(fā)送C00KIE-ECH0報(bào)文,所述C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;接收所述SCTP主機(jī)發(fā)送的C00KIE-ACK響應(yīng)報(bào)文。優(yōu)選的,所述源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求為T(mén)CP主機(jī)發(fā)送的SYN報(bào)文;所述當(dāng)目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立的過(guò)程包括向所述TCP主機(jī)發(fā)送SYN ACK響應(yīng)報(bào)文;接收所述TCP主機(jī)發(fā)送的ACK報(bào)文。優(yōu)選的,當(dāng)所述源端為SCTP主機(jī),目標(biāo)端為T(mén)CP主機(jī)時(shí),所述目標(biāo)端通信連接建立的過(guò)程包括向所述TCP主機(jī)發(fā)送SYN報(bào)文;接收所述TCP主機(jī)發(fā)送的SYN ACK響應(yīng)報(bào)文;向所述TCP主機(jī)發(fā)送ACK報(bào)文。優(yōu)選的,所述源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求為SCTP主機(jī)發(fā)送的INIT 報(bào)文;所述當(dāng)目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立的過(guò)程包括向所述SCTP主機(jī)發(fā)送INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;接收所述SCTP主機(jī)發(fā)送的C00KIE-ECH0報(bào)文,所述C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;向所述SCTP主機(jī)發(fā)送C00KIE-ACK響應(yīng)報(bào)文。優(yōu)選的,所述的方法,還包括基于所述通信連接進(jìn)行源端與目標(biāo)端之間的數(shù)據(jù)傳輸。優(yōu)選的,所述在源端與目標(biāo)端之間進(jìn)行數(shù)據(jù)傳輸?shù)牟襟E包括接收TCP主機(jī)發(fā)送的TCP流數(shù)據(jù);將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù);將所述SCTP報(bào)文數(shù)據(jù)發(fā)送至SCTP主機(jī)。優(yōu)選的,所述將TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù)的步驟包括按照當(dāng)前通信采用的上層應(yīng)用協(xié)議,提取所述TCP流數(shù)據(jù)中的消息邊界信息;依據(jù)所述消息邊界信息分割當(dāng)前的TCP流數(shù)據(jù),并轉(zhuǎn)換為SCTP報(bào)文數(shù)據(jù)格式。優(yōu)選的,所述當(dāng)前通信采用的上層應(yīng)用協(xié)議為Diameter協(xié)議,所述消息邊界信息根據(jù)所述TCP流數(shù)據(jù)的報(bào)文頭中的消息長(zhǎng)度信息獲得。優(yōu)選的,所述當(dāng)前通信采用的上層應(yīng)用協(xié)議為SIP協(xié)議,所述消息邊界信息根據(jù)所述TCP流數(shù)據(jù)的報(bào)文中的結(jié)束符 和消息體內(nèi)容長(zhǎng)度獲得。優(yōu)選的,所述在源端與目標(biāo)端之間進(jìn)行數(shù)據(jù)傳輸?shù)牟襟E還包括在將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù)之前,緩存所述TCP流數(shù)據(jù)。優(yōu)選的,所述在源端與目標(biāo)端之間進(jìn)行數(shù)據(jù)傳輸?shù)牟襟E還包括接收SCTP主機(jī)發(fā)送的SCTP報(bào)文數(shù)據(jù);將所述SCTP報(bào)文數(shù)據(jù)按照TCP流數(shù)據(jù)的格式發(fā)送至TCP主機(jī)。優(yōu)選的,所述的方法,還包括當(dāng)完成通信或通信連接發(fā)生異常時(shí),終止所述源端與目標(biāo)端之間的通信連接。優(yōu)選的,所述終止通信連接的步驟包括接收源端發(fā)起的與目標(biāo)端斷開(kāi)通信連接的第一請(qǐng)求報(bào)文;依據(jù)所述第一請(qǐng)求報(bào)文向目標(biāo)端發(fā)送斷開(kāi)通信連接的第二請(qǐng)求報(bào)文;接收所述目標(biāo)端針對(duì)所述第二請(qǐng)求報(bào)文回復(fù)的第一響應(yīng)報(bào)文;依據(jù)所述第一響應(yīng)報(bào)文向源端發(fā)送針對(duì)第一請(qǐng)求報(bào)文的第二響應(yīng)報(bào)文;接收源端針對(duì)所述第二響應(yīng)報(bào)文回復(fù)的第一關(guān)閉確認(rèn)報(bào)文;依據(jù)所述第一關(guān)閉確認(rèn)報(bào)文,向目標(biāo)端發(fā)送第二關(guān)閉確認(rèn)報(bào)文。優(yōu)選的,所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP主機(jī);所述第一請(qǐng)求報(bào)文為T(mén)CP主機(jī)發(fā)送的FIN報(bào)文;所述第二請(qǐng)求報(bào)文為向SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;所述第一響應(yīng)報(bào)文為所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文;所述第二響應(yīng)報(bào)文為向TCP主機(jī)發(fā)送的FIN ACK響應(yīng)報(bào)文;所述第一關(guān)閉確認(rèn)報(bào)文為所述TCP主機(jī)發(fā)送的ACK響應(yīng)報(bào)文;所述第二關(guān)閉確認(rèn)報(bào)文為向SCTP主機(jī)發(fā)送的SHUTD0WNC0MPLETE報(bào)文。優(yōu)選的,所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP主機(jī);所述第一請(qǐng)求報(bào)文為SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;所述第二請(qǐng)求報(bào)文為向TCP主機(jī)發(fā)送的FIN報(bào)文;所述第一響應(yīng)報(bào)文為所述TCP主機(jī)回復(fù)的FIN ACK響應(yīng)報(bào)文;所述第二響應(yīng)報(bào)文為向所述SCTP主機(jī)發(fā)送的SHUTDOWN ACK響應(yīng)報(bào)文;
所述第一關(guān)閉確認(rèn)報(bào)文為所述SCTP主機(jī)發(fā)送的SHUTD0WNC0MPLETE報(bào)文;所述第二關(guān)閉確認(rèn)報(bào)文為向所述TCP主機(jī)發(fā)送的ACK響應(yīng)報(bào)文。優(yōu)選的,所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP主機(jī);所述終止通信連接的步驟包括接收SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;向TCP主機(jī)發(fā)送的FIN報(bào)文;接收TCP主機(jī)針對(duì)所述FIN報(bào)文回復(fù)的ACK響應(yīng)報(bào)文;接收TCP主機(jī)發(fā)送的FIN報(bào)文;向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文,以及,向所述SCTP主機(jī)發(fā)送的SHUTDOWN ACK 響應(yīng)報(bào)文;接收SCTP主機(jī)發(fā)送的SHUTDOWN COMPLETE報(bào)文。優(yōu)選的,在終止所述源端與目標(biāo)端之間的通信連接之前,所述的方法還包括
發(fā)送所述緩存中TCP的流數(shù)據(jù)。優(yōu)選的,所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP主機(jī);當(dāng)緩存中還有未發(fā)送的數(shù)據(jù)時(shí),所述終止通信連接的步驟包括接收TCP主機(jī)發(fā)送的FIN報(bào)文; 向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文;向SCTP主機(jī)發(fā)送SHUTDOWN報(bào)文;接收所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文;向所述TCP主機(jī)發(fā)送FIN報(bào)文,以及,向SCTP主機(jī)發(fā)送SHUTD0WNC0MPLETE報(bào)文;接收所述TCP主機(jī)回復(fù)的ACK響應(yīng)報(bào)文。優(yōu)選的,在終止所述源端與目標(biāo)端之間的通信連接時(shí),所述的方法還包括釋放所述緩存中的數(shù)據(jù)。優(yōu)選的,所述源端與目標(biāo)端的地址信息包括源端主機(jī)的IP地址及源端主機(jī)的端口信息;以及,目標(biāo)端主機(jī)的IP地址及目標(biāo)端主機(jī)的端口信息。本發(fā)明實(shí)施例還公開(kāi)了一種TCP連接與SCTP連接互通的裝置,包括源端請(qǐng)求接收模塊,用于接收源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求,所述請(qǐng)求攜帶有源端與目標(biāo)端的地址信息;所述源端、目標(biāo)端中一端為T(mén)CP主機(jī),另一端為SCTP主機(jī);目標(biāo)端連接發(fā)起模塊,用于依據(jù)所述源端與目標(biāo)端的地址信息,發(fā)起目標(biāo)端的通信連接建立過(guò)程;源端連接建立模塊,用于在所述目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立過(guò)程。優(yōu)選的,當(dāng)所述源端為T(mén)CP主機(jī),目標(biāo)端為SCTP主機(jī)時(shí),所述目標(biāo)端連接發(fā)起模塊包括INIT報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送INIT報(bào)文;INIT-ACK響應(yīng)報(bào)文接收子模塊,用于接收所述SCTP主機(jī)發(fā)送的INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;C00KIE-ECH0報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送C00KIE-ECH0報(bào)文,所述 C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;C00KIE-ACK響應(yīng)報(bào)文接收子模塊,用于接收所述SCTP主機(jī)發(fā)送的C00KIE-ACK響應(yīng)報(bào)文。優(yōu)選的,所述源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求為T(mén)CP主機(jī)發(fā)送的SYN報(bào)文;所述源端連接建立模塊包括SYN ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送SYN ACK響應(yīng)報(bào)文;ACK報(bào)文接收子模塊,用于接收所述TCP主機(jī)發(fā)送的ACK報(bào)文。優(yōu)選的,當(dāng)所述源端為SCTP主機(jī),目標(biāo)端為T(mén)CP主機(jī)時(shí),所述目標(biāo)端連接發(fā)起模塊包括SYN報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送SYN報(bào)文;SYN ACK響應(yīng)報(bào)文接收子模塊,用于接收所述TCP主機(jī)發(fā)送的SYNACK響應(yīng)報(bào)文;ACK報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送ACK報(bào)文。
優(yōu)選的,所述源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求為SCTP主機(jī)發(fā)送的INIT 報(bào)文;所述源端連接建立模塊包括INIT-ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;C00KIE-ECH0報(bào)文接收子模塊,用于接收所述SCTP主機(jī)發(fā)送的C00KIE-ECH0報(bào)文, 所述C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;C00KIE-ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送C00KIE-ACK響應(yīng)報(bào)文。優(yōu)選的,所述的裝置,還包括數(shù)據(jù)傳輸模塊,用于基于所述通信連接進(jìn)行源端與目標(biāo)端之間的數(shù)據(jù)傳輸。優(yōu)選的,所述數(shù)據(jù)傳輸模塊包括TCP流數(shù)據(jù)接收子模塊,用于接收TCP主機(jī)發(fā)送的TCP流數(shù)據(jù);解析子模塊,用于將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù);SCTP報(bào)文數(shù)據(jù)發(fā)送子模塊,用于將所述SCTP報(bào)文數(shù)據(jù)發(fā)送至SCTP主機(jī)。優(yōu)選的,所述解析子模塊包括消息邊界信息提取單元,用于按照當(dāng)前通信采用的上層應(yīng)用協(xié)議,提取所述TCP 流數(shù)據(jù)中的消息邊界信息;分割單元,用于依據(jù)所述消息邊界信息分割當(dāng)前的TCP流數(shù)據(jù),并轉(zhuǎn)換為SCTP報(bào)文數(shù)據(jù)格式。優(yōu)選的,所述當(dāng)前通信采用的上層應(yīng)用協(xié)議為Diameter協(xié)議,所述消息邊界信息根據(jù)所述TCP流數(shù)據(jù)的報(bào)文頭中的消息長(zhǎng)度信息獲得。優(yōu)選的,所述當(dāng)前通信采用的上層應(yīng)用協(xié)議為SIP協(xié)議,所述消息邊界信息根據(jù)所述TCP流數(shù)據(jù)的報(bào)文中的結(jié)束符和消息體內(nèi)容長(zhǎng)度獲得。優(yōu)選的,所述數(shù)據(jù)傳輸模塊還包括緩存子模塊,用于在將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù)之前,緩存所述TCP 流數(shù)據(jù)。優(yōu)選的,所述數(shù)據(jù)傳輸模塊還包括SCTP報(bào)文數(shù)據(jù)接收子模塊,用于接收SCTP主機(jī)發(fā)送的SCTP報(bào)文數(shù)據(jù);TCP流數(shù)據(jù)發(fā)送子模塊,用于將所述SCTP報(bào)文數(shù)據(jù)按照TCP流數(shù)據(jù)的格式發(fā)送至 TCP主機(jī)。優(yōu)選的,所述的裝置,還包括連接終止模塊,用于當(dāng)完成通信或通信連接發(fā)生異常時(shí),終止所述源端與目標(biāo)端之間的通信連接。優(yōu)選的,所述連接終止模塊包括第一請(qǐng)求報(bào)文接收子模塊,用于接收源端發(fā)起的與目標(biāo)端斷開(kāi)通信連接的第一請(qǐng)求報(bào)文;第二請(qǐng)求報(bào)文發(fā)送子模塊,用于依據(jù)所述第一請(qǐng)求報(bào)文向目標(biāo)端發(fā)送斷開(kāi)通信連接的第二請(qǐng)求報(bào)文;第一響應(yīng)報(bào)文接收子模塊,用于接收所述目標(biāo)端針對(duì)所述第二請(qǐng)求報(bào)文回復(fù)的第一響應(yīng)報(bào)文; 第二響應(yīng)報(bào)文發(fā)送子模塊,用于依據(jù)所述第一響應(yīng)報(bào)文向源端發(fā)送針對(duì)第一請(qǐng)求報(bào)文的第二響應(yīng)報(bào)文;第一關(guān)閉確認(rèn)報(bào)文接收子模塊,用于接收源端針對(duì)所述第二響應(yīng)報(bào)文回復(fù)的第一關(guān)閉確認(rèn)報(bào)文;第二關(guān)閉確認(rèn)報(bào)文發(fā)送子模塊,用于依據(jù)所述第一關(guān)閉確認(rèn)報(bào)文,向目標(biāo)端發(fā)送第二關(guān)閉確認(rèn)報(bào)文。優(yōu)選的,所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP主機(jī);所述第一請(qǐng)求報(bào)文為T(mén)CP主機(jī)發(fā)送的FIN報(bào)文;所述第二請(qǐng)求報(bào)文為向SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;所述第一響應(yīng)報(bào)文為所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文;所述第二響應(yīng)報(bào)文為向TCP主機(jī)發(fā)送的FIN ACK響應(yīng)報(bào)文;所述第一關(guān)閉確認(rèn)報(bào)文為所述TCP主機(jī)發(fā)送的ACK響應(yīng)報(bào)文;所述第二關(guān)閉確認(rèn)報(bào)文為向SCTP主機(jī)發(fā)送的SHUTD0WNC0MPLETE報(bào)文。優(yōu)選的,所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP主機(jī);所述第一請(qǐng)求報(bào)文為SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;所述第二請(qǐng)求報(bào)文為向TCP主機(jī)發(fā)送的FIN報(bào)文;所述第一響應(yīng)報(bào)文為所述TCP主機(jī)回復(fù)的FIN ACK響應(yīng)報(bào)文;所述第二響應(yīng)報(bào)文為向所述SCTP主機(jī)發(fā)送的SHUTDOWN ACK響應(yīng)報(bào)文;所述第一關(guān)閉確認(rèn)報(bào)文為所述SCTP主機(jī)發(fā)送的SHUTD0WNC0MPLETE報(bào)文;所述第二關(guān)閉確認(rèn)報(bào)文為向所述TCP主機(jī)發(fā)送的ACK響應(yīng)報(bào)文。優(yōu)選的,所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP主機(jī);所述連接終止模塊包括SHUTDOWN報(bào)文接收子模塊,用于接收SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;FIN報(bào)文發(fā)送子模塊,用于向TCP主機(jī)發(fā)送的FIN報(bào)文;ACK響應(yīng)報(bào)文接收子模塊,用于接收TCP主機(jī)針對(duì)所述FIN報(bào)文回復(fù)的ACK響應(yīng)報(bào)文;FIN報(bào)文接收子模塊,用于接收TCP主機(jī)發(fā)送的FIN報(bào)文;ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文;SHUTDOWN ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送的SHUTDOWN ACK 響應(yīng)報(bào)文;SHUTDOWN COMPLETE報(bào)文接收子模塊,用于接收SCTP主機(jī)發(fā)送的SHUTDOWN COMPLETE 報(bào)文。優(yōu)選的,所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP主機(jī);當(dāng)緩存中還有未發(fā)送的數(shù)據(jù)時(shí),所述連接終止模塊包括FIN報(bào)文接收子模塊,用于接收TCP主機(jī)發(fā)送的FIN報(bào)文;ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文;SHUTDOWN報(bào)文發(fā)送子模塊,用于向SCTP主機(jī)發(fā)送SHUTDOWN報(bào)文;SHUTDOWN ACK響應(yīng)報(bào)文接收子模塊,用于接收所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文;
FIN報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送FIN報(bào)文; SHUTDOWN COMPLETE 報(bào)文發(fā)送子模塊,用于向 SCTP 主機(jī)發(fā)送 SHUTDOWN COMPLETE 報(bào)文;ACK響應(yīng)報(bào)文接收子模塊,用于接收所述TCP主機(jī)回復(fù)的ACK響應(yīng)報(bào)文。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)1、本發(fā)明使用獨(dú)立的TCP/IP協(xié)議棧,對(duì)TCP協(xié)議棧底層和SCTP協(xié)議棧底層進(jìn)行了一定的修改;獨(dú)立于上層應(yīng)用及其運(yùn)行環(huán)境,不需要修改通信兩端的上層應(yīng)用協(xié)議或者其使用的TCP/IP協(xié)議棧,不存在阻塞和非阻塞的使用方式。在需要不對(duì)等協(xié)議通信的兩端部署本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序就可以進(jìn)行信令通信,實(shí)現(xiàn)了 TCP連接和 SCTP連接互通轉(zhuǎn)換的獨(dú)立性和透明性。2、本發(fā)明在對(duì)TCP協(xié)議和SCTP協(xié)議底層進(jìn)行了修改的同時(shí),增加了 TCP連接和 SCTP連接轉(zhuǎn)換的控制管理,即可以根據(jù)TCP協(xié)議和SCTP協(xié)議所處的不同狀態(tài)來(lái)實(shí)現(xiàn)下一步連接操作,逐步完成整個(gè)TCP連接和SCTP連接全鏈路的互通建立,數(shù)據(jù)傳輸和連接終止等的操作。而所有這些操作都是自動(dòng)完成,不需要任何人為手工的操作。3、本發(fā)明的數(shù)據(jù)傳輸可以動(dòng)態(tài)支持多種上層協(xié)議的TCP流數(shù)據(jù)解析,可以將TCP 協(xié)議的流數(shù)據(jù)解析成為一個(gè)個(gè)完整的上層應(yīng)用報(bào)文,然后發(fā)送到SCTP鏈路上去,具有較強(qiáng)的可靠性及可擴(kuò)展性,并可以保證上層應(yīng)用數(shù)據(jù)傳輸?shù)恼_性。4、本發(fā)明可以延長(zhǎng)已有系統(tǒng)的使用壽命,減少投資。
圖1是現(xiàn)有技術(shù)中一個(gè)TCP客戶(hù)機(jī)(TCP Client)和SCTP服務(wù)器(SCTP Server) 使用Shim Layer來(lái)TCP連接與SCTP連接互通的示意圖;圖2是本發(fā)明的一種TCP連接與SCTP連接互通的方法實(shí)施例1的步驟流程圖;圖3是本發(fā)明的一種TCP連接與SCTP連接互通的方法實(shí)施例2的信令流程圖;圖4是本發(fā)明的一種TCP連接與SCTP連接互通的方法實(shí)施例3的信令流程圖;圖5是本發(fā)明的一種在源端與目標(biāo)端之間進(jìn)行數(shù)據(jù)傳輸?shù)男帕盍鞒虉D;圖6是本發(fā)明的一個(gè)采用Diameter協(xié)議的TCP應(yīng)用連續(xù)發(fā)送三包Diameter消息示例的信令流程圖;圖7是本發(fā)明的兩個(gè)TCP主機(jī)與兩個(gè)SCTP主機(jī)進(jìn)行信令通信示例的信令流程圖;圖8是本發(fā)明的一種由TCP主機(jī)主動(dòng)發(fā)起正常的連接終止的信令流程圖;圖9是本發(fā)明的一種由SCTP主機(jī)主動(dòng)發(fā)起正常的連接終止的信令流程圖;圖10是本發(fā)明的一種由SCTP主機(jī)主動(dòng)發(fā)起正常的連接終止的信令流程圖;圖11是本發(fā)明的一種由TCP主機(jī)主動(dòng)發(fā)起正常的連接終止的信令流程圖;圖12是本發(fā)明的一種TCP連接和SCTP連接互通實(shí)現(xiàn)上層應(yīng)用協(xié)議Diameter通信的完整過(guò)程的信令流程圖;圖13是本發(fā)明的一種TCP連接與SCTP連接互通的裝置實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施例方式為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn) 一步詳細(xì)的說(shuō)明。本發(fā)明實(shí)施例的核心構(gòu)思之一在于,使用獨(dú)立的TCP協(xié)議棧和SCTP協(xié)議棧,以根據(jù)當(dāng)前TCP協(xié)議和SCTP協(xié)議所處的不同狀態(tài)來(lái)實(shí)現(xiàn)下一步連接操作,逐步完成整個(gè)TCP連接和SCTP連接的全鏈路互通建立、數(shù)據(jù)傳輸和連接終止等操作。參考圖2,示出了本發(fā)明的一種TCP連接與SCTP連接互通的方法實(shí)施例1的步驟流程圖,具體可以包括以下步驟步驟101、接收源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求,所述請(qǐng)求攜帶有源端與目標(biāo)端的地址信息;所述源端、目標(biāo)端中一端為T(mén)CP主機(jī),另一端為SCTP主機(jī);步驟102、依據(jù)所述源端與目標(biāo)端的地址信息,發(fā)起目標(biāo)端的通信連接建立過(guò)程;步驟103、當(dāng)所述目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立過(guò)程。本發(fā)明實(shí)施例主要用于實(shí)現(xiàn)使用TCP傳輸協(xié)議的網(wǎng)元與使用SCTP傳輸協(xié)議的網(wǎng)元之間的信令通信,包括連接建立,信令傳輸和連接終止等。即所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP主機(jī);或者,所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP主機(jī)。公知的是,TCP協(xié)議采用三次握手建立一個(gè)連接第一次握手建立連接時(shí),客戶(hù)機(jī)發(fā)送SYN報(bào)文到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài), 等待服務(wù)器確認(rèn);第二次握手服務(wù)器收到SYN包,確認(rèn)客戶(hù)的SYN,同時(shí)自己也發(fā)送一個(gè)SYN包,即 SYN ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);第三次握手客戶(hù)機(jī)收到服務(wù)器的SYN ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK,此包發(fā)送完畢,客戶(hù)機(jī)和服務(wù)器進(jìn)入TCP連接建立完成ESTABLISHED狀態(tài),完成三次握手。在SCTP中,TCP中的連接被引申為關(guān)聯(lián)(association),即本發(fā)明實(shí)施例中所述 "SCTP連接”即指“SCTP關(guān)聯(lián)”。一個(gè)關(guān)聯(lián)的兩個(gè)SCTP端點(diǎn)都向?qū)Ψ教峁┮粋€(gè)SCTP端口號(hào)和一個(gè)IP地址列表,這樣每個(gè)關(guān)聯(lián)都由兩個(gè)SCTP端口號(hào)和兩個(gè)IP地址列表來(lái)識(shí)別。利用每一端對(duì)應(yīng)組中的任一 IP地址作為相應(yīng)的源/目的地址來(lái)標(biāo)示本次關(guān)聯(lián);并通過(guò)四次握手,兩端SCTP主機(jī)交換通信狀態(tài)第一次握手客戶(hù)機(jī)使用一個(gè)INIT報(bào)文發(fā)起一個(gè)連接;第二次握手服務(wù)器使用一個(gè)INIT-ACK報(bào)文進(jìn)行響應(yīng),其中就包括了 cookie (標(biāo)識(shí)這個(gè)連接的惟一上下文);第三次握手客戶(hù)機(jī)使用一個(gè)C00KIE-ECH0報(bào)文進(jìn)行響應(yīng),其中包含了服務(wù)器所發(fā)送的cookie ;第四次握手服務(wù)器為這個(gè)連接分配資源,并通過(guò)向客戶(hù)機(jī)發(fā)送一個(gè)C00KIE-ACK 報(bào)文對(duì)其進(jìn)行響應(yīng)。在一次SCTP四次握手中,INIT消息的接收端不必保存任何狀態(tài)信息或者分配任何資源,它在發(fā)送INIT-ACK消息時(shí)采用了一種“狀態(tài)Cookie”機(jī)制,該Cookie具有發(fā)送端需建立連接的自身狀態(tài)的全部信息,具體而言,SCTP產(chǎn)生一個(gè)狀態(tài)Cookie的過(guò)程如下1.使用收到的INlT和發(fā)出的INIT-ACK塊中的信息創(chuàng)建一個(gè)關(guān)聯(lián)的TCB (傳輸控制塊)。2.在TCB中,把創(chuàng)建時(shí)間設(shè)置為當(dāng)前的時(shí)間,并且設(shè)置COOKIE壽命為協(xié)議參數(shù)“有效COOKIE壽命”的值。 3.根據(jù)TCB,收集重建TCB所需的最小信息子集,將該子集和密鑰產(chǎn)生一個(gè) MAC (信息認(rèn)證編碼)。4.結(jié)合上述最小信息子集和MAC產(chǎn)生狀態(tài)Cookie。5.在發(fā)送完INIT ACK (包含狀態(tài)Cookie參數(shù))后,發(fā)送方必須刪除TCB以及任何與新關(guān)聯(lián)有關(guān)的本地資源。其中,INIT和INIT-ACK都必須包含建立初始狀態(tài)所需的參數(shù)一組IP地址,保證可靠傳輸?shù)某跏糡SN,每個(gè)被接收的SCTP包中必須含有的初始標(biāo)簽,每一端請(qǐng)求發(fā)出的流數(shù)目和每一端能支持接收的流數(shù)目。交換完這些消息之后,miT的發(fā)送端以COOKIE-ECHO 消息的方式發(fā)送回狀態(tài)Cookie。接收端根據(jù)所接收到的C00KIE-ECH0中的狀態(tài)Cookie,完整地重建自己的狀態(tài),并回送C00KIEACK來(lái)確認(rèn)關(guān)聯(lián)已建立。C00KIE-ECH0和C00KIE-ACK 都可將用戶(hù)數(shù)據(jù)消息綁定到各自的包中。這樣即使接收再多的INIT消息,接收端也沒(méi)有任何資源的消耗,它只是把相應(yīng)重建狀態(tài)所用的狀態(tài)Cookie作為參數(shù),包含在每一個(gè)回送的 INIT-ACK消息中,最后該狀態(tài)Cookie會(huì)被C00KIE-ECH0消息發(fā)送回來(lái),故SCTP采用這種四次握手機(jī)制可以防范SYN Flooding等方式的DoS攻擊。由于TCP協(xié)議與SCTP協(xié)議在連接建立過(guò)程上的不同,TCP的三次握手和SCTP的四次握手都是在協(xié)議棧底層連貫完成的,所以本發(fā)明對(duì)TCP協(xié)議棧底層和SCTP協(xié)議棧底層進(jìn)行了一定的修改,具體修改為,當(dāng)接收到源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求后,先根據(jù)所述請(qǐng)求攜帶的源端與目標(biāo)端的地址信息,發(fā)起目標(biāo)端的通信連接建立過(guò)程;在所述目標(biāo)端的通信連接建立完成后,再繼續(xù)進(jìn)行源端的通信連接建立過(guò)程。其中,TCP協(xié)議的修改是在TCP協(xié)議適配層完成的,SCTP協(xié)議的修改是在SCTP協(xié)議適配層完成的,同時(shí)增加了 TCP連接和SCTP連接互通轉(zhuǎn)換的控制管理層,用以根據(jù)TCP 協(xié)議和SCTP協(xié)議所處的不同狀態(tài),來(lái)實(shí)現(xiàn)下一步連接操作,從而逐步完成整個(gè)TCP連接和 SCTP連接全鏈路的互通建立,數(shù)據(jù)傳輸和連接終止的操作。在這個(gè)過(guò)程中,任何一端出現(xiàn)連接的正常終止或異常終止都會(huì)導(dǎo)致整個(gè)通信鏈路的終止。參考圖3所示的本發(fā)明的一種TCP連接與SCTP連接互通的方法實(shí)施例2的信令流程圖,當(dāng)所述源端為T(mén)CP主機(jī),目標(biāo)端為SCTP主機(jī)時(shí),應(yīng)用本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序,在源端與目標(biāo)端之間建立通信連接的過(guò)程具體可以包括以下步驟步驟21、接收TCP主機(jī)發(fā)送的SYN報(bào)文,并解析其攜帶的源端TCP主機(jī)的IP地址及端口信息,以及,目標(biāo)端SCTP主機(jī)的IP地址及端口信息;步驟22、依據(jù)源端TCP主機(jī)的IP地址及端口信息,以及,目標(biāo)端SCTP主機(jī)的IP地址及端口信息,向所述SCTP主機(jī)發(fā)送INIT報(bào)文;步驟23、接收所述SCTP主機(jī)發(fā)送的INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;步驟24、向所述SCTP主機(jī)發(fā)送C00KIE-ECH0報(bào)文,所述C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;步驟25、接收所述SCTP主機(jī)發(fā)送的C00KIE-ACK響應(yīng)報(bào)文;步驟26、向所述TCP主機(jī)發(fā)送SYN ACK響應(yīng)報(bào)文;步驟27、接收所述TCP主機(jī)發(fā)送的ACK報(bào)文。
在本實(shí)施例中,對(duì)于TCP主機(jī)發(fā)起的第一次握手SYN,不立即回復(fù)SYN ACK報(bào)文, 而是解析此SYN攜帶的源主機(jī)與目標(biāo)主機(jī)的地址和端口信息,配置到SCTP協(xié)議棧中,發(fā)起 SCTP連接建立的四次握手過(guò)程,在SCTP協(xié)議的四次握手過(guò)程完成后,才向TCP主機(jī)發(fā)送第二次握手SYNACK,即再繼續(xù)完成TCP協(xié)議的三次握手過(guò)程。參考圖4所示的本發(fā)明的一種TCP連接與SCTP連接互通的方法實(shí)施例3的信令流程圖,當(dāng)所述源端為SCTP主機(jī),目標(biāo)端為T(mén)CP主機(jī)時(shí),應(yīng)用本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序,在源端與目標(biāo)端之間建立通信連接的過(guò)程具體可以包括以下步驟步驟31、接收SCTP主機(jī)發(fā)送的INIT報(bào)文,并解析其攜帶的源端SCTP主機(jī)的IP地址及端口信息,以及,目標(biāo)端TCP主機(jī)的IP地址及端口信息;步驟32、依據(jù)源端SCTP主機(jī)的IP地址及端口信息,以及,目標(biāo)端TCP主機(jī)的IP地址及端口信息,向所述TCP主機(jī)發(fā)送SYN報(bào)文;步驟33、接收所述TCP主機(jī)發(fā)送的SYN ACK響應(yīng)報(bào)文;步驟34、向所述TCP主機(jī)發(fā)送ACK報(bào)文; 步驟35、向所述SCTP主機(jī)發(fā)送INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;步驟36、接收所述SCTP主機(jī)發(fā)送的C00KIE-ECH0報(bào)文,所述C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;步驟37、向所述SCTP主機(jī)發(fā)送C00KIE-ACK響應(yīng)報(bào)文。在本實(shí)施例中,對(duì)于SCTP主機(jī)發(fā)起的第一次握手INIT,不立即回復(fù)INIT ACK報(bào)文,而是解析此INIT攜帶的源主機(jī)與目標(biāo)主機(jī)的地址和端口信息,配置到TCP協(xié)議棧中,發(fā)起TCP連接建立的三次握手過(guò)程,在TCP協(xié)議的三次握手過(guò)程完成后,才向SCTP主機(jī)發(fā)送第二次握手INIT ACK,即再繼續(xù)完成SCTP協(xié)議的四次握手過(guò)程。需要說(shuō)明的是,盡管在SCTP協(xié)議中,SCTP主機(jī)的地址包括一個(gè)SCTP端口號(hào)和一個(gè)IP地址列表,在本實(shí)施例中,配置到TCP協(xié)議棧中的SCTP主機(jī)的地址僅為一個(gè)SCTP端口號(hào)和IP地址列表中的其中一個(gè)IP地址,如位于隊(duì)列頭的IP地址。在整個(gè)TCP連接和SCTP連接的全鏈路互通建立完成后,即可在所述通信鏈路上進(jìn)行應(yīng)用數(shù)據(jù)的傳輸。即作為本發(fā)明的一種優(yōu)選實(shí)施例,本發(fā)明還可以包括以下步驟基于所述通信連接進(jìn)行源端與目標(biāo)端之間的數(shù)據(jù)傳輸。公知的是,TCP協(xié)議是面向流的協(xié)議(上層應(yīng)用協(xié)議報(bào)文之間沒(méi)有邊界),SCTP協(xié)議是面向報(bào)文的協(xié)議(上層應(yīng)用協(xié)議報(bào)文之間有明確的邊界),也就是說(shuō),TCP協(xié)議數(shù)據(jù)是流格式,每次收發(fā)報(bào)文可能不是完整的,而SCTP協(xié)議是面向報(bào)文的協(xié)議,每次收發(fā)數(shù)據(jù)邊界都是完整的,因而實(shí)際中可能會(huì)出現(xiàn)TCP不完整的數(shù)據(jù)包在SCTP協(xié)議上傳輸而導(dǎo)致對(duì)端接收錯(cuò)誤的情況。針對(duì)這種情況,本發(fā)明實(shí)施例采用一種對(duì)TCP協(xié)議流數(shù)據(jù)進(jìn)行分割處理,以轉(zhuǎn)換為SCTP協(xié)議的報(bào)文數(shù)據(jù)的機(jī)制,該機(jī)制針對(duì)不同的上層應(yīng)用協(xié)議格式,根據(jù)其各自的協(xié)議格式將TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù),目的是確定TCP流數(shù)據(jù)中上層應(yīng)用協(xié)議報(bào)文的邊界。簡(jiǎn)而言之,本發(fā)明實(shí)施例中的數(shù)據(jù)傳輸是將TCP協(xié)議的數(shù)據(jù)凈荷取出來(lái),并且按照上層應(yīng)用協(xié)議將其解析成為一個(gè)個(gè)完整的上層應(yīng)用報(bào)文,然后發(fā)送到SCTP鏈路上去。例如,對(duì)于傳輸Diameter協(xié)議,本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序收到TCP側(cè)的 Diameter的數(shù)據(jù)流后,需要根據(jù)Diameter協(xié)議的編碼格式將其進(jìn)行解析,還原為T(mén)CP應(yīng)用發(fā)送時(shí)完整的Diameter報(bào)文消息,然后發(fā)送給SCTP應(yīng)用。具體而言,參考圖5 所示的一種在源端與目標(biāo)端之間進(jìn)行數(shù)據(jù)傳輸?shù)男帕盍鞒虉D,具體可以包括以下子步驟子步驟S11、接收TCP主機(jī)發(fā)送的TCP流數(shù)據(jù);子步驟S12、將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù);在本發(fā)明實(shí)施例中優(yōu)選的是,可以通過(guò)以下操作將TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù)(1)按照當(dāng)前通信采用的上層應(yīng)用協(xié)議,提取所述TCP流數(shù)據(jù)中的消息邊界信息;(2)依據(jù)所述消息邊界信息分割當(dāng)前的TCP流數(shù)據(jù),并轉(zhuǎn)換為SCTP報(bào)文數(shù)據(jù)格式。子步驟S13、將所述SCTP報(bào)文數(shù)據(jù)發(fā)送至SCTP主機(jī)。為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明,以下提供兩種應(yīng)用本發(fā)明基于TCP與 SCTP的通信連接進(jìn)行源端與目標(biāo)端之間數(shù)據(jù)傳輸?shù)氖纠?。示例一參考圖6所示的一個(gè)采用Diameter協(xié)議的TCP應(yīng)用連續(xù)發(fā)送三包Diameter 消息(Diameter_A、Diameter_B> Diameter_C)示例的信令流程圖,因?yàn)榘l(fā)送時(shí)間間隔很短,在TCP底層可能會(huì)將Diameter_A和Diameter_B封裝在一個(gè)TCP報(bào)文TCP-Diameter A-DiameterB中發(fā)送,而Diameter_C封裝在第二個(gè)TCP報(bào)文TCP-Diameter C中發(fā)送。在本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序收到TCP主機(jī)發(fā)送的第一個(gè)TCP報(bào)文 TCP-Diameter A-DiameterB 后,不能直接將其凈荷 Diameter_A 和 Diameter_B 作為一個(gè) Diameter消息發(fā)送到SCTP主機(jī),而是將其解析后分別發(fā)送,即按照Diameter協(xié)議的報(bào)文格式,將TCP-Diameter A-DiameterB解析為 SCTP-Diameter A和 SCTP-Diameter B ;然后再發(fā)送到SCTP主機(jī)。當(dāng)收到TCP主機(jī)發(fā)送的第二個(gè)TCP報(bào)文TCP-Diameter C后,由于該報(bào)文對(duì)應(yīng)一個(gè)完整的Diameter消息,于是直接將其轉(zhuǎn)換為SCTP報(bào)文格式的數(shù)據(jù)SCTP-Diameter C,然后發(fā)送到SCTP主機(jī);這樣SCTP主機(jī)才能收到正確的Diameter報(bào)文。在具體實(shí)現(xiàn)中,對(duì)上層應(yīng)用協(xié)議的解析是具體到每一條通信鏈路的,即不同的通信鏈路可以使用不同的上層應(yīng)用解析協(xié)議,以保證上層應(yīng)用數(shù)據(jù)傳輸?shù)恼_性。示例二參考圖7所示的兩個(gè)TCP主機(jī)與兩個(gè)SCTP主機(jī)進(jìn)行信令通信示例的信令流程圖, 在本例中,TCP主機(jī)1和SCTP主機(jī)1之間使用Diameter協(xié)議進(jìn)行通信,TCP主機(jī)2和SCTP 主機(jī)2之間使用SIP協(xié)議進(jìn)行通信。本發(fā)明實(shí)施例是針對(duì)每一條通信鏈路進(jìn)行各自的協(xié)議解析,即對(duì)于Diameter協(xié)議的上層應(yīng)用則使用Diameter解析方法,對(duì)于SIP協(xié)議則使用 SIP解析方法。具體而言,當(dāng)本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序收到TCP主機(jī)1發(fā)送的 Diameter 消息 TCP-Diameter A 后,按照 Diameter 協(xié)議的報(bào)文格式,將 TCP-Diameter A 解析為SCTP-Diameter A,再發(fā)送至SCTP主機(jī)1 ;當(dāng)本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序收到TCP主機(jī)2發(fā)送的SIP消息SIP_A后,按照SIP協(xié)議的報(bào)文格式,將TCP-SIP A解析為SCTP-SIP A,再發(fā)送至SCTP主機(jī)2。
在具體實(shí)現(xiàn)中,對(duì)于Diameter協(xié)議而言,由于Diameter協(xié)議報(bào)文頭中包含整個(gè) Diameter協(xié)議的長(zhǎng)度字段,故用于分割TCP流數(shù)據(jù)的消息邊界信息是根據(jù)所述TCP流數(shù)據(jù)的報(bào)文頭中的消息長(zhǎng)度信息獲得的。對(duì)于SIP協(xié)議而言,由于SIP協(xié)議報(bào)文頭中沒(méi)有總的長(zhǎng)度字段,需要一直解析整個(gè)報(bào)文,綜合判斷結(jié)束符和消息體內(nèi)容長(zhǎng)度來(lái)最終確定SIP報(bào)文的邊界,即其用于分割TCP流數(shù)據(jù)的消息邊界信息是根據(jù)所述TCP流數(shù)據(jù)的報(bào)文中的結(jié)束符和消息體內(nèi)容長(zhǎng)度獲得的。 由于需要對(duì)TCP側(cè)的數(shù)據(jù)進(jìn)行解析,因而在本發(fā)明實(shí)施例中優(yōu)選的是,在將所述 TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù)之前,還可以對(duì)TCP側(cè)的數(shù)據(jù)進(jìn)行一定的緩存,即提供一定大小的數(shù)據(jù)緩沖區(qū)來(lái)存儲(chǔ)TCP側(cè)不完整的數(shù)據(jù)包,來(lái)保證收到完整的上層應(yīng)用協(xié)議報(bào)文。在實(shí)際中,所述數(shù)據(jù)傳輸也可以由SCTP側(cè)發(fā)起,即作為一種優(yōu)選實(shí)施例,如圖5所示的數(shù)據(jù)傳輸步驟還可以包括子步驟S14、接收SCTP主機(jī)發(fā)送的SCTP報(bào)文數(shù)據(jù);子步驟S15、將所述SCTP報(bào)文數(shù)據(jù)按照TCP流數(shù)據(jù)的傳輸格式發(fā)送至TCP主機(jī)。在本發(fā)明實(shí)施例中,實(shí)現(xiàn)TCP連接和SCTP連接的互通轉(zhuǎn)換,還包括連接終止的步驟,即作為本發(fā)明的一種優(yōu)選實(shí)施例,本發(fā)明還可以包括以下步驟當(dāng)完成通信或通信連接發(fā)生異常時(shí),終止所述源端與目標(biāo)端之間的通信連接。公知的是,由于TCP連接是全雙工的,因此每個(gè)方向都必須單獨(dú)進(jìn)行關(guān)閉。這原則是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來(lái)終止這個(gè)方向的連接。收到一個(gè) FIN只意味著這一方向上沒(méi)有數(shù)據(jù)流動(dòng),一個(gè)TCP連接在收到一個(gè)FIN后仍能發(fā)送數(shù)據(jù)。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方執(zhí)行被動(dòng)關(guān)閉。即在現(xiàn)有的TCP協(xié)議中,終止一個(gè)連接一般需要進(jìn)行四次握手,具體為第一次握手源端的TCP執(zhí)行主動(dòng)關(guān)閉(active close),發(fā)送一個(gè)FIN報(bào)文,表示數(shù)據(jù)發(fā)送完畢;第二次握手接收到FIN的目標(biāo)端TCP執(zhí)行被動(dòng)關(guān)閉(passive close),回復(fù)一個(gè) ACK響應(yīng)報(bào)文;這個(gè)FIN由TCP確認(rèn),它的接收也作為文件結(jié)束符傳遞給接收端應(yīng)用進(jìn)程,因?yàn)?FIN的接收意味著應(yīng)用進(jìn)程在相應(yīng)連接上再也接收不到額外數(shù)據(jù)。第三次握手一段時(shí)間后,接收到文件結(jié)束符的應(yīng)用進(jìn)程將調(diào)用close關(guān)閉它的套接口,即目標(biāo)端的TCP也發(fā)送一個(gè)FIN報(bào)文。第四次握手接收到這個(gè)FIN的源端TCP (即執(zhí)行主動(dòng)關(guān)閉的那一端)對(duì)它進(jìn)行確認(rèn),并回復(fù)一個(gè)ACK響應(yīng)報(bào)文。在實(shí)際中,在TCP協(xié)議中,也可以通過(guò)三次握手終止一個(gè)連接,即執(zhí)行被動(dòng)關(guān)閉那一端的TCP(目標(biāo)端TCP)在第二次握手發(fā)出的ACK與第三次握手發(fā)出的FIN也可以合并成一個(gè)報(bào)文,即發(fā)送一個(gè)FIN ACK報(bào)文。在第二次握手與第三次握手之間可以有從執(zhí)行被動(dòng)關(guān)閉端到執(zhí)行主動(dòng)關(guān)閉端的數(shù)據(jù)流,這稱(chēng)為半關(guān)閉(half close),即連接的一端在結(jié)束它的發(fā)送后還能接收來(lái)自另一端數(shù)據(jù)的能力。源端TCP發(fā)送FIN,目標(biāo)端TCP發(fā)送對(duì)這個(gè)FIN的ACK報(bào)文。當(dāng)收到半關(guān)閉的一端在完成它的數(shù)據(jù)傳送后,才發(fā)送FIN關(guān)閉這個(gè)方向的連接,源端再對(duì)這個(gè)FIN確認(rèn), 這個(gè)連接才徹底關(guān)閉。
作為面向連接的傳輸協(xié)議,SCTP也運(yùn)用三次握手來(lái)關(guān)閉一個(gè)關(guān)聯(lián),但與TCP有一點(diǎn)不同一個(gè)TCP終端在“關(guān)聯(lián)關(guān)閉”的過(guò)程中能夠保持連接開(kāi)啟,并從對(duì)端接收新的數(shù)據(jù), 而SCTP不支持TCP的這種“半關(guān)閉”狀態(tài)。具體而言,在現(xiàn)有的SCTP協(xié)議中,終止一個(gè)SCTP關(guān)聯(lián)的過(guò)程為 1、主機(jī)A發(fā)出“關(guān)閉”(SHUTDOWN)塊來(lái)終止與主機(jī)B的關(guān)聯(lián),主機(jī)A不再接受上層應(yīng)用的數(shù)據(jù),只發(fā)送隊(duì)列中剩余的數(shù)據(jù);2、主機(jī)B —旦接收到“關(guān)閉”報(bào)文,也不再接受上層應(yīng)用的數(shù)據(jù),只發(fā)送隊(duì)列中剩余的數(shù)據(jù);3、主機(jī)A再次發(fā)送“關(guān)閉,,±夬,通知主機(jī)B所發(fā)送的剩余數(shù)據(jù)已到達(dá),并且重申了關(guān)聯(lián)正在關(guān)閉;4、當(dāng)?shù)诙问盏健瓣P(guān)閉”塊時(shí),主機(jī)B發(fā)送“確認(rèn)關(guān)閉”(SHUTD0WNACK)塊;5、主機(jī)A隨后發(fā)送“關(guān)閉結(jié)束”(SHUTDOWN COMPLETE)塊,完成本次關(guān)聯(lián)的關(guān)閉。由于TCP協(xié)議與SCTP協(xié)議在連接終止過(guò)程上的不同,TCP的四次握手和SCTP的三次握手都是在協(xié)議棧底層連貫完成的,所以本發(fā)明對(duì)TCP協(xié)議棧底層和SCTP協(xié)議棧底層進(jìn)行了一定的修改,其中,TCP協(xié)議的修改是在TCP協(xié)議適配層完成的,SCTP協(xié)議的修改是在SCTP協(xié)議適配層完成的,同時(shí)增加了 TCP連接和SCTP連接互通轉(zhuǎn)換的控制管理層,用以根據(jù)TCP協(xié)議和SCTP協(xié)議所處的不同狀態(tài),來(lái)實(shí)現(xiàn)下一步的連接終止的操作。在本發(fā)明的一種優(yōu)選實(shí)施例中,所述終止通信連接的步驟具體可以包括以下操作接收源端發(fā)起的與目標(biāo)端斷開(kāi)通信連接的第一請(qǐng)求報(bào)文;依據(jù)所述第一請(qǐng)求報(bào)文向目標(biāo)端發(fā)送斷開(kāi)通信連接的第二請(qǐng)求報(bào)文;接收所述目標(biāo)端針對(duì)所述第二請(qǐng)求報(bào)文回復(fù)的第一響應(yīng)報(bào)文;依據(jù)所述第一響應(yīng)報(bào)文向源端發(fā)送針對(duì)第一請(qǐng)求報(bào)文的第二響應(yīng)報(bào)文;接收源端針對(duì)所述第二響應(yīng)報(bào)文回復(fù)的第一關(guān)閉確認(rèn)報(bào)文;依據(jù)所述第一關(guān)閉確認(rèn)報(bào)文,向目標(biāo)端發(fā)送第二關(guān)閉確認(rèn)報(bào)文。參考圖8所示的由TCP主機(jī)主動(dòng)發(fā)起正常的連接終止的信令流程圖,當(dāng)所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP主機(jī)時(shí),應(yīng)用本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序執(zhí)行終止通信連接的操作具體可以包括以下步驟步驟81、接收TCP主機(jī)發(fā)送的FIN報(bào)文;
步驟82、向SCTP主機(jī)發(fā)送SHUTDOWN報(bào)文;步驟83、接收所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文;步驟84、向TCP主機(jī)發(fā)送FIN ACK響應(yīng)報(bào)文;步驟85、接收所述TCP主機(jī)發(fā)送的ACK響應(yīng)報(bào)文;步驟86、向所述SCTP主機(jī)發(fā)送SHUTDOWN COMPLETE報(bào)文。在本實(shí)施例中,TCP側(cè)首先發(fā)起鏈路關(guān)閉,發(fā)送FIN報(bào)文,在本發(fā)明的TCP連接與 SCTP連接互通轉(zhuǎn)換程序收到FIN后,為了保證SCTP側(cè)的數(shù)據(jù)能發(fā)送完成,向SCTP應(yīng)用發(fā)送 SHUTDOWN報(bào)文,只有在收到SHUTDOWN ACK之后(這時(shí)候SCTP側(cè)沒(méi)有要發(fā)送的數(shù)據(jù)了),向 TCP側(cè)發(fā)送FIN ACK報(bào)文,實(shí)現(xiàn)整個(gè)鏈路的完全關(guān)閉,從而保證TCP側(cè)和SCTP側(cè)在鏈路終止時(shí)數(shù)據(jù)收發(fā)的完整性。
參考圖9所示的由SCTP主機(jī)主動(dòng)發(fā)起正常的連接終止的信令流程圖,當(dāng)所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP主機(jī)時(shí),應(yīng)用本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序執(zhí)行終止通信連接的操作具體可以包括以下步驟步驟91、接收SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;步驟92、向TCP主機(jī)發(fā)送FIN報(bào)文; 步驟93、接收所述TCP主機(jī)回復(fù)的FIN ACK響應(yīng)報(bào)文;
步驟94、向所述SCTP主機(jī)發(fā)送SHUTDOWN ACK響應(yīng)報(bào)文;步驟95、接收所述SCTP主機(jī)發(fā)送的SHUTDOWN COMPLETE報(bào)文;步驟96、向所述TCP主機(jī)發(fā)送ACK響應(yīng)報(bào)文。在本實(shí)施例中,SCTP側(cè)首先發(fā)起鏈路關(guān)閉,發(fā)送SHUTDOWN報(bào)文,在本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序收到SHUTDOWN后,為了保證TCP側(cè)的數(shù)據(jù)能發(fā)送完成,向TCP 應(yīng)用發(fā)送FIN報(bào)文,只有在收到TCP側(cè)發(fā)送的FIN ACK之后,才認(rèn)為沒(méi)有數(shù)據(jù)需要傳輸了, 鏈路可以關(guān)閉。于是向SCTP側(cè)發(fā)送SHUTDOWN ACK報(bào)文,當(dāng)接收到SCTP側(cè)發(fā)送的確認(rèn)關(guān)閉完成的SHUTDOWN COMPLETE報(bào)文后,向TCP側(cè)發(fā)送ACK響應(yīng)報(bào)文,以實(shí)現(xiàn)整個(gè)鏈路的完全關(guān)閉,從而保證TCP側(cè)和SCTP側(cè)在鏈路終止時(shí)數(shù)據(jù)收發(fā)的完整性。上述兩個(gè)終止連接操作都是針對(duì)TCP的三次握手關(guān)閉協(xié)議做出的,作為本發(fā)明的另一種實(shí)施例,所述終止連接操作還可以針對(duì)TCP的四次握手關(guān)閉協(xié)議做出,具體參考圖10所示的由SCTP主機(jī)主動(dòng)發(fā)起正常的連接終止的信令流程圖,當(dāng)所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP主機(jī)時(shí),應(yīng)用本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序執(zhí)行終止通信連接的操作具體可以包括以下步驟步驟11、接收SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;步驟12、向TCP主機(jī)發(fā)送FIN報(bào)文;步驟13、接收所述TCP主機(jī)針對(duì)所述FIN報(bào)文回復(fù)的ACK響應(yīng)報(bào)文;步驟14、接收所述TCP主機(jī)發(fā)送的FIN報(bào)文;步驟15、向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文,以及,向所述SCTP主機(jī)發(fā)送的 SHUTDOWN ACK響應(yīng)報(bào)文;步驟16、接收SCTP主機(jī)發(fā)送的SHUTDOWN COMPLETE報(bào)文??梢钥闯觯诒景l(fā)明實(shí)施例中,當(dāng)本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序收到SCTP應(yīng)用發(fā)送的SHUTDOWN數(shù)據(jù)包后,開(kāi)始向TCP應(yīng)用發(fā)送FIN數(shù)據(jù)包,此時(shí)不管TCP應(yīng)用是按照三次握手關(guān)閉(FIN+ACK)還是四次握手關(guān)閉(FIN和ACK),都是在收到TCP應(yīng)用發(fā)送的FIN后才認(rèn)為沒(méi)有數(shù)據(jù)需要傳輸了,鏈路可以關(guān)閉,這時(shí)候向SCTP應(yīng)用發(fā)送SHUTDOWN ACK完成關(guān)閉。在具體實(shí)現(xiàn)中,在檢測(cè)到TCP側(cè)或者SCTP側(cè)任何一側(cè)發(fā)生鏈路異常后,都會(huì)進(jìn)行全鏈路的拆除工作的。對(duì)于TCP異常關(guān)閉,則直接進(jìn)行全鏈路的拆除工作并且釋放其緩沖的數(shù)據(jù);對(duì)于TCP,如果存在半關(guān)閉的情況,則會(huì)把SCTP適配側(cè)緩沖的數(shù)據(jù)發(fā)送完后才進(jìn)行全鏈路的拆除。作為本發(fā)明的另一種實(shí)施例,參考圖11所示的由TCP主機(jī)主動(dòng)發(fā)起正常的連接終止的信令流程圖,當(dāng)所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP主機(jī),緩存中還有未發(fā)送的數(shù)據(jù)時(shí),應(yīng)用本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序執(zhí)行終止通信連接的操作具體可以包括以下步驟 步驟111、接收TCP主機(jī)發(fā)送的FIN報(bào)文;步驟112、向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文;步驟113、向SCTP主機(jī)發(fā)送SHUTDOWN報(bào)文;步驟114、接收所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文;步驟115、向所述TCP主機(jī)發(fā)送FIN報(bào)文,以及,向SCTP主機(jī)發(fā)送SHUTDOWN COMPLETE 報(bào)文;步驟116、接收所述TCP主機(jī)回復(fù)的ACK響應(yīng)報(bào)文。在本實(shí)施例中,TCP側(cè)首先發(fā)起鏈路關(guān)閉,發(fā)送FIN報(bào)文,本發(fā)明的TCP連接與 SCTP連接互通轉(zhuǎn)換程序在收到FIN后,如果SCTP側(cè)緩沖中還有數(shù)據(jù)要發(fā)送,則采用半關(guān)閉的方式,先向TCP應(yīng)用回發(fā)ACK數(shù)據(jù)報(bào)文,然后開(kāi)始向SCTP應(yīng)用發(fā)送SHUTDOWN報(bào)文,只有在收到SHUTDOWN ACK之后(這時(shí)候SCTP側(cè)沒(méi)有要發(fā)送的數(shù)據(jù)了),然后向TCP側(cè)發(fā)送FIN 報(bào)文,實(shí)現(xiàn)整個(gè)鏈路的關(guān)閉。另外,如圖8所示,如果SCTP側(cè)緩存中沒(méi)有數(shù)據(jù)要發(fā)送(不需要半關(guān)閉),則可以將上述過(guò)程簡(jiǎn)化為T(mén)CP側(cè)的三次握手關(guān)閉,即將FIN和ACK包合并為一步來(lái)發(fā)送。本發(fā)明可以保證TCP側(cè)和SCTP側(cè)在鏈路正常終止時(shí)數(shù)據(jù)收發(fā)的完整性。為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明,以下提供一個(gè)TCP連接和SCTP連接互通實(shí)現(xiàn)上層應(yīng)用協(xié)議Diameter通信的完整過(guò)程示例。在執(zhí)行互通轉(zhuǎn)換之前,需要進(jìn)行轉(zhuǎn)換配置,首先配置哪一個(gè)TCP客戶(hù)端需要進(jìn)行鏈路轉(zhuǎn)換,即配置圖中TCP應(yīng)用的IP+P0RT四元組,即源端主機(jī)的IP地址及源端主機(jī)的端口信息;以及,目標(biāo)端主機(jī)的IP地址及目標(biāo)端主機(jī)的端口信息,其次在此轉(zhuǎn)換鏈路上配置解析的上層應(yīng)用協(xié)議為Diameter協(xié)議,最后啟動(dòng)本發(fā)明的TCP連接與SCTP連接互通轉(zhuǎn)換程序。參考圖12所示TCP連接和SCTP連接互通實(shí)現(xiàn)上層應(yīng)用協(xié)議Diameter通信的完整過(guò)程的信令流程圖,其中源端為T(mén)CP主機(jī),目標(biāo)端為SCTP主機(jī)時(shí),本例具體可以包括以下步驟一、通信連接建立過(guò)程步驟121、接收TCP主機(jī)發(fā)送的SYN報(bào)文,并解析其攜帶的源端TCP主機(jī)的IP地址及端口信息,以及,目標(biāo)端SCTP主機(jī)的IP地址及端口信息;步驟122、依據(jù)源端TCP主機(jī)的IP地址及端口信息,以及,目標(biāo)端SCTP主機(jī)的IP 地址及端口信息,向所述SCTP主機(jī)發(fā)送INIT報(bào)文;步驟123、接收所述SCTP主機(jī)發(fā)送的INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;步驟124、向所述SCTP主機(jī)發(fā)送C00KIE-ECH0報(bào)文,所述C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;步驟125、接收所述SCTP主機(jī)發(fā)送的C00KIE-ACK響應(yīng)報(bào)文;步驟126、向所述TCP主機(jī)發(fā)送SYN ACK響應(yīng)報(bào)文;步驟127、接收所述TCP主機(jī)發(fā)送的ACK報(bào)文。二、數(shù)據(jù)傳輸過(guò)程步驟128、接收TCP主機(jī)發(fā)送的TCP流數(shù)據(jù);
步驟129、將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù);步驟130、將所述SCTP報(bào)文數(shù)據(jù)發(fā)送至SCTP主機(jī)。步驟131、接收SCTP主機(jī)發(fā)送的SCTP報(bào)文數(shù)據(jù);步驟132、將所述SCTP報(bào)文數(shù)據(jù)按照TCP流數(shù)據(jù)的傳輸格式發(fā)送至TCP主機(jī);三、連接終止過(guò)程步驟133、接收TCP主機(jī)發(fā)送的FIN報(bào)文;步驟134、向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文;步驟135、向SCTP主機(jī)發(fā)送SHUTDOWN報(bào)文;步驟136、接收所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文;步驟137、向所述TCP主機(jī)發(fā)送FIN報(bào)文,以及,向SCTP主機(jī)發(fā)送SHUTDOWN COMPLETE 報(bào)文;步驟138、接收所述TCP主機(jī)回復(fù)的ACK響應(yīng)報(bào)文。需要說(shuō)明的是,對(duì)于方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書(shū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。參考圖13,示出了本發(fā)明的一種TCP連接與SCTP連接互通的裝置實(shí)施例的結(jié)構(gòu)框圖,具體可以包括以下模塊源端請(qǐng)求接收模塊1301,用于接收源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求,所述請(qǐng)求攜帶有源端與目標(biāo)端的地址信息;所述源端、目標(biāo)端中一端為T(mén)CP主機(jī),另一端為 SCTP主機(jī);目標(biāo)端連接發(fā)起模塊1302,用于依據(jù)所述源端與目標(biāo)端的地址信息,發(fā)起目標(biāo)端的通信連接建立過(guò)程;源端連接建立模塊1303,用于在所述目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立過(guò)程。在本發(fā)明的一種優(yōu)選實(shí)施例中,當(dāng)所述源端為T(mén)CP主機(jī),目標(biāo)端為SCTP主機(jī)時(shí),所述目標(biāo)端連接發(fā)起模塊可以包括以下子模塊INIT報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送INIT報(bào)文;INIT-ACK響應(yīng)報(bào)文接收子模塊,用于接收所述SCTP主機(jī)發(fā)送的INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;C00KIE-ECH0報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送C00KIE-ECH0報(bào)文,所述 C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;C00KIE-ACK響應(yīng)報(bào)文接收子模塊,用于接收所述SCTP主機(jī)發(fā)送的C00KIE-ACK響應(yīng)報(bào)文。在本實(shí)施例中,所述源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求為T(mén)CP主機(jī)發(fā)送的 SYN報(bào)文;所述源端連接建立模塊具體可以包括以下子模塊SYN ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送SYN ACK響應(yīng)報(bào)文;ACK報(bào)文接收子模塊,用于接收所述TCP主機(jī)發(fā)送的ACK報(bào)文。上述應(yīng)用本發(fā)明的TCP連接與SCTP連接互通裝置,在源端與目標(biāo)端之間建立通信連接的過(guò)程,可以參考圖3所示的信令流程圖。在本發(fā)明的另一種優(yōu)選實(shí)施例中,當(dāng)所述源端為SCTP主機(jī),目標(biāo)端為T(mén)CP主機(jī)時(shí), 所述目標(biāo)端連接發(fā)起模塊可以包括以下模塊SYN報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送SYN報(bào)文;SYN ACK響應(yīng)報(bào)文接收子模塊,用于接收所述TCP主機(jī)發(fā)送的SYNACK響應(yīng)報(bào)文;ACK報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送ACK報(bào)文。在本實(shí)施例中,所述源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求為SCTP主機(jī)發(fā)送的INIT報(bào)文;所述源端連接建立模塊具體可以包括以下子模塊INIT-ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;C00KIE-ECH0報(bào)文接收子模塊,用于接收所述SCTP主機(jī)發(fā)送的C00KIE-ECH0報(bào)文, 所述C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;C00KIE-ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送C00KIE-ACK響應(yīng)報(bào)文。上述應(yīng)用本發(fā)明的TCP連接與SCTP連接互通裝置,在源端與目標(biāo)端之間建立通信連接的過(guò)程可以參考圖4所示的信令流程圖。在本發(fā)明實(shí)施例中,優(yōu)選的是,還可以包括數(shù)據(jù)傳輸模塊,用于基于所述通信連接進(jìn)行源端與目標(biāo)端之間的數(shù)據(jù)傳輸。作為本發(fā)明的一種優(yōu)選實(shí)施例,所述數(shù)據(jù)傳輸模塊具體可以包括以下子模塊TCP流數(shù)據(jù)接收子模塊,用于接收TCP主機(jī)發(fā)送的TCP流數(shù)據(jù);解析子模塊,用于將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù);SCTP報(bào)文數(shù)據(jù)發(fā)送子模塊,用于將所述SCTP報(bào)文數(shù)據(jù)發(fā)送至SCTP主機(jī)。更為優(yōu)選的是,所述解析子模塊可以包括以下單元消息邊界信息提取單元,用于按照當(dāng)前通信采用的上層應(yīng)用協(xié)議,提取所述TCP 流數(shù)據(jù)中的消息邊界信息;分割單元,用于依據(jù)所述消息邊界信息分割當(dāng)前的TCP流數(shù)據(jù),并轉(zhuǎn)換為SCTP報(bào)文數(shù)據(jù)格式。在具體實(shí)現(xiàn)中,如所述當(dāng)前通信采用的上層應(yīng)用協(xié)議為Diameter協(xié)議,則所述消息邊界信息可以根據(jù)所述TCP流數(shù)據(jù)的報(bào)文頭中的消息長(zhǎng)度信息獲得。如所述當(dāng)前通信采用的上層應(yīng)用協(xié)議為SIP協(xié)議,則所述消息邊界信息可以根據(jù)所述TCP流數(shù)據(jù)的報(bào)文中的結(jié)束符和消息體內(nèi)容長(zhǎng)度獲得。由于需要對(duì)TCP側(cè)的數(shù)據(jù)進(jìn)行解析,因而作為本發(fā)明的一種優(yōu)選實(shí)施例,所述數(shù)據(jù)傳輸模塊還可以包括以下子模塊緩存子模塊,用于在將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù)之前,緩存所述TCP 流數(shù)據(jù)。在實(shí)際中,所述數(shù)據(jù)傳輸也可以由SCTP側(cè)發(fā)起,即作為一種優(yōu)選實(shí)施例,所述數(shù)據(jù)傳輸模塊還可以包括以下子模塊SCTP報(bào)文數(shù)據(jù)接收子模塊,用于接收SCTP主機(jī)發(fā)送的SCTP報(bào)文數(shù)據(jù);TCP流數(shù)據(jù)發(fā)送子模塊,用于將所述SCTP報(bào)文數(shù)據(jù)按照TCP流數(shù)據(jù)的格式發(fā)送至TCP主機(jī)。上述應(yīng)用本發(fā)明的TCP連接與SCTP連接互通裝置,在源端與目標(biāo)端之間建立數(shù)據(jù)傳輸?shù)倪^(guò)程可以參考圖5所示的信令流程圖。在本發(fā)明實(shí)施例中,優(yōu)選的是,還可以包括連接終止模塊,用于當(dāng)完成通信或通信連接發(fā)生異常時(shí),終止所述源端與目標(biāo)端之間的通信連接。作為本發(fā)明的一種優(yōu)選實(shí)施例,所述連接終止模塊可以包括以下子模塊第一請(qǐng)求報(bào)文接收子模塊,用于接收源端發(fā)起的與目標(biāo)端斷開(kāi)通信連接的第一請(qǐng)求報(bào)文;第二請(qǐng)求報(bào)文發(fā)送子模塊,用于依據(jù)所述第一請(qǐng)求報(bào)文向目標(biāo)端發(fā)送斷開(kāi)通信連接的第二請(qǐng)求報(bào)文;第一響應(yīng)報(bào)文接收子模塊,用于接收所述目標(biāo)端針對(duì)所述第二請(qǐng)求報(bào)文回復(fù)的第一響應(yīng)報(bào)文;第二響應(yīng)報(bào)文發(fā)送子模塊,用于依據(jù)所述第一響應(yīng)報(bào)文向源端發(fā)送針對(duì)第一請(qǐng)求報(bào)文的第二響應(yīng)報(bào)文;第一關(guān)閉確認(rèn)報(bào)文接收子模塊,用于接收源端針對(duì)所述第二響應(yīng)報(bào)文回復(fù)的第一關(guān)閉確認(rèn)報(bào)文;第二關(guān)閉確認(rèn)報(bào)文發(fā)送子模塊,用于依據(jù)所述第一關(guān)閉確認(rèn)報(bào)文,向目標(biāo)端發(fā)送第二關(guān)閉確認(rèn)報(bào)文。在具體實(shí)現(xiàn)中,當(dāng)所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP主機(jī)時(shí),所述第一請(qǐng)求報(bào)文為T(mén)CP主機(jī)發(fā)送的FIN報(bào)文;所述第二請(qǐng)求報(bào)文為向SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文; 所述第一響應(yīng)報(bào)文為所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文;所述第二響應(yīng)報(bào)文為向TCP主機(jī)發(fā)送的FIN ACK響應(yīng)報(bào)文;所述第一關(guān)閉確認(rèn)報(bào)文為所述TCP主機(jī)發(fā)送的ACK 響應(yīng)報(bào)文;所述第二關(guān)閉確認(rèn)報(bào)文為向SCTP主機(jī)發(fā)送的SHUTDOWN COMPLETE報(bào)文。上述應(yīng)用本發(fā)明的TCP連接與SCTP連接互通裝置,在源端與目標(biāo)端之間終止通信連接的過(guò)程可以參考圖8所示的信令流程圖。作為另一種實(shí)現(xiàn)方式,當(dāng)所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP主機(jī);所述第一請(qǐng)求報(bào)文為SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;所述第二請(qǐng)求報(bào)文為向TCP主機(jī)發(fā)送的FIN 報(bào)文;所述第一響應(yīng)報(bào)文為所述TCP主機(jī)回復(fù)的FIN ACK響應(yīng)報(bào)文;所述第二響應(yīng)報(bào)文為向所述SCTP主機(jī)發(fā)送的SHUTDOWN ACK響應(yīng)報(bào)文;所述第一關(guān)閉確認(rèn)報(bào)文為所述SCTP主機(jī)發(fā)送的SHUTDOWN COMPLETE報(bào)文;所述第二關(guān)閉確認(rèn)報(bào)文為向所述TCP主機(jī)發(fā)送的ACK響應(yīng)報(bào)文。上述應(yīng)用本發(fā)明的TCP連接與SCTP連接互通裝置,在源端與目標(biāo)端之間終止通信連接的過(guò)程可以參考圖9所示的信令流程圖。作為本發(fā)明的另一種優(yōu)選實(shí)施例,當(dāng)所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP主機(jī)時(shí);所述連接終止模塊可以包括以下子模塊SHUTDOWN報(bào)文接收子模塊,用于接收SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;FIN報(bào)文發(fā)送子模塊,用于向TCP主機(jī)發(fā)送的FIN報(bào)文;ACK響應(yīng)報(bào)文接收子模塊,用于接收TCP主機(jī)針對(duì)所述FIN報(bào)文回復(fù)的ACK響應(yīng)報(bào)文;FIN報(bào)文接收子模塊,用于接收TCP主機(jī)發(fā)送的FIN報(bào)文;ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文;SHUTDOWN ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送的SHUTDOWN ACK 響應(yīng)報(bào)文;SHUTDOWN COMPLETE報(bào)文接收子模塊,用于接收SCTP主機(jī)發(fā)送的SHUTDOWN COMPLETE 報(bào)文。上述應(yīng)用本發(fā)明的TCP連接與SCTP連接互通裝置,在源端與目標(biāo)端之間終止通信連接的過(guò)程可以參考圖10所示的信令流程圖。作為本發(fā)明的另一種優(yōu)選實(shí)施例,當(dāng)所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP主機(jī);并且,緩存中還有未發(fā)送的數(shù)據(jù)時(shí),所述連接終止模塊可以包括以下子模塊FIN報(bào)文接收子模塊,用于接收TCP主機(jī)發(fā)送的FIN報(bào)文;ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文;
SHUTDOWN報(bào)文發(fā)送子模塊,用于向SCTP主機(jī)發(fā)送SHUTDOWN報(bào)文;SHUTDOWN ACK響應(yīng)報(bào)文接收子模塊,用于接收所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文;FIN報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送FIN報(bào)文;SHUTDOWN COMPLETE 報(bào)文發(fā)送子模塊,用于向 SCTP 主機(jī)發(fā)送 SHUTDOWN COMPLETE 報(bào)文;ACK響應(yīng)報(bào)文接收子模塊,用于接收所述TCP主機(jī)回復(fù)的ACK響應(yīng)報(bào)文。上述應(yīng)用本發(fā)明的TCP連接與SCTP連接互通裝置,在源端與目標(biāo)端之間終止通信連接的過(guò)程可以參考圖12所示的信令流程圖。對(duì)于裝置實(shí)施例而言,由于其與前述的方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。以上對(duì)本發(fā)明所提供的一種TCP連接與SCTP連接互通的方法及一種TCP連接與 SCTP連接互通的裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1.一種TCP連接與SCTP連接互通的方法,其特征在于,包括接收源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求,所述請(qǐng)求攜帶有源端與目標(biāo)端的地址信息;所述源端、目標(biāo)端中一端為T(mén)CP主機(jī),另一端為SCTP主機(jī);依據(jù)所述源端與目標(biāo)端的地址信息,發(fā)起目標(biāo)端的通信連接建立過(guò)程; 當(dāng)所述目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立過(guò)程。
2.如權(quán)利要求1所述的方法,其特征在于,當(dāng)所述源端為T(mén)CP主機(jī),目標(biāo)端為SCTP主機(jī)時(shí),所述目標(biāo)端通信連接建立的過(guò)程包括向所述SCTP主機(jī)發(fā)送INIT報(bào)文;接收所述SCTP主機(jī)發(fā)送的INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;向所述SCTP主機(jī)發(fā)送C00KIE-ECH0報(bào)文,所述C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí) cookie ;接收所述SCTP主機(jī)發(fā)送的C00KIE-ACK響應(yīng)報(bào)文。
3.如權(quán)利要求2所述的方法,其特征在于,所述源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求為T(mén)CP主機(jī)發(fā)送的SYN報(bào)文;所述當(dāng)目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立的過(guò)程包括向所述TCP主機(jī)發(fā)送SYN ACK響應(yīng)報(bào)文; 接收所述TCP主機(jī)發(fā)送的ACK報(bào)文。
4.如權(quán)利要求1所述的方法,其特征在于,當(dāng)所述源端為SCTP主機(jī),目標(biāo)端為T(mén)CP主機(jī)時(shí),所述目標(biāo)端通信連接建立的過(guò)程包括向所述TCP主機(jī)發(fā)送SYN報(bào)文; 接收所述TCP主機(jī)發(fā)送的SYN ACK響應(yīng)報(bào)文; 向所述TCP主機(jī)發(fā)送ACK報(bào)文。
5.如權(quán)利要求4所述的方法,其特征在于,所述源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求為SCTP主機(jī)發(fā)送的INIT報(bào)文;所述當(dāng)目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立的過(guò)程包括向所述SCTP主機(jī)發(fā)送INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;接收所述SCTP主機(jī)發(fā)送的C00KIE-ECH0報(bào)文,所述C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;向所述SCTP主機(jī)發(fā)送C00KIE-ACK響應(yīng)報(bào)文。
6.如權(quán)利要求1所述的方法,其特征在于,還包括 基于所述通信連接進(jìn)行源端與目標(biāo)端之間的數(shù)據(jù)傳輸。
7.如權(quán)利要求6所述的方法,其特征在于,所述在源端與目標(biāo)端之間進(jìn)行數(shù)據(jù)傳輸?shù)牟襟E包括接收TCP主機(jī)發(fā)送的TCP流數(shù)據(jù); 將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù); 將所述SCTP報(bào)文數(shù)據(jù)發(fā)送至SCTP主機(jī)。
8.如權(quán)利要求7所述的方法,其特征在于,所述將TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù)的步驟包括按照當(dāng)前通信采用的上層應(yīng)用協(xié)議,提取所述TCP流數(shù)據(jù)中的消息邊界信息; 依據(jù)所述消息邊界信息分割當(dāng)前的TCP流數(shù)據(jù),并轉(zhuǎn)換為SCTP報(bào)文數(shù)據(jù)格式。
9.如權(quán)利要求8所述的方法,其特征在于,所述當(dāng)前通信采用的上層應(yīng)用協(xié)議為 Diameter協(xié)議,所述消息邊界信息根據(jù)所述TCP流數(shù)據(jù)的報(bào)文頭中的消息長(zhǎng)度信息獲得。
10.如權(quán)利要求8所述的方法,其特征在于,所述當(dāng)前通信采用的上層應(yīng)用協(xié)議為SIP 協(xié)議,所述消息邊界信息根據(jù)所述TCP流數(shù)據(jù)的報(bào)文中的結(jié)束符和消息體內(nèi)容長(zhǎng)度獲得。
11.如權(quán)利要求7所述的方法,其特征在于,所述在源端與目標(biāo)端之間進(jìn)行數(shù)據(jù)傳輸?shù)牟襟E還包括在將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù)之前,緩存所述TCP流數(shù)據(jù)。
12.如權(quán)利要求7所述的方法,其特征在于,所述在源端與目標(biāo)端之間進(jìn)行數(shù)據(jù)傳輸?shù)牟襟E還包括接收SCTP主機(jī)發(fā)送的SCTP報(bào)文數(shù)據(jù);將所述SCTP報(bào)文數(shù)據(jù)按照TCP流數(shù)據(jù)的格式發(fā)送至TCP主機(jī)。
13.如權(quán)利要求1所述的方法,其特征在于,還包括當(dāng)完成通信或通信連接發(fā)生異常時(shí),終止所述源端與目標(biāo)端之間的通信連接。
14.如權(quán)利要求13所述的方法,其特征在于,所述終止通信連接的步驟包括 接收源端發(fā)起的與目標(biāo)端斷開(kāi)通信連接的第一請(qǐng)求報(bào)文;依據(jù)所述第一請(qǐng)求報(bào)文向目標(biāo)端發(fā)送斷開(kāi)通信連接的第二請(qǐng)求報(bào)文; 接收所述目標(biāo)端針對(duì)所述第二請(qǐng)求報(bào)文回復(fù)的第一響應(yīng)報(bào)文; 依據(jù)所述第一響應(yīng)報(bào)文向源端發(fā)送針對(duì)第一請(qǐng)求報(bào)文的第二響應(yīng)報(bào)文; 接收源端針對(duì)所述第二響應(yīng)報(bào)文回復(fù)的第一關(guān)閉確認(rèn)報(bào)文; 依據(jù)所述第一關(guān)閉確認(rèn)報(bào)文,向目標(biāo)端發(fā)送第二關(guān)閉確認(rèn)報(bào)文。
15.如權(quán)利要求14所述的方法,其特征在于,所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP 主機(jī);所述第一請(qǐng)求報(bào)文為T(mén)CP主機(jī)發(fā)送的FIN報(bào)文; 所述第二請(qǐng)求報(bào)文為向SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文; 所述第一響應(yīng)報(bào)文為所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文; 所述第二響應(yīng)報(bào)文為向TCP主機(jī)發(fā)送的FIN ACK響應(yīng)報(bào)文; 所述第一關(guān)閉確認(rèn)報(bào)文為所述TCP主機(jī)發(fā)送的ACK響應(yīng)報(bào)文; 所述第二關(guān)閉確認(rèn)報(bào)文為向SCTP主機(jī)發(fā)送的SHUTD0WNC0MPLETE報(bào)文。
16.如權(quán)利要求14所述的方法,其特征在于,所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP 主機(jī);所述第一請(qǐng)求報(bào)文為SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;所述第二請(qǐng)求報(bào)文為向TCP主機(jī)發(fā)送的FIN報(bào)文;所述第一響應(yīng)報(bào)文為所述TCP主機(jī)回復(fù)的FIN ACK響應(yīng)報(bào)文;所述第二響應(yīng)報(bào)文為向所述SCTP主機(jī)發(fā)送的SHUTDOWN ACK響應(yīng)報(bào)文;所述第一關(guān)閉確認(rèn)報(bào)文為所述SCTP主機(jī)發(fā)送的SHUTD0WNC0MPLETE報(bào)文;所述第二關(guān)閉確認(rèn)報(bào)文為向所述TCP主機(jī)發(fā)送的ACK響應(yīng)報(bào)文。
17.如權(quán)利要求13所述的方法,其特征在于,所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP 主機(jī);所述終止通信連接的步驟包括接收SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文; 向TCP主機(jī)發(fā)送的FIN報(bào)文;接收TCP主機(jī)針對(duì)所述FIN報(bào)文回復(fù)的ACK響應(yīng)報(bào)文; 接收TCP主機(jī)發(fā)送的FIN報(bào)文;向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文,以及,向所述SCTP主機(jī)發(fā)送的SHUTDOWN ACK響應(yīng)報(bào)文;接收SCTP主機(jī)發(fā)送的SHUTDOWN COMPLETE報(bào)文。
18.如權(quán)利要求13所述的方法,其特征在于,在終止所述源端與目標(biāo)端之間的通信連接之前,所述的方法還包括發(fā)送所述緩存中TCP的流數(shù)據(jù)。
19.如權(quán)利要求18所述的方法,其特征在于,所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP 主機(jī);當(dāng)緩存中還有未發(fā)送的數(shù)據(jù)時(shí),所述終止通信連接的步驟包括接收TCP主機(jī)發(fā)送的FIN報(bào)文; 向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文; 向SCTP主機(jī)發(fā)送SHUTDOWN報(bào)文; 接收所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文;向所述TCP主機(jī)發(fā)送FIN報(bào)文,以及,向SCTP主機(jī)發(fā)送SHUTD0WNC0MPLETE報(bào)文; 接收所述TCP主機(jī)回復(fù)的ACK響應(yīng)報(bào)文。
20.如權(quán)利要求13所述的方法,其特征在于,在終止所述源端與目標(biāo)端之間的通信連接時(shí),所述的方法還包括釋放所述緩存中的數(shù)據(jù)。
21.如權(quán)利要求1所述的方法,其特征在于,所述源端與目標(biāo)端的地址信息包括源端主機(jī)的IP地址及源端主機(jī)的端口信息;以及,目標(biāo)端主機(jī)的IP地址及目標(biāo)端主機(jī)的端口信息ο
22.—種TCP連接與SCTP連接互通的裝置,其特征在于,包括源端請(qǐng)求接收模塊,用于接收源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求,所述請(qǐng)求攜帶有源端與目標(biāo)端的地址信息;所述源端、目標(biāo)端中一端為T(mén)CP主機(jī),另一端為SCTP主機(jī); 目標(biāo)端連接發(fā)起模塊,用于依據(jù)所述源端與目標(biāo)端的地址信息,發(fā)起目標(biāo)端的通信連接建立過(guò)程;源端連接建立模塊,用于在所述目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立過(guò)程。
23.如權(quán)利要求22所述的裝置,其特征在于,當(dāng)所述源端為T(mén)CP主機(jī),目標(biāo)端為SCTP主機(jī)時(shí),所述目標(biāo)端連接發(fā)起模塊包括INIT報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送INIT報(bào)文;INIT-ACK響應(yīng)報(bào)文接收子模塊,用于接收所述SCTP主機(jī)發(fā)送的INIT-ACK響應(yīng)報(bào)文,所述INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;C00KIE-ECH0報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送C00KIE-ECH0報(bào)文,所述 C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;C00KIE-ACK響應(yīng)報(bào)文接收子模塊,用于接收所述SCTP主機(jī)發(fā)送的C00KIE-ACK響應(yīng)報(bào)文。
24.如權(quán)利要求23所述的裝置,其特征在于,所述源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求為T(mén)CP主機(jī)發(fā)送的SYN報(bào)文;所述源端連接建立模塊包括SYN ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送SYN ACK響應(yīng)報(bào)文; ACK報(bào)文接收子模塊,用于接收所述TCP主機(jī)發(fā)送的ACK報(bào)文。
25.如權(quán)利要求22所述的裝置,其特征在于,當(dāng)所述源端為SCTP主機(jī),目標(biāo)端為T(mén)CP主機(jī)時(shí),所述目標(biāo)端連接發(fā)起模塊包括SYN報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送SYN報(bào)文;SYN ACK響應(yīng)報(bào)文接收子模塊,用于接收所述TCP主機(jī)發(fā)送的SYNACK響應(yīng)報(bào)文;ACK報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送ACK報(bào)文。
26.如權(quán)利要求25所述的裝置,其特征在于,所述源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求為SCTP主機(jī)發(fā)送的INIT報(bào)文;所述源端連接建立模塊包括INIT-ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送INIT-ACK響應(yīng)報(bào)文,所述 INIT-ACK報(bào)文包括標(biāo)識(shí)當(dāng)前連接的唯一上下文標(biāo)識(shí)cookie ;C00KIE-ECH0報(bào)文接收子模塊,用于接收所述SCTP主機(jī)發(fā)送的C00KIE-ECH0報(bào)文,所述 C00KIE-ECH0報(bào)文中包括所述上下文標(biāo)識(shí)cookie ;C00KIE-ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送C00KIE-ACK響應(yīng)報(bào)文。
27.如權(quán)利要求22所述的裝置,其特征在于,還包括數(shù)據(jù)傳輸模塊,用于基于所述通信連接進(jìn)行源端與目標(biāo)端之間的數(shù)據(jù)傳輸。
28.如權(quán)利要求27所述的裝置,其特征在于,所述數(shù)據(jù)傳輸模塊包括 TCP流數(shù)據(jù)接收子模塊,用于接收TCP主機(jī)發(fā)送的TCP流數(shù)據(jù);解析子模塊,用于將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù);SCTP報(bào)文數(shù)據(jù)發(fā)送子模塊,用于將所述SCTP報(bào)文數(shù)據(jù)發(fā)送至SCTP主機(jī)。
29.如權(quán)利要求觀(guān)所述的裝置,其特征在于,所述解析子模塊包括消息邊界信息提取單元,用于按照當(dāng)前通信采用的上層應(yīng)用協(xié)議,提取所述TCP流數(shù)據(jù)中的消息邊界信息;分割單元,用于依據(jù)所述消息邊界信息分割當(dāng)前的TCP流數(shù)據(jù),并轉(zhuǎn)換為SCTP報(bào)文數(shù)據(jù)格式。
30.如權(quán)利要求四所述的裝置,其特征在于,所述當(dāng)前通信采用的上層應(yīng)用協(xié)議為 Diameter協(xié)議,所述消息邊界信息根據(jù)所述TCP流數(shù)據(jù)的報(bào)文頭中的消息長(zhǎng)度信息獲得。
31.如權(quán)利要求四所述的裝置,其特征在于,所述當(dāng)前通信采用的上層應(yīng)用協(xié)議為SIP 協(xié)議,所述消息邊界信息根據(jù)所述TCP流數(shù)據(jù)的報(bào)文中的結(jié)束符和消息體內(nèi)容長(zhǎng)度獲得。
32.如權(quán)利要求27所述的裝置,其特征在于,所述數(shù)據(jù)傳輸模塊還包括緩存子模塊,用于在將所述TCP流數(shù)據(jù)解析為SCTP報(bào)文數(shù)據(jù)之前,緩存所述TCP流數(shù)據(jù)。
33.如權(quán)利要求27所述的裝置,其特征在于,所述數(shù)據(jù)傳輸模塊還包括SCTP報(bào)文數(shù)據(jù)接收子模塊,用于接收SCTP主機(jī)發(fā)送的SCTP報(bào)文數(shù)據(jù); TCP流數(shù)據(jù)發(fā)送子模塊,用于將所述SCTP報(bào)文數(shù)據(jù)按照TCP流數(shù)據(jù)的格式發(fā)送至TCP 主機(jī)。
34.如權(quán)利要求22所述的裝置,其特征在于,還包括連接終止模塊,用于當(dāng)完成通信或通信連接發(fā)生異常時(shí),終止所述源端與目標(biāo)端之間的通信連接。
35.如權(quán)利要求34所述的裝置,其特征在于,所述連接終止模塊包括第一請(qǐng)求報(bào)文接收子模塊,用于接收源端發(fā)起的與目標(biāo)端斷開(kāi)通信連接的第一請(qǐng)求報(bào)文;第二請(qǐng)求報(bào)文發(fā)送子模塊,用于依據(jù)所述第一請(qǐng)求報(bào)文向目標(biāo)端發(fā)送斷開(kāi)通信連接的第二請(qǐng)求報(bào)文;第一響應(yīng)報(bào)文接收子模塊,用于接收所述目標(biāo)端針對(duì)所述第二請(qǐng)求報(bào)文回復(fù)的第一響應(yīng)報(bào)文;第二響應(yīng)報(bào)文發(fā)送子模塊,用于依據(jù)所述第一響應(yīng)報(bào)文向源端發(fā)送針對(duì)第一請(qǐng)求報(bào)文的第二響應(yīng)報(bào)文;第一關(guān)閉確認(rèn)報(bào)文接收子模塊,用于接收源端針對(duì)所述第二響應(yīng)報(bào)文回復(fù)的第一關(guān)閉確認(rèn)報(bào)文;第二關(guān)閉確認(rèn)報(bào)文發(fā)送子模塊,用于依據(jù)所述第一關(guān)閉確認(rèn)報(bào)文,向目標(biāo)端發(fā)送第二關(guān)閉確認(rèn)報(bào)文。
36.如權(quán)利要求35所述的裝置,其特征在于,所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP 主機(jī);所述第一請(qǐng)求報(bào)文為T(mén)CP主機(jī)發(fā)送的FIN報(bào)文; 所述第二請(qǐng)求報(bào)文為向SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文; 所述第一響應(yīng)報(bào)文為所述SCTP主機(jī)回復(fù)的SHUTDOWN ACK響應(yīng)報(bào)文; 所述第二響應(yīng)報(bào)文為向TCP主機(jī)發(fā)送的FINACK響應(yīng)報(bào)文; 所述第一關(guān)閉確認(rèn)報(bào)文為所述TCP主機(jī)發(fā)送的ACK響應(yīng)報(bào)文; 所述第二關(guān)閉確認(rèn)報(bào)文為向SCTP主機(jī)發(fā)送的SHUTDOWNCOMPLETE報(bào)文。
37.如權(quán)利要求35所述的裝置,其特征在于,所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP 主機(jī);所述第一請(qǐng)求報(bào)文為SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文;所述第二請(qǐng)求報(bào)文為向TCP主機(jī)發(fā)送的FIN報(bào)文;所述第一響應(yīng)報(bào)文為所述TCP主機(jī)回復(fù)的FIN ACK響應(yīng)報(bào)文;所述第二響應(yīng)報(bào)文為向所述SCTP主機(jī)發(fā)送的SHUTDOWN ACK響應(yīng)報(bào)文;所述第一關(guān)閉確認(rèn)報(bào)文為所述SCTP主機(jī)發(fā)送的SHUTDOWNCOMPLETE報(bào)文;所述第二關(guān)閉確認(rèn)報(bào)文為向所述TCP主機(jī)發(fā)送的ACK響應(yīng)報(bào)文。
38.如權(quán)利要求34所述的裝置,其特征在于,所述源端為SCTP主機(jī),所述目標(biāo)端為T(mén)CP 主機(jī);所述連接終止模塊包括SHUTDOWN報(bào)文接收子模塊,用于接收SCTP主機(jī)發(fā)送的SHUTDOWN報(bào)文; FIN報(bào)文發(fā)送子模塊,用于向TCP主機(jī)發(fā)送的FIN報(bào)文;ACK響應(yīng)報(bào)文接收子模塊,用于接收TCP主機(jī)針對(duì)所述FIN報(bào)文回復(fù)的ACK響應(yīng)報(bào)文; FIN報(bào)文接收子模塊,用于接收TCP主機(jī)發(fā)送的FIN報(bào)文; ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文; SHUTDOWN ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述SCTP主機(jī)發(fā)送的SHUTDOWN ACK響應(yīng)報(bào)文;SHUTDOWN COMPLETE報(bào)文接收子模塊,用于接收SCTP主機(jī)發(fā)送的SHUTDOWN COMPLETE 報(bào)文。
39.如權(quán)利要求34所述的裝置,其特征在于,所述源端為T(mén)CP主機(jī),所述目標(biāo)端為SCTP 主機(jī);當(dāng)緩存中還有未發(fā)送的數(shù)據(jù)時(shí),所述連接終止模塊包括 FIN報(bào)文接收子模塊,用于接收TCP主機(jī)發(fā)送的FIN報(bào)文; ACK響應(yīng)報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)回復(fù)ACK響應(yīng)報(bào)文; SHUTDOWN報(bào)文發(fā)送子模塊,用于向SCTP主機(jī)發(fā)送SHUTDOWN報(bào)文; SHUTDOWN ACK響應(yīng)報(bào)文接收子模塊,用于接收所述SCTP主機(jī)回復(fù)的SHUTDOWNACK響應(yīng)報(bào)文;FIN報(bào)文發(fā)送子模塊,用于向所述TCP主機(jī)發(fā)送FIN報(bào)文;SHUTDOWN COMPLETE報(bào)文發(fā)送子模塊,用于向SCTP主機(jī)發(fā)送SHUTDOWN COMPLETE報(bào)文; ACK響應(yīng)報(bào)文接收子模塊,用于接收所述TCP主機(jī)回復(fù)的ACK響應(yīng)報(bào)文。
全文摘要
本發(fā)明提供了一種TCP連接與SCTP連接互通的方法,包括接收源端發(fā)起的與目標(biāo)端建立通信連接的請(qǐng)求,所述請(qǐng)求攜帶有源端與目標(biāo)端的地址信息;所述源端、目標(biāo)端中一端為T(mén)CP主機(jī),另一端為SCTP主機(jī);依據(jù)所述源端與目標(biāo)端的地址信息,發(fā)起目標(biāo)端的通信連接建立過(guò)程;當(dāng)所述目標(biāo)端的通信連接建立完成后,針對(duì)源端發(fā)起通信連接建立請(qǐng)求繼續(xù)進(jìn)行源端的通信連接建立過(guò)程。本發(fā)明可以在不對(duì)現(xiàn)有的上層應(yīng)用及其運(yùn)行的系統(tǒng)進(jìn)行任何修改,不對(duì)上層應(yīng)用的使用進(jìn)行任何限制的基礎(chǔ)上,提高上層應(yīng)用信令傳輸?shù)恼_性及可靠性。
文檔編號(hào)H04L29/06GK102315918SQ20101022635
公開(kāi)日2012年1月11日 申請(qǐng)日期2010年7月6日 優(yōu)先權(quán)日2010年7月6日
發(fā)明者弋景峰, 賀保國(guó) 申請(qǐng)人:大唐移動(dòng)通信設(shè)備有限公司