CN104427008A - 针对tcp的nat穿越方法、***、第三方服务器x、以及客户端 - Google Patents
针对tcp的nat穿越方法、***、第三方服务器x、以及客户端 Download PDFInfo
- Publication number
- CN104427008A CN104427008A CN201310382234.2A CN201310382234A CN104427008A CN 104427008 A CN104427008 A CN 104427008A CN 201310382234 A CN201310382234 A CN 201310382234A CN 104427008 A CN104427008 A CN 104427008A
- Authority
- CN
- China
- Prior art keywords
- tcp
- client
- source
- nat device
- party server
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
- H04L61/256—NAT traversal
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2101/00—Indexing scheme associated with group H04L61/00
- H04L2101/60—Types of network addresses
- H04L2101/618—Details of network addresses
- H04L2101/663—Transport layer addresses, e.g. aspects of transmission control protocol [TCP] or user datagram protocol [UDP] ports
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/1066—Session management
- H04L65/1073—Registration or de-registration
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/163—In-band adaptation of TCP data exchange; In-band control procedures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开一种针对TCP的NAT穿越方法,该方法包括:源客户端向第三方服务器X发送连接请求消息;第三方服务器X在接收到所述连接请求消息之后,将源客户端对应的源NAT设备的端点信息发送给目标客户端,并通知目标客户端向源客户端对应的源NAT设备发起TCP连接;目标客户端向源NAT设备发起TCP连接;第三方服务器X向源客户端发送目标NAT设备的端点信息;源客户端在收到所述端点信息之后,向目标NAT设备发起TCP连接;目标NAT设备将来自源NAT设备的分组发送给目标客户端。通过该方法,能够为不同NAT网络中的客户端建立TCP连接,相比针对UDP的NAT穿越方法,提高了数据通信可靠性,并能够针对网络拥塞状况进行自适应调整。
Description
技术领域
本发明涉及通信领域,特别涉及一种针对TCP的NAT穿越方法、***、第三方服务器X、以及客户端。
背景技术
目前NAT设备的广泛存在,给处于不同内网中的主机之间的通信带来了很多障碍,其中的主要原因是NAT不允许公网主机主动访问内网主机,这就使得公网IP地址不能主动访问NAT之后的主机,而处于不同NAT之后的主机间的互相访问更是困难重重。因此,要在不同的NAT之间进行有效的P2P通信,就必须要有一种方法来穿越NAT。
目前比较成熟并且使用较多的是针对UDP的NAT穿越方法。然而,针对UDP的NAT穿越方法在使用中存在如下问题:其一、防火墙一般仅允许通过事先打开的特定协议和端口,从而使得数据可靠性不能得到直接保证,必须在应用层加入额外处理;其二;有些防火墙还关闭了UDP端口,这就造成了连接服务在这些情况下得不到保证,导致通信的无法进行,其三;在网络本已拥塞的情况下,UDP连接方法将继续向网络发送大量的数据包,因此会加重拥塞,甚至造成整个通信网络的瘫痪。
因此,对于NAT设备的通信,需要一种针对TCP的NAT穿越方法,从而解决上述问题。
发明内容
本发明提供一种针对TCP的NAT穿越方法、***、第三方服务器X、以及客户端,用于解决现有技术中NAT设备的通信时采用UDP连接方法会加重网络拥塞问题。
为实现上述目的,本发明提供了一种针对TCP的NAT穿越方法,所述方法包括:
源客户端向第三方服务器X发送连接请求消息,所述连接请求消息用于请求与目标客户端进行连接;
第三方服务器X在接收到所述连接请求消息之后,将源客户端对应的源NAT设备的端点信息发送给目标客户端,并通知目标客户端向源客户端对应的源NAT设备发起TCP连接;
目标客户端向源NAT设备发起TCP连接;
第三方服务器X向源客户端发送目标客户端对应的目标NAT设备的端点信息;
源客户端在收到目标NAT设备的端点信息之后,向目标NAT设备发起TCP连接;
目标NAT设备对源客户端发起的TCP连接进行检查,并在检查通过后允许之后将来自源NAT设备的分组发送给目标客户端;
其中,源客户端向目标NAT设备发起TCP连接时的入站分组的源端点信息与目标客户端向源NAT设备发起TCP连接时的出站分组的目标端点信息相同;源客户端向目标NAT设备发起TCP连接时的入站分组的目标端点信息与目标客户端向源NAT设备发起TCP连接时的出站分组的源端点信息相同。
优选地,源客户端和目标客户端均为在线的客户端,源客户端和目标客户端在上线时,分别与第三方服务器X建立第一条TCP连接,其中,源客户端通过源NAT设备与第三方服务器X连接,目标客户端通过目标NAT设备与第三方服务器X连接,以使得所述第三方服务器X分别记录源客户端和目标客户端的注册信息。
优选地,所述目标客户端向源NAT设备发起TCP连接的步骤包括;
目标客户端与第三方服务器X建立第二条TCP连接;
目标客户端关闭与第三方服务器X建立的所述第二条TCP连接,并通过与第三方服务器X之间的第一条TCP连接发送关闭消息;
第三方服务器X接收到目标客户端发送的关闭消息之后,记录关闭的第二条TCP连接对应的端点信息;
目标客户端采用端口重用技术重用所述目标客户端与第三方服务器之间的所述第二条TCP连接的端口号,并采用该端口号向源NAT设备发起TCP连接;
在目标客户端向源NAT设备发起TCP连接之后,目标客户端向第三方服务器X发送就绪消息。
优选地,所述源客户端向第三方服务器X发送连接请求消息之前,还包括:源客户端与第三方服务器X建立第二条TCP连接;
所述源客户端对应的源NAT设备的端点信息为源客户端与第三方服务器X之间的所述第二条TCP连接对应的端点信息;
所述源客户端在收到目标NAT设备的端点信息之后,向目标NAT设备发起TCP连接的步骤包括;源客户端关闭与第三方服务器X之间的所述第二条TCP连接;源客户端采用端口重用技术重用上述第二条TCP连接的端口号,并向目标NAT设备发起TCP连接。
为实现上述目的,本发明还提供了一种针对TCP的NAT穿越方法,所述方法包括:
接收源客户端所发送的连接请求消息,所述连接请求消息用于请求与所述目标客户端进行连接;
在接收到所述连接请求消息之后,将源客户端对应的源NAT设备的端点信息发送给目标客户端,并通知目标客户端向源NAT设备发起TCP连接;
协助目标客户端向源NAT设备发起TCP连接;
在目标客户端向源NAT设备发起TCP连接之后,向源客户端发送目标NAT设备的端点信息,以使得所述源客户端在获取目标NAT设备的端点信息之后,与目标客户端建立TCP连接,且在所述源客户端与目标客户端建立TCP连接的过程中,所述源客户端向目标NAT设备发起TCP连接时入站分组的源端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的目标端点信息相同,且源客户端向目标NAT设备发起TCP连接时的入站分组的目标端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的源端点信息相同。
优选地,在客户端上线时,允许目标客户端与其建立第一条TCP连接;并记录所述客户端的注册信息,所述注册信息包括所述第一条TCP连接对应的端点信息。
优选地,所述协助目标客户端向源NAT设备发起TCP连接的步骤包括:
允许目标客户端与其建立第二条TCP连接;
接收目标客户端发送的关闭消息,并记录所述目标客户端关闭的第二条TCP连接对应的端点信息;其中,所述关闭消息用于通知所述第二条TCP连接的关闭;
接收目标客户端发送的就绪消息。
为实现上述目的,本发明还提供了一种针对TCP的NAT穿越方法,所述方法包括:
通过TCP连接向第三方服务器X发送连接请求消息,所述连接请求消息用于请求与目标客户端进行连接;
接收第三方服务器X发送的与目标客户端对应的NAT设备的端点信息;
在接收与目标客户端对应的NAT设备的端点信息之后,根据所述端点信息向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
优选地,在所述通过TCP连接向第三方服务器X发送连接请求消息之前还包括:
与第三方服务器X建立第一条TCP连接;
与第三方服务器X建立第二条TCP连接;
其中,所述通过TCP连接向第三方服务器X发送连接请求消息是通过所述第一条TCP连接完成的;
所述向目标客户端对应的NAT设备发起TCP连接包括:
关闭与第三方服务器X之间的第二条TCP连接;
采用端口重用技术重用所述第二条TCP连接的端口号,并向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
为实现上述目的,本发明还提供了一种针对TCP的NAT穿越方法,所述方法包括:
接收第三方服务器X发送的源客户端对应的NAT设备的端点信息,并接收向源客户端对应的NAT设备发起TCP连接的通知;
在接收向源客户端对应的NAT设备发起TCP连接的通知之后,向源客户端对应的NAT设备发起TCP连接;
接收来自所述源客户端的TCP连接,所述TCP连接分组由NAT设备转发。
优选地,在所述接收第三方服务器X发送的源客户端对应的NAT设备的端点信息之前还包括:
与第三方服务器X建立第一条TCP连接;
所述向源客户端对应的NAT设备发起TCP连接包括:
与第三方服务器X建立第二条TCP连接;
在建立所述第二条TCP连接之后,关闭与第三方服务器X建立第二条TCP连接,并通过所述第一条TCP连接发送关闭消息,以使得第三方服务器X根据所述关闭消息记录所述第二条TCP连接对应的端点信息;
在关闭所述第二条TCP连接之后,采用端口重用技术重用所述第二条TCP连接的端口号,并向源客户端对应的NAT设备发起TCP连接;
在向源客户端对应的NAT设备发起TCP连接之后,向第三方服务器X发送就绪消息,以使得第三方服务器X在收到所述就绪消息之后将记录的所述第二条TCP连接对应的端点信息发送给所述源客户端。
为实现上述目的,本发明还提供了一种第三方服务器X,所述第三方服务器X包括:
第三方服务器X包括:
登记模块,所述登记模块在私有网络中的客户端与所述第三方服务器X建立第一条TCP连接时用于对客户端进行备案,以记录客户端对应的NAT设备的用户名、以及客户端与第三方服务器X连接时的端点信息;
连接处理模块,所述连接处理模块用于为位于不同私有网络的两个客户端建立TCP连接;其中,所述连接处理模块具体包括:
连接请求响应子模块,所述连接请求响应子模块用于接收源客户端发送的连接请求消息,所述连接请求消息用于请求与目标客户端建立TCP连接;
通知子模块,所述通知子模块用于在连接请求相应子模块收到所述连接请求消息之后,将源客户端对应的NAT设备的端点信息发送给所述目标客户端,并通知所述目标客户端与源客户端对应的NAT设备进行连接;
记录子模块,所述记录子模块用于在接收到所述目标客户端发送的关闭消息之后,记录被关闭的TCP连接所对应的端点信息;
响应子模块,所述响应子模块用于在接收到所述目标客户端发送的就绪消息之后,将记录子模块所记录的端点信息发送给所述源客户端,以使得所述源客户端根据所述端点信息向目标客户端对应的NAT设备发起TCP连接,且在所述源客户端与目标客户端建立TCP连接的过程中,所述源客户端向目标NAT设备发起TCP连接时入站分组的源端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的目标端点信息相同,且源客户端向目标NAT设备发起TCP连接时的入站分组的目标端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的源端点信息相同。
优选地,还包括收发模块,所述收发模块用于接收客户端发送的TCP连接请求、客户端发送的用于请求与目标客户端建立TCP连接的连接请求消息、关闭消息、以及就绪消息;所述收发模块还用于将源客户端对应的NAT设备的端点信息发送给所述目标客户端,以及将记录子模块所记录的端点信息发送给所述源客户端。
为实现上述目的,本发明还提供了一种客户端,所述客户端包括:
连接请求模块,用于通过TCP连接向第三方服务器X发送连接请求消息,所述连接请求消息用于请求与目标客户端进行连接;
目标端点信息获取模块,用于接收第三方服务器X发送的与目标客户端对应的NAT设备的端点信息;
TCP连接模块,用于在接收与目标客户端对应的NAT设备的端点信息之后,根据所述端点信息向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
优选地,所述客户端还包括登录服务器模块,所述登录服务器模块用于在客户端上线时,与第三方服务器X建立第一次TCP连接,以使得第三方服务器X记录所述客户端的注册信息;注册信息包括述客户端的端点信息,即客户端对应的NAT设备与第三方服务器X建立TCP连接时使用的公网IP和TCP端口号;
所述连接请求模块包括服务器连接子模块,所述服务器连接子模块用于在向第三方服务器X发送连接请求消息之前,与第三方服务器X建立第二条TCP连接;
所述TCP连接模块包括:
关闭子模块,用于关闭与第三方服务器X之间的第二条TCP连接;
目标客户端重连子模块,用于采用端口重用技术重用所述第二条TCP连接的端口号,并向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
为实现上述目的,本发明还提供了一种客户端,所述客户端包括:
源端点信息获取模块,用于接收第三方服务器X发送的源客户端对应的NAT设备的端点信息,并接收向源客户端对应的NAT设备发起TCP连接的通知;
源客户端连接模块,用于在接收向源客户端对应的NAT设备发起TCP连接的通知之后,向源客户端对应的NAT设备发起TCP连接;
监听模块,用于接收来自所述源客户端的TCP连接,所述TCP连接分组由NAT设备转发。
优选地,所述客户端还包括登录服务器模块,所述登录服务器模块用于在客户端上线时,与第三方服务器X建立第一次TCP连接,以使得第三方服务器X记录所述客户端的注册信息;注册信息包括述客户端的端点信息,即客户端对应的NAT设备与第三方服务器X建立TCP连接时使用的公网IP和TCP端口号;
所述源客户端连接模块包括:
连接子模块,用于与第三方服务器X建立第二条TCP连接;
关闭及通知子模块,用于在建立所述第二条TCP连接之后,关闭所述第二条TCP连接,并通过所述第一条TCP连接发送关闭消息,以使得第三方服务器X根据所述关闭消息记录所述第二条TCP连接对应的端点信息;
源端重连子模块,用于在关闭所述关闭第二条TCP连接之后,采用端口重用技术重用所述第二条TCP连接的端口号,并向源客户端对应的NAT设备发起TCP连接;
就绪通知子模块,用于在向源客户端对应的NAT设备发起TCP连接之后,向第三方服务器X发送就绪消息,以使得第三方服务器X在收到所述就绪消息之后将记录的所述第二条TCP连接对应的端点信息发送给所述源客户端。
为实现上述目的,本发明还提供了一种针对TCP的NAT穿越***,所述NAT穿越***包括上述任一第三方服务器X,以及上述任一客户端。
本发明具有以下有益效果:
本发明在采取了上述技术方案后,利用套接字的端口重用功能,使得每一个客户端在连接服务器X和连接其他NAT时,在本网络中的NAT设备处转换为相同的外网地址和端口号,这样其他私有网络的客户端通过他们各自NAT设备发送的分组就能找到正确的端口号,并且在第三方服务器X的协调下,由于本网的客户端之前已向外部NAT设备发送过分组,所以其他NAT发送的分组就可以顺利的穿越本网的NAT设备,到达内部客户端。这样,可靠的TCP连接就建立起来了,相比针对UDP的NAT穿越方法,针对TCP的NAT穿越方法可以获得数据通信可靠性的提高,并针对网络拥塞状况进行自适应调整,避免了“越堵越发”的恶性循环。
附图说明
图1为网络的拓扑结构示意图;
图2为本发明实施例提供的针对TCP的NAT穿越方法的流程图;
图3为本发明实施例提供的针对TCP的NAT穿越方法的流程图;
图4A和图4B为本发明实施例提供的针对TCP的NAT穿越方法的流程图。
具体实施方式
为使本领域的技术人员更好地理解本发明的技术方案,下面结合附图对本发明提供的针对TCP的NAT穿越方法、***、第三方服务器X、以及客户端进行详细描述。本发明适用于圆锥形NAT网络架构。
首先,对本发明实施例的网络的拓扑进行简要说明。请参阅图1,为网络的拓扑结构示意图。如图1所示,私有网络NAT-A、NAT-B等连接至公网(internet),私有网络NAT-A中包括NAT-A设备和多个客户端A,这些客户端A均没有公网地址,而NAT-A设备是具备公网地址的,各个客户端A均连接至NAT-A设备,并通过NAT-A设备代理访问公网,同样的情况适用于私有网络NAT-B,其中,私有网络NAT-B中包括NAT-B设备和多个客户端B,各个客户端B均连接至NAT-B设备。
下面基于上述网络拓扑结构,对本发明实施例提供的针对TCP的NAT穿越方法、***、第三方服务器X、以及客户端进行说明。
实施例一
本发明实施例提供了一种针对TCP的NAT穿越方法。本实施例中,发起TCP连接的客户端为源客户端,源客户端对应的NAT设备为源NAT设备,接收TCP连接的客户端为目标客户端,目标客户端对应的NAT设备为目标NAT设备,客户端可以作为源客户端向其他客户端发起TCP连接,也可以作为目标客户端接收其他客户端发起的TCP连接。例如,源客户端可以是私有网络NAT-A中的某一个客户端A,目标客户端可以是私有网络NAT-B中的某一个客户端B。
本实施例中的私有网络NAT指的是圆锥形NAT网络架构。
请参阅图2,其为本发明实施例提供的针对TCP的NAT穿越方法的流程图。如图2所示,该方法包括:
步骤S101,源客户端与第三方服务器X建立第一条TCP连接。
其中,第三方服务器X是指具有公网IP地址,可对外提供TCP连接服务的服务器,任何经过验证的客户端均可与第三方服务器X建立TCP连接。
源客户端与第三方服务器X建立TCP连接(源客户端通过源NAT设备与第三方服务器X建立TCP连接)之后,第三方服务器X会对源客户端进行备案,以记录源客户端的注册信息,该注册信息包括源客户端对应的源NAT设备的用户名以及源客户端与第三方服务器X连接时的端点信息。其中,所述端点信息包括IP地址和端口号,在这里IP地址为源NAT设备的公网地址,端口号为源客户端在源NAT设备上映射的端口号。
本发明实施例中,客户端(包括源客户端和目标客户端)与第三方服务器X之间能够建立多条TCP连接,每次客户端与第三方服务器X之间建立TCP连接时,第三方服务器X均会记录该次TCP连接对应的端点信息,该TCP连接对应的端点信息即客户端对应的NAT设备的端点信息,对于上述多条TCP连接,客户端在NAT设备上映射的端口号不同,因此,多条TCP连接分别对应不同的端点信息(相同的公网地址和不同的端口号)。
步骤S102,目标客户端与第三方服务器X建立第一条TCP连接。
其中,目标客户端与第三方服务器X建立TCP连接(目标客户端通过目标NAT设备与第三方服务器X建立TCP连接)之后,第三方服务器X会对目标客户端进行备案,以记录目标客户端的注册信息,该注册信息包括目标客户端对应的目标NAT设备的用户名以及目标客户端与第三方服务器X连接时的端点信息。同样,这里的端点信息包括IP地址和端口号,IP地址为目标NAT设备的公网地址,端口号为目标客户端在目标NAT设备上映射的端口号。
其中,第三方服务器X对客户端进行备案时,可以将该客户端的在线情况发送给网络中其他的客户端。
其中,步骤S101和步骤S102不分先后顺序。
步骤S103,源客户端与第三方服务器X建立第二条TCP连接。
在源客户端与第三方服务器X建立第二条TCP连接之后,第三方服务器X记录该第二条TCP连接对应的端点信息,端点信息包括IP地址和端口号,IP地址为源NAT设备的公网地址、端口号为源客户端在源NAT设备上映射的端口号。
步骤S104,源客户端通过第一条TCP连接向第三方服务器X发送连接请求消息,所述连接请求消息用于请求与目标客户端进行连接。
在源客户端发送连接请求消息之后,源客户端需要在第三方服务器X回复之后,才能开始连接目标NAT设备。这是因为:其一,源客户端需要第三方服务器X提供目标NAT设备的端点信息,从而能与目标NAT设备之后的目标客户端进行连接;其二,源NAT设备需要在目标客户端向源NAT设备发送过分组之后,才能够向目标客户端发送分组,因为在圆锥形NAT网络架构中,在私有网络中主机的网络地址或端点受限的情况下,当且仅当私网主机之前已向公网主机发送过分组,此公网主机才能够向私网主机发送分组。源NAT设备和目标NAT设备为公网主机,源客户端和目标客户端为私网主机。
步骤S105,第三方服务器X在接收到所述连接请求消息之后,将源NAT设备的端点信息发送给目标客户端,并通知目标客户端向源NAT设备发起TCP连接。
其中,本步骤中所说的源NAT设备的端点信息是指源客户端与第三方服务器X建立第二条TCP连接时,第三方服务器X记录该第二条TCP连接对应的端点信息。对于第三方服务器X而言,源NAT设备之后的源客户端是不可见的,因此,源客户端与第三方服务器X连接时,第三方服务器X记录的是源NAT设备的端点信息。
步骤S106,目标客户端向源NAT设备发起TCP连接。
具体的,步骤S106包括:
步骤S1061,目标客户端与第三方服务器X建立第二条TCP连接。
步骤S1062,目标客户端关闭与第三方服务器X建立的第二条TCP连接,并通过与第三方服务器X之间的第一条TCP连接发送关闭消息。
其中,第三方服务器X接收到目标客户端发送的所述关闭消息之后,记录关闭的第二条TCP连接对应的端点信息。上述关闭消息用于通知第三方服务器X与目标客户端之间的第二条TCP连接的关闭。
步骤S1063,目标客户端采用端口重用技术重用目标客户端与第三方服务器X之间建立的第二条TCP连接的端口号,并根据步骤S105中第三方服务器X发送的源NAT设备的端点信息,向源NAT设备发起TCP连接。
步骤S1064,在目标客户端向源NAT设备发起TCP连接之后,目标客户端向第三方服务器X发送就绪消息。
步骤S107,第三方服务器X在接收到目标客户端发送的就绪消息之后,向源客户端发送目标NAT设备的端点信息,该端点信息为目标客户端与第三方服务器X建立第二条TCP连接时对应的端点信息,并通知源客户端向目标NAT设备发起TCP连接。
步骤S108,源客户端在收到目标NAT设备的端点信息之后,根据步骤S107中第三方服务器X发送的目标NAT设备的端点信息,向目标NAT设备发起TCP连接。
具体的,步骤S108具体包括:
步骤S1081,源客户端关闭与第三方服务器X之间的第二条TCP连接。
步骤S1082,源客户端采用端口重用技术重用上述第二条TCP连接的端口号,并向目标NAT设备发起TCP连接,以使得源客户端向目标NAT设备发起TCP连接时入站分组的源端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的目标端点信息相同,且源客户端向目标NAT设备发起TCP连接时的入站分组的目标端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的源端点信息相同。
因为采用端口重用,所以源客户端和目标客户端在与第三方服务器X连接时以及试图与其连接时,映射的是同样的端口号。由于目标客户端在时间次序上先通过目标NAT设备向源NAT设备发送SYN型分组,所以后来当源客户端通过源NAT设备向目标NAT设备发送SYN型分组时,目标NAT设备发现源客户端向目标NAT设备发起TCP连接时的入站分组的源端点信息与目标客户端向源NAT设备发起TCP连接时的出站分组的目标端点信息相同;且源客户端向目标NAT设备发起TCP连接时的入站分组的目标端点信息与目标客户端向源NAT设备发起TCP连接时的出站分组的源端点信息相同;于是,目标NAT设备认为该入站分组是对刚才出站分组的回应数据包,由此该SYN型分组顺利穿越目标NAT,到达目标客户端的监听端口。其中,SYN型分组为现有技术中TCP连接发起过程中应用的分组。
步骤S109,目标NAT设备对源客户端发起的TCP连接进行检查,并在检查通过后允许之后将来自源NAT设备的分组发送给目标客户端。
其中,目标NAT设备发现入站分组的源端点信息和目标端点信息与刚刚出站分组的目标端点信息和源端点信息刚好对应,于是认为该入站分组是对刚才出站分组的回应数据包,因此该SYN型分组顺利穿越目标NAT,到达目标客户端的监听端口。
本发明实施例中,利用套接字的端口重用功能,使得第三方服务器X获取到的对端(源客户端和目标客户端互为对端)的端口号与客户端通过NAT连接时使用的外部端口号一致,使得不同私有网络中的客户端可以成功的建立起TCP连接。不仅解决了UDP数据传输的无法保证可靠性问题,而且还可以自适应的根据整个网络拥塞状况,调节数据包的发送量,维持了网络的整体可用性,可以广泛应用于不同内网之间的可靠通信。
下面结合一个具体的示例进行说明。其中,
该示例中以私有网络NAT-A中的客户端A向私有网络NAT-A中的客户端B发起TCP连接为例进行说明。其中,客户端A对应的NAT-A设备的公网地址为(100.108.255.0),客户端B对应的NAT-B设备的公网地址为(200.126.255.0)。
具体地,客户端A向客户端B发起TCP连接的过程如下:
步骤S201,客户端A和客户端B分别与第三方服务器X建立第一条TCP连接。
在客户端A和与第三方服务器X建立第一条TCP连接时,第三方服务器X记录该第一条TCP连接对应的端点信息为[(100.108.255.0),11],其中,(100.108.255.0)为NAT-A设备的公网地址,11为客户端A与第三方服务器X建立第一条TCP连接时所占用的NAT-A设备的端口的端口号。
同样,客户端B和与第三方服务器X建立第一条TCP连接时,第三方服务器X记录该第一条TCP连接对应的端点信息为[(200.126.255.0),21]。
步骤S202,客户端A与第三方服务器X建立第二条TCP连接。
第三方服务器X记录客户端A与之建立的第二条TCP连接对应的端点信息[(100.108.255.0),12],其中12为客户端A与第三方服务器X建立第二条TCP连接时所占用的NAT-A设备的端口的端口号。
步骤S203,客户端A通过第一条TCP连接向第三方服务器X发送连接请求消息。
步骤S204,第三方服务器X在接收客户端A发送的连接请求消息之后,将客户端A与之建立的第二条TCP连接对应的端点信息[(100.108.255.0),12]发送给客户端B。
步骤S205,客户端B在收到端点信息[(100.108.255.0),12],根据该端点信息[(100.108.255.0),12]向对应的NAT-A设备发起TCP连接。
具体地,步骤S2051,客户端B与第三方服务器X建立第二条TCP连接。
第三方服务器X记录客户端B与之建立的第二条TCP连接对应的端点信息[(200.126.255.0),22]。
步骤S2052,客户端B关闭与第三方服务器X建立第二条TCP连接,并利用端口重用技术向NAT-A设备发起TCP连接。
由于采用了端口重用技术,客户端B重用了NAT-B设备上的端口22,因此,客户端B向NAT-A设备发起TCP连接时,其出站分组的目标端点信息为[(100.108.255.0),12],其出站分组的源端点信息为[(200.126.255.0),22]。
步骤S2053,客户端B在向NAT-A设备发起TCP连接之后,向第三方服务器X发送就绪消息。
步骤S206,第三方服务器X接收到该就绪消息之后,将之前记录的客户端B与之建立的第二条TCP连接对应的端点信息[(200.126.255.0),22]发送给客户端A。
步骤S207,客户端A接收到第三方服务器X发送的端点信息之后,根据该端点信息向对应的NAT-B设备发起TCP连接。
具体地,客户端A关闭与第三方服务器X建立第二条TCP连接,并利用端口重用技术向NAT-B设备发起TCP连接。
由于采用了端口重用技术,客户端A重用了NAT-A设备上的端口12,因此,客户端A向NAT-B设备发起TCP连接时,其TCP连接请求分组(相对于NAT-A设备为出站分组,相对于NAT-B设备为站分组)的目标端点信息为[(200.126.255.0),22],源端点信息为[(100.108.255.0),12]。
步骤S208,NAT-B设备收到入站分组(上述TCP连接请求分组)之后,发现入站分组的目标端点信息和客户端B向NAT-A设备发起TCP连接时的出站分组的源端点信息相同,该入站分组的源端点信息和客户端B向NAT-A设备发起TCP连接时的出站分组的目标端点信息相同,因此目标NAT设备认为该入站分组是对刚才出站分组的回应数据包,因此,将该入站分组转发给客户端B。因此该TCP连接请求分组(例如SYN型分组)顺利穿越NAT-B设置,到达客户端B,因此,客户端A和客户端B之间成功建立TCP连接。
实施例二
本发明实施例还提供了一种针对TCP的NAT穿越方法。请参阅图3,其为本发明实施例提供的针对TCP的NAT穿越方法的流程图。如图3所示,该方法包括:
步骤S201,第三方服务器X允许源客户端与其建立的第一条TCP连接。
步骤S202,第三方服务器X允许目标客户端与其建立的第一条TCP连接。
其中,步骤S201和步骤S202不分先后顺序。
步骤S203,第三方服务器X允许源客户端与其建立的第二条TCP连接。
步骤S204,第三方服务器X接收源客户端通过第一条TCP连接所发送的连接请求消息,所述连接请求消息用于请求与所述目标客户端进行连接。
步骤S205,在接收到所述连接请求消息之后,第三方服务器X将源NAT设备的端点信息发送给目标客户端,并通知目标客户端向源NAT设备发起TCP连接。
步骤S206,第三方服务器X协助目标客户端向源NAT设备发起TCP连接。
具体的,步骤S206包括:
步骤S2061,第三方服务器X允许目标客户端与其建立的第二条TCP连接。
步骤S2062,第三方服务器X接收目标客户端发送的关闭消息,并记录关闭的第二条TCP连接对应的端点信息。其中,所述关闭消息用于通知第三方服务器X与目标客户端之间的第二条TCP连接的关闭。
步骤S2063,第三方服务器X接收目标客户端发送的就绪消息。
步骤S207,第三方服务器X在接收到所述就绪消息之后,向源客户端发送目标NAT设备的端点信息,以使得所述源客户端在获取目标NAT设备的端点信息之后,与目标客户端建立TCP连接,且在所述源客户端与目标客户端建立TCP连接的过程中,所述源客户端向目标NAT设备发起TCP连接时入站分组的源端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的目标端点信息相同,且源客户端向目标NAT设备发起TCP连接时的入站分组的目标端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的源端点信息相同。
实施例三
本发明实施例还提供了一种针对TCP的NAT穿越方法。请参阅图4A和图4B,其为本发明实施例提供的针对TCP的NAT穿越方法的流程图。
本发明实施例提供的针对TCP的NAT穿越方法包括:
客户端通过第三方服务器X与其他私有网络中的目标客户端建立TCP连接,以及,
客户端通过第三方服务器X接收其他私有网络中的源客户端与所述客户端建立的TCP连接。
如图4A所示,所述客户端通过第三方服务器X与其他私有网络中的目标客户端建立TCP连接具体包括:
步骤S301,客户端与第三方服务器X建立第一条TCP连接。
步骤S302,客户端与第三方服务器X建立第二条TCP连接。
步骤S303,客户端通过第一条TCP连接向第三方服务器X发送连接请求消息,所述连接请求消息用于请求与目标客户端进行连接。
步骤S304,客户端接收第三方服务器X发送的与目标客户端对应的NAT设备的端点信息。
步骤S305,在接收与目标客户端对应的NAT设备的端点信息之后,客户端向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
具体地,步骤S305包括:
步骤S3051,客户端关闭与第三方服务器X之间的第二条TCP连接。
步骤S3052,客户端采用端口重用技术重用上述第二条TCP连接的端口号,并向目标NAT设备发起TCP连接,以通过目标NAT设备与目标客户端建立TCP连接。
如图4B所示,所述客户端通过第三方服务器X接收其他私有网络中的源客户端与所述客户端建立的TCP连接具体包括:
步骤S401,客户端与第三方服务器X建立第一条TCP连接。
步骤S402,客户端接收第三方服务器X发送的源客户端对应的NAT设备的端点信息,并接收向源客户端对应的NAT设备发起TCP连接的通知。
步骤S403,客户端向源客户端对应的NAT设备发起TCP连接。
具体的,步骤S403包括:
步骤S4031,客户端与第三方服务器X建立第二条TCP连接。
步骤S4032,客户端关闭与第三方服务器X建立第二条TCP连接,并通过与第三方服务器X之间的第一条TCP连接发送关闭消息,以使得第三方服务器X根据所述关闭消息记录所述第二条TCP连接对应的端点信息。
步骤S4033,客户端采用端口重用技术重用上述第二条TCP连接的端口号,并向源客户端对应的NAT设备发起TCP连接。
步骤S4034,在客户端向源客户端对应的NAT设备发起TCP连接之后,客户端向第三方服务器X发送就绪消息,以使得第三方服务器X在收到所述就绪消息之后将客户端对应的NAT设备的端点信息发送给所述源客户端。
步骤S404,客户端接收来自源客户端的TCP连接,所述TCP连接分组由目标NAT设备转发。
实施例四
本发明实施例还提供了一种第三方服务器X。该第三方服务器X包括:
登记模块,所述登记模块用于在私有网络中的客户端与所述第三方服务器X建立的第一条TCP连接时,所述登记模块对客户端进行备案,以记录客户端对应的NAT设备的用户名、以及客户端与第三方服务器X连接时的端点信息。
其中,当所述客户端与所述第三方服务器X建立有多条TCP连接时,登记模块分别对各个TCP连接对应的端点信息进行记录。
连接处理模块,所述连接处理模块用于为位于不同私有网络的两个客户端建立TCP连接。其中,所述连接处理模块具体包括:
连接请求响应子模块,所述连接请求响应子模块用于接收源客户端发送的连接请求消息,所述连接请求消息用于请求与目标客户端建立TCP连接;
通知子模块,所述通知子模块用于在收到所述连接请求消息之后,将源客户端对应的NAT设备的端点信息发送给所述目标客户端,通知所述目标客户端与源客户端对应的NAT设备进行连接;
记录子模块,所述记录子模块用于在接收到所述目标客户端发送的关闭消息之后,记录被关闭的TCP连接所对应的端点信息;
响应子模块,所述响应子模块用于在接收到所述目标客户端发送的就绪消息之后,将记录子模块所记录的端点信息发送给所述源客户端,以使得所述源客户端根据所述端点信息向目标客户端对应的NAT设备发起TCP连接,且在所述源客户端与目标客户端建立TCP连接的过程中,所述源客户端向目标NAT设备发起TCP连接时入站分组的源端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的目标端点信息相同,且源客户端向目标NAT设备发起TCP连接时的入站分组的目标端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的源端点信息相同。
收发模块,所述收发模块用于接收客户端发送的TCP连接请求、客户端发送的用于请求与目标客户端建立TCP连接的连接请求消息、关闭消息、以及就绪消息;所述收发模块还用于将源客户端对应的NAT设备的端点信息发送给所述目标客户端,将记录子模块所记录的端点信息发送给所述源客户端。
实施例五
本发明实施例还提供了一种客户端。该客户端包括:
连接请求模块,用于通过TCP连接向第三方服务器X发送连接请求消息,所述连接请求消息用于请求与目标客户端进行连接;
目标端点信息获取模块,用于接收第三方服务器X发送的与目标客户端对应的NAT设备的端点信息;
TCP连接模块,用于在接收与目标客户端对应的NAT设备的端点信息之后,向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
优选地,所述客户端还包括登录服务器模块,所述登录服务器模块用于在客户端上线时,与第三方服务器X建立第一次TCP连接,以使得第三方服务器X记录所述客户端的注册信息;注册信息包括述客户端的端点信息,即客户端对应的NAT设备与第三方服务器X建立TCP连接时使用的公网IP和TCP端口号。
优选地,所述连接请求模块包括服务器连接子模块,所述服务器连接子模块用于在向第三方服务器X发送连接请求消息之前,与第三方服务器X建立第二条TCP连接。
优选地,所述TCP连接模块包括:
关闭子模块,用于关闭与第三方服务器X之间的第二条TCP连接;
目标客户端重连子模块,用于采用端口重用技术重用所述第二条TCP连接的端口号,并向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
优选地,所述客户端还包括退出模块,所述退出模块用于在客户端下线时,通知第三方服务器X注销所述客户端的注册信息。
实施例六
本发明实施例还提供了一种客户端。该客户端包括:
源端点信息获取模块,用于接收第三方服务器X发送的源客户端对应的NAT设备的端点信息,并接收向源客户端对应的NAT设备发起TCP连接的通知;
源客户端连接模块,用于在接收向源客户端对应的NAT设备发起TCP连接的通知之后,向源客户端对应的NAT设备发起TCP连接;
监听模块,用于接收来自所述源客户端的TCP连接,所述TCP连接分组由NAT设备转发。
优选地,所述客户端还包括登录服务器模块,所述登录服务器模块用于在客户端上线时,与第三方服务器X建立第一次TCP连接,以使得第三方服务器X记录所述客户端的注册信息;注册信息包括述客户端的端点信息,即客户端对应的NAT设备与第三方服务器X建立TCP连接时使用的公网IP和TCP端口号。
优选地,所述源客户端连接模块包括:
连接子模块,用于与第三方服务器X建立第二条TCP连接;
关闭及通知子模块,用于在建立所述第二条TCP连接之后,关闭所述第二条TCP连接,并通过所述第一条TCP连接发送关闭消息,以使得第三方服务器X根据所述关闭消息记录所述第二条TCP连接对应的端点信息;
源端重连子模块,用于在关闭所述关闭第二条TCP连接之后,采用端口重用技术重用所述第二条TCP连接的端口号,并向源客户端对应的NAT设备发起TCP连接;
就绪通知子模块,用于在向源客户端对应的NAT设备发起TCP连接之后,向第三方服务器X发送就绪消息,以使得第三方服务器X在收到所述就绪消息之后将记录的所述第二条TCP连接对应的端点信息发送给所述源客户端。
优选地,所述客户端还包括退出模块,所述退出模块用于在客户端下线时,通知第三方服务器X注销所述客户端的注册信息。
实施例七
本发明实施例还提供了一种客户端。该客户端具备实施例五中提供的客户端和实施例六中提供的客户端的全部功能。
实施例八
本发明实施例还提供了一种针对TCP的NAT穿越***,所述NAT穿越***上述任一种第三方服务器X,以及上述任一种客户端。
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。
Claims (18)
1.一种针对TCP的NAT穿越方法,其特征在于,所述方法包括:
源客户端向第三方服务器X发送连接请求消息,所述连接请求消息用于请求与目标客户端进行连接;
第三方服务器X在接收到所述连接请求消息之后,将源客户端对应的源NAT设备的端点信息发送给目标客户端,并通知目标客户端向源客户端对应的源NAT设备发起TCP连接;
目标客户端向源NAT设备发起TCP连接;
第三方服务器X向源客户端发送目标客户端对应的目标NAT设备的端点信息;
源客户端在收到目标NAT设备的端点信息之后,向目标NAT设备发起TCP连接;
目标NAT设备对源客户端发起的TCP连接进行检查,并在检查通过后允许之后将来自源NAT设备的分组发送给目标客户端;
其中,源客户端向目标NAT设备发起TCP连接时的入站分组的源端点信息与目标客户端向源NAT设备发起TCP连接时的出站分组的目标端点信息相同;源客户端向目标NAT设备发起TCP连接时的入站分组的目标端点信息与目标客户端向源NAT设备发起TCP连接时的出站分组的源端点信息相同。
2.根据权利要求1所述的方法,其特征在于,源客户端和目标客户端均为在线的客户端,源客户端和目标客户端在上线时,分别与第三方服务器X建立第一条TCP连接,其中,源客户端通过源NAT设备与第三方服务器X连接,目标客户端通过目标NAT设备与第三方服务器X连接,以使得所述第三方服务器X分别记录源客户端和目标客户端的注册信息。
3.根据权利要求2所述的方法,其特征在于,所述目标客户端向源NAT设备发起TCP连接的步骤包括;
目标客户端与第三方服务器X建立第二条TCP连接;
目标客户端关闭与第三方服务器X建立的所述第二条TCP连接,并通过与第三方服务器X之间的第一条TCP连接发送关闭消息;
第三方服务器X接收到目标客户端发送的关闭消息之后,记录关闭的第二条TCP连接对应的端点信息;
目标客户端采用端口重用技术重用所述目标客户端与第三方服务器之间的所述第二条TCP连接的端口号,并采用该端口号向源NAT设备发起TCP连接;
在目标客户端向源NAT设备发起TCP连接之后,目标客户端向第三方服务器X发送就绪消息。
4.根据权利要求3所述的方法,其特征在于,
所述源客户端向第三方服务器X发送连接请求消息之前,还包括:源客户端与第三方服务器X建立第二条TCP连接;
所述源客户端对应的源NAT设备的端点信息为源客户端与第三方服务器X之间的所述第二条TCP连接对应的端点信息;
所述源客户端在收到目标NAT设备的端点信息之后,向目标NAT设备发起TCP连接的步骤包括;源客户端关闭与第三方服务器X之间的所述第二条TCP连接;源客户端采用端口重用技术重用上述第二条TCP连接的端口号,并向目标NAT设备发起TCP连接。
5.一种针对TCP的NAT穿越方法,其特征在于,所述方法包括:
接收源客户端所发送的连接请求消息,所述连接请求消息用于请求与所述目标客户端进行连接;
在接收到所述连接请求消息之后,将源客户端对应的源NAT设备的端点信息发送给目标客户端,并通知目标客户端向源NAT设备发起TCP连接;
协助目标客户端向源NAT设备发起TCP连接;
在目标客户端向源NAT设备发起TCP连接之后,向源客户端发送目标NAT设备的端点信息,以使得所述源客户端在获取目标NAT设备的端点信息之后,与目标客户端建立TCP连接,且在所述源客户端与目标客户端建立TCP连接的过程中,所述源客户端向目标NAT设备发起TCP连接时入站分组的源端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的目标端点信息相同,且源客户端向目标NAT设备发起TCP连接时的入站分组的目标端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的源端点信息相同。
6.根据权利要求5所述的方法,其特征在于,在客户端上线时,允许目标客户端与其建立第一条TCP连接;并记录所述客户端的注册信息,所述注册信息包括所述第一条TCP连接对应的端点信息。
7.根据权利要求5所述的方法,其特征在于,所述协助目标客户端向源NAT设备发起TCP连接的步骤包括:
允许目标客户端与其建立第二条TCP连接;
接收目标客户端发送的关闭消息,并记录所述目标客户端关闭的第二条TCP连接对应的端点信息;其中,所述关闭消息用于通知所述第二条TCP连接的关闭;
接收目标客户端发送的就绪消息。
8.一种针对TCP的NAT穿越方法,所述方法包括:
通过TCP连接向第三方服务器X发送连接请求消息,所述连接请求消息用于请求与目标客户端进行连接;
接收第三方服务器X发送的与目标客户端对应的NAT设备的端点信息;
在接收与目标客户端对应的NAT设备的端点信息之后,根据所述端点信息向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
9.根据权利要求8所述的方法,其特征在于,
在所述通过TCP连接向第三方服务器X发送连接请求消息之前还包括:
与第三方服务器X建立第一条TCP连接;
与第三方服务器X建立第二条TCP连接;
其中,所述通过TCP连接向第三方服务器X发送连接请求消息是通过所述第一条TCP连接完成的;
所述向目标客户端对应的NAT设备发起TCP连接包括:
关闭与第三方服务器X之间的第二条TCP连接;
采用端口重用技术重用所述第二条TCP连接的端口号,并向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
10.一种针对TCP的NAT穿越方法,其特征在于,所述方法包括:
接收第三方服务器X发送的源客户端对应的NAT设备的端点信息,并接收向源客户端对应的NAT设备发起TCP连接的通知;
在接收向源客户端对应的NAT设备发起TCP连接的通知之后,向源客户端对应的NAT设备发起TCP连接;
接收来自所述源客户端的TCP连接,所述TCP连接分组由NAT设备转发。
11.根据权利要求10所述的方法,其特征在于,
在所述接收第三方服务器X发送的源客户端对应的NAT设备的端点信息之前还包括:
与第三方服务器X建立第一条TCP连接;
所述向源客户端对应的NAT设备发起TCP连接包括:
与第三方服务器X建立第二条TCP连接;
在建立所述第二条TCP连接之后,关闭与第三方服务器X建立第二条TCP连接,并通过所述第一条TCP连接发送关闭消息,以使得第三方服务器X根据所述关闭消息记录所述第二条TCP连接对应的端点信息;
在关闭所述第二条TCP连接之后,采用端口重用技术重用所述第二条TCP连接的端口号,并向源客户端对应的NAT设备发起TCP连接;
在向源客户端对应的NAT设备发起TCP连接之后,向第三方服务器X发送就绪消息,以使得第三方服务器X在收到所述就绪消息之后将记录的所述第二条TCP连接对应的端点信息发送给所述源客户端。
12.一种第三方服务器X,其特征在于,所述第三方服务器X包括:
第三方服务器X包括:
登记模块,所述登记模块在私有网络中的客户端与所述第三方服务器X建立第一条TCP连接时用于对客户端进行备案,以记录客户端对应的NAT设备的用户名、以及客户端与第三方服务器X连接时的端点信息;
连接处理模块,所述连接处理模块用于为位于不同私有网络的两个客户端建立TCP连接;其中,所述连接处理模块具体包括:
连接请求响应子模块,所述连接请求响应子模块用于接收源客户端发送的连接请求消息,所述连接请求消息用于请求与目标客户端建立TCP连接;
通知子模块,所述通知子模块用于在连接请求相应子模块收到所述连接请求消息之后,将源客户端对应的NAT设备的端点信息发送给所述目标客户端,并通知所述目标客户端与源客户端对应的NAT设备进行连接;
记录子模块,所述记录子模块用于在接收到所述目标客户端发送的关闭消息之后,记录被关闭的TCP连接所对应的端点信息;
响应子模块,所述响应子模块用于在接收到所述目标客户端发送的就绪消息之后,将记录子模块所记录的端点信息发送给所述源客户端,以使得所述源客户端根据所述端点信息向目标客户端对应的NAT设备发起TCP连接,且在所述源客户端与目标客户端建立TCP连接的过程中,所述源客户端向目标NAT设备发起TCP连接时入站分组的源端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的目标端点信息相同,且源客户端向目标NAT设备发起TCP连接时的入站分组的目标端点信息与之前目标客户端向源NAT设备发起TCP连接时的出站分组的源端点信息相同。
13.根据权利要求12所述的第三方服务器X,其特征在于,还包括收发模块,所述收发模块用于接收客户端发送的TCP连接请求、客户端发送的用于请求与目标客户端建立TCP连接的连接请求消息、关闭消息、以及就绪消息;所述收发模块还用于将源客户端对应的NAT设备的端点信息发送给所述目标客户端,以及将记录子模块所记录的端点信息发送给所述源客户端。
14.一种客户端,其特征在于,所述客户端包括:
连接请求模块,用于通过TCP连接向第三方服务器X发送连接请求消息,所述连接请求消息用于请求与目标客户端进行连接;
目标端点信息获取模块,用于接收第三方服务器X发送的与目标客户端对应的NAT设备的端点信息;
TCP连接模块,用于在接收与目标客户端对应的NAT设备的端点信息之后,根据所述端点信息向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
15.根据权利要求14所述的客户端,其特征在于,
所述客户端还包括登录服务器模块,所述登录服务器模块用于在客户端上线时,与第三方服务器X建立第一次TCP连接,以使得第三方服务器X记录所述客户端的注册信息;注册信息包括述客户端的端点信息,即客户端对应的NAT设备与第三方服务器X建立TCP连接时使用的公网IP和TCP端口号;
所述连接请求模块包括服务器连接子模块,所述服务器连接子模块用于在向第三方服务器X发送连接请求消息之前,与第三方服务器X建立第二条TCP连接;
所述TCP连接模块包括:
关闭子模块,用于关闭与第三方服务器X之间的第二条TCP连接;
目标客户端重连子模块,用于采用端口重用技术重用所述第二条TCP连接的端口号,并向目标客户端对应的NAT设备发起TCP连接,以通过所述NAT设备与所述目标客户端建立TCP连接。
16.一种客户端,其特征在于,所述客户端包括:
源端点信息获取模块,用于接收第三方服务器X发送的源客户端对应的NAT设备的端点信息,并接收向源客户端对应的NAT设备发起TCP连接的通知;
源客户端连接模块,用于在接收向源客户端对应的NAT设备发起TCP连接的通知之后,向源客户端对应的NAT设备发起TCP连接;
监听模块,用于接收来自所述源客户端的TCP连接,所述TCP连接分组由NAT设备转发。
17.根据权利要求16所述的客户端,其特征在于,
所述客户端还包括登录服务器模块,所述登录服务器模块用于在客户端上线时,与第三方服务器X建立第一次TCP连接,以使得第三方服务器X记录所述客户端的注册信息;注册信息包括述客户端的端点信息,即客户端对应的NAT设备与第三方服务器X建立TCP连接时使用的公网IP和TCP端口号;
所述源客户端连接模块包括:
连接子模块,用于与第三方服务器X建立第二条TCP连接;
关闭及通知子模块,用于在建立所述第二条TCP连接之后,关闭所述第二条TCP连接,并通过所述第一条TCP连接发送关闭消息,以使得第三方服务器X根据所述关闭消息记录所述第二条TCP连接对应的端点信息;
源端重连子模块,用于在关闭所述关闭第二条TCP连接之后,采用端口重用技术重用所述第二条TCP连接的端口号,并向源客户端对应的NAT设备发起TCP连接;
就绪通知子模块,用于在向源客户端对应的NAT设备发起TCP连接之后,向第三方服务器X发送就绪消息,以使得第三方服务器X在收到所述就绪消息之后将记录的所述第二条TCP连接对应的端点信息发送给所述源客户端。
18.一种针对TCP的NAT穿越***,其特征在于,所述NAT穿越***包括权利要求12-13中任一项所述的第三方服务器X,以及权利要求14-17中任一项所述的客户端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310382234.2A CN104427008A (zh) | 2013-08-28 | 2013-08-28 | 针对tcp的nat穿越方法、***、第三方服务器x、以及客户端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310382234.2A CN104427008A (zh) | 2013-08-28 | 2013-08-28 | 针对tcp的nat穿越方法、***、第三方服务器x、以及客户端 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104427008A true CN104427008A (zh) | 2015-03-18 |
Family
ID=52974910
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310382234.2A Pending CN104427008A (zh) | 2013-08-28 | 2013-08-28 | 针对tcp的nat穿越方法、***、第三方服务器x、以及客户端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104427008A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106331198A (zh) * | 2015-06-29 | 2017-01-11 | 中兴通讯股份有限公司 | Nat穿透方法及装置 |
CN113037890A (zh) * | 2021-03-20 | 2021-06-25 | 张晋 | 一种能够确保穿透对称型nat设备的方法及*** |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060072569A1 (en) * | 2004-10-04 | 2006-04-06 | Wizzysoft Corporation | Network address translation protocol for transmission control protocol connections |
CN1767509A (zh) * | 2004-10-29 | 2006-05-03 | 北京佳讯飞鸿电气有限责任公司 | 外网用户穿越nat设备的实现方法 |
CN102231763A (zh) * | 2011-06-20 | 2011-11-02 | 北京思创银联科技股份有限公司 | 一种基于nat穿透的共享方法 |
-
2013
- 2013-08-28 CN CN201310382234.2A patent/CN104427008A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060072569A1 (en) * | 2004-10-04 | 2006-04-06 | Wizzysoft Corporation | Network address translation protocol for transmission control protocol connections |
CN1767509A (zh) * | 2004-10-29 | 2006-05-03 | 北京佳讯飞鸿电气有限责任公司 | 外网用户穿越nat设备的实现方法 |
CN102231763A (zh) * | 2011-06-20 | 2011-11-02 | 北京思创银联科技股份有限公司 | 一种基于nat穿透的共享方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106331198A (zh) * | 2015-06-29 | 2017-01-11 | 中兴通讯股份有限公司 | Nat穿透方法及装置 |
CN113037890A (zh) * | 2021-03-20 | 2021-06-25 | 张晋 | 一种能够确保穿透对称型nat设备的方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10085253B2 (en) | Methods and apparatus for controlling wireless access points | |
US9231820B2 (en) | Methods and apparatus for controlling wireless access points | |
US8503461B2 (en) | Media path optimization for multimedia over internet protocol | |
CN110290093A (zh) | Sd-wan网络架构及组网方法、报文转发方法 | |
CN102546657B (zh) | Ip监控***中穿越、协助穿越网络隔离设备的方法和节点 | |
CN102571524B (zh) | Ip监控***中穿越、协助穿越网络隔离设备的方法和节点 | |
CN107205026A (zh) | 一种点对点数据传输方法及*** | |
CN107733808A (zh) | 一种流量传输方法及装置 | |
CN102984175B (zh) | 一种无ip监控前端设备和一种代理装置 | |
CN102546350B (zh) | 一种ip监控***中节约广域网带宽的方法及装置 | |
CN104993979A (zh) | 网络连接监测方法、终端设备及通信*** | |
CN102571814B (zh) | 一种ip监控***中穿越隔离设备的方法及代理设备 | |
CN106878259A (zh) | 一种报文转发方法及装置 | |
CN102664804B (zh) | 网络设备实现网桥功能的方法及*** | |
CN104427008A (zh) | 针对tcp的nat穿越方法、***、第三方服务器x、以及客户端 | |
CN104168302B (zh) | 设备操控实现方法、***和代理网关 | |
CN102710644B (zh) | 一种ip监控***中节约带宽的方法及装置 | |
CN101465858B (zh) | 监控业务中实现私网穿越的方法、网络设备和服务器 | |
WO2019041332A1 (zh) | 一种加速网络传输优化方法以及*** | |
CN102984167B (zh) | 一种基于Socks5协议的通用防火墙穿越方法 | |
CN113286011B (zh) | 基于vxlan的ip地址分配方法及装置 | |
WO2015188706A1 (zh) | 数据帧的处理方法、装置与*** | |
CN102215135A (zh) | 一种ip语音接入设备的网管穿越方法及穿越*** | |
US9178854B2 (en) | Differentiation of multiple media endpoints behind an address translation device | |
KR101712922B1 (ko) | 동적 터널엔드 방식의 가상 사설 네트워크 시스템과 그를 위한 가상 라우터 및 매니저 장치 |
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: 20150318 |