本發(fā)明涉及通信領域,具體而言,涉及一種NAT穿透方法及裝置。
背景技術:
由于互聯(lián)網(wǎng)的快速發(fā)展,互聯(lián)網(wǎng)協(xié)議(Internet Protocol,IP)的第四版(簡稱為IPV4)地址不夠用,不能每個主機分到一個公網(wǎng)IP,所以產(chǎn)生網(wǎng)絡地址轉(zhuǎn)換(Network Address Translation,簡稱為NAT)地址轉(zhuǎn)換技術。
私網(wǎng)內(nèi)主機主動發(fā)起連接,數(shù)據(jù)包經(jīng)過NAT地址轉(zhuǎn)換后送給公網(wǎng)服務器,連接建立以后可雙向傳送數(shù)據(jù)。但是NAT禁止私網(wǎng)外的主機(即公網(wǎng),或者接入公網(wǎng)的另一私網(wǎng)的主機)主動發(fā)起連接訪問私網(wǎng)內(nèi)主機。在一些特殊的場合,需要不同私網(wǎng)內(nèi)的主機進行P2P互聯(lián),這就涉及到NAT穿透的問題。見圖1,如果主機A先主動發(fā)起連接公網(wǎng)服務器,公網(wǎng)服務器是可以訪問主機A的;如果公網(wǎng)服務器主動發(fā)起連接主機B,將會失??;如果主機C主動發(fā)起連接主機B,將會失??;
打洞是NAT穿透的常見技術。支持打洞實現(xiàn)NAT穿透的系統(tǒng),至少包括兩個主機和一個公網(wǎng)服務器。公網(wǎng)服務器S在公網(wǎng)上有一個IP,兩個私網(wǎng)分別由NAT-A和NAT-B連接到公網(wǎng),NAT-A后有主機A,NAT-B面有主機B,需要借助公網(wǎng)服務器S將主機A和主機B建立P2P的TCP連接。
首先主機A、主機B都將自己的經(jīng)過NAT轉(zhuǎn)換后的公網(wǎng)IP地址和端口等信息通過公網(wǎng)服務器S告知對方。當主機A需要和主機B建立P2P的TCP連接時,主機A、主機B相互嘗試連接對方,同時啟動監(jiān)聽。本端NAT會紀錄此次連接的目標地址和端口號,下次對端主機連接本端時,經(jīng)過對端NAT轉(zhuǎn)換后的公網(wǎng)IP地址和端口等信息已經(jīng)記錄在本端NAT,本端NAT認為是合法的數(shù)據(jù),并允許通過,從而P2P的TCP連接建立起來了。見圖2,主機A、主機B先通過公網(wǎng)服務器交換經(jīng)過NAT轉(zhuǎn)換后的公網(wǎng)IP地址和端口信息,相互嘗試連接對方。如果主機A先連接主機B,將會失?。恢笾鳈CB連接主機A,NAT-A認為是合法的數(shù)據(jù),并允許通過,主機A的監(jiān)聽端口接收數(shù)據(jù),從而P2P的TCP連接建立起來了。
但在實際情況中,上述流程主機A和主機B的操作系統(tǒng)協(xié)議棧有可能不支持地址重用,無法實現(xiàn)相同端口上發(fā)送打洞連接的同時啟動監(jiān)聽。仍然是圖2流程,主機A、主機B相互嘗試連接對方,如果主機A先連接主機B,將會失?。恢笾鳈CB連接主機A,NAT-A認為是合法的數(shù)據(jù),并允許通過。雖然數(shù)據(jù)可以發(fā)送到主機A,但是由于主機A不支持地址重用,并沒有監(jiān)聽數(shù)據(jù),協(xié)議棧將會操作主動斷開連接,P2P的TCP 連接建立失敗,導致在NAT穿透時無法做到雙向打洞。
針對相關技術中,協(xié)議棧不支持地址重用,無法實現(xiàn)相同端口上發(fā)送打洞連接的同時啟動監(jiān)聽的問題,還未提出有效的解決方案。
技術實現(xiàn)要素:
本發(fā)明提供了一種NAT穿透方法及裝置,以至少解決相關技術中無法實現(xiàn)相同端口上發(fā)送打洞連接的同時啟動監(jiān)聽的問題。
根據(jù)本發(fā)明的一個方面,提供了一種網(wǎng)絡地址轉(zhuǎn)換NAT穿透方法,包括:公網(wǎng)服務器向第一主機發(fā)送第一通知消息,其中,所述第一通知消息用于通知所述第一主機監(jiān)聽與所述第一主機對應的第一端口;在所述第一主機完成對所述第一端口的監(jiān)聽之后,所述公網(wǎng)服務器向第二主機發(fā)送第二通知消息,其中,所述第二通知消息用于通知所述第二主機建立與所述第一主機的連接;所述公網(wǎng)服務器向所述第一主機發(fā)送第三通知消息,其中,所述第三通知消息用于通知所述第一主機停止監(jiān)聽所述第一端口,并通知所述第一主機建立與所述第二主機的連接。
可選地,所述公網(wǎng)服務器向所述第一主機發(fā)送所述第一通知消息之前包括:所述公網(wǎng)服務器將第一公網(wǎng)網(wǎng)絡互連協(xié)議IP地址和所述第一端口的信息發(fā)送至所述第二主機;其中,所述第一公網(wǎng)IP地址為所述第一主機的IP地址經(jīng)過第一網(wǎng)絡轉(zhuǎn)換后的IP地址;所述公網(wǎng)服務器將第二IP地址和所述第二主機對應的第二端口的信息發(fā)送至所述第一主機;其中,所述第二公網(wǎng)IP地址為所述第二主機的IP地址經(jīng)過第二網(wǎng)絡轉(zhuǎn)換后的IP地址。
可選地,所述第一主機建立與所述第二主機的連接包括:所述第一主機的所述第一端口與所述第二公網(wǎng)IP地址和所述第二端口建立連接。
根據(jù)本發(fā)明的另一個方面,還提供了另一種網(wǎng)絡地址轉(zhuǎn)換NAT穿透方法,包括:第一主機接收公網(wǎng)服務器發(fā)送的第一通知消息,所述第一通知消息用于通知所述第一主機監(jiān)聽與所述第一主機對應的第一端口;所述第一主機根據(jù)所述第一通知消息監(jiān)聽所述第一端口;第二主機嘗試與所述第一主機建立連接之后,所述第一主機從所述公網(wǎng)服務器接收第三通知消息,其中,所述第三通知消息用于通知所述第一主機停止監(jiān)聽所述第一端口,并通知所述第一主機建立與所述第二主機的連接。
可選地,第一主機接收公網(wǎng)服務器發(fā)送的第一通知消息之前包括:所述第一主機通過所述公網(wǎng)服務器將第一公網(wǎng)網(wǎng)絡互連協(xié)議IP地址和所述第一端口的信息發(fā)送至第二主機;其中,所述第一公網(wǎng)IP地址為所述第一主機的IP地址經(jīng)過第一網(wǎng)絡轉(zhuǎn)換后的IP地址。
可選地,所述第一主機建立與所述第二主機的連接包括:所述第一主機的所述第一 端口與所述第二公網(wǎng)IP地址和所述第二主機對應的第二端口建立連接;其中,所述第二公網(wǎng)IP地址為所述第二主機的IP地址經(jīng)過第二網(wǎng)絡轉(zhuǎn)換后的IP地址。
根據(jù)本發(fā)明的一個方面,提供了一種網(wǎng)絡地址轉(zhuǎn)換NAT穿透裝置,應用于公網(wǎng)服務器,所述裝置包括:第一發(fā)送模塊,用于向第一主機發(fā)送第一通知消息,其中,所述第一通知消息用于通知所述第一主機監(jiān)聽與所述第一主機對應的第一端口;第二發(fā)送模塊,用于在所述第一主機完成對所述第一端口的監(jiān)聽之后,向第二主機發(fā)送第二通知消息,其中,所述第二通知消息用于通知所述第二主機建立與所述第一主機的連接;第三發(fā)送模塊,用于向所述第一主機發(fā)送第三通知消息,其中,所述第三通知消息用于通知所述第一主機停止監(jiān)聽所述第一端口,并通知所述第一主機建立與所述第二主機的連接。
可選地,所述裝置還包括:第四發(fā)送模塊,用于將第一公網(wǎng)網(wǎng)絡互連協(xié)議IP地址和所述第一端口的信息發(fā)送至所述第二主機;其中,所述第一公網(wǎng)IP地址為所述第一主機的IP地址經(jīng)過第一網(wǎng)絡轉(zhuǎn)換后的IP地址;第五發(fā)送模塊,用于將第二IP地址和所述第二主機對應的第二端口的信息發(fā)送至所述第一主機;其中,所述第二公網(wǎng)IP地址為所述第二主機的IP地址經(jīng)過第二網(wǎng)絡轉(zhuǎn)換后的IP地址。
可選地,所述第一主機建立與所述第二主機的連接包括:所述第一主機的所述第一端口與所述第二公網(wǎng)IP地址和所述第二端口建立連接。
根據(jù)本發(fā)明的另一個方面,還提供了另一種網(wǎng)絡地址轉(zhuǎn)換NAT穿透裝置,應用于第一主機,所述裝置包括:第一接收模塊,用于接收公網(wǎng)服務器發(fā)送的第一通知消息,所述第一通知消息用于通知所述第一主機監(jiān)聽與所述第一主機對應的第一端口;監(jiān)聽模塊,用于根據(jù)所述第一通知消息監(jiān)聽所述第一端口;第二接收模塊,用于在第二主機嘗試與所述第一主機建立連接之后,從所述公網(wǎng)服務器接收第三通知消息,其中,所述第三通知消息用于通知所述第一主機停止監(jiān)聽所述第一端口,并通知所述第一主機建立與所述第二主機的連接。
可選地,所述裝置還包括:發(fā)送模塊,用于通過所述公網(wǎng)服務器將第一公網(wǎng)網(wǎng)絡互連協(xié)議IP地址和所述第一端口的信息發(fā)送至第二主機;其中,所述第一公網(wǎng)IP地址為所述第一主機的IP地址經(jīng)過第一網(wǎng)絡轉(zhuǎn)換后的IP地址。
可選地,述第一主機建立與所述第二主機的連接包括:所述第一主機的所述第一端口與所述第二公網(wǎng)IP地址和所述第二主機對應的第二端口建立連接;其中,所述第二公網(wǎng)IP地址為所述第二主機的IP地址經(jīng)過第二網(wǎng)絡轉(zhuǎn)換后的IP地址。
通過本發(fā)明,采用公網(wǎng)服務器向第一主機發(fā)送第一通知消息,其中,第一通知消息用于通知該第一主機監(jiān)聽與第一主機對應的第一端口;在第一主機完成對第一端口的監(jiān)聽之后,公網(wǎng)服務器向第二主機發(fā)送第二通知消息,其中,第二通知消息用于通知第二主機建立與該第一主機的連接;公網(wǎng)服務器向第一主機發(fā)送第三通知消息,其中,第三通知消息用于通知第一主機停止監(jiān)聽該第一端口,并通知第一主機建立與第二主機的連 接。解決了相關技術中協(xié)議棧不支持地址重用,無法實現(xiàn)相同端口上發(fā)送打洞連接的同時啟動監(jiān)聽的問題,進而提高了打洞成功率。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中:
圖1是相關技術中外網(wǎng)訪問私網(wǎng)示意圖;
圖2是相關技術中主機之間打洞流程示意圖;
圖3是根據(jù)本發(fā)明實施例的NAT穿透方法的流程圖;
圖4是根據(jù)本發(fā)明實施例的NAT穿透裝置的結構框圖;
圖5是根據(jù)本發(fā)明實施例的NAT穿透裝置的結構框圖(一);
圖6是根據(jù)本發(fā)明實施例的NAT穿透方法的流程圖(一);
圖7是根據(jù)本發(fā)明實施例的NAT穿透裝置的結構框圖(二);
圖8是根據(jù)本發(fā)明實施例的NAT穿透裝置的結構框圖(三);
圖9是根據(jù)本發(fā)明實施例的NAT穿透方法的流程圖(三)。
具體實施方式
下文中將參考附圖并結合實施例來詳細說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
需要說明的是,本發(fā)明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。
在本實施例中提供了一種網(wǎng)絡NAT穿透方法,圖3是根據(jù)本發(fā)明實施例的NAT穿透方法的流程圖,如圖3所示,該流程包括如下步驟:
步驟S302,公網(wǎng)服務器向第一主機發(fā)送第一通知消息,其中,第一通知消息用于通知第一主機監(jiān)聽與該第一主機對應的第一端口;
步驟S304,在第一主機完成對第一端口的監(jiān)聽之后,公網(wǎng)服務器向第二主機發(fā)送第二通知消息,其中,第二通知消息用于通知第二主機建立與第一主機的連接;
步驟S306,公網(wǎng)服務器向第一主機發(fā)送第三通知消息,其中,第三通知消息用于通知第一主機停止監(jiān)聽第一端口,并通知第一主機建立與第二主機的連接。
通過上述步驟,由公網(wǎng)服務器控制第一主機和第二主機打洞的流程,相比于相關技 術中,流程第一主機和第二主機的操作系統(tǒng)協(xié)議棧在不支持地址重用的情況下,導致在網(wǎng)絡穿透時無法做到雙向打洞,解決了相關技術中協(xié)議棧不支持地址重用,無法實現(xiàn)相同端口上發(fā)送打洞連接的同時啟動監(jiān)聽的問題,進而提高了打洞成功率。
第一主機和第二主機進行業(yè)務通信的前提在于獲取彼此的通信地址,在一個可選實施例中,公網(wǎng)服務器向該第一主機發(fā)送該第一通知消息之前,公網(wǎng)服務器將第一公網(wǎng)網(wǎng)絡互連協(xié)議IP地址和第一端口的信息發(fā)送至第二主機;其中,第一公網(wǎng)IP地址為第一主機的IP地址經(jīng)過第一網(wǎng)絡轉(zhuǎn)換后的IP地址;公網(wǎng)服務器將第二IP地址和該第二主機對應的第二端口的信息發(fā)送至第一主機;其中,第二公網(wǎng)IP地址為第二主機的IP地址經(jīng)過第二網(wǎng)絡轉(zhuǎn)換后的IP地址。
在一個可選實施例中,第一主機的第一端口與第二公網(wǎng)IP地址和第二端口建立連接,從而完成了第一主機建立與第二主機的連接。
通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到根據(jù)上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
在本實施例中還提供了一種網(wǎng)絡NAT穿透裝置,該裝置用于實現(xiàn)上述實施例及優(yōu)選實施方式,已經(jīng)進行過說明的不再贅述。如以下所使用的,術語“模塊”可以實現(xiàn)預定功能的軟件和/或硬件的組合。盡管以下實施例所描述的裝置較佳地以軟件來實現(xiàn),但是硬件,或者軟件和硬件的組合的實現(xiàn)也是可能并被構想的。
圖4是根據(jù)本發(fā)明實施例的NAT穿透裝置的結構框圖,應用于公網(wǎng)服務器,如圖4所示,該裝置包括:第一發(fā)送模塊42,用于向第一主機發(fā)送第一通知消息,其中,第一通知消息用于通知第一主機監(jiān)聽與該第一主機對應的第一端口;第二發(fā)送模塊44,用于在第一主機完成對第一端口的監(jiān)聽之后,向第二主機發(fā)送第二通知消息,其中,第二通知消息用于通知第二主機建立與第一主機的連接;第三發(fā)送模塊46,用于向第一主機發(fā)送第三通知消息,其中,第三通知消息用于通知該第一主機停止監(jiān)聽該第一端口,并通知該第一主機建立與該第二主機的連接。
圖5是根據(jù)本發(fā)明實施例的NAT穿透裝置的結構框圖(一),如圖5所示,該裝置還包括:第四發(fā)送模塊52,用于將第一公網(wǎng)網(wǎng)絡互連協(xié)議IP地址和該第一端口的信息發(fā)送至第二主機;其中,第一公網(wǎng)IP地址為該第一主機的IP地址經(jīng)過第一網(wǎng)絡轉(zhuǎn)換后的IP地址;第五發(fā)送模塊54,用于將第二IP地址和該第二主機對應的第二端口的信息發(fā)送至第一主機;其中,第二公網(wǎng)IP地址為第二主機的IP地址經(jīng)過第二網(wǎng)絡轉(zhuǎn)換后的IP地址。
可選地,第一主機建立與第二主機的連接包括:第一主機的第一端口與第二公網(wǎng)IP地址和第二端口建立連接。
需要說明的是,上述各個模塊是可以通過軟件或硬件來實現(xiàn)的,對于后者,可以通過以下方式實現(xiàn),但不限于此:上述模塊均位于同一處理器中;或者,上述模塊分別位于多個處理器中。
在另一個實施例中提供了另一種網(wǎng)絡NAT穿透方法,圖6是根據(jù)本發(fā)明實施例的NAT穿透方法的流程圖(一),如圖6所示,該流程包括如下步驟:
步驟S602,第一主機接收公網(wǎng)服務器發(fā)送的第一通知消息,第一通知消息用于通知該第一主機監(jiān)聽與第一主機對應的第一端口;
步驟S604,第一主機根據(jù)第一通知消息監(jiān)聽第一端口;
步驟S606,在第二主機嘗試與所述第一主機建立連接之后,所述第一主機從所述公網(wǎng)服務器接收第三通知消息,其中,所述第三通知消息用于通知所述第一主機停止監(jiān)聽所述第一端口,并通知所述第一主機建立與所述第二主機的連接。
通過上述步驟,由公網(wǎng)服務器控制第一主機和第二主機打洞的流程,相比于相關技術中,流程第一主機和第二主機的操作系統(tǒng)協(xié)議棧在不支持地址重用的情況下,導致在網(wǎng)絡穿透時無法做到雙向打洞,解決了相關技術中協(xié)議棧不支持地址重用,無法實現(xiàn)相同端口上發(fā)送打洞連接的同時啟動監(jiān)聽的問題,進而提高了打洞成功率。
第一主機和第二主機進行業(yè)務通信的前提在于獲取彼此的通信地址,在一個可選實施例中,第一主機接收公網(wǎng)服務器發(fā)送的第一通知消息之前,第一主機通過該公網(wǎng)服務器將第一公網(wǎng)網(wǎng)絡互連協(xié)議IP地址和第一端口的信息發(fā)送至第二主機;其中,第一公網(wǎng)IP地址為第一主機的IP地址經(jīng)過第一網(wǎng)絡轉(zhuǎn)換后的IP地址。
在一個可選實施例中,第一主機的第一端口與第二公網(wǎng)IP地址和該第二主機對應的第二端口建立連接;其中,第二公網(wǎng)IP地址為第二主機的IP地址經(jīng)過第二網(wǎng)絡轉(zhuǎn)換后的IP地址。從而第一主機建立了與第二主機的連接。
通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到根據(jù)上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
在本實施例中還提供了一種網(wǎng)絡NAT穿透裝置,該裝置用于實現(xiàn)上述實施例及優(yōu)選實施方式,已經(jīng)進行過說明的不再贅述。如以下所使用的,術語“模塊”可以實現(xiàn)預定功能的軟件和/或硬件的組合。盡管以下實施例所描述的裝置較佳地以軟件來實現(xiàn), 但是硬件,或者軟件和硬件的組合的實現(xiàn)也是可能并被構想的。
圖7是根據(jù)本發(fā)明實施例的NAT穿透裝置的結構框圖(二),應用于第一主機,如圖7所示,該裝置包括:第一接收模塊72,用于接收公網(wǎng)服務器發(fā)送的第一通知消息,該第一通知消息用于通知該第一主機監(jiān)聽與該第一主機對應的第一端口;監(jiān)聽模塊74,用于根據(jù)該第一通知消息監(jiān)聽該第一端口;第二接收模塊76,用于在第二主機嘗試與第一主機建立連接之后,從該公網(wǎng)服務器接收第三通知消息,其中,第三通知消息用于通知第一主機停止監(jiān)聽該第一端口,并通知第一主機建立與該第二主機的連接。
圖8是根據(jù)本發(fā)明實施例的NAT穿透裝置的結構框圖(三),如圖8所示,該裝置還包括:發(fā)送模塊82,用于通過公網(wǎng)服務器將第一公網(wǎng)網(wǎng)絡互連協(xié)議IP地址和第一端口的信息發(fā)送至第二主機;其中,第一公網(wǎng)IP地址為第一主機的IP地址經(jīng)過第一網(wǎng)絡轉(zhuǎn)換后的IP地址。
可選地,第一主機建立與第二主機的連接包括:第一主機的該第一端口與第二公網(wǎng)IP地址和該第二主機對應的第二端口建立連接;其中,第二公網(wǎng)IP地址為第二主機的IP地址經(jīng)過第二網(wǎng)絡轉(zhuǎn)換后的IP地址。
需要說明的是,上述各個模塊是可以通過軟件或硬件來實現(xiàn)的,對于后者,可以通過以下方式實現(xiàn),但不限于此:上述模塊均位于同一處理器中;或者,上述模塊分別位于多個處理器中。
本發(fā)明的實施例還提供了一種存儲介質(zhì)。可選地,在本實施例中,上述存儲介質(zhì)可以被設置為存儲用于執(zhí)行以下步驟的程序代碼:
S1,公網(wǎng)服務器向第一主機發(fā)送第一通知消息,其中,第一通知消息用于通知第一主機監(jiān)聽與該第一主機對應的第一端口;
S2,在第一主機完成對第一端口的監(jiān)聽之后,公網(wǎng)服務器向第二主機發(fā)送第二通知消息,其中,第二通知消息用于通知第二主機建立與第一主機的連接;
S3,公網(wǎng)服務器向第一主機發(fā)送第三通知消息,其中,第三通知消息用于通知第一主機停止監(jiān)聽第一端口,并通知第一主機建立與第二主機的連接。
可選地,存儲介質(zhì)還被設置為存儲用于執(zhí)行以下步驟的程序代碼:
S4,第一主機接收公網(wǎng)服務器發(fā)送的第一通知消息,第一通知消息用于通知該第一主機監(jiān)聽與第一主機對應的第一端口;
S5,第一主機根據(jù)第一通知消息監(jiān)聽第一端口。
可選地,在本實施例中,上述存儲介質(zhì)可以包括但不限于:U盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
可選地,在本實施例中,處理器根據(jù)存儲介質(zhì)中已存儲的程序代碼執(zhí)行上述S1、S2和S3。
可選地,在本實施例中,處理器根據(jù)存儲介質(zhì)中已存儲的程序代碼執(zhí)行上述S4和S5。
可選地,本實施例中的具體示例可以參考上述實施例及可選實施方式中所描述的示例,本實施例在此不再贅述。
本可選實施例的目的在于,提供當協(xié)議棧不支持地址重用的條件下,通過公網(wǎng)服務器協(xié)助,私網(wǎng)內(nèi)通信雙方單向打洞建立P2P連接的方式實現(xiàn)NAT穿透的方法。
本可選實施例采用以下技術方案:
1、當主機A需要和主機B建立P2P的TCP連接時,由公網(wǎng)服務器S將經(jīng)過NAT轉(zhuǎn)換后的公網(wǎng)IP地址和端口等信息告知對方主機。
2、公網(wǎng)服務器S控制打洞流程,通知主機A監(jiān)聽,主機A完成啟動業(yè)務端口監(jiān)聽后,公網(wǎng)服務器S通知主機B嘗試與主機A建立連接。主機B不管連接主機A成功與否,都斷開連接,并通知公網(wǎng)服務器S嘗試連接完成。此時NAT-B的會紀錄此次連接的目標地址和端口號。
3、公網(wǎng)服務器S通知主機A關閉監(jiān)聽。主機A綁定業(yè)務端口與主機B的經(jīng)過NAT-B轉(zhuǎn)換后的公網(wǎng)IP地址和端口進行連接,NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址和端口等信息已經(jīng)記錄在NAT-B,NAT-B認為是合法的數(shù)據(jù),并允許通過,轉(zhuǎn)給主機A,TCP連接建立成功。
因為有公網(wǎng)服務器控制打洞雙方主機流程,避免協(xié)議棧不支持地址重用,發(fā)送打洞連接的同并沒有啟動監(jiān)聽數(shù)據(jù)的情況下,收到數(shù)據(jù)后沒有正常處理,斷開連接,導致打洞失敗。此方案不受場景限制,提高打洞成功率。
圖9是根據(jù)本發(fā)明實施例的NAT穿透方法的流程圖(三),如圖9所示,該流程包括如下步驟:
步驟1:公網(wǎng)服務器S啟動控制連接偵聽C和打洞連接偵聽N。其中,控制連接用于保持公網(wǎng)服務器S分別與主機A、主機B之間的通信。打洞連接用于獲取主機A、主機B經(jīng)過NAT-A、NAT-B轉(zhuǎn)換后的公網(wǎng)IP地址和端口信息。
步驟2:主機A和主機B分別與公網(wǎng)服務器S的控制連接C保持聯(lián)系。公網(wǎng)服務器S處于公網(wǎng)內(nèi),私網(wǎng)內(nèi)主機A、主機B主動發(fā)起控制連接C,數(shù)據(jù)包經(jīng)過NAT到達公網(wǎng)服務器,連接建立以后可雙向傳送數(shù)據(jù)。公網(wǎng)服務器S可以通過控制連接C通知到私網(wǎng)內(nèi)的主機A、主機B。
步驟3:當主機A需要和主機B建立P2P的TCP連接時,首先主機A綁定業(yè)務端 口PA去連接公網(wǎng)服務器S的打洞連接端口N,發(fā)送協(xié)助連接申請。
步驟4:公網(wǎng)服務器S的打洞連接收到主機A的申請后,獲取到主機A經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址NAA和端口NPA信息,并關閉主機A的連接。
步驟5:公網(wǎng)服務器S通過控制連接C通知主機B,將主機A經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址NAA和端口NPA信息告訴主機B,同時要求主機B上報經(jīng)過NAT-B轉(zhuǎn)換后的公網(wǎng)IP地址NAB和端口NPB信息。
步驟6:主機B收到公網(wǎng)服務器S的連接通知后,保存主機A經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址NAA和端口NAP信息,并同樣綁定業(yè)務端口PB去連接公網(wǎng)服務器S的打洞連接端口N。
步驟7:公網(wǎng)服務器S的打洞連接收到主機B的請求后,記錄主機B經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址NAB和端口NPB信息,關閉主機B連接。
步驟8:公網(wǎng)服務器S通過控制連接C通知主機A,將主機B經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址和端口信息告訴主機A。
至此,完成主機A、主機B獲取對端NAT轉(zhuǎn)換后的地址。后續(xù)是處理協(xié)議棧不支持地址重用的條件下的打洞流程。
步驟9:公網(wǎng)服務器S通過控制連接通知主機A監(jiān)聽業(yè)務端口PA。此時只主機A監(jiān)聽業(yè)務端口,不需要主機A在監(jiān)聽的同時去嘗試連接主機B,不存在協(xié)議棧不支持地址重用的問題。
步驟10:主機A啟動業(yè)務端口PA偵聽。
步驟11:主機A通過控制連接C通知公網(wǎng)服務器S偵聽完成。
步驟12:公網(wǎng)服務器S通過控制連接C通知主機B嘗試與主機A的NAT-A的地址NAA和端口NPA建立連接。此時只需要主機B嘗試連接主機A,主機B監(jiān)不用聽業(yè)務端口PB,不存在協(xié)議棧不支持地址重用的問題。
步驟13:主機B接收到請求后,綁定業(yè)務端口PB與主機A的經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址NAA和端口NPA進行連接。此時主機B本地的NAT-B會記錄目的地址NAA端口NPA與主機B的內(nèi)網(wǎng)地址和端口PB之間的映射消息,后續(xù)從地址NAA且端口NPA發(fā)送過來的數(shù)據(jù),將被認為是合法數(shù)據(jù),轉(zhuǎn)交給主機B的業(yè)務端口PB。
步驟14:此時如果NAT-A已經(jīng)存在NAT-B的公網(wǎng)IP地址NAB和端口NPB的映射關系,則連接請求將會轉(zhuǎn)發(fā)到主機A,跳轉(zhuǎn)到步驟18。
更多的情況下,NAT-A不會存在NAT-B的公網(wǎng)IP地址NAB和端口NPB的映射關系,將會阻止主機B的連接,主機B連接失敗斷開連接,并監(jiān)聽業(yè)務端口PB,之后通 知公網(wǎng)服務器S嘗試連接完成,且已經(jīng)監(jiān)聽業(yè)務端口PB。此時主機B斷開連接,只需要主機B監(jiān)聽業(yè)務端口PB,不存在協(xié)議棧不支持地址重用的問題。跳轉(zhuǎn)到步驟15。
步驟15:公網(wǎng)服務器S接收到主機B嘗試連接完成消息后,通知主機A關閉偵聽,并使用業(yè)務端口PA與主機B的經(jīng)過NAT-B轉(zhuǎn)換后的公網(wǎng)地址NAB和端口NPB進行連接。
步驟16:主機A收到通知后,關閉監(jiān)聽業(yè)務端口PA,之后使用業(yè)務端口PA連接NAT-B的公網(wǎng)IP地址NAB和端口NPB,不存在協(xié)議棧不支持地址重用的問題。
步驟17:NAT-B接收到經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址NAA和端口NPA數(shù)據(jù),因為在步驟13中記錄了目的地址NAA和目的端口NPA,所以認為接收到的消息合法,會轉(zhuǎn)給主機B的業(yè)務端口PB。
步驟18:此時主機A的業(yè)務端口PA和主機B的業(yè)務端口PB之間建立P2P的連接,直接進行業(yè)務通信。
綜上所述,通過本發(fā)明通過公網(wǎng)服務器協(xié)助,實現(xiàn)了私網(wǎng)內(nèi)通信雙方單向打洞建立P2P連接。
顯然,本領域的技術人員應該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結合。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。