Nat穿越方法以及服務器的制造方法
【專利摘要】本發(fā)明公開了一種NAT穿越方法以及服務器,屬于網絡【技術領域】。所述方法包括:接收客戶端向預定地址發(fā)送的第一請求信息;根據所述第一請求信息創(chuàng)建與所述客戶端之間的第一連接;接收所述客戶端通過第一連接發(fā)送的第二請求信息;根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接;根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包。解決了現有技術中,當出現新的NAT設備類型時,由于STUN服務器無法檢測NAT設備類型或者檢測到的NAT設備類型可靠性不高時,客戶端不能實現NAT穿越,從而導致的現有方案適應性不高的問題,達到了可以不用考慮NAT設備類型而可以實現穿越的效果。
【專利說明】NAT穿越方法以及服務器
【技術領域】
[0001]本發(fā)明涉及網絡【技術領域】,特別涉及一種NAT穿越方法以及服務器。
【背景技術】
[0002]NAT (NetworkAddress Translation,網絡地址轉換)是廣域網中為解決公網IP(Internet Protocol,互聯網協(xié)議地址)地址緊缺所采用的主要技術之一。在使用NAT設備的廣域網中,公網中的客戶端不能主動向私網中的客戶端發(fā)起通信,所以如何實現NAT穿越已經成為互聯網通信領域的技術人員現階段重要的研究課題之一。
[0003]現有的一種NAT穿越方法,包括:客戶端向STUN (Simple Traversal ofUDPoverNATs, NAT的UDP簡單穿越)服務器發(fā)送NAT設備類型檢測請求,從而獲取客戶端對應的NAT設備類型信息;客戶端向通信對端發(fā)起會話,以便向通信對端發(fā)送客戶端對應的NAT設備類型信息,并同時獲得通信對端對應的NAT設備類型信息;客戶端和通信對端根據雙方的NAT設備類型采用相應的NAT設備穿越方法;客戶端和通信對端進行數據傳輸。
[0004]在實現本發(fā)明的過程中,發(fā)明人發(fā)現現有技術至少存在如下問題:
[0005]在客戶端執(zhí)行NAT設備穿越之前,客戶端需要向STUN服務器發(fā)送NAT設備類型檢測請求,從而STUN服務器在檢測到客戶端的NAT設備類型后反饋給客戶端。所以這就導致當出現新的NAT設備類型時,STUN服務器無法檢測NAT設備類型或者檢測到的NAT設備類型可靠性不高時,客戶端不能實現NAT的穿越,所以現有方案適應性不高。
【發(fā)明內容】
[0006]為了解決現有的NAT穿越方法適應性不高的問題,本發(fā)明實施例提供了一種NAT穿越方法和服務器。所述技術方案如下:
[0007]根據本發(fā)明的一個方面,提供了一種NAT穿越方法,所述方法包括:
[0008]接收客戶端向預定地址發(fā)送的第一請求信息,所述第一請求信息包括用于建立第一連接的握手信息;
[0009]根據所述第一請求信息創(chuàng)建與所述客戶端之間的所述第一連接;
[0010]接收所述客戶端通過所述第一連接發(fā)送的第二請求信息,所述第二請求信息包括協(xié)議標識、通信對端的IP地址和端口 ;
[0011]根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接;
[0012]根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包。
[0013]優(yōu)選地,所述第二請求信息中的協(xié)議標識為用戶數據包協(xié)議UDP標識,所述根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接,包括:
[0014]在本地開設與所述通信對端對應的UDP端口,以便與所述通信對端建立UDP通道;
[0015]建立客戶端的IP地址和端口與所述通信對端的IP地址和端口之間的對應關系,所述客戶端的IP地址和端口是通過所述第一請求信息獲取的IP地址和端口 ;
[0016]向所述客戶端發(fā)送通道建立成功響應。
[0017]優(yōu)選地,所述根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包,包括:
[0018]接收所述客戶端通過第一連接發(fā)送的第一類型數據包;
[0019]將所述第一類型數據包重新封裝為UDP數據包;
[0020]根據所述對應關系,選擇對應的第二連接將所述UDP數據包轉發(fā)給所述通信對端;
[0021]和/ 或,
[0022]接收所述通信對端通過第二連接發(fā)送的UDP數據包,所述UDP數據包是所述通信對端在接收到所述客戶端發(fā)送的數據包之后發(fā)送的數據包;
[0023]將所述UDP數據包重新封裝為第一類型數據包;
[0024]根據所述對應關系,選擇對應的第一連接將所述第一類型數據包轉發(fā)給所述客戶端。
[0025]優(yōu)選地,所述第二請求信息中的協(xié)議標識為傳輸控制協(xié)議TCP標識,所述根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接,包括:
[0026]根據所述第二請求信息中通信對端的IP地址和端口執(zhí)行與所述通信對端的三次握手過程,從而建立與所述通信對端的TCP通道;
[0027]建立所述客戶端的IP地址和端口與所述通信對端的IP地址和端口之間的對應關系;
[0028]向所述客戶端發(fā)送通道建立成功響應。
[0029]優(yōu)選地,所述根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包,包括:
[0030]接收所述客戶端通過第一連接發(fā)送的第一類型數據包;
[0031 ] 將所述第一類型數據包重新封裝為TCP數據包;
[0032]根據所述對應關系,選擇對應的第二連接將所述TCP數據包轉發(fā)給所述通信對端;
[0033]和/ 或,
[0034]接收所述通信對端通過第二連接發(fā)送的TCP數據包,所述TCP數據包是所述通信對端在接收到所述客戶端發(fā)送的數據包之后發(fā)送的數據包;
[0035]將所述TCP數據包重新封裝為第一類型數據包;
[0036]根據所述對應關系,選擇對應的第一連接將所述第一類型數據包轉發(fā)給所述客戶端。
[0037]根據本發(fā)明的另一方面,提供了一種服務器,所述服務器包括:
[0038]第一接收模塊,用于接收客戶端向預定地址發(fā)送的第一請求信息,所述第一請求信息包括用于建立第一連接的握手信息;
[0039]第一創(chuàng)建模塊,用于根據所述第一請求信息創(chuàng)建與所述客戶端之間的所述第一連接;
[0040]第二接收模塊,用于接收所述客戶端通過所述第一連接發(fā)送的第二請求信息,所述第二請求信息包括協(xié)議標識、通信對端的IP地址和端口 ;
[0041]第二創(chuàng)建模塊,用于根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接;
[0042]數據傳輸模塊,用于根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包。
[0043]優(yōu)選地,所述第二請求信息中的協(xié)議標識為用戶數據包協(xié)議UDP標識,所述第二創(chuàng)建模塊,包括:
[0044]第一建立單元,用于在本地開設與所述通信對端對應的UDP端口,以便與所述通信對端建立UDP通道;
[0045]第二建立單元,用于建立客戶端的IP地址和端口與所述通信對端的IP地址和端口之間的對應關系,所述客戶端的IP地址和端口是通過所述第一請求信息獲取的IP地址和端口 ;
[0046]第一發(fā)送單元,用于向所述客戶端發(fā)送通道建立成功響應。
[0047]優(yōu)選地,所述數據傳輸模塊,包括:
[0048]第一接收單元,用于接收所述客戶端通過第一連接發(fā)送的第一類型數據包;
[0049]第一封裝單元,用于將所述第一類型數據包重新封裝為UDP數據包;
[0050]第一轉發(fā)單元,用于根據所述對應關系,選擇對應的第二連接將所述UDP數據包轉發(fā)給所述通信對端;
[0051]第二接收單元,用于接收所述通信對端通過第二連接發(fā)送的UDP數據包,所述UDP數據包是所述通信對端在接收到所述客戶端發(fā)送的數據包之后發(fā)送的數據包;
[0052]第二封裝單元,用于將所述UDP數據包重新封裝為第一類型數據包;
[0053]第二轉發(fā)單元,用于根據所述對應關系,選擇對應的第一連接將所述第一類型數據包轉發(fā)給所述客戶端。
[0054]優(yōu)選地,所述第二請求信息中的協(xié)議標識為傳輸控制協(xié)議TCP標識,所述第二創(chuàng)建模塊,包括:
[0055]第三建立單元,用于根據所述第二請求信息中通信對端的IP地址和端口執(zhí)行與所述通信對端的三次握手過程,從而建立與所述通信對端的TCP通道;
[0056]第四建立單元,用于建立所述客戶端的IP地址和端口與所述通信對端的IP地址和端口之間的對應關系;
[0057]第二發(fā)送單元,用于向所述客戶端發(fā)送通道建立成功響應。
[0058]優(yōu)選地,所述數據傳輸模塊,包括:
[0059]第三接收單元,用于接收所述客戶端通過第一連接發(fā)送的第一類型數據包;
[0060]第三封裝單元,用于將所述第一類型數據包重新封裝為TCP數據包;
[0061]第三轉發(fā)單元,用于根據所述對應關系,選擇對應的第二連接將所述TCP數據包轉發(fā)給所述通信對端;
[0062]第四接收單元,用于接收所述通信對端通過第二連接發(fā)送的TCP數據包,所述TCP數據包是所述通信對端在接收到所述客戶端發(fā)送的數據包之后發(fā)送的數據包;
[0063]第四封裝單元,用于將所述TCP數據包重新封裝為第一類型數據包;
[0064]第四轉發(fā)單元,用于根據所述對應關系,選擇對應的第一連接將所述第一類型數據包轉發(fā)給所述客戶端。
[0065]本發(fā)明實施例提供的技術方案帶來的有益效果是:
[0066]通過接收客戶端向預定地址發(fā)送的第一請求信息和第二請求信息,并且根據第一請求信息創(chuàng)建與客戶端之間的第一連接,根據第二請求信息創(chuàng)建與通信對端之間的第二連接,從而根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包。由于NAT設備后的客戶端與服務器之間建立的第一連接是TLS連接,并且TLS連接對于NAT設備來說是可信任的連接,所以不論客戶端在什么類型的NAT設備之后,客戶端都能成功穿越NAT設備而與服務器進行第一連接,并且客戶端通過發(fā)送第二請求信息至服務器使得服務器建立與通信對端之間的第二連接,從而服務器根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包,解決了現有技術中,當出現新的NAT設備類型時,由于STUN服務器無法檢測NAT設備類型或者檢測到的NAT設備類型可靠性不高時,客戶端不能實現NAT穿越,從而導致的現有方案適應性不高的問題,達到了可以不用考慮NAT設備類型而可以實現穿越的效果。
【專利附圖】
【附圖說明】
[0067]為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0068]圖1是本發(fā)明一個實施例提供的NAT穿越方法的方法流程圖;
[0069]圖2是本發(fā)明另一實施例提供的NAT穿越方法的方法流程圖;
[0070]圖3是本發(fā)明再一實施例提供的NAT穿越方法的方法流程圖;
[0071]圖4是本發(fā)明一個實施例提供的服務器的結構方框圖;
[0072]圖5是本發(fā)明另一實施例提供的服務器的結構方框圖;
[0073]圖6是本發(fā)明另一實施例提供的服務器的結構方框圖;
[0074]圖7是本發(fā)明再一實施例提供的服務器的結構方框圖;
[0075]圖8是本發(fā)明再一實施例提供的服務器的結構方框圖。
【具體實施方式】
[0076]為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明實施方式作進一步地詳細描述。
[0077]請參考圖1,其示出了本發(fā)明一個實施例所提供的NAT穿越方法的方法流程圖。本實施例主要以該NAT穿越方法應用于位于公網中的TLS服務器中來舉例說明。該NAT穿越方法包括:
[0078]步驟101,TLS服務器接收客戶端向預定地址發(fā)送的第一請求信息;
[0079]由于公網中的通信對端不能主動發(fā)起與私網中的客戶端之間的通信,也即不能主動發(fā)起與NAT設備后的客戶端之間的通信,所以為了避免這種情況,在通信對端與客戶端進行通信之前,NAT設備后的客戶端可以先與TLS (Transport Layer Security,安全傳輸協(xié)議)服務器建立第一連接,所以客戶端可以向預定地址發(fā)送一個第一請求信息,相應的,TLS服務器可以接收客戶端發(fā)送的第一請求信息,第一請求信息用于建立第一連接的握手信息。
[0080]步驟102,TLS服務器根據第一請求信息創(chuàng)建與客戶端之間的第一連接;
[0081]TLS服務器接收到客戶端發(fā)送的第一請求信息之后,TLS服務器可以根據第一請求信息創(chuàng)建與客戶端之間的第一連接。
[0082]步驟103,TLS服務器接收客戶端通過第一連接發(fā)送的第二請求信息,第二請求信息包括協(xié)議標識、通信對端的IP地址和端口 ;
[0083]在TLS服務器創(chuàng)建了與客戶端之間的第一連接后,客戶端可以通過第一連接向預定地址發(fā)送第二請求信息,相應的,TLS服務器可以接收客戶端發(fā)送的第二請求信息,第二請求信息包括協(xié)議標識、通信對端的IP地址和端口。
[0084]步驟104,根據第二請求信息創(chuàng)建與通信對端之間的第二連接;
[0085]由于第二請求信息中包括通信對端的IP地址和端口,所以當TLS服務器接收到客戶端發(fā)送的第二請求信息時,TLS服務器可以根據第二請求信息創(chuàng)建與通信對端之間的第二連接。
[0086]步驟105,根據第一連接和第二連接在客戶端與通信對端之間傳遞數據包。
[0087]當TLS服務器創(chuàng)建了與通信對端的第二連接之后,TLS服務器已經分別通過第一連接與客戶端連接,通過第二連接與通信對端連接,所以此時TLS服務器可以根據第一連接和第二連接在客戶端與通信對端之間傳遞數據包。
[0088]綜上所述,本實施例提供的NAT穿越方法,通過接收客戶端向預定地址發(fā)送的第一請求信息和第二請求信息,并且根據第一請求信息創(chuàng)建與客戶端之間的第一連接,根據第二請求信息創(chuàng)建與通信對端之間的第二連接,從而根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包。由于NAT設備后的客戶端與服務器之間建立的第一連接是TLS連接,并且TLS連接對于NAT設備來說是可信任的連接,所以不論客戶端在什么類型的NAT設備之后,客戶端都能成功穿越NAT設備而與服務器進行連接,并且客戶端通過發(fā)送第二請求信息至服務器使得服務器建立與通信對端之間的第二連接,從而服務器根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包,解決了現有技術中,當出現新的NAT設備類型時,由于STUN服務器無法檢測NAT設備類型或者檢測到的NAT設備類型可靠性不高時,客戶端不能實現NAT穿越,從而導致的現有方案適應性不高的問題,達到了可以不用考慮NAT設備類型而可以實現穿越的效果。并且在本實施例中,通過使用一個預定地址來接收客戶端發(fā)送的第一請求信息和第二請求信息,并且同時接收客戶端向通信對端發(fā)送的數據包,達到了服務器可以只用一個端口即可為多個客戶端服務從而提高地址資源利用率的效果。
[0089]請參考圖2,其示出了本發(fā)明另一實施例所提供的NAT穿越方法的方法流程圖。本實施例主要以該NAT穿越方法應用于位于公網中的TLS服務器中,并且客戶端需要發(fā)送的數據包是UDP (User Datagram Protocol,用戶數據包協(xié)議)數據包來舉例說明。該NAT穿越方法包括:
[0090]步驟201,客戶端向預定地址發(fā)送第一請求信息;
[0091]由于公網中的通信對端不能主動發(fā)起與私網中的客戶端之間的通信,也即不能主動發(fā)起與NAT設備后的客戶端之間的通信,所以為了避免這種情況,在通信對端與客戶端進行通信之前,NAT設備后的客戶端需要先與TLS服務器建立TLS連接,所以客戶端可以向TLS服務器的預定端口發(fā)送第一請求信息,第一請求信息可以包括用于建立第一連接的握手信息,客戶端與TLS服務器建立第一連接時需要的握手信息可以包括TLS協(xié)議的版本號、客戶端支持的非對稱算法、對稱算法、哈希算法和其他信息,本實施例對此并不做限定。
[0092]具體地,在客戶端需要與TLS服務器建立連接時,客戶端可以向TLS服務器中的TCP信令端口發(fā)送第一請求信息。比如,TLS服務器的IP地址為10.10.40.70,TLS服務器中的TCP信令端口的端口號為888,則客戶端可以向IP地址和端口為10.10.40.70:888的預定地址發(fā)送第一請求信息。
[0093]步驟202,TLS服務器接收客戶端向預定地址發(fā)送的第一請求信息;
[0094]在客戶端向TLS服務器發(fā)送第一請求信息之后,TLS服務器可以相應的接收客戶端發(fā)送的第一請求信息。
[0095]步驟203,TLS服務器根據第一請求信息創(chuàng)建與客戶端之間的第一連接;
[0096]TLS服務器在接收到客戶端發(fā)送的第一請求信息后,TLS服務器可以根據第一請求信息中的TLS協(xié)議的版本號、客戶端支持的非對稱算法、對稱算法和哈希算法與對應的客戶端進行算法協(xié)商、證書認證以及密鑰協(xié)商,當協(xié)商通過后,TLS服務器建立與客戶端之間的第一連接,也即建立TLS服務器與客戶端之間的TLS連接。
[0097]步驟204,客戶端通過第一連接發(fā)送第二請求信息;
[0098]為了使得客戶端能夠通過TLS服務器與對應的UDP服務器進行通信,在TLS服務器建立與客戶端之間的第一連接之后,客戶端可以通過第一連接向預定地址發(fā)送請求建立UDP通道的第二請求信息,第二請求信息包括協(xié)議標識、通信對端的IP地址和端口,預定地址包括TLS服務器的IP地址和TLS服務器中的TCP端口的端口號。
[0099]在具體的通信系統(tǒng)中,當客戶端需要向通信對端發(fā)送的數據包是UDP數據包時,協(xié)議標識可以是UDP標識,此時通信對端為UDP服務器;當客戶端需要向通信對端發(fā)送的數據包是TCP (Transmission Control Protocol,傳輸控制協(xié)議)數據包時,協(xié)議標識可以是TCP標識,此時通信對端為TCP服務器,本實施例以客戶端需要向通信對端發(fā)送的數據包是UDP數據包,也即第二請求信息中的協(xié)議標識是UDP標識為例。
[0100]tt ia,客戶端想要發(fā)送一個UDP數據包至IP地址和端口為192.168.1.128:6000的UDP服務器,則客戶端可以通過第一連接向TLS服務器發(fā)送包括UDP標識和192.168.1.128:6000 的第二請求信息。
[0101]然而,由于現有的通信系統(tǒng)中,為了解決公網IP地址緊缺的問題,同時也提出了使用IPv6 (Internet Protocol Version6,第6版互聯網協(xié)議)的解決方案,所以為了使得TLS服務器能夠知道UDP服務器使用的IP協(xié)議,從而與通信對端建立通信通道,第二請求信息中還可以包括類別標識也即IPv4或IPv6。需要說明的是,當某一個區(qū)域內全都使用IPv4或IPv6時,此時,第二請求信息中可以不包括IPv4或IPv6,本實施例對此并不做限定。
[0102]步驟205,TLS服務器接收客戶端通過第一連接發(fā)送的第二請求信息;
[0103]客戶端通過第一連接發(fā)送第二請求信息之后,TLS服務器可以相應的接收到客戶端發(fā)送的第二請求信息。比如,客戶端發(fā)送的第二請求信息包括UDP標識和通信對端的192.168.1.128:6000,則TLS服務器可以相應的接收到包括UDP標識和通信對端的IP地址和端口 192.168.1.128:6000的第二請求信息。
[0104]步驟206,TLS服務器在本地開設與通信對端對應的UDP端口,以便與通信對端建立UDP通道;
[0105]由于UDP是一種面向無連接的傳輸層協(xié)議,所以在TLS服務器接收到客戶端發(fā)送的第二請求信息之后,TLS服務器可以根據UDP服務器的IP地址和端口為該UDP服務器開設UDP端口,以便TLS服務器使用開設的UDP端口與對應的UDP服務器建立UDP通道。
[0106]步驟207,TLS服務器建立客戶端的IP地址和端口與通信對端的IP地址和端口之間的對應關系;
[0107]TLS服務器在本地開設與UDP服務器對應的UDP端口之后,說明此時TLS服務器可以使用該UDP端口與UDP服務器進行通信,所以TLS服務器可以建立客戶端的IP地址和端口與m)P服務器的IP地址和端口之間的對應關系,從而使得TLS服務器在接收到某一客戶端發(fā)送的數據包之后能夠轉發(fā)至對應的UDP服務器,客戶端的IP地址和端口是通過第一請求信息獲取的IP地址和端口,也即是客戶端在請求與TLS服務器建立TLS連接時,TLS服務器通過客戶端發(fā)送的數據包而獲取的,本實施例對此不再贅述。
[0108]比如,在TLS服務器開設與UDP服務器對應的UDP端口之后,TLS服務器將建立客戶端的10.10.40.170:2000以及該客戶端想要通信的UDP服務器的192.168.1.128:6000的對應關系,從而使得當TLS服務器接收到來自10.10.40.170:2000的數據包時,TLS服務器知道該數據包是要發(fā)送至192.168.1.128:6000對應的UDP服務器的。
[0109]步驟208,TLS服務器向客戶端發(fā)送通道建立成功響應;
[0110]在TLS服務器在本地開設與UDP服務器對應的UDP端口之后,說明此時TLS服務器與UDP服務器的第二連接已經創(chuàng)建成功,TLS服務器可以開始使用該UDP端口與UDP服務器進行通信,所以為了告知客戶端此時TLS服務器可以將客戶端發(fā)送數據包轉發(fā)至對應的UDP服務器,TLS服務器可以向客戶端發(fā)送UDP通道建立成功響應,相應的,客戶端可以接收TLS服務器發(fā)送的UDP通道建立成功響應。比如,在具體實現時,TLS服務器可以向客戶端發(fā)送一個二進制數據包,并使用該二進制數據包攜帶對應于第二請求信息的確認信息。
[0111]需要說明的是,步驟207和步驟208可以同時執(zhí)行,也可以分先后順序執(zhí)行,本實施例對此并不做限定。
[0112]步驟209,TLS服務器接收客戶端通過第一連接發(fā)送的第一類型數據包;
[0113]在客戶端接收到TLS服務器發(fā)送的通道建立成功響應之后,客戶端可以通過第一連接向TLS服務器發(fā)送第一類型數據包。
[0114]具體地,由于客戶端與TLS服務器之間使用的是TLS連接,所以客戶端向TLS服務器發(fā)送的第一類型數據包是TLS數據包。并且由于TLS服務器中的TCP信令端口可以同時中繼信令和數據包,所以在客戶端需要通過第一連接發(fā)送TLS數據包至TLS服務器時,客戶端也可以通過第一連接發(fā)送TLS數據包。
[0115]步驟210,TLS服務器將第一類型數據包重新封裝為UDP數據包;
[0116]在TLS服務器接收到客戶端通過第一連接發(fā)送的第一類型數據包之后,TLS服務器可以將第一類型數據包重新封裝為UDP數據包。具體地,由于TLS服務器需要將接收到的客戶端發(fā)送的TLS數據包轉發(fā)至對應的通信對端也即對應的UDP服務器,所以TLS在接收到客戶端發(fā)送的TLS數據包之后,可以將TLS數據包重新封裝為UDP數據包,具體封包方法為現有技術,在此不再贅述。
[0117]步驟211,TLS服務器根據對應關系,選擇對應的第二連接將UDP數據包轉發(fā)給通信對端;
[0118]在TLS服務器將客戶端發(fā)送的TLS數據包重新封裝為UDP數據包之后,TLS服務器可以根據已經建立的客戶端的IP地址和端口與通信對端的IP地址和端口的對應關系,選擇對應的第二連接將m)P數據包轉發(fā)給對應的通信對端。
[0119]比如,TLS服務器接收到的TLS數據包是10.10.40.170:2000發(fā)送的數據包,則在TLS將數據包重新封裝為UDP數據包之后,TLS服務器可以查詢與10.10.40.170:2000對應的UDP服務器,并且根據步驟207可以知道,TLS服務器創(chuàng)建的與10.10.40.170:2000對應的UDP服務器的IP地址和端口為192.168.1.128:6000,所以TLS服務器可以把已經重新封裝的UDP數據包轉發(fā)至192.168.1.128:6000對應的UDP服務器。
[0120]步驟212,TLS服務器接收通信對端通過第二連接發(fā)送的UDP數據包;
[0121]若UDP服務器需要向客戶端發(fā)送數據包,則UDP服務器可以通過第二連接發(fā)送UDP數據包至TLS服務器,UDP數據包是通信對端在接收到客戶端發(fā)送的數據包之后發(fā)送的數據包。
[0122]具體地,由于在UDP服務器接收到UDP數據包之前,通信對端并不知道該客戶端的存在,所以UDP服務器向TLS服務器發(fā)送的UDP數據包必須是UDP服務器在接收到客戶端發(fā)送的數據包之后發(fā)送的數據包。
[0123]步驟213,TLS服務器將UDP數據包重新封裝為第一類型數據包;
[0124]在TLS服務器接收到UDP服務器發(fā)送的數據包之后,TLS服務器需要通過第一連接也即TLS連接將UDP數據包轉發(fā)至對應的客戶端,所以TLS服務器在接收到UDP數據包之后,TLS可以把UDP數據包重新封裝為第一類型數據包也即TLS數據包,在此不再贅述。
[0125]步驟214,TLS服務器根據對應關系,選擇對應的第一連接和第二連接將第一類型數據包轉發(fā)給對應的客戶端。
[0126]在TLS服務器將UDP服務器發(fā)送的UDP數據包重新封裝為TLS數據包之后,TLS服務器可以根據已經建立的客戶端的IP地址和端口與UDP服務器的IP地址和端口的對應關系,選擇對應的第一連接,并且通過第一連接將TLS數據包轉發(fā)給客戶端。
[0127]需要補充說明的一點是,步驟209至步驟211與步驟212至步驟214,可以同時存在于一個通信系統(tǒng)中,也可以只存在步驟209至步驟211或者步驟212至步驟214,本實施例對此并不做限定。
[0128]需要補充說明的另一點是,在TLS服務器與通信對端建立了 UDP通道之后,TLS服務器會為每個UDP通道分配一個存活時間,當該UDP通道中在存活時間內沒有數據包或刷新通過時,TLS服務器將關閉該UDP通道,所以為了避免客戶端在長時間沒有向UDP服務器發(fā)送數據包,但是之后當再次需要使用第二連接向UDP服務器發(fā)送數據包時,TLS服務器將UDP通道關閉的問題,客戶端可以在TLS服務器為UDP通道分配的存活時間快到期時,向TLS服務器發(fā)送一個通道刷新請求,TLS服務器可以通過該通道刷新請求來維護UDP通道。在實際實現時,可以在通道刷新請求中攜帶一個預定時間,從而TLS服務器在接收到通道刷新請求時,為UDP通道分配一個時長為預定時間的存活時間;然而當客戶端不再需要發(fā)送數據包至UDP服務器時,為了釋放原本就緊缺的UDP端口資源,客戶端將向TLS服務器發(fā)送一個攜帶預定時間為O的通道刷新請求,從而在TLS服務器接收到該通道刷新請求時,關閉該UDP通道從而釋放UDP端口資源;[0129]需要補充說明的再一點是,由于TLS連接是可以復用的連接,所以在客戶端與第一通信對端通信完成后,客戶端可以向TLS服務器發(fā)送一個通道刷新請求,該通道刷新請求中攜帶的預定時間的時長為0,在TLS服務器接收到通道刷新請求后TLS服務器可以關閉與UDP服務器之間的第二連接也即UDP通道,而保持第一連接連通。之后客戶端仍然可以繼續(xù)通過第一連接發(fā)送與第二通信對端對應的第二請求信息,從而TLS服務器建立與第二通信對端之間的UDP通道;
[0130]需要補充說明的再一點是,客戶端還可以同時通過第一連接使得TLS服務器與多個通信對端建立UDP通道,也即此時與第一連接對應的第二連接有多個,本實施例對此并不做限定。
[0131]綜上所述,本實施例提供的NAT穿越方法,通過接收客戶端向預定地址發(fā)送的第一請求信息和第二請求信息,并且根據第一請求信息創(chuàng)建與客戶端之間的第一連接,根據第二請求信息創(chuàng)建與通信對端之間的第二連接,從而根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包。由于NAT設備后的客戶端與服務器之間建立的第一連接是TLS連接,并且TLS連接對于NAT設備來說是可信任的連接,所以不論客戶端在什么類型的NAT設備之后,客戶端都能成功穿越NAT設備而與服務器進行連接,并且客戶端通過發(fā)送第二請求信息至服務器使得服務器建立與通信對端之間的第二連接,從而服務器根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包,解決了現有技術中,當出現新的NAT設備類型時,由于STUN服務器無法檢測NAT設備類型或者檢測到的NAT設備類型可靠性不高時,客戶端不能實現NAT穿越,從而導致的現有方案適應性不高的問題,達到了可以不用考慮NAT設備類型而可以實現穿越的效果。并且在本實施例中,通過使用一個預定地址來接收客戶端發(fā)送的第一請求信息和第二請求信息,并且同時接收客戶端向通信對端發(fā)送的數據包,達到了服務器可以只用一個端口即可為多個客戶端服務從而提高地址資源利用率的效果。
[0132]請參考圖3,其示出了本發(fā)明實施例再一實施例提供的NAT穿越方法的方法流程圖。本實施例主要以該NAT穿越方法應用于位于公網中的TLS服務器中,并且客戶端需要發(fā)送的數據包是TCP數據包來舉例說明。該NAT穿越方法包括:
[0133]步驟301,客戶端向預定地址發(fā)送第一請求信息;
[0134]由于公網中的通信對端不能主動發(fā)起與私網中的客戶端之間的通信,也即不能主動發(fā)起與NAT設備后的客戶端之間的通信,所以為了避免這種情況,在通信對端與客戶端進行通信之前,NAT設備后的客戶端需要先與TLS服務器建立TLS連接,所以客戶端可以向TLS服務器的預定端口發(fā)送第一請求信息,第一請求信息可以包括用于建立第一連接的握手信息,客戶端與TLS服務器建立第一連接時需要的握手信息可以包括TLS協(xié)議的版本號、客戶端支持的非對稱算法、對稱算法、哈希算法和其他信息,本實施例對此并不做限定。
[0135]具體地,在客戶端需要與TLS服務器建立連接時,客戶端可以向TLS服務器中的TCP信令端口發(fā)送第一請求信息。
[0136]步驟302,TLS服務器接收客戶端向預定地址發(fā)送的第一請求信息;
[0137]在客戶端向TLS服務器發(fā)送第一請求信息之后,TLS服務器可以相應的接收客戶端發(fā)送的第一請求信息。
[0138]步驟303,TLS服務器根據第一請求信息創(chuàng)建與客戶端之間的第一連接;[0139]TLS服務器在接收到客戶端發(fā)送的第一請求信息后,TLS服務器可以根據第一請求信息中的TLS協(xié)議的版本號、客戶端支持的非對稱算法、對稱算法和哈希算法與對應的客戶端進行算法協(xié)商、證書認證以及密鑰協(xié)商,當協(xié)商通過后,TLS服務器建立與客戶端之間的第一連接,也即建立TLS服務器與客戶端之間的TLS連接。
[0140]步驟304,客戶端通過第一連接發(fā)送第二請求信息;
[0141]為了使得客戶端能夠通過TLS服務器與對應的UDP服務器進行通信,在TLS服務器建立與客戶端之間的第一連接之后,客戶端可以通過第一連接向預定地址發(fā)送第二請求信息,第二請求信息包括協(xié)議標識、通信對端的IP地址和端口,預定地址包括TLS服務器的IP地址和TLS服務器中的TCP端口的端口號。
[0142]在具體的通信系統(tǒng)中,當客戶端需要向通信對端發(fā)送的數據包是UDP數據包時,協(xié)議標識可以是UDP標識,此時通信對端為UDP服務器;當客戶端需要向通信對端發(fā)送的數據包是TCP數據包時,協(xié)議標識可以是TCP標識,此時通信對端為TCP服務器,本實施例以客戶端需要向通信對端發(fā)送的數據包是TCP數據包,也即第二請求信息中的協(xié)議標識是TCP標識為例。
[0143]然而,由于現有的通信系統(tǒng)中,為了解決公網IP地址緊缺的問題,同時也提出了使用IPv6 (Internet Protocol Version6,第6版互聯網協(xié)議)的解決方案,所以為了使得TLS服務器能夠知道TCP服務器使用的IP協(xié)議,從而與通信對端建立通信通道,第二請求信息中還可以包括類別標識也即IPv4或IPv6。需要說明的是,當某一個區(qū)域內全都使用IPv4或IPv6時,此時,第二請求信息中可以不包括IPv4或IPv6,本實施例對此并不做限定。
[0144]步驟305,TLS服務器接收客戶端通過第一連接發(fā)送的第二請求信息;
[0145]客戶端通過第一連接發(fā)送第二請求信息之后,TLS服務器可以相應的接收到客戶端發(fā)送的第二請求信息。
[0146]步驟306,TLS服務器根據第二請求信息中通信對端的IP地址和端口執(zhí)行與通信對端的三次握手過程,從而建立與通信對端的TCP通道;
[0147]在TLS服務器接收到客戶端發(fā)送的第二請求信息之后,TLS服務器可以根據第二請求信息中TCP服務器的IP地址和端口執(zhí)行與TCP服務器的三次握手,從而建立與TCP服務器的TCP通道。
[0148]步驟307,TLS服務器建立客戶端的IP地址和端口與通信對端的IP地址和端口之間的對應關系;
[0149]在TLS服務器創(chuàng)建與TCP服務器之間的TCP通道之后,TLS服務器可以通過TCP通道與TCP服務器進行通信,所以此時TLS服務器可以建立客戶端的IP地址和端口與TCP服務器的IP地址和端口之間的對應關系,從而使得TLS服務器在接收到某一客戶端發(fā)送的數據包之后能夠轉發(fā)至對應的TCP服務器,客戶端的IP地址和端口是通過第一請求信息獲取的IP地址和端口,也即是客戶端在請求與TLS服務器建立TLS連接時,TLS服務器通過客戶端發(fā)送的數據包而獲取的,本實施例對此不再贅述。
[0150]比如,在TLS服務器創(chuàng)建與TCP服務器之間的TCP通道之后,TLS服務器將建立客戶端的10.10.40.170:2000以及該客戶端想要通信的TCP服務器的192.168.1.128:6000的對應關系,從而使得當TLS服務器接收到來自10.10.40.170:2000的數據包時,TLS服務器知道該數據包是要發(fā)送至192.168.1.128:6000對應的TCP服務器的。[0151]步驟308,TLS服務器向客戶端發(fā)送通道建立成功響應;
[0152]在TLS服務器創(chuàng)建與TCP服務器之間的TCP通道之后,說明此時TLS服務器與TCP服務器的第二連接創(chuàng)建成功,TLS服務器可以開始通過TCP通道與TCP服務器進行通信,所以為了告知客戶端此時TLS服務器可以將客戶端發(fā)送數據包轉發(fā)至對應的TCP服務器,TLS服務器可以向客戶端發(fā)送通道建立成功響應,相應的,客戶端可以接收TLS服務器發(fā)送的通道建立成功響應。比如,在具體實現時,TLS服務器可以向客戶端發(fā)送一個二進制數據包,并使用該二進制數據包攜帶對應于第二請求信息的確認信息。
[0153]需要說明的是,步驟207和步驟208可以同時執(zhí)行,也可以分先后順序執(zhí)行,本實施例對此并不做限定。
[0154]步驟309,TLS服務器接收客戶端通過第一連接發(fā)送的第一類型數據包;
[0155]在客戶端接收到TLS服務器發(fā)送的通道建立成功響應之后,客戶端可以通過第一連接向TLS服務器發(fā)送第一類型數據包。
[0156]步驟310,TLS服務器將第一類型數據包重新封裝為TCP數據包;
[0157]在TLS服務器接收到客戶端通過第一連接發(fā)送的第一類型數據包之后,TLS服務器可以將第一類型數據包重新封裝為TCP數據包。具體地,由于TLS服務器需要將接收到的客戶端發(fā)送的TLS數據包轉發(fā)至對應的通信對端也即對應的TCP服務器,所以TLS在接收到客戶端發(fā)送的TLS數據包之后,可以將TLS數據包重新封裝為TCP數據包,具體封包方法為現有技術,在此不再贅述。
[0158]步驟311,TLS服務器根據對應關系,選擇對應的第二連接將TCP數據包轉發(fā)給通信對端;
[0159]在TLS服務器將客戶端發(fā)送的TLS數據包重新封裝為TCP數據包之后,TLS服務器可以根據已經建立的客戶端的IP地址和端口與通信對端的IP地址和端口的對應關系,選擇對應的第二連接將TCP數據包轉發(fā)給對應的通信對端。
[0160]步驟312,TLS服務器接收通信對端通過第二連接發(fā)送的TCP數據包,TCP數據包是通信對端在接收到客戶端發(fā)送的數據包之后發(fā)送的數據包;
[0161]若TCP服務器需要向客戶端發(fā)送數據包,則TCP服務器可以通過第二連接發(fā)送TCP數據包至TLS服務器,TCP數據包是通信對端在接收到客戶端發(fā)送的數據包之后發(fā)送的數據包。
[0162]具體地,由于在TCP服務器接收到TCP數據包之前,通信對端并不知道該客戶端的存在,所以TCP服務器向TLS服務器發(fā)送的TCP數據包必須是TCP服務器在接收到客戶端發(fā)送的數據包之后發(fā)送的數據包。
[0163]步驟313,TLS服務器將TCP數據包重新封裝為第一類型數據包;
[0164]在TLS服務器接收到TCP服務器發(fā)送的數據包之后,TLS服務器需要通過第一連接也即TLS連接將TCP數據包轉發(fā)至對應的客戶端,所以TLS服務器在接收到TCP數據包之后,TLS可以把TCP數據包重新封裝為第一類型數據包也即TLS數據包,在此不再贅述。
[0165]步驟314,TLS服務器根據對應關系,選擇對應的第一連接將第一類型數據包轉發(fā)給客戶端。
[0166]在TLS服務器將TCP服務器發(fā)送的TCP數據包重新封裝為TLS數據包之后,TLS服務器可以根據已經建立的客戶端的IP地址和端口與TCP服務器的IP地址和端口的對應關系,選擇對應的第一連接,并且通過第一連接將TLS數據包轉發(fā)給客戶端。
[0167]需要補充說明的一點是,步驟309至步驟311與步驟312至步驟314,可以同時存在于一個通信系統(tǒng)中,也可以只存在步驟309至步驟311或者步驟312至步驟314,本實施例對此并不做限定;
[0168]需要補充說明的另一點是,在TLS服務器與通信對端建立了 TCP通道之后,TLS服務器會為每個TCP通道分配一個通常為20分鐘的存活時間,當該TCP通道中在存活時間內沒有數據包或刷新通過時,TLS服務器將降低該TCP通道的優(yōu)先級直至關閉該TCP通道,所以為了避免客戶端在長時間內沒有向TCP服務器發(fā)送數據包,但是之后當再次需要使用第二連接向TCP服務器發(fā)送數據包時,TLS將TCP通道的優(yōu)先級降低甚至關閉的問題,客戶端可以在TLS為TCP分配的存活時間快到期時,向TLS服務器發(fā)送一個通道刷新請求,TLS服務器可以通過該通道刷新請求來維護TCP通道。在實際實現時,可以在通道刷新請求中攜帶一個預定時間,從而TLS服務器在接收到通道刷新請求時,為TCP通道分配一個時長為預定時間的存活時間;然而當客戶端不再需要發(fā)送數據包至TCP服務器時,客戶端將向TLS服務器發(fā)送一個攜帶預定時間為O的通道刷新請求,從而在TLS服務器接收到該通道刷新請求時,釋放該TCP通道;
[0169]需要補充說明的再一點是,由于TLS連接是可以復用的連接,所以在客戶端與第一通信對端通信完成后,客戶端可以向TLS服務器發(fā)送一個通道刷新請求,該通道刷新請求中攜帶的預定時間的時長為0,在TLS服務器接收到該通道刷新請求之后TLS服務器可以關閉與TCP服務器之間的第二連接也即TCP通道,而保持第一連接連通。之后客戶端仍然可以繼續(xù)通過第一連接發(fā)送與第二通信對端對應的第二請求信息,從而TLS服務器建立與第二通信對端之間的TCP通道;
[0170]需要補充說明的再一點是,客戶端還可以同時通過第一連接使得TLS服務器與多個通信對端建立TCP通道,也即此時與第一連接對應的第二連接有多個,本實施例對此并不做限定。
[0171]綜上所述,本實施例提供的NAT穿越方法,通過接收客戶端向預定地址發(fā)送的第一請求信息和第二請求信息,并且根據第一請求信息創(chuàng)建與客戶端之間的第一連接,根據第二請求信息創(chuàng)建與通信對端之間的第二連接,從而根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包。由于NAT設備后的客戶端與服務器之間建立的第一連接是TLS連接,并且TLS連接對于NAT設備來說是可信任的連接,所以不論客戶端在什么類型的NAT設備之后,客戶端都能成功穿越NAT設備而與服務器進行連接,并且客戶端通過發(fā)送第二請求信息至服務器使得服務器建立與通信對端之間的第二連接,從而服務器根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包,解決了現有技術中,當出現新的NAT設備類型時,由于STUN服務器無法檢測NAT設備類型或者檢測到的NAT設備類型可靠性不高時,客戶端不能實現NAT穿越,從而導致的現有方案適應性不高的問題,達到了可以不用考慮NAT設備類型而可以實現穿越的效果。并且在本實施例中,通過使用一個預定地址來接收客戶端發(fā)送的第一請求信息和第二請求信息,并且同時接收客戶端向通信對端發(fā)送的數據包,達到了服務器可以只用一個端口即可為多個客戶端服務從而提高地址資源利用率的效果。
[0172]請參考圖4,其示出了本發(fā)明一個實施例提供的服務器的結構方框圖,該服務器包括:第一接收模塊410、第一創(chuàng)建模塊420、第二接收模塊430、第二創(chuàng)建模塊440和數據傳輸模塊450。
[0173]第一接收模塊410,用于接收客戶端向預定地址發(fā)送的第一請求信息,所述第一請求信息包括用于建立第一連接的握手信息;
[0174]第一創(chuàng)建模塊420,用于根據所述第一請求信息創(chuàng)建與所述客戶端之間的所述第一連接;
[0175]第二接收模塊430,用于接收所述客戶端通過所述第一連接發(fā)送的第二請求信息,所述第二請求信息包括協(xié)議標識、通信對端的IP地址和端口 ;
[0176]第二創(chuàng)建模塊440,用于根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接;
[0177]數據傳輸模塊450,用于根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包。
[0178]綜上所述,本實施例提供的服務器,通過接收客戶端向預定地址發(fā)送的第一請求信息和第二請求信息,并且根據第一請求信息創(chuàng)建與客戶端之間的第一連接,根據第二請求信息創(chuàng)建與通信對端之間的第二連接,從而根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包。由于NAT設備后的客戶端與服務器之間建立的第一連接是TLS連接,并且TLS連接對于NAT設備來說是可信任的連接,所以不論客戶端在什么類型的NAT設備之后,客戶端都能成功穿越NAT設備而與服務器進行連接,并且客戶端通過發(fā)送第二請求信息至服務器使得服務器建立與通信對端之間的第二連接,從而服務器根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包,解決了現有技術中,當出現新的NAT設備類型時,由于STUN服務器無法檢測NAT設備類型或者檢測到的NAT設備類型可靠性不高時,客戶端不能實現NAT穿越,從而導致的現有方案適應性不高的問題,達到了可以不用考慮NAT設備類型而可以實現穿越的效果。并且在本實施例中,通過使用一個預定地址來接收客戶端發(fā)送的第一請求信息和第二請求信息,并且同時接收客戶端向通信對端發(fā)送的數據包,達到了服務器可以只用一個端口即可為多個客戶端服務從而提高地址資源利用率的效果。
[0179]請參考圖4,其示出了本發(fā)明另一實施例提供的服務器的結構方框圖。該服務器包括:第一接收模塊410、第一創(chuàng)建模塊420、第二接收模塊430、第二創(chuàng)建模塊440和數據傳輸模塊450。
[0180]第一接收模塊410,用于接收客戶端向預定地址發(fā)送的第一請求信息,所述第一請求信息包括用于建立第一連接的握手信息;
[0181]第一創(chuàng)建模塊420,用于根據所述第一請求信息創(chuàng)建與所述客戶端之間的所述第一連接;
[0182]第二接收模塊430,用于接收所述客戶端通過所述第一連接發(fā)送的第二請求信息,所述第二請求信息包括協(xié)議標識、通信對端的IP地址和端口 ;
[0183]第二創(chuàng)建模塊440,用于根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接;
[0184]數據傳輸模塊450,用于根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包。
[0185]請參考圖5,在本實施例中,所述第二創(chuàng)建模塊440包括第一建立單元441、第二建立單元442和第一發(fā)送單元443 ;
[0186]第一建立單元441,用于在本地開設與所述通信對端對應的UDP端口,以便與所述通信對端建立UDP通道;
[0187]第二建立單元442,用于建立客戶端的IP地址和端口與所述通信對端的IP地址和端口之間的對應關系,所述客戶端的IP地址和端口是通過所述第一請求信息獲取的IP地址和端口 ;
[0188]第一發(fā)送單元443,用于向所述客戶端發(fā)送通道建立成功響應。
[0189]請參考圖6,在本實施例中,所述數據傳輸模塊450包括第一接收單元451、第一封裝單元452、第一轉發(fā)單元453、第二接收單元454、第二封裝單元455和第二轉發(fā)單元456。
[0190]第一接收單元451,用于接收所述客戶端通過第一連接發(fā)送的第一類型數據包;
[0191]第一封裝單元452,用于將所述第一類型數據包重新封裝為UDP數據包;
[0192]第一轉發(fā)單元453,用于根據所述對應關系,選擇對應的第二連接將所述UDP數據包轉發(fā)給所述通信對端;
[0193]第二接收單元454,用于接收所述通信對端通過第二連接發(fā)送的UDP數據包,所述UDP數據包是所述通信對端在接收到所述客戶端發(fā)送的數據包之后發(fā)送的數據包;
[0194]第二封裝單元455,用于將所述UDP數據包重新封裝為第一類型數據包;
[0195]第二轉發(fā)單元456,用于根據所述對應關系,選擇對應的第一連接將所述第一類型數據包轉發(fā)給所述客戶端。
[0196]需要補充說明的是,本實施例提供的服務器可以是一個實體,也可以是設置在NAT設備中,本實施例對其具體實現形式并不做限定。
[0197]綜上所述,本實施例提供的服務器,通過接收客戶端向預定地址發(fā)送的第一請求信息和第二請求信息,并且根據第一請求信息創(chuàng)建與客戶端之間的第一連接,根據第二請求信息創(chuàng)建與通信對端之間的第二連接,從而根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包。由于NAT設備后的客戶端與服務器之間建立的第一連接是TLS連接,并且TLS連接對于NAT設備來說是可信任的連接,所以不論客戶端在什么類型的NAT設備之后,客戶端都能成功穿越NAT設備而與服務器進行連接,并且客戶端通過發(fā)送第二請求信息至服務器使得服務器建立與通信對端之間的第二連接,從而服務器根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包,解決了現有技術中,當出現新的NAT設備類型時,由于STUN服務器無法檢測NAT設備類型或者檢測到的NAT設備類型可靠性不高時,客戶端不能實現NAT穿越,從而導致的現有方案適應性不高的問題,達到了可以不用考慮NAT設備類型而可以實現穿越的效果。并且在本實施例中,通過使用一個預定地址來接收客戶端發(fā)送的第一請求信息和第二請求信息,并且同時接收客戶端向通信對端發(fā)送的數據包,達到了服務器可以只用一個端口即可為多個客戶端服務從而提高地址資源利用率的效果。
[0198]請參考圖4,其示出了本發(fā)明再一實施例提供的服務器的結構方框圖。該服務器包括:第一接收模塊410、第一創(chuàng)建模塊420、第二接收模塊430、第二創(chuàng)建模塊440和數據傳輸模塊450。
[0199]第一接收模塊410,用于接收客戶端向預定地址發(fā)送的第一請求信息,所述第一請求信息包括用于建立第一連接的握手信息;
[0200]第一創(chuàng)建模塊420,用于根據所述第一請求信息創(chuàng)建與所述客戶端之間的所述第一連接;
[0201]第二接收模塊430,用于接收所述客戶端通過所述第一連接發(fā)送的第二請求信息,所述第二請求信息包括協(xié)議標識、通信對端的IP地址和端口 ;
[0202]第二創(chuàng)建模塊440,用于根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接;
[0203]數據傳輸模塊450,用于根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包。
[0204]請參考圖7,在本實施例中,所述第二創(chuàng)建模塊包括:第三建立單元444、第四建立單元445、第二發(fā)送單元446。
[0205]第三建立單元444,用于根據所述第二請求信息中通信對端的IP地址和端口執(zhí)行與所述通信對端的三次握手過程,從而建立與所述通信對端的TCP通道;
[0206]第四建立單元445,用于建立客戶端的IP地址和端口與所述通信對端的IP地址和端口之間的對應關系,所述客戶端的IP地址和端口是通過所述第一請求信息獲取的IP地址和端口 ;
[0207]第二發(fā)送單元446,用于向所述客戶端發(fā)送通道建立成功響應。
[0208]請參考圖8,在本實施例中,所述數據傳輸模塊包括:第三接收單元457、第三封裝單元458、第三轉發(fā)單元459、第四接收單元460、第四封裝單元461和第四轉發(fā)單元462。
[0209]第三接收單元457,用于接收所述客戶端通過第一連接發(fā)送的第一類型數據包;
[0210]第三封裝單元458,用于將所述第一類型數據包重新封裝為TCP數據包;
[0211]第三轉發(fā)單元459,用于根據所述對應關系,選擇對應的第二連接將所述TCP數據包轉發(fā)給所述通信對端;
[0212]第四接收單元460,用于接收所述通信對端通過第二連接發(fā)送的TCP數據包,所述TCP數據包是所述通信對端在接收到所述客戶端發(fā)送的數據包之后發(fā)送的數據包;
[0213]第四封裝單元461,用于將所述TCP數據包重新封裝為第一類型數據包;
[0214]第四轉發(fā)單元462,用于根據所述對應關系,選擇對應的第一連接將所述第一類型數據包轉發(fā)給所述客戶端。
[0215]需要補充說明的是,本實施例提供的服務器可以是一個實體,也可以是設置在NAT設備中,本實施例對其具體實現形式并不做限定。
[0216]綜上所述,本實施例提供的服務器,通過接收客戶端向預定地址發(fā)送的第一請求信息和第二請求信息,并且根據第一請求信息創(chuàng)建與客戶端之間的第一連接,根據第二請求信息創(chuàng)建與通信對端之間的第二連接,從而根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包。由于NAT設備后的客戶端與服務器之間建立的第一連接是TLS連接,并且TLS連接對于NAT設備來說是可信任的連接,所以不論客戶端在什么類型的NAT設備之后,客戶端都能成功穿越NAT設備而與服務器進行連接,并且客戶端通過發(fā)送第二請求信息至服務器使得服務器建立與通信對端之間的第二連接,從而服務器根據第一連接和第二連接在客戶端和通信對端之間傳遞數據包,解決了現有技術中,當出現新的NAT設備類型時,由于STUN服務器無法檢測NAT設備類型或者檢測到的NAT設備類型可靠性不高時,客戶端不能實現NAT穿越,從而導致的現有方案適應性不高的問題,達到了可以不用考慮NAT設備類型而可以實現穿越的效果。并且在本實施例中,通過使用一個預定地址來接收客戶端發(fā)送的第一請求信息和第二請求信息,并且同時接收客戶端向通信對端發(fā)送的數據包,達到了服務器可以只用一個端口即可為多個客戶端服務從而提高地址資源利用率的效果。
[0217]需要說明的是:上述實施例提供的服務器在執(zhí)行NAT穿越時,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據需要而將上述功能分配由不同的功能模塊完成,即將服務器的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的服務器與NAT穿越方法實施例屬于同一構思,其具體實現過程詳見方法實施例,這里不再贅述。
[0218]上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
[0219]本領域普通技術人員可以理解實現上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。
[0220]以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
【權利要求】
1.一種NAT穿越方法,其特征在于,所述方法包括: 接收客戶端向預定地址發(fā)送的第一請求信息,所述第一請求信息包括用于建立第一連接的握手信息; 根據所述第一請求信息創(chuàng)建與所述客戶端之間的所述第一連接; 接收所述客戶端通過所述第一連 接發(fā)送的第二請求信息,所述第二請求信息包括協(xié)議標識、通信對端的IP地址和端口 ; 根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接; 根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包。
2.根據權利要求1所述的NAT穿越方法,其特征在于,所述第二請求信息中的協(xié)議標識為用戶數據包協(xié)議UDP標識,所述根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接,包括: 在本地開設與所述通信對端對應的UDP端口,以便與所述通信對端建立UDP通道; 建立客戶端的IP地址和端口與所述通信對端的IP地址和端口之間的對應關系,所述客戶端的IP地址和端口是通過所述第一請求信息獲取的IP地址和端口 ; 向所述客戶端發(fā)送通道建立成功響應。
3.根據權利要求2所述的NAT穿越方法,其特征在于,所述根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包,包括: 接收所述客戶端通過第一連接發(fā)送的第一類型數據包; 將所述第一類型數據包重新封裝為UDP數據包; 根據所述對應關系,選擇對應的第二連接將所述UDP數據包轉發(fā)給所述通信對端; 和/或, 接收所述通信對端通過第二連接發(fā)送的UDP數據包,所述UDP數據包是所述通信對端在接收到所述客戶端發(fā)送的數據包之后發(fā)送的數據包; 將所述UDP數據包重新封裝為第一類型數據包; 根據所述對應關系,選擇對應的第一連接將所述第一類型數據包轉發(fā)給所述客戶端。
4.根據權利要求1所述的NAT穿越方法,其特征在于,所述第二請求信息中的協(xié)議標識為傳輸控制協(xié)議TCP標識,所述根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接,包括: 根據所述第二請求信息中通信對端的IP地址和端口執(zhí)行與所述通信對端的三次握手過程,從而建立與所述通信對端的TCP通道; 建立所述客戶端的IP地址和端口與所述通信對端的IP地址和端口之間的對應關系; 向所述客戶端發(fā)送通道建立成功響應。
5.根據權利要求4所述的NAT穿越方法,其特征在于,所述根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包,包括: 接收所述客戶端通過第一連接發(fā)送的第一類型數據包; 將所述第一類型數據包重新封裝為TCP數據包; 根據所述對應關系,選擇對應的第二連接將所述TCP數據包轉發(fā)給所述通信對端; 和/或, 接收所述通信對端通過第二連接發(fā)送的TCP數據包,所述TCP數據包是所述通信對端在接收到所述客戶端發(fā)送的數據包之后發(fā)送的數據包; 將所述TCP數據包重新封裝為第一類型數據包; 根據所述對應關系,選擇對應的第一連接將所述第一類型數據包轉發(fā)給所述客戶端。
6.一種服務器,其特征在于,所述服務器包括: 第一接收模塊,用于接收客戶端向預定地址發(fā)送的第一請求信息,所述第一請求信息包括用于建立第一連接的握手信息; 第一創(chuàng)建模塊,用于根據所述第一請求信息創(chuàng)建與所述客戶端之間的所述第一連接;第二接收模塊,用于接收所述客戶端通過所述第一連接發(fā)送的第二請求信息,所述第二請求信息包括協(xié)議標識、通信對端的IP地址和端口 ; 第二創(chuàng)建模塊,用于根據所述第二請求信息創(chuàng)建與所述通信對端之間的第二連接;數據傳輸模塊,用于根據所述第一連接和所述第二連接在所述客戶端與所述通信對端之間傳遞數據包。
7.根據權利要求6所述的服務器,其特征在于,所述第二請求信息中的協(xié)議標識為用戶數據包協(xié)議UDP標識,所述第二創(chuàng)建模塊,包括: 第一建立單元,用于在本地開設與所述通信對端對應的UDP端口,以便與所述通信對端建立UDP通道; 第二建立單元,用于建立客戶端的IP地址和端口與所述通信對端的IP地址和端口之間的對應關系,所述客戶端的IP地址和端口是通過所述第一請求信息獲取的IP地址和端Π ; 第一發(fā)送單元,用于向所述客戶端發(fā)送通道建立成功響應。
8.根據權利要求7所述的服務器,其特征在于,所述數據傳輸模塊,包括: 第一接收單元,用于接收所述客戶端通過第一連接發(fā)送的第一類型數據包; 第一封裝單元,用于將所述第一類型數據包重新封裝為UDP數據包; 第一轉發(fā)單元,用于根據所述對應關系,選擇對應的第二連接將所述UDP數據包轉發(fā)給所述通信對端; 第二接收單元,用于接收所述通信對端通過第二連接發(fā)送的UDP數據包,所述UDP數據包是所述通信對端在接收到所述客戶端發(fā)送的數據包之后發(fā)送的數據包; 第二封裝單元,用于將所述UDP數據包重新封裝為第一類型數據包; 第二轉發(fā)單元,用于根據所述對應關系,選擇對應的第一連接將所述第一類型數據包轉發(fā)給所述客戶端。
9.根據權利要求6所述的服務器,其特征在于,所述第二請求信息中的協(xié)議標識為傳輸控制協(xié)議TCP標識,所述第二創(chuàng)建模塊,包括: 第三建立單元,用于根據所述第二請求信息中通信對端的IP地址和端口執(zhí)行與所述通信對端的三次握手過程,從而建立與所述通信對端的TCP通道; 第四建立單元,用于建立所述客戶端的IP地址和端口與所述通信對端的IP地址和端口之間的對應關系; 第二發(fā)送單元,用于向所述客戶端發(fā)送通道建立成功響應。
10.根據權利要求9所述的服務器,其特征在于,所述數據傳輸模塊,包括: 第三接收單元,用于接收所述客戶端通過第一連接發(fā)送的第一類型數據包;第三封裝單元,用于將所述第一類型數據包重新封裝為TCP數據包; 第三轉發(fā)單元,用于根據所述對應關系,選擇對應的第二連接將所述TCP數據包轉發(fā)給所述通信對端; 第四接收單元,用于接收所述通信對端通過第二連接發(fā)送的TCP數據包,所述TCP數據包是所述通信對端在接收到所述客戶端發(fā)送的數據包之后發(fā)送的數據包; 第四封裝單元,用于將所述TCP數據包 重新封裝為第一類型數據包; 第四轉發(fā)單元,用于根據所述對應關系,選擇對應的第一連接將所述第一類型數據包轉發(fā)給所述客戶端。
【文檔編號】H04L29/06GK103916485SQ201210594542
【公開日】2014年7月9日 申請日期:2012年12月31日 優(yōu)先權日:2012年12月31日
【發(fā)明者】陳俊興 申請人:北京新媒傳信科技有限公司