CN103916485A - Nat穿越方法以及服务器 - Google Patents
Nat穿越方法以及服务器 Download PDFInfo
- Publication number
- CN103916485A CN103916485A CN201210594542.7A CN201210594542A CN103916485A CN 103916485 A CN103916485 A CN 103916485A CN 201210594542 A CN201210594542 A CN 201210594542A CN 103916485 A CN103916485 A CN 103916485A
- Authority
- CN
- China
- Prior art keywords
- client
- correspondent node
- server
- solicited message
- packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种NAT穿越方法以及服务器,属于网络技术领域。所述方法包括:接收客户端向预定地址发送的第一请求信息;根据所述第一请求信息创建与所述客户端之间的第一连接;接收所述客户端通过第一连接发送的第二请求信息;根据所述第二请求信息创建与所述通信对端之间的第二连接;根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包。解决了现有技术中,当出现新的NAT设备类型时,由于STUN服务器无法检测NAT设备类型或者检测到的NAT设备类型可靠性不高时,客户端不能实现NAT穿越,从而导致的现有方案适应性不高的问题,达到了可以不用考虑NAT设备类型而可以实现穿越的效果。
Description
技术领域
本发明涉及网络技术领域,特别涉及一种NAT穿越方法以及服务器。
背景技术
NAT(NetworkAddress Translation,网络地址转换)是广域网中为解决公网IP(Internet Protocol,互联网协议地址)地址紧缺所采用的主要技术之一。在使用NAT设备的广域网中,公网中的客户端不能主动向私网中的客户端发起通信,所以如何实现NAT穿越已经成为互联网通信领域的技术人员现阶段重要的研究课题之一。
现有的一种NAT穿越方法,包括:客户端向STUN(Simple Traversal ofUDPoverNATs,NAT的UDP简单穿越)服务器发送NAT设备类型检测请求,从而获取客户端对应的NAT设备类型信息;客户端向通信对端发起会话,以便向通信对端发送客户端对应的NAT设备类型信息,并同时获得通信对端对应的NAT设备类型信息;客户端和通信对端根据双方的NAT设备类型采用相应的NAT设备穿越方法;客户端和通信对端进行数据传输。
在实现本发明的过程中,发明人发现现有技术至少存在如下问题:
在客户端执行NAT设备穿越之前,客户端需要向STUN服务器发送NAT设备类型检测请求,从而STUN服务器在检测到客户端的NAT设备类型后反馈给客户端。所以这就导致当出现新的NAT设备类型时,STUN服务器无法检测NAT设备类型或者检测到的NAT设备类型可靠性不高时,客户端不能实现NAT的穿越,所以现有方案适应性不高。
发明内容
为了解决现有的NAT穿越方法适应性不高的问题,本发明实施例提供了一种NAT穿越方法和服务器。所述技术方案如下:
根据本发明的一个方面,提供了一种NAT穿越方法,所述方法包括:
接收客户端向预定地址发送的第一请求信息,所述第一请求信息包括用于建立第一连接的握手信息;
根据所述第一请求信息创建与所述客户端之间的所述第一连接;
接收所述客户端通过所述第一连接发送的第二请求信息,所述第二请求信息包括协议标识、通信对端的IP地址和端口;
根据所述第二请求信息创建与所述通信对端之间的第二连接;
根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包。
优选地,所述第二请求信息中的协议标识为用户数据包协议UDP标识,所述根据所述第二请求信息创建与所述通信对端之间的第二连接,包括:
在本地开设与所述通信对端对应的UDP端口,以便与所述通信对端建立UDP通道;
建立客户端的IP地址和端口与所述通信对端的IP地址和端口之间的对应关系,所述客户端的IP地址和端口是通过所述第一请求信息获取的IP地址和端口;
向所述客户端发送通道建立成功响应。
优选地,所述根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包,包括:
接收所述客户端通过第一连接发送的第一类型数据包;
将所述第一类型数据包重新封装为UDP数据包;
根据所述对应关系,选择对应的第二连接将所述UDP数据包转发给所述通信对端;
和/或,
接收所述通信对端通过第二连接发送的UDP数据包,所述UDP数据包是所述通信对端在接收到所述客户端发送的数据包之后发送的数据包;
将所述UDP数据包重新封装为第一类型数据包;
根据所述对应关系,选择对应的第一连接将所述第一类型数据包转发给所述客户端。
优选地,所述第二请求信息中的协议标识为传输控制协议TCP标识,所述根据所述第二请求信息创建与所述通信对端之间的第二连接,包括:
根据所述第二请求信息中通信对端的IP地址和端口执行与所述通信对端的三次握手过程,从而建立与所述通信对端的TCP通道;
建立所述客户端的IP地址和端口与所述通信对端的IP地址和端口之间的对应关系;
向所述客户端发送通道建立成功响应。
优选地,所述根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包,包括:
接收所述客户端通过第一连接发送的第一类型数据包;
将所述第一类型数据包重新封装为TCP数据包;
根据所述对应关系,选择对应的第二连接将所述TCP数据包转发给所述通信对端;
和/或,
接收所述通信对端通过第二连接发送的TCP数据包,所述TCP数据包是所述通信对端在接收到所述客户端发送的数据包之后发送的数据包;
将所述TCP数据包重新封装为第一类型数据包;
根据所述对应关系,选择对应的第一连接将所述第一类型数据包转发给所述客户端。
根据本发明的另一方面,提供了一种服务器,所述服务器包括:
第一接收模块,用于接收客户端向预定地址发送的第一请求信息,所述第一请求信息包括用于建立第一连接的握手信息;
第一创建模块,用于根据所述第一请求信息创建与所述客户端之间的所述第一连接;
第二接收模块,用于接收所述客户端通过所述第一连接发送的第二请求信息,所述第二请求信息包括协议标识、通信对端的IP地址和端口;
第二创建模块,用于根据所述第二请求信息创建与所述通信对端之间的第二连接;
数据传输模块,用于根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包。
优选地,所述第二请求信息中的协议标识为用户数据包协议UDP标识,所述第二创建模块,包括:
第一建立单元,用于在本地开设与所述通信对端对应的UDP端口,以便与所述通信对端建立UDP通道;
第二建立单元,用于建立客户端的IP地址和端口与所述通信对端的IP地址和端口之间的对应关系,所述客户端的IP地址和端口是通过所述第一请求信息获取的IP地址和端口;
第一发送单元,用于向所述客户端发送通道建立成功响应。
优选地,所述数据传输模块,包括:
第一接收单元,用于接收所述客户端通过第一连接发送的第一类型数据包;
第一封装单元,用于将所述第一类型数据包重新封装为UDP数据包;
第一转发单元,用于根据所述对应关系,选择对应的第二连接将所述UDP数据包转发给所述通信对端;
第二接收单元,用于接收所述通信对端通过第二连接发送的UDP数据包,所述UDP数据包是所述通信对端在接收到所述客户端发送的数据包之后发送的数据包;
第二封装单元,用于将所述UDP数据包重新封装为第一类型数据包;
第二转发单元,用于根据所述对应关系,选择对应的第一连接将所述第一类型数据包转发给所述客户端。
优选地,所述第二请求信息中的协议标识为传输控制协议TCP标识,所述第二创建模块,包括:
第三建立单元,用于根据所述第二请求信息中通信对端的IP地址和端口执行与所述通信对端的三次握手过程,从而建立与所述通信对端的TCP通道;
第四建立单元,用于建立所述客户端的IP地址和端口与所述通信对端的IP地址和端口之间的对应关系;
第二发送单元,用于向所述客户端发送通道建立成功响应。
优选地,所述数据传输模块,包括:
第三接收单元,用于接收所述客户端通过第一连接发送的第一类型数据包;
第三封装单元,用于将所述第一类型数据包重新封装为TCP数据包;
第三转发单元,用于根据所述对应关系,选择对应的第二连接将所述TCP数据包转发给所述通信对端;
第四接收单元,用于接收所述通信对端通过第二连接发送的TCP数据包,所述TCP数据包是所述通信对端在接收到所述客户端发送的数据包之后发送的数据包;
第四封装单元,用于将所述TCP数据包重新封装为第一类型数据包;
第四转发单元,用于根据所述对应关系,选择对应的第一连接将所述第一类型数据包转发给所述客户端。
本发明实施例提供的技术方案带来的有益效果是:
通过接收客户端向预定地址发送的第一请求信息和第二请求信息,并且根据第一请求信息创建与客户端之间的第一连接,根据第二请求信息创建与通信对端之间的第二连接,从而根据第一连接和第二连接在客户端和通信对端之间传递数据包。由于NAT设备后的客户端与服务器之间建立的第一连接是TLS连接,并且TLS连接对于NAT设备来说是可信任的连接,所以不论客户端在什么类型的NAT设备之后,客户端都能成功穿越NAT设备而与服务器进行第一连接,并且客户端通过发送第二请求信息至服务器使得服务器建立与通信对端之间的第二连接,从而服务器根据第一连接和第二连接在客户端和通信对端之间传递数据包,解决了现有技术中,当出现新的NAT设备类型时,由于STUN服务器无法检测NAT设备类型或者检测到的NAT设备类型可靠性不高时,客户端不能实现NAT穿越,从而导致的现有方案适应性不高的问题,达到了可以不用考虑NAT设备类型而可以实现穿越的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例提供的NAT穿越方法的方法流程图;
图2是本发明另一实施例提供的NAT穿越方法的方法流程图;
图3是本发明再一实施例提供的NAT穿越方法的方法流程图;
图4是本发明一个实施例提供的服务器的结构方框图;
图5是本发明另一实施例提供的服务器的结构方框图;
图6是本发明另一实施例提供的服务器的结构方框图;
图7是本发明再一实施例提供的服务器的结构方框图;
图8是本发明再一实施例提供的服务器的结构方框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图1,其示出了本发明一个实施例所提供的NAT穿越方法的方法流程图。本实施例主要以该NAT穿越方法应用于位于公网中的TLS服务器中来举例说明。该NAT穿越方法包括:
步骤101,TLS服务器接收客户端向预定地址发送的第一请求信息;
由于公网中的通信对端不能主动发起与私网中的客户端之间的通信,也即不能主动发起与NAT设备后的客户端之间的通信,所以为了避免这种情况,在通信对端与客户端进行通信之前,NAT设备后的客户端可以先与TLS(TransportLayer Security,安全传输协议)服务器建立第一连接,所以客户端可以向预定地址发送一个第一请求信息,相应的,TLS服务器可以接收客户端发送的第一请求信息,第一请求信息用于建立第一连接的握手信息。
步骤102,TLS服务器根据第一请求信息创建与客户端之间的第一连接;
TLS服务器接收到客户端发送的第一请求信息之后,TLS服务器可以根据第一请求信息创建与客户端之间的第一连接。
步骤103,TLS服务器接收客户端通过第一连接发送的第二请求信息,第二请求信息包括协议标识、通信对端的IP地址和端口;
在TLS服务器创建了与客户端之间的第一连接后,客户端可以通过第一连接向预定地址发送第二请求信息,相应的,TLS服务器可以接收客户端发送的第二请求信息,第二请求信息包括协议标识、通信对端的IP地址和端口。
步骤104,根据第二请求信息创建与通信对端之间的第二连接;
由于第二请求信息中包括通信对端的IP地址和端口,所以当TLS服务器接收到客户端发送的第二请求信息时,TLS服务器可以根据第二请求信息创建与通信对端之间的第二连接。
步骤105,根据第一连接和第二连接在客户端与通信对端之间传递数据包。
当TLS服务器创建了与通信对端的第二连接之后,TLS服务器已经分别通过第一连接与客户端连接,通过第二连接与通信对端连接,所以此时TLS服务器可以根据第一连接和第二连接在客户端与通信对端之间传递数据包。
综上所述,本实施例提供的NAT穿越方法,通过接收客户端向预定地址发送的第一请求信息和第二请求信息,并且根据第一请求信息创建与客户端之间的第一连接,根据第二请求信息创建与通信对端之间的第二连接,从而根据第一连接和第二连接在客户端和通信对端之间传递数据包。由于NAT设备后的客户端与服务器之间建立的第一连接是TLS连接,并且TLS连接对于NAT设备来说是可信任的连接,所以不论客户端在什么类型的NAT设备之后,客户端都能成功穿越NAT设备而与服务器进行连接,并且客户端通过发送第二请求信息至服务器使得服务器建立与通信对端之间的第二连接,从而服务器根据第一连接和第二连接在客户端和通信对端之间传递数据包,解决了现有技术中,当出现新的NAT设备类型时,由于STUN服务器无法检测NAT设备类型或者检测到的NAT设备类型可靠性不高时,客户端不能实现NAT穿越,从而导致的现有方案适应性不高的问题,达到了可以不用考虑NAT设备类型而可以实现穿越的效果。并且在本实施例中,通过使用一个预定地址来接收客户端发送的第一请求信息和第二请求信息,并且同时接收客户端向通信对端发送的数据包,达到了服务器可以只用一个端口即可为多个客户端服务从而提高地址资源利用率的效果。
请参考图2,其示出了本发明另一实施例所提供的NAT穿越方法的方法流程图。本实施例主要以该NAT穿越方法应用于位于公网中的TLS服务器中,并且客户端需要发送的数据包是UDP(User Datagram Protocol,用户数据包协议)数据包来举例说明。该NAT穿越方法包括:
步骤201,客户端向预定地址发送第一请求信息;
由于公网中的通信对端不能主动发起与私网中的客户端之间的通信,也即不能主动发起与NAT设备后的客户端之间的通信,所以为了避免这种情况,在通信对端与客户端进行通信之前,NAT设备后的客户端需要先与TLS服务器建立TLS连接,所以客户端可以向TLS服务器的预定端口发送第一请求信息,第一请求信息可以包括用于建立第一连接的握手信息,客户端与TLS服务器建立第一连接时需要的握手信息可以包括TLS协议的版本号、客户端支持的非对称算法、对称算法、哈希算法和其他信息,本实施例对此并不做限定。
具体地,在客户端需要与TLS服务器建立连接时,客户端可以向TLS服务器中的TCP信令端口发送第一请求信息。比如,TLS服务器的IP地址为10.10.40.70,TLS服务器中的TCP信令端口的端口号为888,则客户端可以向IP地址和端口为10.10.40.70:888的预定地址发送第一请求信息。
步骤202,TLS服务器接收客户端向预定地址发送的第一请求信息;
在客户端向TLS服务器发送第一请求信息之后,TLS服务器可以相应的接收客户端发送的第一请求信息。
步骤203,TLS服务器根据第一请求信息创建与客户端之间的第一连接;
TLS服务器在接收到客户端发送的第一请求信息后,TLS服务器可以根据第一请求信息中的TLS协议的版本号、客户端支持的非对称算法、对称算法和哈希算法与对应的客户端进行算法协商、证书认证以及密钥协商,当协商通过后,TLS服务器建立与客户端之间的第一连接,也即建立TLS服务器与客户端之间的TLS连接。
步骤204,客户端通过第一连接发送第二请求信息;
为了使得客户端能够通过TLS服务器与对应的UDP服务器进行通信,在TLS服务器建立与客户端之间的第一连接之后,客户端可以通过第一连接向预定地址发送请求建立UDP通道的第二请求信息,第二请求信息包括协议标识、通信对端的IP地址和端口,预定地址包括TLS服务器的IP地址和TLS服务器中的TCP端口的端口号。
在具体的通信***中,当客户端需要向通信对端发送的数据包是UDP数据包时,协议标识可以是UDP标识,此时通信对端为UDP服务器;当客户端需要向通信对端发送的数据包是TCP(Transmission Control Protocol,传输控制协议)数据包时,协议标识可以是TCP标识,此时通信对端为TCP服务器,本实施例以客户端需要向通信对端发送的数据包是UDP数据包,也即第二请求信息中的协议标识是UDP标识为例。
比如,客户端想要发送一个UDP数据包至IP地址和端口为192.168.1.128:6000的UDP服务器,则客户端可以通过第一连接向TLS服务器发送包括UDP标识和192.168.1.128:6000的第二请求信息。
然而,由于现有的通信***中,为了解决公网IP地址紧缺的问题,同时也提出了使用IPv6(Internet Protocol Version6,第6版互联网协议)的解决方案,所以为了使得TLS服务器能够知道UDP服务器使用的IP协议,从而与通信对端建立通信通道,第二请求信息中还可以包括类别标识也即IPv4或IPv6。需要说明的是,当某一个区域内全都使用IPv4或IPv6时,此时,第二请求信息中可以不包括IPv4或IPv6,本实施例对此并不做限定。
步骤205,TLS服务器接收客户端通过第一连接发送的第二请求信息;
客户端通过第一连接发送第二请求信息之后,TLS服务器可以相应的接收到客户端发送的第二请求信息。比如,客户端发送的第二请求信息包括UDP标识和通信对端的192.168.1.128:6000,则TLS服务器可以相应的接收到包括UDP标识和通信对端的IP地址和端口192.168.1.128:6000的第二请求信息。
步骤206,TLS服务器在本地开设与通信对端对应的UDP端口,以便与通信对端建立UDP通道;
由于UDP是一种面向无连接的传输层协议,所以在TLS服务器接收到客户端发送的第二请求信息之后,TLS服务器可以根据UDP服务器的IP地址和端口为该UDP服务器开设UDP端口,以便TLS服务器使用开设的UDP端口与对应的UDP服务器建立UDP通道。
步骤207,TLS服务器建立客户端的IP地址和端口与通信对端的IP地址和端口之间的对应关系;
TLS服务器在本地开设与UDP服务器对应的UDP端口之后,说明此时TLS服务器可以使用该UDP端口与UDP服务器进行通信,所以TLS服务器可以建立客户端的IP地址和端口与UDP服务器的IP地址和端口之间的对应关系,从而使得TLS服务器在接收到某一客户端发送的数据包之后能够转发至对应的UDP服务器,客户端的IP地址和端口是通过第一请求信息获取的IP地址和端口,也即是客户端在请求与TLS服务器建立TLS连接时,TLS服务器通过客户端发送的数据包而获取的,本实施例对此不再赘述。
比如,在TLS服务器开设与UDP服务器对应的UDP端口之后,TLS服务器将建立客户端的10.10.40.170:2000以及该客户端想要通信的UDP服务器的192.168.1.128:6000的对应关系,从而使得当TLS服务器接收到来自10.10.40.170:2000的数据包时,TLS服务器知道该数据包是要发送至192.168.1.128:6000对应的UDP服务器的。
步骤208,TLS服务器向客户端发送通道建立成功响应;
在TLS服务器在本地开设与UDP服务器对应的UDP端口之后,说明此时TLS服务器与UDP服务器的第二连接已经创建成功,TLS服务器可以开始使用该UDP端口与UDP服务器进行通信,所以为了告知客户端此时TLS服务器可以将客户端发送数据包转发至对应的UDP服务器,TLS服务器可以向客户端发送UDP通道建立成功响应,相应的,客户端可以接收TLS服务器发送的UDP通道建立成功响应。比如,在具体实现时,TLS服务器可以向客户端发送一个二进制数据包,并使用该二进制数据包携带对应于第二请求信息的确认信息。
需要说明的是,步骤207和步骤208可以同时执行,也可以分先后顺序执行,本实施例对此并不做限定。
步骤209,TLS服务器接收客户端通过第一连接发送的第一类型数据包;
在客户端接收到TLS服务器发送的通道建立成功响应之后,客户端可以通过第一连接向TLS服务器发送第一类型数据包。
具体地,由于客户端与TLS服务器之间使用的是TLS连接,所以客户端向TLS服务器发送的第一类型数据包是TLS数据包。并且由于TLS服务器中的TCP信令端口可以同时中继信令和数据包,所以在客户端需要通过第一连接发送TLS数据包至TLS服务器时,客户端也可以通过第一连接发送TLS数据包。
步骤210,TLS服务器将第一类型数据包重新封装为UDP数据包;
在TLS服务器接收到客户端通过第一连接发送的第一类型数据包之后,TLS服务器可以将第一类型数据包重新封装为UDP数据包。具体地,由于TLS服务器需要将接收到的客户端发送的TLS数据包转发至对应的通信对端也即对应的UDP服务器,所以TLS在接收到客户端发送的TLS数据包之后,可以将TLS数据包重新封装为UDP数据包,具体封包方法为现有技术,在此不再赘述。
步骤211,TLS服务器根据对应关系,选择对应的第二连接将UDP数据包转发给通信对端;
在TLS服务器将客户端发送的TLS数据包重新封装为UDP数据包之后,TLS服务器可以根据已经建立的客户端的IP地址和端口与通信对端的IP地址和端口的对应关系,选择对应的第二连接将UDP数据包转发给对应的通信对端。
比如,TLS服务器接收到的TLS数据包是10.10.40.170:2000发送的数据包,则在TLS将数据包重新封装为UDP数据包之后,TLS服务器可以查询与10.10.40.170:2000对应的UDP服务器,并且根据步骤207可以知道,TLS服务器创建的与10.10.40.170:2000对应的UDP服务器的IP地址和端口为192.168.1.128:6000,所以TLS服务器可以把已经重新封装的UDP数据包转发至192.168.1.128:6000对应的UDP服务器。
步骤212,TLS服务器接收通信对端通过第二连接发送的UDP数据包;
若UDP服务器需要向客户端发送数据包,则UDP服务器可以通过第二连接发送UDP数据包至TLS服务器,UDP数据包是通信对端在接收到客户端发送的数据包之后发送的数据包。
具体地,由于在UDP服务器接收到UDP数据包之前,通信对端并不知道该客户端的存在,所以UDP服务器向TLS服务器发送的UDP数据包必须是UDP服务器在接收到客户端发送的数据包之后发送的数据包。
步骤213,TLS服务器将UDP数据包重新封装为第一类型数据包;
在TLS服务器接收到UDP服务器发送的数据包之后,TLS服务器需要通过第一连接也即TLS连接将UDP数据包转发至对应的客户端,所以TLS服务器在接收到UDP数据包之后,TLS可以把UDP数据包重新封装为第一类型数据包也即TLS数据包,在此不再赘述。
步骤214,TLS服务器根据对应关系,选择对应的第一连接和第二连接将第一类型数据包转发给对应的客户端。
在TLS服务器将UDP服务器发送的UDP数据包重新封装为TLS数据包之后,TLS服务器可以根据已经建立的客户端的IP地址和端口与UDP服务器的IP地址和端口的对应关系,选择对应的第一连接,并且通过第一连接将TLS数据包转发给客户端。
需要补充说明的一点是,步骤209至步骤211与步骤212至步骤214,可以同时存在于一个通信***中,也可以只存在步骤209至步骤211或者步骤212至步骤214,本实施例对此并不做限定。
需要补充说明的另一点是,在TLS服务器与通信对端建立了UDP通道之后,TLS服务器会为每个UDP通道分配一个存活时间,当该UDP通道中在存活时间内没有数据包或刷新通过时,TLS服务器将关闭该UDP通道,所以为了避免客户端在长时间没有向UDP服务器发送数据包,但是之后当再次需要使用第二连接向UDP服务器发送数据包时,TLS服务器将UDP通道关闭的问题,客户端可以在TLS服务器为UDP通道分配的存活时间快到期时,向TLS服务器发送一个通道刷新请求,TLS服务器可以通过该通道刷新请求来维护UDP通道。在实际实现时,可以在通道刷新请求中携带一个预定时间,从而TLS服务器在接收到通道刷新请求时,为UDP通道分配一个时长为预定时间的存活时间;然而当客户端不再需要发送数据包至UDP服务器时,为了释放原本就紧缺的UDP端口资源,客户端将向TLS服务器发送一个携带预定时间为0的通道刷新请求,从而在TLS服务器接收到该通道刷新请求时,关闭该UDP通道从而释放UDP端口资源;
需要补充说明的再一点是,由于TLS连接是可以复用的连接,所以在客户端与第一通信对端通信完成后,客户端可以向TLS服务器发送一个通道刷新请求,该通道刷新请求中携带的预定时间的时长为0,在TLS服务器接收到通道刷新请求后TLS服务器可以关闭与UDP服务器之间的第二连接也即UDP通道,而保持第一连接连通。之后客户端仍然可以继续通过第一连接发送与第二通信对端对应的第二请求信息,从而TLS服务器建立与第二通信对端之间的UDP通道;
需要补充说明的再一点是,客户端还可以同时通过第一连接使得TLS服务器与多个通信对端建立UDP通道,也即此时与第一连接对应的第二连接有多个,本实施例对此并不做限定。
综上所述,本实施例提供的NAT穿越方法,通过接收客户端向预定地址发送的第一请求信息和第二请求信息,并且根据第一请求信息创建与客户端之间的第一连接,根据第二请求信息创建与通信对端之间的第二连接,从而根据第一连接和第二连接在客户端和通信对端之间传递数据包。由于NAT设备后的客户端与服务器之间建立的第一连接是TLS连接,并且TLS连接对于NAT设备来说是可信任的连接,所以不论客户端在什么类型的NAT设备之后,客户端都能成功穿越NAT设备而与服务器进行连接,并且客户端通过发送第二请求信息至服务器使得服务器建立与通信对端之间的第二连接,从而服务器根据第一连接和第二连接在客户端和通信对端之间传递数据包,解决了现有技术中,当出现新的NAT设备类型时,由于STUN服务器无法检测NAT设备类型或者检测到的NAT设备类型可靠性不高时,客户端不能实现NAT穿越,从而导致的现有方案适应性不高的问题,达到了可以不用考虑NAT设备类型而可以实现穿越的效果。并且在本实施例中,通过使用一个预定地址来接收客户端发送的第一请求信息和第二请求信息,并且同时接收客户端向通信对端发送的数据包,达到了服务器可以只用一个端口即可为多个客户端服务从而提高地址资源利用率的效果。
请参考图3,其示出了本发明实施例再一实施例提供的NAT穿越方法的方法流程图。本实施例主要以该NAT穿越方法应用于位于公网中的TLS服务器中,并且客户端需要发送的数据包是TCP数据包来举例说明。该NAT穿越方法包括:
步骤301,客户端向预定地址发送第一请求信息;
由于公网中的通信对端不能主动发起与私网中的客户端之间的通信,也即不能主动发起与NAT设备后的客户端之间的通信,所以为了避免这种情况,在通信对端与客户端进行通信之前,NAT设备后的客户端需要先与TLS服务器建立TLS连接,所以客户端可以向TLS服务器的预定端口发送第一请求信息,第一请求信息可以包括用于建立第一连接的握手信息,客户端与TLS服务器建立第一连接时需要的握手信息可以包括TLS协议的版本号、客户端支持的非对称算法、对称算法、哈希算法和其他信息,本实施例对此并不做限定。
具体地,在客户端需要与TLS服务器建立连接时,客户端可以向TLS服务器中的TCP信令端口发送第一请求信息。
步骤302,TLS服务器接收客户端向预定地址发送的第一请求信息;
在客户端向TLS服务器发送第一请求信息之后,TLS服务器可以相应的接收客户端发送的第一请求信息。
步骤303,TLS服务器根据第一请求信息创建与客户端之间的第一连接;
TLS服务器在接收到客户端发送的第一请求信息后,TLS服务器可以根据第一请求信息中的TLS协议的版本号、客户端支持的非对称算法、对称算法和哈希算法与对应的客户端进行算法协商、证书认证以及密钥协商,当协商通过后,TLS服务器建立与客户端之间的第一连接,也即建立TLS服务器与客户端之间的TLS连接。
步骤304,客户端通过第一连接发送第二请求信息;
为了使得客户端能够通过TLS服务器与对应的UDP服务器进行通信,在TLS服务器建立与客户端之间的第一连接之后,客户端可以通过第一连接向预定地址发送第二请求信息,第二请求信息包括协议标识、通信对端的IP地址和端口,预定地址包括TLS服务器的IP地址和TLS服务器中的TCP端口的端口号。
在具体的通信***中,当客户端需要向通信对端发送的数据包是UDP数据包时,协议标识可以是UDP标识,此时通信对端为UDP服务器;当客户端需要向通信对端发送的数据包是TCP数据包时,协议标识可以是TCP标识,此时通信对端为TCP服务器,本实施例以客户端需要向通信对端发送的数据包是TCP数据包,也即第二请求信息中的协议标识是TCP标识为例。
然而,由于现有的通信***中,为了解决公网IP地址紧缺的问题,同时也提出了使用IPv6(Internet Protocol Version6,第6版互联网协议)的解决方案,所以为了使得TLS服务器能够知道TCP服务器使用的IP协议,从而与通信对端建立通信通道,第二请求信息中还可以包括类别标识也即IPv4或IPv6。需要说明的是,当某一个区域内全都使用IPv4或IPv6时,此时,第二请求信息中可以不包括IPv4或IPv6,本实施例对此并不做限定。
步骤305,TLS服务器接收客户端通过第一连接发送的第二请求信息;
客户端通过第一连接发送第二请求信息之后,TLS服务器可以相应的接收到客户端发送的第二请求信息。
步骤306,TLS服务器根据第二请求信息中通信对端的IP地址和端口执行与通信对端的三次握手过程,从而建立与通信对端的TCP通道;
在TLS服务器接收到客户端发送的第二请求信息之后,TLS服务器可以根据第二请求信息中TCP服务器的IP地址和端口执行与TCP服务器的三次握手,从而建立与TCP服务器的TCP通道。
步骤307,TLS服务器建立客户端的IP地址和端口与通信对端的IP地址和端口之间的对应关系;
在TLS服务器创建与TCP服务器之间的TCP通道之后,TLS服务器可以通过TCP通道与TCP服务器进行通信,所以此时TLS服务器可以建立客户端的IP地址和端口与TCP服务器的IP地址和端口之间的对应关系,从而使得TLS服务器在接收到某一客户端发送的数据包之后能够转发至对应的TCP服务器,客户端的IP地址和端口是通过第一请求信息获取的IP地址和端口,也即是客户端在请求与TLS服务器建立TLS连接时,TLS服务器通过客户端发送的数据包而获取的,本实施例对此不再赘述。
比如,在TLS服务器创建与TCP服务器之间的TCP通道之后,TLS服务器将建立客户端的10.10.40.170:2000以及该客户端想要通信的TCP服务器的192.168.1.128:6000的对应关系,从而使得当TLS服务器接收到来自10.10.40.170:2000的数据包时,TLS服务器知道该数据包是要发送至192.168.1.128:6000对应的TCP服务器的。
步骤308,TLS服务器向客户端发送通道建立成功响应;
在TLS服务器创建与TCP服务器之间的TCP通道之后,说明此时TLS服务器与TCP服务器的第二连接创建成功,TLS服务器可以开始通过TCP通道与TCP服务器进行通信,所以为了告知客户端此时TLS服务器可以将客户端发送数据包转发至对应的TCP服务器,TLS服务器可以向客户端发送通道建立成功响应,相应的,客户端可以接收TLS服务器发送的通道建立成功响应。比如,在具体实现时,TLS服务器可以向客户端发送一个二进制数据包,并使用该二进制数据包携带对应于第二请求信息的确认信息。
需要说明的是,步骤207和步骤208可以同时执行,也可以分先后顺序执行,本实施例对此并不做限定。
步骤309,TLS服务器接收客户端通过第一连接发送的第一类型数据包;
在客户端接收到TLS服务器发送的通道建立成功响应之后,客户端可以通过第一连接向TLS服务器发送第一类型数据包。
步骤310,TLS服务器将第一类型数据包重新封装为TCP数据包;
在TLS服务器接收到客户端通过第一连接发送的第一类型数据包之后,TLS服务器可以将第一类型数据包重新封装为TCP数据包。具体地,由于TLS服务器需要将接收到的客户端发送的TLS数据包转发至对应的通信对端也即对应的TCP服务器,所以TLS在接收到客户端发送的TLS数据包之后,可以将TLS数据包重新封装为TCP数据包,具体封包方法为现有技术,在此不再赘述。
步骤311,TLS服务器根据对应关系,选择对应的第二连接将TCP数据包转发给通信对端;
在TLS服务器将客户端发送的TLS数据包重新封装为TCP数据包之后,TLS服务器可以根据已经建立的客户端的IP地址和端口与通信对端的IP地址和端口的对应关系,选择对应的第二连接将TCP数据包转发给对应的通信对端。
步骤312,TLS服务器接收通信对端通过第二连接发送的TCP数据包,TCP数据包是通信对端在接收到客户端发送的数据包之后发送的数据包;
若TCP服务器需要向客户端发送数据包,则TCP服务器可以通过第二连接发送TCP数据包至TLS服务器,TCP数据包是通信对端在接收到客户端发送的数据包之后发送的数据包。
具体地,由于在TCP服务器接收到TCP数据包之前,通信对端并不知道该客户端的存在,所以TCP服务器向TLS服务器发送的TCP数据包必须是TCP服务器在接收到客户端发送的数据包之后发送的数据包。
步骤313,TLS服务器将TCP数据包重新封装为第一类型数据包;
在TLS服务器接收到TCP服务器发送的数据包之后,TLS服务器需要通过第一连接也即TLS连接将TCP数据包转发至对应的客户端,所以TLS服务器在接收到TCP数据包之后,TLS可以把TCP数据包重新封装为第一类型数据包也即TLS数据包,在此不再赘述。
步骤314,TLS服务器根据对应关系,选择对应的第一连接将第一类型数据包转发给客户端。
在TLS服务器将TCP服务器发送的TCP数据包重新封装为TLS数据包之后,TLS服务器可以根据已经建立的客户端的IP地址和端口与TCP服务器的IP地址和端口的对应关系,选择对应的第一连接,并且通过第一连接将TLS数据包转发给客户端。
需要补充说明的一点是,步骤309至步骤311与步骤312至步骤314,可以同时存在于一个通信***中,也可以只存在步骤309至步骤311或者步骤312至步骤314,本实施例对此并不做限定;
需要补充说明的另一点是,在TLS服务器与通信对端建立了TCP通道之后,TLS服务器会为每个TCP通道分配一个通常为20分钟的存活时间,当该TCP通道中在存活时间内没有数据包或刷新通过时,TLS服务器将降低该TCP通道的优先级直至关闭该TCP通道,所以为了避免客户端在长时间内没有向TCP服务器发送数据包,但是之后当再次需要使用第二连接向TCP服务器发送数据包时,TLS将TCP通道的优先级降低甚至关闭的问题,客户端可以在TLS为TCP分配的存活时间快到期时,向TLS服务器发送一个通道刷新请求,TLS服务器可以通过该通道刷新请求来维护TCP通道。在实际实现时,可以在通道刷新请求中携带一个预定时间,从而TLS服务器在接收到通道刷新请求时,为TCP通道分配一个时长为预定时间的存活时间;然而当客户端不再需要发送数据包至TCP服务器时,客户端将向TLS服务器发送一个携带预定时间为0的通道刷新请求,从而在TLS服务器接收到该通道刷新请求时,释放该TCP通道;
需要补充说明的再一点是,由于TLS连接是可以复用的连接,所以在客户端与第一通信对端通信完成后,客户端可以向TLS服务器发送一个通道刷新请求,该通道刷新请求中携带的预定时间的时长为0,在TLS服务器接收到该通道刷新请求之后TLS服务器可以关闭与TCP服务器之间的第二连接也即TCP通道,而保持第一连接连通。之后客户端仍然可以继续通过第一连接发送与第二通信对端对应的第二请求信息,从而TLS服务器建立与第二通信对端之间的TCP通道;
需要补充说明的再一点是,客户端还可以同时通过第一连接使得TLS服务器与多个通信对端建立TCP通道,也即此时与第一连接对应的第二连接有多个,本实施例对此并不做限定。
综上所述,本实施例提供的NAT穿越方法,通过接收客户端向预定地址发送的第一请求信息和第二请求信息,并且根据第一请求信息创建与客户端之间的第一连接,根据第二请求信息创建与通信对端之间的第二连接,从而根据第一连接和第二连接在客户端和通信对端之间传递数据包。由于NAT设备后的客户端与服务器之间建立的第一连接是TLS连接,并且TLS连接对于NAT设备来说是可信任的连接,所以不论客户端在什么类型的NAT设备之后,客户端都能成功穿越NAT设备而与服务器进行连接,并且客户端通过发送第二请求信息至服务器使得服务器建立与通信对端之间的第二连接,从而服务器根据第一连接和第二连接在客户端和通信对端之间传递数据包,解决了现有技术中,当出现新的NAT设备类型时,由于STUN服务器无法检测NAT设备类型或者检测到的NAT设备类型可靠性不高时,客户端不能实现NAT穿越,从而导致的现有方案适应性不高的问题,达到了可以不用考虑NAT设备类型而可以实现穿越的效果。并且在本实施例中,通过使用一个预定地址来接收客户端发送的第一请求信息和第二请求信息,并且同时接收客户端向通信对端发送的数据包,达到了服务器可以只用一个端口即可为多个客户端服务从而提高地址资源利用率的效果。
请参考图4,其示出了本发明一个实施例提供的服务器的结构方框图,该服务器包括:第一接收模块410、第一创建模块420、第二接收模块430、第二创建模块440和数据传输模块450。
第一接收模块410,用于接收客户端向预定地址发送的第一请求信息,所述第一请求信息包括用于建立第一连接的握手信息;
第一创建模块420,用于根据所述第一请求信息创建与所述客户端之间的所述第一连接;
第二接收模块430,用于接收所述客户端通过所述第一连接发送的第二请求信息,所述第二请求信息包括协议标识、通信对端的IP地址和端口;
第二创建模块440,用于根据所述第二请求信息创建与所述通信对端之间的第二连接;
数据传输模块450,用于根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包。
综上所述,本实施例提供的服务器,通过接收客户端向预定地址发送的第一请求信息和第二请求信息,并且根据第一请求信息创建与客户端之间的第一连接,根据第二请求信息创建与通信对端之间的第二连接,从而根据第一连接和第二连接在客户端和通信对端之间传递数据包。由于NAT设备后的客户端与服务器之间建立的第一连接是TLS连接,并且TLS连接对于NAT设备来说是可信任的连接,所以不论客户端在什么类型的NAT设备之后,客户端都能成功穿越NAT设备而与服务器进行连接,并且客户端通过发送第二请求信息至服务器使得服务器建立与通信对端之间的第二连接,从而服务器根据第一连接和第二连接在客户端和通信对端之间传递数据包,解决了现有技术中,当出现新的NAT设备类型时,由于STUN服务器无法检测NAT设备类型或者检测到的NAT设备类型可靠性不高时,客户端不能实现NAT穿越,从而导致的现有方案适应性不高的问题,达到了可以不用考虑NAT设备类型而可以实现穿越的效果。并且在本实施例中,通过使用一个预定地址来接收客户端发送的第一请求信息和第二请求信息,并且同时接收客户端向通信对端发送的数据包,达到了服务器可以只用一个端口即可为多个客户端服务从而提高地址资源利用率的效果。
请参考图4,其示出了本发明另一实施例提供的服务器的结构方框图。该服务器包括:第一接收模块410、第一创建模块420、第二接收模块430、第二创建模块440和数据传输模块450。
第一接收模块410,用于接收客户端向预定地址发送的第一请求信息,所述第一请求信息包括用于建立第一连接的握手信息;
第一创建模块420,用于根据所述第一请求信息创建与所述客户端之间的所述第一连接;
第二接收模块430,用于接收所述客户端通过所述第一连接发送的第二请求信息,所述第二请求信息包括协议标识、通信对端的IP地址和端口;
第二创建模块440,用于根据所述第二请求信息创建与所述通信对端之间的第二连接;
数据传输模块450,用于根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包。
请参考图5,在本实施例中,所述第二创建模块440包括第一建立单元441、第二建立单元442和第一发送单元443;
第一建立单元441,用于在本地开设与所述通信对端对应的UDP端口,以便与所述通信对端建立UDP通道;
第二建立单元442,用于建立客户端的IP地址和端口与所述通信对端的IP地址和端口之间的对应关系,所述客户端的IP地址和端口是通过所述第一请求信息获取的IP地址和端口;
第一发送单元443,用于向所述客户端发送通道建立成功响应。
请参考图6,在本实施例中,所述数据传输模块450包括第一接收单元451、第一封装单元452、第一转发单元453、第二接收单元454、第二封装单元455和第二转发单元456。
第一接收单元451,用于接收所述客户端通过第一连接发送的第一类型数据包;
第一封装单元452,用于将所述第一类型数据包重新封装为UDP数据包;
第一转发单元453,用于根据所述对应关系,选择对应的第二连接将所述UDP数据包转发给所述通信对端;
第二接收单元454,用于接收所述通信对端通过第二连接发送的UDP数据包,所述UDP数据包是所述通信对端在接收到所述客户端发送的数据包之后发送的数据包;
第二封装单元455,用于将所述UDP数据包重新封装为第一类型数据包;
第二转发单元456,用于根据所述对应关系,选择对应的第一连接将所述第一类型数据包转发给所述客户端。
需要补充说明的是,本实施例提供的服务器可以是一个实体,也可以是设置在NAT设备中,本实施例对其具体实现形式并不做限定。
综上所述,本实施例提供的服务器,通过接收客户端向预定地址发送的第一请求信息和第二请求信息,并且根据第一请求信息创建与客户端之间的第一连接,根据第二请求信息创建与通信对端之间的第二连接,从而根据第一连接和第二连接在客户端和通信对端之间传递数据包。由于NAT设备后的客户端与服务器之间建立的第一连接是TLS连接,并且TLS连接对于NAT设备来说是可信任的连接,所以不论客户端在什么类型的NAT设备之后,客户端都能成功穿越NAT设备而与服务器进行连接,并且客户端通过发送第二请求信息至服务器使得服务器建立与通信对端之间的第二连接,从而服务器根据第一连接和第二连接在客户端和通信对端之间传递数据包,解决了现有技术中,当出现新的NAT设备类型时,由于STUN服务器无法检测NAT设备类型或者检测到的NAT设备类型可靠性不高时,客户端不能实现NAT穿越,从而导致的现有方案适应性不高的问题,达到了可以不用考虑NAT设备类型而可以实现穿越的效果。并且在本实施例中,通过使用一个预定地址来接收客户端发送的第一请求信息和第二请求信息,并且同时接收客户端向通信对端发送的数据包,达到了服务器可以只用一个端口即可为多个客户端服务从而提高地址资源利用率的效果。
请参考图4,其示出了本发明再一实施例提供的服务器的结构方框图。该服务器包括:第一接收模块410、第一创建模块420、第二接收模块430、第二创建模块440和数据传输模块450。
第一接收模块410,用于接收客户端向预定地址发送的第一请求信息,所述第一请求信息包括用于建立第一连接的握手信息;
第一创建模块420,用于根据所述第一请求信息创建与所述客户端之间的所述第一连接;
第二接收模块430,用于接收所述客户端通过所述第一连接发送的第二请求信息,所述第二请求信息包括协议标识、通信对端的IP地址和端口;
第二创建模块440,用于根据所述第二请求信息创建与所述通信对端之间的第二连接;
数据传输模块450,用于根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包。
请参考图7,在本实施例中,所述第二创建模块包括:第三建立单元444、第四建立单元445、第二发送单元446。
第三建立单元444,用于根据所述第二请求信息中通信对端的IP地址和端口执行与所述通信对端的三次握手过程,从而建立与所述通信对端的TCP通道;
第四建立单元445,用于建立客户端的IP地址和端口与所述通信对端的IP地址和端口之间的对应关系,所述客户端的IP地址和端口是通过所述第一请求信息获取的IP地址和端口;
第二发送单元446,用于向所述客户端发送通道建立成功响应。
请参考图8,在本实施例中,所述数据传输模块包括:第三接收单元457、第三封装单元458、第三转发单元459、第四接收单元460、第四封装单元461和第四转发单元462。
第三接收单元457,用于接收所述客户端通过第一连接发送的第一类型数据包;
第三封装单元458,用于将所述第一类型数据包重新封装为TCP数据包;
第三转发单元459,用于根据所述对应关系,选择对应的第二连接将所述TCP数据包转发给所述通信对端;
第四接收单元460,用于接收所述通信对端通过第二连接发送的TCP数据包,所述TCP数据包是所述通信对端在接收到所述客户端发送的数据包之后发送的数据包;
第四封装单元461,用于将所述TCP数据包重新封装为第一类型数据包;
第四转发单元462,用于根据所述对应关系,选择对应的第一连接将所述第一类型数据包转发给所述客户端。
需要补充说明的是,本实施例提供的服务器可以是一个实体,也可以是设置在NAT设备中,本实施例对其具体实现形式并不做限定。
综上所述,本实施例提供的服务器,通过接收客户端向预定地址发送的第一请求信息和第二请求信息,并且根据第一请求信息创建与客户端之间的第一连接,根据第二请求信息创建与通信对端之间的第二连接,从而根据第一连接和第二连接在客户端和通信对端之间传递数据包。由于NAT设备后的客户端与服务器之间建立的第一连接是TLS连接,并且TLS连接对于NAT设备来说是可信任的连接,所以不论客户端在什么类型的NAT设备之后,客户端都能成功穿越NAT设备而与服务器进行连接,并且客户端通过发送第二请求信息至服务器使得服务器建立与通信对端之间的第二连接,从而服务器根据第一连接和第二连接在客户端和通信对端之间传递数据包,解决了现有技术中,当出现新的NAT设备类型时,由于STUN服务器无法检测NAT设备类型或者检测到的NAT设备类型可靠性不高时,客户端不能实现NAT穿越,从而导致的现有方案适应性不高的问题,达到了可以不用考虑NAT设备类型而可以实现穿越的效果。并且在本实施例中,通过使用一个预定地址来接收客户端发送的第一请求信息和第二请求信息,并且同时接收客户端向通信对端发送的数据包,达到了服务器可以只用一个端口即可为多个客户端服务从而提高地址资源利用率的效果。
需要说明的是:上述实施例提供的服务器在执行NAT穿越时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将服务器的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的服务器与NAT穿越方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种NAT穿越方法,其特征在于,所述方法包括:
接收客户端向预定地址发送的第一请求信息,所述第一请求信息包括用于建立第一连接的握手信息;
根据所述第一请求信息创建与所述客户端之间的所述第一连接;
接收所述客户端通过所述第一连接发送的第二请求信息,所述第二请求信息包括协议标识、通信对端的IP地址和端口;
根据所述第二请求信息创建与所述通信对端之间的第二连接;
根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包。
2.根据权利要求1所述的NAT穿越方法,其特征在于,所述第二请求信息中的协议标识为用户数据包协议UDP标识,所述根据所述第二请求信息创建与所述通信对端之间的第二连接,包括:
在本地开设与所述通信对端对应的UDP端口,以便与所述通信对端建立UDP通道;
建立客户端的IP地址和端口与所述通信对端的IP地址和端口之间的对应关系,所述客户端的IP地址和端口是通过所述第一请求信息获取的IP地址和端口;
向所述客户端发送通道建立成功响应。
3.根据权利要求2所述的NAT穿越方法,其特征在于,所述根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包,包括:
接收所述客户端通过第一连接发送的第一类型数据包;
将所述第一类型数据包重新封装为UDP数据包;
根据所述对应关系,选择对应的第二连接将所述UDP数据包转发给所述通信对端;
和/或,
接收所述通信对端通过第二连接发送的UDP数据包,所述UDP数据包是所述通信对端在接收到所述客户端发送的数据包之后发送的数据包;
将所述UDP数据包重新封装为第一类型数据包;
根据所述对应关系,选择对应的第一连接将所述第一类型数据包转发给所述客户端。
4.根据权利要求1所述的NAT穿越方法,其特征在于,所述第二请求信息中的协议标识为传输控制协议TCP标识,所述根据所述第二请求信息创建与所述通信对端之间的第二连接,包括:
根据所述第二请求信息中通信对端的IP地址和端口执行与所述通信对端的三次握手过程,从而建立与所述通信对端的TCP通道;
建立所述客户端的IP地址和端口与所述通信对端的IP地址和端口之间的对应关系;
向所述客户端发送通道建立成功响应。
5.根据权利要求4所述的NAT穿越方法,其特征在于,所述根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包,包括:
接收所述客户端通过第一连接发送的第一类型数据包;
将所述第一类型数据包重新封装为TCP数据包;
根据所述对应关系,选择对应的第二连接将所述TCP数据包转发给所述通信对端;
和/或,
接收所述通信对端通过第二连接发送的TCP数据包,所述TCP数据包是所述通信对端在接收到所述客户端发送的数据包之后发送的数据包;
将所述TCP数据包重新封装为第一类型数据包;
根据所述对应关系,选择对应的第一连接将所述第一类型数据包转发给所述客户端。
6.一种服务器,其特征在于,所述服务器包括:
第一接收模块,用于接收客户端向预定地址发送的第一请求信息,所述第一请求信息包括用于建立第一连接的握手信息;
第一创建模块,用于根据所述第一请求信息创建与所述客户端之间的所述第一连接;
第二接收模块,用于接收所述客户端通过所述第一连接发送的第二请求信息,所述第二请求信息包括协议标识、通信对端的IP地址和端口;
第二创建模块,用于根据所述第二请求信息创建与所述通信对端之间的第二连接;
数据传输模块,用于根据所述第一连接和所述第二连接在所述客户端与所述通信对端之间传递数据包。
7.根据权利要求6所述的服务器,其特征在于,所述第二请求信息中的协议标识为用户数据包协议UDP标识,所述第二创建模块,包括:
第一建立单元,用于在本地开设与所述通信对端对应的UDP端口,以便与所述通信对端建立UDP通道;
第二建立单元,用于建立客户端的IP地址和端口与所述通信对端的IP地址和端口之间的对应关系,所述客户端的IP地址和端口是通过所述第一请求信息获取的IP地址和端口;
第一发送单元,用于向所述客户端发送通道建立成功响应。
8.根据权利要求7所述的服务器,其特征在于,所述数据传输模块,包括:
第一接收单元,用于接收所述客户端通过第一连接发送的第一类型数据包;
第一封装单元,用于将所述第一类型数据包重新封装为UDP数据包;
第一转发单元,用于根据所述对应关系,选择对应的第二连接将所述UDP数据包转发给所述通信对端;
第二接收单元,用于接收所述通信对端通过第二连接发送的UDP数据包,所述UDP数据包是所述通信对端在接收到所述客户端发送的数据包之后发送的数据包;
第二封装单元,用于将所述UDP数据包重新封装为第一类型数据包;
第二转发单元,用于根据所述对应关系,选择对应的第一连接将所述第一类型数据包转发给所述客户端。
9.根据权利要求6所述的服务器,其特征在于,所述第二请求信息中的协议标识为传输控制协议TCP标识,所述第二创建模块,包括:
第三建立单元,用于根据所述第二请求信息中通信对端的IP地址和端口执行与所述通信对端的三次握手过程,从而建立与所述通信对端的TCP通道;
第四建立单元,用于建立所述客户端的IP地址和端口与所述通信对端的IP地址和端口之间的对应关系;
第二发送单元,用于向所述客户端发送通道建立成功响应。
10.根据权利要求9所述的服务器,其特征在于,所述数据传输模块,包括:
第三接收单元,用于接收所述客户端通过第一连接发送的第一类型数据包;
第三封装单元,用于将所述第一类型数据包重新封装为TCP数据包;
第三转发单元,用于根据所述对应关系,选择对应的第二连接将所述TCP数据包转发给所述通信对端;
第四接收单元,用于接收所述通信对端通过第二连接发送的TCP数据包,所述TCP数据包是所述通信对端在接收到所述客户端发送的数据包之后发送的数据包;
第四封装单元,用于将所述TCP数据包重新封装为第一类型数据包;
第四转发单元,用于根据所述对应关系,选择对应的第一连接将所述第一类型数据包转发给所述客户端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210594542.7A CN103916485A (zh) | 2012-12-31 | 2012-12-31 | Nat穿越方法以及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210594542.7A CN103916485A (zh) | 2012-12-31 | 2012-12-31 | Nat穿越方法以及服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103916485A true CN103916485A (zh) | 2014-07-09 |
Family
ID=51041882
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210594542.7A Pending CN103916485A (zh) | 2012-12-31 | 2012-12-31 | Nat穿越方法以及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103916485A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104363312A (zh) * | 2014-11-14 | 2015-02-18 | 浙江宇视科技有限公司 | 一种简洁高效的nat打洞方法和装置 |
CN104601541A (zh) * | 2014-12-05 | 2015-05-06 | 华为技术有限公司 | 数据传输的方法、服务器和用户设备 |
CN106605398A (zh) * | 2014-07-10 | 2017-04-26 | 诺基亚通信公司 | 唯一连接标识符 |
CN108449771A (zh) * | 2018-06-29 | 2018-08-24 | Oppo(重庆)智能科技有限公司 | 网络切换方法、装置、终端及存储介质 |
WO2019206254A1 (zh) * | 2018-04-24 | 2019-10-31 | 深圳市网心科技有限公司 | 处于不同nat节点下的设备的穿透方法、设备、服务器及介质 |
CN113037890A (zh) * | 2021-03-20 | 2021-06-25 | 张晋 | 一种能够确保穿透对称型nat设备的方法及*** |
CN115334139A (zh) * | 2022-06-24 | 2022-11-11 | 百果园技术(新加坡)有限公司 | 通信连接控制方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1968194A (zh) * | 2006-06-09 | 2007-05-23 | 华为技术有限公司 | 穿越网络地址转换的方法 |
CN101399838A (zh) * | 2008-10-29 | 2009-04-01 | 成都市华为赛门铁克科技有限公司 | 报文处理方法、装置和*** |
CN101873324A (zh) * | 2010-06-22 | 2010-10-27 | 北京神州泰岳软件股份有限公司 | 穿越防火墙的方法 |
CN102263826A (zh) * | 2011-08-11 | 2011-11-30 | 华为技术有限公司 | 一种传输层建立连接的方法和装置 |
-
2012
- 2012-12-31 CN CN201210594542.7A patent/CN103916485A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1968194A (zh) * | 2006-06-09 | 2007-05-23 | 华为技术有限公司 | 穿越网络地址转换的方法 |
CN101399838A (zh) * | 2008-10-29 | 2009-04-01 | 成都市华为赛门铁克科技有限公司 | 报文处理方法、装置和*** |
CN101873324A (zh) * | 2010-06-22 | 2010-10-27 | 北京神州泰岳软件股份有限公司 | 穿越防火墙的方法 |
CN102263826A (zh) * | 2011-08-11 | 2011-11-30 | 华为技术有限公司 | 一种传输层建立连接的方法和装置 |
Non-Patent Citations (1)
Title |
---|
R. MAHY等: "《Internet Engineering Task Force (IETF) 》", 30 April 2010 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106605398A (zh) * | 2014-07-10 | 2017-04-26 | 诺基亚通信公司 | 唯一连接标识符 |
CN106605398B (zh) * | 2014-07-10 | 2021-02-26 | 诺基亚通信公司 | 唯一连接标识符 |
CN104363312A (zh) * | 2014-11-14 | 2015-02-18 | 浙江宇视科技有限公司 | 一种简洁高效的nat打洞方法和装置 |
CN104363312B (zh) * | 2014-11-14 | 2018-07-13 | 浙江宇视科技有限公司 | 一种简洁高效的nat打洞方法和装置 |
CN104601541A (zh) * | 2014-12-05 | 2015-05-06 | 华为技术有限公司 | 数据传输的方法、服务器和用户设备 |
WO2019206254A1 (zh) * | 2018-04-24 | 2019-10-31 | 深圳市网心科技有限公司 | 处于不同nat节点下的设备的穿透方法、设备、服务器及介质 |
CN108449771A (zh) * | 2018-06-29 | 2018-08-24 | Oppo(重庆)智能科技有限公司 | 网络切换方法、装置、终端及存储介质 |
CN108449771B (zh) * | 2018-06-29 | 2020-08-11 | Oppo(重庆)智能科技有限公司 | 网络切换方法、装置、终端及存储介质 |
CN113037890A (zh) * | 2021-03-20 | 2021-06-25 | 张晋 | 一种能够确保穿透对称型nat设备的方法及*** |
CN115334139A (zh) * | 2022-06-24 | 2022-11-11 | 百果园技术(新加坡)有限公司 | 通信连接控制方法及装置 |
CN115334139B (zh) * | 2022-06-24 | 2023-12-26 | 百果园技术(新加坡)有限公司 | 通信连接控制方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103916485A (zh) | Nat穿越方法以及服务器 | |
JP6359184B2 (ja) | Rtcクライアントとrtcサーバとの間のrtc通信コネクションを確立するときにアプリケーションレイヤ・ゲートウェイ・ファイアウォールをトラバースするための通信装置および方法 | |
CN102377629B (zh) | 终端穿越私网与ims核心网中服务器通信的方法、装置及网络*** | |
CN104168173B (zh) | 终端穿越私网与ims核心网中服务器通信的方法、装置及网络*** | |
CN107113342B (zh) | 使用软件定义网络的中继优化 | |
RU2543304C2 (ru) | Способ и устройство, для ретрансляции пакетов | |
US9350711B2 (en) | Data transmission method, system, and apparatus | |
CN107426339A (zh) | 一种数据连接通道的接入方法、装置及*** | |
CN113630439B (zh) | 实时通信rtc连接方法、服务器及存储介质 | |
US10666773B2 (en) | Method and device for establishing multipath network connections | |
WO2021009554A1 (en) | Method and system for secured information exchange between intermediate and endpoint nodes in a communications network | |
EP3937457A1 (en) | Secure communications using secure sessions | |
CN102761440A (zh) | 管理IPv4终端的通道的建立方法及网络网关 | |
CN113904809B (zh) | 一种通信方法、装置、电子设备及存储介质 | |
WO2020108578A1 (zh) | 一种虚拟内网加速方法及***、配置方法、存储介质和计算机设备 | |
CN111343083B (zh) | 即时通信方法、装置、电子设备及可读存储介质 | |
WO2016066027A1 (zh) | 一种媒体传输方法和设备 | |
US9614816B2 (en) | Dynamic encryption for tunneled real-time communications | |
CN105391817A (zh) | 基于sdp自检测nat穿越***及方法 | |
CN102984167B (zh) | 一种基于Socks5协议的通用防火墙穿越方法 | |
CN100592265C (zh) | 路由分组通信量来确保通信安全的方法、***和计算机*** | |
CN106921624B (zh) | 会话边界控制器及数据传输方法 | |
WO2018149673A1 (en) | A method of distributing a sub-flow associated with a session and a network apparatus | |
CN102714617B (zh) | 连接建立方法、装置及通信*** | |
CN107277035B (zh) | 一种在tcp连接阶段传递客户端信息的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140709 |