欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

通信方法

文檔序號:7956508閱讀:207來源:國知局
專利名稱:通信方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種通信方法,特別涉及一種能夠使得用戶端在對稱型NAT中也能夠?qū)崿F(xiàn)點對點互通的通信方法。
背景技術(shù)
NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換器)是在internet IP地址日益缺乏的情況下產(chǎn)生的,它的主要目的就是為了能夠地址重用。NAT負責將某些內(nèi)網(wǎng)IP地址的計算機向外部網(wǎng)絡(luò)發(fā)出的IP數(shù)據(jù)包的源IP地址轉(zhuǎn)換為NAT自己的公網(wǎng)的IP地址,目的IP地址不變,并將IP數(shù)據(jù)包轉(zhuǎn)發(fā)給路由器,最終到達外部的計算機。同時負責將外部的計算機返回的IP數(shù)據(jù)包的目的IP地址轉(zhuǎn)換為內(nèi)網(wǎng)的IP地址,源IP地址不變,并最終送達到內(nèi)網(wǎng)中的計算機。
NAT分為兩大類,基本的NAT和NAPT(Network Address/Port Translator,網(wǎng)絡(luò)地址/端口轉(zhuǎn)換器)?;镜腘AT會改變IP包中的原IP地址,但是不會改變IP包中的端口。NAPT不但會改變經(jīng)過這個NAT設(shè)備的IP數(shù)據(jù)報的IP地址,還會改變IP數(shù)據(jù)報的TCP/UDP(用戶數(shù)據(jù)報協(xié)議)端口。通過NAPT上網(wǎng)的特點決定了只能由NAPT內(nèi)的計算機主動向NAPT外部的主機發(fā)起連接,外部的主機想直接和NAPT內(nèi)的計算機直接建立連接是不被允許的。
所以,數(shù)字信息穿越NAT/FW(防火墻)是internet上各類應(yīng)用,特別是P2P(點到點)應(yīng)用,經(jīng)常需要面對的問題。
對于下面幾種情況,目前已經(jīng)有比較好的解決方案1、發(fā)送方、接收方至少有一方位于公網(wǎng)。
2、發(fā)送方、接收方都位于Cone(圓錐型)NAT(包括Full Cone、RestrictedCone、Port Restricted Cone)。
但是如果是下面的情況,目前采用的方案一般都是通過服務(wù)器進行中轉(zhuǎn),而無法實現(xiàn)真正的P2P通信。
步驟204、即時通信服務(wù)器根據(jù)確定能查看的用戶狀態(tài)信息,向虛擬形象信息單元取相應(yīng)的虛擬形象信息;這里的虛擬形象信息可以是將要顯示給第一用戶的虛擬形象圖片,也可以是虛擬形象圖片的編號;表2為一個根據(jù)用戶狀態(tài)信息,確定用戶終端應(yīng)該顯示的用戶虛擬形象圖片的例子

表2若第一用戶無權(quán)查看第二用戶的表情狀態(tài),但有權(quán)查看工作狀態(tài),則顯示的圖片如表3所示

表3
首先,用戶端1登錄服務(wù)器,NAT1為這次會話分配了一個端口,比如60000,那么服務(wù)器收到的用戶端1的地址是202.187.45.3:60000,這就是用戶端1的外網(wǎng)地址了。同樣,用戶端2登錄服務(wù)器,NAT2給此次會話分配的端口,比如40000,那么服務(wù)器收到的2的地址是187.34.1.56:40000。
此時,用戶端1與用戶端2都可以與服務(wù)器通信了。如果用戶端1此時想直接發(fā)送信息給用戶端2,那么他可以從服務(wù)器那兒獲得用戶端2的公網(wǎng)地址187.34.1.56:40000,現(xiàn)在我們需要的是在NAT2上打一個方向為202.187.45.3(即用戶端1的外網(wǎng)地址)的洞,那么用戶端1發(fā)送到187.34.1.56:40000的信息,用戶端2就能收到了。
因為只有服務(wù)器和用戶端2保持通信。所以,這個打洞操作由服務(wù)器指示用戶端2發(fā)送。即,如果用戶端1想向用戶端2發(fā)送信息,那么用戶端1發(fā)送命令給服務(wù)器,請求服務(wù)器命令用戶端2向用戶端1方向打洞。
以上過程只適合于Cone NAT的情況,如果是Symmetric NAT,那么當用戶端2向用戶端1打洞的端口已經(jīng)重新分配了,用戶端2將無法知道這個端口。

發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種即使一方為對稱型NAT的情況下也能夠?qū)崿F(xiàn)點對點互通的通信方法。
依照本發(fā)明的用于在第一用戶端和第二用戶端建立連接的通信方法,其中,第一用戶端通過非對稱型NAT與服務(wù)器連接,第二用戶端通過對稱型NAT與服務(wù)器連接。該方法包括步驟a,當?shù)谝挥脩舳苏埱笈c第二用戶端建立連接時,第二用戶端通過對稱型NAT向服務(wù)器的不同端口發(fā)送數(shù)據(jù)包,更新服務(wù)器上的端口跳變列表;步驟b,當端口跳變列表中跳變規(guī)律為規(guī)律跳變時,第二用戶端根據(jù)該跳變規(guī)律打洞,來建立第一用戶端和第二用戶端之間的連接。
依照本發(fā)明的通信方法,當端口跳變規(guī)律為規(guī)律跳變時,可以建立第一用戶端和第二用戶端之間的點對點連接。


圖1為兩用戶端分別通過NAT和服務(wù)器相連的通信系統(tǒng)。
圖2為依照本發(fā)明的連接方法的流程圖。
圖3為端口跳變?yōu)橐?guī)律跳變且加權(quán)值固定時連接方法的流程圖。
圖4為端口跳變?yōu)橐?guī)律跳變但加權(quán)值不固定時連接方法的流程圖。
具體實施例方式
本發(fā)明通過UDP端口跳變預(yù)測,實現(xiàn)客戶端在symmetric NAT中也能夠?qū)崿F(xiàn)P2P互通的方法。
symmetric NAT端口跳變,主要存在3種方式1、規(guī)律跳變,如N+M,N+2M,N+3M,權(quán)值M固定2、比較規(guī)律,在一段時間里面一直增加,或者一直減少,變更的權(quán)值不固定。
3、完全無規(guī)律,但無任何規(guī)律的開始增加,過了一會,又減少比如5467,3210,9971,10031,4998...
現(xiàn)網(wǎng)很大一部分symmetric NAT的端口跳變屬于前兩種情況,而且大多數(shù)情況下不會出現(xiàn)跳變的端口比跳變前小的情況。
對于無規(guī)律跳變的情況,通過服務(wù)器中轉(zhuǎn)的方式傳送文件。但對于上述的情況1和2,則可以通過本發(fā)明的方法實現(xiàn)兩用戶端的互連。
參照圖2,描述依照本發(fā)明的在用戶端1和用戶端2之間實現(xiàn)P2P互通的方法,其中用戶端2通過對稱型(symmetric)NAT和服務(wù)器相連。
首先,在步驟S201中,用戶1使用的用戶端1向服務(wù)器提出請求和用戶2使用的用戶端2建立連接的申請。
在步驟S202中,服務(wù)器準備幾個監(jiān)聽端口號,通知處于對稱型NAT的客戶端2向這幾個監(jiān)聽端口發(fā)送數(shù)據(jù)包,這些消息包通過NAT時,源地址端口都發(fā)生跳變。服務(wù)器根據(jù)接收的數(shù)據(jù)包,更新存儲在服務(wù)器上的端口跳變列表,并根據(jù)該端口跳變列表分析跳變規(guī)律。
在步驟S203中,服務(wù)器判斷該跳變規(guī)律是否為無規(guī)律的端口跳變。當確定該跳變規(guī)律為無規(guī)律的端口跳變時,執(zhí)行步驟S210。否則,當確定該跳變規(guī)律為規(guī)律的端口跳變時,執(zhí)行步驟S204。
在步驟S204中,服務(wù)器進一步判斷該規(guī)律的端口跳變是否為加權(quán)值固定的跳變。如果確定該規(guī)律跳變?yōu)榧訖?quán)值固定的跳變時,執(zhí)行步驟S205。否則執(zhí)行步驟S206。
在步驟S205中,服務(wù)器要求用戶端2進行N+M打洞,其中N為在步驟S202中的最后一次跳變的端口,M為在步驟S204中確定的加權(quán)值。
如果端口跳變是規(guī)律跳變但加權(quán)值不固定,則在步驟S206中,采用線形逼近策略。即,服務(wù)器要求用戶端2進行for(i=N,N+U)打洞,其中N為在步驟S202中的最后一次跳變的端口,U為分析在步驟204中確定的一數(shù)值,該數(shù)值為大于在端口跳變列表中任意前后相鄰打洞的端口之差的值。也就是說,用戶端2進行N,N+1,......,N+U打洞。在本發(fā)明中,式子for(i=A,B)表示第二用戶端進行端口A到B的打洞。
在執(zhí)行了步驟S205或S206之后,服務(wù)器在步驟S207中要求用戶端1通過在步驟S205或S206中用戶端2的打洞,執(zhí)行兩者之間的連接。也就是說,當加權(quán)值為固定的加權(quán)值M,且執(zhí)行了步驟S205之后,用戶端1向用戶端2的公網(wǎng)地址端口(該端口為N+M)發(fā)送數(shù)據(jù)包;當加權(quán)值為非固定的加權(quán)值,且執(zhí)行了步驟S206之后,用戶端1向用戶端2的公網(wǎng)地址端口(該端口為N,N+1,......,N+U)發(fā)送數(shù)據(jù)包。在步驟S208中,確定連接是否成功。如果成功,則處理結(jié)束。如果沒有成功,則執(zhí)行步驟S209,確定連接重試是否已執(zhí)行了X次。如果確定連接重試執(zhí)行了X次,則執(zhí)行步驟S210。否則返回步驟S203。
在步驟S210中,確定端口更新是否已經(jīng)重試了Y次。如果否,則返回步驟S202。如果是,則執(zhí)行步驟S211。在步驟S211中,利用服務(wù)器中轉(zhuǎn)方式連接用戶端1和用戶端2。
步驟S209和S210的作用是為了防止網(wǎng)絡(luò)異常而導(dǎo)致丟包的情況,X和Y的值一般較小,例如取值2或3。
此外,對于加權(quán)值為非固定的加權(quán)值的情況,當步驟S207中沒有建立用戶端1和用戶端2之間的連接時,可以進一步要求用戶端2進行for(i=N,N+U×2)打洞,然后執(zhí)行用戶端1和用戶端2之間的連接等。這種情況將在參照圖4的描述中進行詳細的說明。
下面,參照圖3,更詳細地描述在加權(quán)值固定的規(guī)律跳變端口的symmetricNAT的情況下執(zhí)行的通信方法。
用戶端1向服務(wù)器發(fā)送與用戶端2的連接請求。服務(wù)器接收到該連接請求之后,向用戶端2發(fā)送更新端口跳變列表請求。用戶端2接收到該更新端口跳變列表請求時,向服務(wù)器的不同端口發(fā)送數(shù)據(jù)包,更新存儲在服務(wù)器上的端口跳變列表。服務(wù)器根據(jù)端口跳變列表確定端口跳變?yōu)橐?guī)律跳變,且加權(quán)值固定為M。服務(wù)器請求用戶端2進行N+M(N為更新跳變規(guī)律時最后一次跳變的端口)打洞,建立用戶端1和用戶端2的連接。具體的,服務(wù)器請求用戶端2向用戶端1公網(wǎng)IPPort(其為NAT1為用戶端1分配的端口)發(fā)送數(shù)據(jù)包,同時,請求用戶端1向用戶端2公網(wǎng)IPPort(N+M)發(fā)送數(shù)據(jù)包。
比如,NAT1(202.187.45.3)為用戶端1分配UDP端口62000,NAT2(187.34.1.56)為用戶端2分配UDP端口31000。通過與服務(wù)器的對話,用戶端1和用戶端2都相互知道了對方所映射的公網(wǎng)IP和端口。
當用戶端1請求和用戶端2連接時,其發(fā)送請求給服務(wù)器。服務(wù)器請求用戶端2向該服務(wù)器的不同端口發(fā)送數(shù)據(jù)包,更新端口跳變列表。假設(shè),更新之后的端口跳變列表為31001,31002,31003,31004。從該端口跳變列表可以看出,端口跳變規(guī)律為加權(quán)值為1的規(guī)律跳變。之后,服務(wù)器請求用戶端2向用戶端1公網(wǎng)202.187.45.3:62000發(fā)送數(shù)據(jù)包,用來在NAT2上建立會話對應(yīng)關(guān)系;且服務(wù)器請求用戶端1向用戶端2公網(wǎng)187.34.1.56:31005(31004+1(加權(quán)值))。從而,通過上述步驟,建立了用戶端1和用戶端2之間的連接。
下面,參照圖4,更詳細地描述在上述情況2中的操作過程。
對稱型NAT在很多時候的端口跳變規(guī)律是在原來端口(N)的基礎(chǔ)上,直接每次+M(即上述的情況1);但是也有很多情況M不是固定(即上述的情況2)。
例如,對方的端口剛開始是3245,趨勢可能是3245 3256 6788 9876 9978(端口數(shù)每次增加的例子);或3245 1234 1232 1100 1000(端口數(shù)每次減小的例子)。
可以通過循環(huán)重發(fā)機制試探的方式猜測下次變化的端口。
對于上述的端口數(shù)遞增的例子,最簡單的試探方式是從9978-65535(最大的端口數(shù))發(fā)送UDP,這樣基本可以保證連接成功,但是開銷過大,在這個例子中就需要發(fā)送65535-9978=55557個數(shù)據(jù)包,顯然不合適。即使是根據(jù)抓包分析,30000后的端口很少開,可以改進一下從9978--30000發(fā)送UDP,即使如此開銷也仍然過大。
進一步優(yōu)化,分析每次的遞增趨勢,比如3245 3256 6788 9876 9978可以從后一次減去前一次的差值中得知變化不會超過一個固定的數(shù),比如500,那么下一步發(fā)送9978~9978+500,共500個包進行試探??梢赃M一步改進每次以500遞增,發(fā)送9978~9978+500,9978~9978+1000,9978~9978+1500,9978~9978+2000,9978~9978+2500......進行試探。因為是UDP的方式,發(fā)送后不管,因此開銷不大,有一次,打中對方的端口,就以后連接穩(wěn)定了。該策略可以稱之為線性逼近。
需要指出,由于網(wǎng)絡(luò)的不穩(wěn)定,更多連接不上的情況將是丟包,所以采取如下方式進行多輪打洞for(i=9978...i=9978+500);for(i=9978...i=9978+1000);for(i=9978...i=9978+1500);......
也就是說,在第m輪中,第二用戶端執(zhí)行N至N+U×m循環(huán)打洞,其中N為分析跳變規(guī)律時第二用戶端的最后打洞端口,U為大于在端口跳變列表中任意前后相鄰打洞的端口之差的值。在此處,N=9978,U=500。
在該方式中,后一輪覆蓋了前一輪,可以有效地避免由于網(wǎng)絡(luò)不穩(wěn)定而導(dǎo)致丟包的情況。
當然,也可以采用這樣的方式for(i=9978...i=9978+500);for(i=9978...i=9978+1000);for(i=9978+500...i=9978+1500);......
也就是說,在第1輪中,第二用戶端執(zhí)行N至N+U循環(huán)打洞,在大于1的第m輪中,第二用戶端執(zhí)行N+U×(m-2)至N+U×m循環(huán)打洞,其中N為分析跳變規(guī)律時第二用戶端的最后打洞端口,U為大于在端口跳變列表中任意前后相鄰打洞的端口之差的值。在此處,N=9978,U=500。
在該方式中,對于每個端口,保證至少重試一次,這可以在避免丟包的同時減少了開銷。
如果假設(shè)網(wǎng)絡(luò)是,不考慮丟包的情況,也可以采用下面的方式for(i=9978...i=9978+500);for(i=9978+500...i=9978+1000);for(i=9978+1000...i=9978+1500);......
也就是說,在第m輪中,第二用戶端執(zhí)行N+U×(m-1)至N+U×m循環(huán)打洞,其中N為分析跳變規(guī)律時第二用戶端的最后打洞端口,U為大于在端口跳變列表中任意前后相鄰打洞的端口之差的值。在此處,N=9978,U=500。
在該方式中,對每個端口僅進行一次連接嘗試。
以上述的第一種方式為例子,參照圖4,詳細描述該通信方法的流程。
首先,用戶端1向服務(wù)器發(fā)送與用戶端2的連接請求。服務(wù)器接收到該連接請求之后,向用戶端2發(fā)送更新端口跳變列表請求。用戶端2接收到該更新端口跳變列表請求時,向服務(wù)器的不同端口發(fā)送數(shù)據(jù)包,更新存儲在服務(wù)器上的端口跳變列表。服務(wù)器根據(jù)端口跳變列表確定端口跳變?yōu)橐?guī)律跳變,且加權(quán)值固定不固定,但是任意前后相鄰打洞的端口之差不大于U。服務(wù)器請求用戶端2進行N,N+1,......,N+U(N為更新跳變規(guī)律時最后一次跳變的端口)打洞,建立用戶端1和用戶端2的連接。具體的,服務(wù)器請求用戶端2向用戶端1公網(wǎng)IP端口(其為NAT1為用戶端1分配的端口)發(fā)送數(shù)據(jù)包,同時,請求用戶端1向用戶端2公網(wǎng)IP端口(該端口為N,N+1,......,N+U)發(fā)送數(shù)據(jù)包。當該第一輪連接沒有成功時。執(zhí)行第二輪的連接,即服務(wù)器請求用戶端2進行N,N+1,......,N+U×2打洞。如果第二輪也沒有連接成功,則按照這樣的規(guī)律進行第三輪連接,依次類推,在此不再詳細描述。如圖4所示的例子中,在第三輪中建立連接,連接建立時用戶端2的端口為X。
因為網(wǎng)絡(luò)不穩(wěn)定,或者其他很多不確定因素,特別是處于Symmetric NAT這種端口跳變的校園多級NAT或者企業(yè)網(wǎng)的情況,注冊的端口不是很正規(guī),有的時候是負數(shù)如(-12345),有的時候可能是(123&45),遇到這樣的情況,在分析跳變規(guī)律的時候,不能隨便拋棄這些異常,而要做必要的修正處理,如(-12345)改為(12345),(123&45)去掉&改為12345。
通過本方案,可以實現(xiàn)用戶端在symmetric NAT中也能夠?qū)崿F(xiàn)P2P互通的方法,滿足當前P2P應(yīng)用的需求。
權(quán)利要求
1.一種用于在第一用戶端和第二用戶端建立連接的通信方法,其中,第一用戶端通過非對稱型NAT與服務(wù)器連接,第二用戶端通過對稱型NAT與服務(wù)器連接,該方法包括步驟a,當?shù)谝挥脩舳苏埱笈c第二用戶端建立連接時,第二用戶端通過對稱型NAT向服務(wù)器的不同端口發(fā)送數(shù)據(jù)包,更新服務(wù)器上的端口跳變列表;步驟b,當端口跳變列表中跳變規(guī)律為規(guī)律跳變時,第二用戶端根據(jù)該跳變規(guī)律打洞,來建立第一用戶端和第二用戶端之間的連接。
2.如權(quán)利要求1所述的通信方法,其中,在步驟b中,當端口跳變?yōu)榧訖?quán)值固定的跳變時,第二用戶端進行N+M打洞,其中N為在步驟a中第二用戶端的最后一次打洞端口,M為加權(quán)值。
3.如權(quán)利要求1所述的通信方法,其中,在步驟b中,當端口跳變?yōu)榧訖?quán)值非固定的跳變時,第二用戶端進行N至N+U循環(huán)打洞,直至建立第一用戶端和第二用戶端之間的連接,其中N為在步驟a中第二用戶端的最后一次打洞端口,U為大于在端口跳變列表中任意前后相鄰打洞的端口之差的值。
4.如權(quán)利要求1所述的通信方法,其中,在步驟b中,當端口跳變?yōu)闊o規(guī)律跳變時,利用服務(wù)器中轉(zhuǎn)方式執(zhí)行第一用戶端和第二用戶端之間的通信。
5.如權(quán)利要求1所述的通信方法,其中,在步驟b中,當端口跳變?yōu)榧訖?quán)值非固定的跳變時,第二用戶端進行n輪打洞,直至建立第一用戶端和第二用戶端之間的連接,n為大于1的整數(shù),其中,在第m輪中,第二用戶端執(zhí)行N至N+U×m循環(huán)打洞,其中N為在步驟a中第二用戶端的最后一次打洞端口,U為大于在端口跳變列表中任意前后相鄰打洞的端口之差的值,m為1-n的任一整數(shù)。
6.如權(quán)利要求1所述的通信方法,其中,在步驟b中,當端口跳變?yōu)榧訖?quán)值非固定的跳變時,第二用戶端進行n輪打洞,直至建立第一用戶端和第二用戶端之間的連接,n為大于1的整數(shù),其中,在第1輪中,第二用戶端執(zhí)行N至N+U循環(huán)打洞,在第m輪中,第二用戶端執(zhí)行N+U×(m-2)至N+U×m循環(huán)打洞,其中N為在步驟a中第二用戶端的最后一次打洞端口,U為大于在端口跳變列表中任意前后相鄰打洞的端口之差的值,m為2-n的任一整數(shù)。
7.如權(quán)利要求1所述的通信方法,其中,在步驟b中,當端口跳變?yōu)榧訖?quán)值非固定的跳變時,第二用戶端進行n輪打洞,直至建立第一用戶端和第二用戶端之間的連接,n為大于1的整數(shù),其中,在第m輪中,第二用戶端執(zhí)行N+U×(m-1)至N+U×m循環(huán)打洞,其中N為在步驟a中第二用戶端的最后一次打洞端口,U為大于在端口跳變列表中任意前后相鄰打洞的端口之差的值,m為1-n的任一整數(shù)。
8.如權(quán)利要求1-7任一所述的通信方法,其進一步包括對端口跳變列表中的端口進行修正的步驟。
全文摘要
本發(fā)明提供一種用于在第一用戶端和第二用戶端建立連接的通信方法,其中,第一用戶端通過非對稱型NAT與服務(wù)器連接,第二用戶端通過對稱型NAT與服務(wù)器連接。該方法包括步驟a,當?shù)谝挥脩舳苏埱笈c第二用戶端建立連接時,第二用戶端通過對稱型NAT向服務(wù)器的不同端口發(fā)送數(shù)據(jù)包,更新服務(wù)器上的端口跳變列表;步驟b,當端口跳變列表中跳變規(guī)律為規(guī)律跳變時,第二用戶端根據(jù)該跳變規(guī)律打洞,來建立第一用戶端和第二用戶端之間的連接。
文檔編號H04L12/28GK1859314SQ200610058629
公開日2006年11月8日 申請日期2006年3月2日 優(yōu)先權(quán)日2006年3月2日
發(fā)明者何文彬, 孫志斌 申請人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
井冈山市| 永修县| 青海省| 思茅市| 云阳县| 襄汾县| 怀安县| 宜州市| 宣武区| 松原市| 汪清县| 崇阳县| 钟祥市| 高清| 特克斯县| 巴里| 杭锦旗| 汪清县| 乐安县| 铜川市| 高安市| 星子县| 麦盖提县| 邵阳市| 乐安县| 启东市| 武川县| 拜城县| 醴陵市| 抚顺县| 定西市| 阳谷县| 油尖旺区| 赤壁市| 吴堡县| 邹城市| 邵阳县| 郑州市| 五台县| 鹤峰县| 望都县|