專利名稱:一種nat打通方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種NAT打通方法,具體地說是一種用于網(wǎng)絡中位于不同網(wǎng)關(guān) 內(nèi)的客戶終端之間點對點通信的技術(shù)。
背景技術(shù):
網(wǎng)絡地址轉(zhuǎn)換(NAT, Network Address Translation)被廣泛應用于各種類型 Internet接入方式和各種類型的網(wǎng)絡中。NAT不僅解決了 IP地址不足的問題, 而且還能夠有效地避免來自網(wǎng)絡外部的攻擊,隱藏并保護網(wǎng)絡內(nèi)部的計算機。 NAT分為4種類型
1、 完全非對稱型
只要知道路由器丄的動態(tài)映射端口,對方即可發(fā)送消息過來。
2、 IP受限型
只有本機往對方IP先發(fā)送一個數(shù)據(jù)包,對方才能根據(jù)路由器上的動態(tài)映射 端口發(fā)送過來。
3、 端口受限型
只有本機往對方IP、端口先發(fā)送一個數(shù)據(jù)包,對方才能從該端口發(fā)送數(shù)據(jù) 過來。
4、 對稱型
從本機同一個端口往不同IP發(fā)送數(shù)據(jù),在路由器上動態(tài)映射的端口不一樣。 般來說,只要客戶端A將數(shù)據(jù)包發(fā)送到了客戶端B,客戶端B就能根據(jù) 收到數(shù)據(jù)包的IP、端口將數(shù)據(jù)包發(fā)送到客戶端A。這樣即完成了 NAT打通流程。 也就是說只要一方將數(shù)據(jù)包成功發(fā)送到了另一方就能打通成功。
下面用PubIP表示公網(wǎng)IP, PubPort表示路由器上動態(tài)映射的端口。 LanIP 表示內(nèi)網(wǎng)IP, LanPort表示內(nèi)網(wǎng)端口 。 NatType表示內(nèi)網(wǎng)NAT類型。從STUN服 務器獲取本機的公網(wǎng)IP、映射端口和內(nèi)網(wǎng)NAT類型。STUN服務器使用戶數(shù)據(jù) 報協(xié)議(UDP)簡單穿越網(wǎng)絡地址轉(zhuǎn)換器,它允許所有的NAT客戶終端(如防 火墻后邊的計算機)與位于局域網(wǎng)以外的VoIP (網(wǎng)絡電話)服務商實現(xiàn)電話通 話。
現(xiàn)有的NAT打通方法都是雙方互往對方的(PubIP, PubPort)發(fā)送消息包, 只要有一方收到/對方的消息包,即打通成功。這種打通方式有兩個弊端
1、 對于不支持Hairpin (環(huán)回)的NAT,如果雙方都處于同一個內(nèi)網(wǎng),反 而互相連不上。因為如果雙方在不支持環(huán)回的內(nèi)網(wǎng), 一方往對方的(PubIP, PubPort)發(fā)送消息,會發(fā)送不到對方。
2、 對于對稱型NAT,上述NAT打通方法也無能為力。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述不足之處,提供一種新的NAT打通方法。按照 本發(fā)明提供的技術(shù)方案, 一種NAT打通方法,所述方法的歩驟如下所述PubIPA、 PubPortA、 NatTypeA、 LanIPA、 LanPortA分別表示客戶端A 的公網(wǎng)IP、路由器上動態(tài)映射的端口、內(nèi)網(wǎng)NAT類型、內(nèi)網(wǎng)IP和內(nèi)網(wǎng)端口; 所述PubIPB、 PubPortB、 NatTypeB、 LanIPB、 LanPortB分別表示客戶端B的公 網(wǎng)IP、路由器上動態(tài)映射的端口、內(nèi)網(wǎng)NAT類型、內(nèi)網(wǎng)IP和內(nèi)網(wǎng)端U。
(1) 所述NAT打通方法由打通服務器執(zhí)行,客戶端A和客戶端B都登錄 到打通服務器,并能通過打通服務器轉(zhuǎn)發(fā)各種消息。
(2) 客戶端A連接客戶端B:客戶端A從STUN服務器獲取PubIPA、 PubPortA、 NatTypeA;如果客戶端A的NAT類型不是對稱型,則將含有PubIPA、 PubPortA、 NatTypeA、 LanIPA、 LanPortA的消息通過打通服務器轉(zhuǎn)發(fā)給客戶端 B;如果客戶端A的NAT類型為對稱型,則將含有PubIPA、 PubPortA+l、 NatTypeA、 LanIPA、 LanPortA的消息通過打通服務器轉(zhuǎn)發(fā)給客戶端B。
(3) 客戶端B收到所述客戶端A發(fā)來的消息后,從STUN服務器獲取 PubIPB、 PubPortB 、 NatTypeB 。
(4) 如果PuWPB等于PubIPA,說明客戶端A和客戶端B在同一個內(nèi)網(wǎng), 客戶端B往(LanIPA, LanPortA)發(fā)送一個消息包;如果客戶端A收到所述客 戶端B的消息包,返回客戶端B—個消息,至此打通成功,否則進行步驟5。
(5) 如果客戶端B的NAT類型不是對稱型,則客戶端B將含有PubIPB、 PubPortB、 NatTypeB、 LanIPB、 LanPortB的消息通過打通服務器轉(zhuǎn)發(fā)給客戶端 A;如果客戶端B的NAT類型為對稱型,則客戶端B將含有PubIPB、PubPortB+l 、 NatTypeB 、 LanIPB、 LanPortB的消息通過打通服務器轉(zhuǎn)發(fā)給客戶端A。
(6) 客戶端A收到所述客戶端B發(fā)來的消息后,如果PubIPA等于PubIPB, 說明客戶端A和客戶端B在同一個內(nèi)網(wǎng),客戶端A往(LanIPB, LanPortB)發(fā) 送一個消息包,如果客戶端B收到所述客戶端A的消息包,返回客戶端A—個 消息,至此打通成功,否則進行步驟7。
(7) 客戶端A往(PubIPB, PubPortB)發(fā)送一個消息包,同時客戶端B 往(PubIPA, PubPortA)發(fā)送一個消息包。只要有一方收到了所述消息包,說 明打通成功。
所述打通服務器為執(zhí)行本發(fā)明所述方法流程的一個模塊。所述(x, y)的 形式表示括號中內(nèi)容x、 y的二元組。
本發(fā)明與已有技術(shù)相比具有以下優(yōu)點
本發(fā)明能成功識別雙方是否處于同一個內(nèi)網(wǎng),即使雙方處于多級內(nèi)網(wǎng)的不 同層級也能打通成功;另外對于絕大部分實際使用的對稱型NAT,也能成功實 現(xiàn)打通。
圖1為本發(fā)明的方法流程圖。
具體實施例方式
下面結(jié)合附圖和實施例對本發(fā)明作進一 歩說明。
如圖1所示,如果客戶端A和B的NAT類型都不是對稱型,打通流程如下 客戶端A和客戶端B都先登錄到打通服務器,并能通過打通服務器轉(zhuǎn)發(fā)各種消息。
客戶端A連接客戶端B,客戶端A從STUN服務器獲取PubIPA、 PubPortA、 NatTypeA。將含有PubIPA、 PubPortA、 NatTypeA、 LanIPA、 LanPortA的消息通 過打通服務器轉(zhuǎn)發(fā)給客戶端B。
客戶端B收到消息后,從STUN服務器獲取PubIPB、 PubPortB、 NatTypeB。
如果PubIPB等于PubIPA,說明客戶端A和客戶端B在同一個內(nèi)網(wǎng),客戶 端B往(LanIPA, LanPortA)發(fā)送一個消息包,如果客戶端A收到該消息包, 返回客戶端B—個消息,至此打通成功,否則繼續(xù)往下。
客戶端B將含有PubIPB、 PubPortB、 NatTypeB、 LanIPB、 LanPortB的消息 通過打通服務器轉(zhuǎn)發(fā)給客戶端A。
客戶端A收到消息后,如果PubIPA等于PubIPB,說明客戶端A和客戶端 B在同一個內(nèi)網(wǎng)(有可能客戶端A在第二級局域網(wǎng)中,客戶端B往客戶端A發(fā) 送不成功,但客戶端A往客戶端B發(fā)送能成功),客戶端A往(LanIPB, LanPortB) 發(fā)送一個消息包,如果客戶端B收到該消息包,返回客戶端A—個消息,至此 打通成功,否則繼續(xù)往下。
客戶端A往(PubIPB,PubPortB)發(fā)送一個消息包,同時客戶端B往(PubIPA, PubPortA)發(fā)送一個消息包。只要有一方收到了消息包,說明打通成功。
上述流程對除對稱型以外的NAT都能打通成功。對于對稱型NAT,由于客 戶端A從STUN服務器獲取的PubPort和發(fā)往客戶端B的PubPort不一樣,所 以不能打通成功。在實踐中發(fā)現(xiàn),大部分對稱型NAT的動態(tài)映射端口號都是簡 單遞加的,即只要客戶端A從STUN服務器獲取完信息后立即往客戶端B發(fā)送 消息,那么客戶端A發(fā)往客戶端B的PubPort應該是從STUN服務器獲取的 PubPort加l。因此修改上述流程為如果客戶端A的NAT類型為對稱型,客戶 端A發(fā)往客戶端B信息中的PubPort需要加1。同樣客戶端B也類似。這樣, 大部分對稱型NAT也能打通成功。經(jīng)過實際使用的結(jié)果顯示,本發(fā)明所述的NAT 打通方法取得了很好的效果。
權(quán)利要求
1、一種NAT打通方法,其特征是所述方法的步驟如下,所述PubIPA、PubPortA、NatTypeA、LanIPA、LanPortA分別表示客戶端A的公網(wǎng)IP、路由器上動態(tài)映射的端口、內(nèi)網(wǎng)NAT類型、內(nèi)網(wǎng)IP和內(nèi)網(wǎng)端口;所述PubIPB、PubPortB、NatTypeB、LanIPB、LanPortB分別表示客戶端B的公網(wǎng)IP、路由器上動態(tài)映射的端口、內(nèi)網(wǎng)NAT類型、內(nèi)網(wǎng)IP和內(nèi)網(wǎng)端口;(1)所述NAT打通方法由打通服務器執(zhí)行,客戶端A和客戶端B都登錄到打通服務器,并能通過打通服務器轉(zhuǎn)發(fā)各種消息;(2)客戶端A連接客戶端B客戶端A從STUN服務器獲取PubIPA、PubPortA、NatTypeA;如果客戶端A的NAT類型不是對稱型,則將含有PubIPA、PubPortA、NatTypeA、LanIPA、LanPortA的消息通過打通服務器轉(zhuǎn)發(fā)給客戶端B;如果客戶端A的NAT類型為對稱型,則將含有PubIPA、PubPortA+1、NatTypeA、LanIPA、LanPortA的消息通過打通服務器轉(zhuǎn)發(fā)給客戶端B;(3)客戶端B收到所述客戶端A發(fā)來的消息后,從STUN服務器獲取PubIPB、PubPortB、NatTypeB;(4)如果PubIPB等于PubIPA,說明客戶端A和客戶端B在同一個內(nèi)網(wǎng),客戶端B往(LanIPA,LanPortA)發(fā)送一個消息包;如果客戶端A收到所述客戶端B的消息包,返回客戶端B一個消息,至此打通成功,否則進行步驟5;(5)如果客戶端B的NAT類型不是對稱型,則客戶端B將含有PubIPB、PubPortB、NatTypeB、LanIPB、LanPortB的消息通過打通服務器轉(zhuǎn)發(fā)給客戶端A;如果客戶端B的NAT類型為對稱型,則客戶端B將含有PubIPB、PubPortB+1、NatTypeB、LanIPB、LanPortB的消息通過打通服務器轉(zhuǎn)發(fā)給客戶端A;(6)客戶端A收到所述客戶端B發(fā)來的消息后,如果PubIPA等于PubIPB,說明客戶端A和客戶端B在同一個內(nèi)網(wǎng),客戶端A往(LanIPB,LanPortB)發(fā)送一個消息包,如果客戶端B收到所述客戶端A的消息包,返回客戶端A一個消息,至此打通成功,否則進行步驟7;(7)客戶端A往(PubIPB,PubPortB)發(fā)送一個消息包,同時客戶端B往(PubIPA,PubPortA)發(fā)送一個消息包。只要有一方收到了所述消息包,說明打通成功。
全文摘要
本發(fā)明涉及一種NAT打通方法,是一種用于網(wǎng)絡中位于不同網(wǎng)關(guān)內(nèi)的客戶終端之間點對點通信的技術(shù)。其優(yōu)點是本發(fā)明能成功識別雙方是否處于同一個內(nèi)網(wǎng),即使雙方處于多級內(nèi)網(wǎng)的不同層級也能打通成功;另外對于絕大部分實際使用的對稱型NAT,也能成功實現(xiàn)打通。
文檔編號H04L29/12GK101527676SQ20081024406
公開日2009年9月9日 申請日期2008年12月19日 優(yōu)先權(quán)日2008年12月19日
發(fā)明者夏衛(wèi)平, 李恒中 申請人:無錫億普得科技有限公司