CN100426769C - 一种建立对等直连通道的方法 - Google Patents
一种建立对等直连通道的方法 Download PDFInfo
- Publication number
- CN100426769C CN100426769C CNB2005100020580A CN200510002058A CN100426769C CN 100426769 C CN100426769 C CN 100426769C CN B2005100020580 A CNB2005100020580 A CN B2005100020580A CN 200510002058 A CN200510002058 A CN 200510002058A CN 100426769 C CN100426769 C CN 100426769C
- Authority
- CN
- China
- Prior art keywords
- main frame
- direct
- public network
- address
- port
- 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.)
- Active
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种建立对等直连通道的方法,该方法是第一主机绑定第一UDP端口,并通过第一UDP端口向转发服务器发送直连请求,转发服务器向第二主机发送直连请求;第二主机绑定第二UDP端口,并通过第二UDP端口向转发服务器发送直连响应,转发服务器向第一主机发送直连响应;第一主机通过第一UDP端口发送探测包至第二主机,第二主机从探测包中UDP报文头获取第一主机的直连IP地址和端口地址,并向获取的第一主机的直连IP地址和端口地址发送探测响应包,第一主机从探测响应包UDP报文头获取第二主机的直连IP地址和端口地址。使用该方法,成功建立对等直连通道的可能性较现有技术会有很大提高。
Description
技术领域
本发明涉及计算机网络中节点的连接技术,特别是涉及一种建立对等直连(P2P,Peer to Peer)通道的方法。
背景技术
在网络中,两个节点之间的连接方式一般有两种:一种是客户端/服务器方式的连接,客户端申请服务,服务器提供服务,通常这种连接方式是一对多的关系,如图1所示,一个服务器可以接收来自多个客户端的申请,并向多个客户端提供服务,两者之间的关系是非对等的关系;另一种是P2P方式,如图2所示,P2P方式的连接是指在计算机网络中的每两个节点直接连接,即每两个节点之间是对等连接的关系。
在客户端/服务器的方式下,由于服务器需要向多个客户端提供服务,所以,通常需要使用高性能的机器,成本一般比较大。P2P方式的通讯双方是对等的关系,两者互相为对方提供服务,所以,P2P方式的突出优势在于可以将众多性能不高的PC连接起来,以实现资源共享和通讯,这种连接方式大大降低了成本,逐渐成为网络发展的新方向。
虽然P2P方式有如上所述的优势,但是其发展受到一定限制,这是因为,为了防范网络病毒的攻击,越来越多的计算机都位于网络地址转换器(Network Address Translator,NAT)的保护之内。NAT是在内部网络和公共网络之间起检查和转发作用的设备,通常集成在路由器上,NAT可能会修改内网中主机的IP地址和端口信息,所以它限制了网络上任意两台计算机之间的直接通讯,只有符合一定规则的通讯才被允许,所以,如何突破NAT的限制是实现P2P的重要内容。
由于当前NAT的种类繁多,并且不同种类的NAT各有其自身规定的通讯方式,所以,在位于不同种类NAT中的两个节点之间建立P2P通道的时候,首先需要获得双方节点的NAT的类型,然后根据NAT的类型采用不同的通讯方式建立P2P通道。
下面介绍现有技术建立P2P通道的方法。
首先,如图3所示,当网络中某主机A需要与主机B建立P2P通道时,通常需要两台外部服务器确定自身和对方所在的NAT类型,主机A使用同样的端口向这两台服务器发送用户数据报协议(UDP)信息,这两台服务器记录该主机的IP地址和端口号,再分别将记录的IP地址和端口号返回给主机A,主机A通过判断两个外部服务器返回的IP地址和端口号确定自身所在的NAT的类型。判断的方式为:如果两个外部服务器返回的IP地址和端口相同,则NAT类型为非对称NAT(Cone NAT);如果不同,则NAT类型为对称NAT(Symmetric NAT)。同理,主机B也如此判断NAT类型。主机A和主机B确定了NAT类型后,分别将类型信息发送至目录服务器,并从目录服务器获取对方的NAT类型信息。
然后,主机A启动建立P2P通道,主机A先判断主机B所在的NAT类型,如果主机B所在的NAT类型是Cone NAT,则主机A主动发起直连请求,然后由主机B向主机A发送探测包;如果主机B是Symmetric NAT,主机A判断自己所在的NAT类型,如果主机A是Cone NAT,则主机A通知主机B发起直连请求,然后由主机A向主机B发送探测包;如果主机A也是Symmetric NAT,则通道无法建立。
最后,当两个主机之间的P2P通道建立完毕之后,两主机才开始通过P2P通道发送数据。
但是,Cone NAT又分为几种子类型:全部非对称NAT(Full Cone NAT)、受限非对称NAT(Restricted Cone NAT)和端口受限非对称NAT(Port-Restricted Cone NAT),现有技术还无法识别Cone NAT的具体子类型,并且现有技术的方法只对Full Cone NAT有效。也就是说,现有技术只对主机A和主机B均在Full Cone NAT之内,或主机A在Full Cone NAT之内、主机B在Symmetric NAT之内时才能建立起P2P通道。如果建立P2P通道的任何一方处于Restricted Cone NAT或Port-Restricted Cone NAT之内,则直连通道的建立将失败。这是因为,对于这两种NAT,内网主机的一个端口在与不同的外界地址通信时会在NAT上映射为同一个公网IP和端口,Restricted Cone NAT只允许同时和一个IP地址的主机进行双向通信,Port-Restricted Cone NAT只允许同时和一个IP地址和端口的主机进行双向通信,因此在建立P2P通道的过程中,如果遇到Restricted Cone NAT或Port-Restricted Cone NAT,则主机A和主机B之间不仅无法建立P2P通道,还有可能导致客户端与服务器的通信中断,使得一个客户端无法与多个客户端同时建立P2P直连。
除了上文提及的几种NAT类型,网络中还存在很多其它类型的NAT,每种NAT的具体特征不同,现有技术的方法无法利用一种连通方式适用于尽可能多的NAT类型。
如上所述,对于某些类型的NAT,现有技术还无法建立P2P通道,并有可能导致客户端与服务器之间的通信中断,使得该客户端无法和其它主机建立P2P通道。所以,现有技术的方法建立P2P通道的成功率较低。而且,现有技术的方法中,只有两个主机建立P2P通道之后才能互相发送数据,由于通道的建立存在一定时延,所以数据传输也存在时延,无法满足对实时性要求较高的数据传输的需要。
而且,现有技术的方法需要通过额外的两台外部服务器协助判断NAT的类型,这不仅需要耗费较多的资源,而且延长了建立P2P通道所需的时间。
发明内容
本发明的主要目的在于提供一种建立P2P通道的方法,一个主机可以和多个主机建立P2P通道,且适用于建立多种类型NAT内的主机之间的P2P通道。
为实现上述目的,本发明提供了一种建立对等直连通道的方法,该方法包括如下步骤:
A、第一主机绑定第一用户数据报协议UDP端口,并通过第一UDP端口向转发服务器发送直连请求,转发服务器提取出第一主机的公网IP地址和公网UDP端口,然后向第二主机转发该直连请求,其中,所转发的直连请求中包括第一主机公网IP地址和公网UDP端口;
B、第二主机接收到直连请求后绑定第二UDP端口,并通过第二UDP端口向转发服务器发送直连响应,转发服务器提取出第二主机的公网IP地址和公网UDP端口,然后向第一主机转发该直连响应,其中,该直连响应中包含第二主机公网IP地址和公网UDP端口;
C、第一主机通过第一UDP端口向第二主机公网IP地址和公网UDP端口地址发送探测包,第二主机从探测包获取第一主机的直连公网IP地址和直连公网UDP端口地址,并向第一主机的直连公网IP地址和直连公网端口地址发送探测响应包,第一主机从探测响应包获取第二主机的直连公网IP地址和直连公网端口地址,第一主机和第二主机分别根据所获得的对方主机的直连公网IP地址和直连公网端口地址,在彼此间建立对等直连通道。
其中,步骤C中,所述第二主机从探测包获取第一主机的直连公网IP地址和直连公网端口地址之后还包括:
第二主机将收到的直连公网IP地址和直连公网端口地址更新在第二主机的用户信息表中;
所述第一主机从探测响应包获取第二主机的直连公网IP地址和直连公网UDP端口地址之后还包括:
第一主机将收到的直连公网IP地址和直连公网端口地址更新在第一主机的用户信息表中。
其中,步骤C中所述第二主机从探测包获取第一主机的直连公网IP地址和直连公网UDP端口地址包括:
第二主机从所获得的探测包中的UDP报文头中获得所述第一主机的直连公网IP地址和直连公网UDP端口地址;
所述第一主机从探测响应包获取第二主机的直连公网IP地址和直连公网UDP端口地址包括:
第一主机从所获得的探测响应包中的UDP报文头中获得所述第二主机的直连公网IP地址和直连公网UDP端口地址。
其中,步骤C之后,该方法进一步包括:
判断是否需要建立新的对等直连通道,如果是,则第一主机和第二主机分别采用新的第一UDP端口和新的第二UDP端口,然后返回步骤A。
为实现上述目的,本发明还提供了一种建立对等直连通道的方法,该方法包括如下步骤:
a、第一主机绑定第一用户数据报协议UDP端口,并通过第一UDP端口向转发服务器发送直连请求,转发服务器向第二主机转发该直连请求,其中,所转发的直连请求中包括第一主机公网IP地址和第一UDP公网端口地址;
b、第二主机接收到直连请求后,绑定第二UDP端口,并通过第二UDP端口向转发服务器发送直连响应,转发服务器向第一主机转发该直连响应,其中,该直连响应中包含第二主机公网IP地址和第二UDP公网端口地址;
c、第一主机根据收到的直连响应中所包含的第二主机公网IP地址和第二UDP公网端口地址,通过第一UDP端口向第二主机发送探测包,通过第一主机所发送的探测包将第一主机的直连公网IP地址和直连公网端口地址发送给第二主机,第二主机收到第一主机所发送的探测包后,向第一主机发送探测响应包,通过第二主机所发送的探测响应包将第二主机的直连公网IP地址和直连公网端口地址发送给第一主机,
第一主机通过转发服务器将接收到的直连响应发送至第二主机,第二主机接收到该直连响应后,通过第二UDP端口发送探测包至第一主机,利用第二主机所发送的探测包将第二主机的直连公网IP地址和直连公网端口地址发送给第一主机,第一主机收到第二主机所发送的探测包后,向第二主机发送探测响应包,利用第一主机所发送的探测响应包将第一主机的直连公网IP地址和直连公网端口地址发送给第二主机;和,
第一主机和第二主机分别根据所获得的对方主机的直连公网IP地址和直连公网端口地址,在彼此间建立对等直连通道。
其中,步骤c中,所述利用第二主机所发送的探测包将第二主机的直连公网IP地址和直连公网端口地址发送给第一主机之后还包括:
第一主机将收到的第二主机的直连公网IP地址和直连公网端口地址更新在第一主机的用户信息表中;
所述利用第一主机所发送的探测响应包将第一主机的直连公网IP地址和直连公网端口地址发送给第二主机之后还包括:
第二主机将收到的第一主机的直连公网IP地址和直连公网端口地址更新在第二主机的用户信息表中。
其中,步骤c中所述利用第二主机所发送的探测包将第二主机的直连公网IP地址和直连公网端口地址发送给第一主机之后还包括:
第一主机从所获得的第二主机所发送的探测包中的UDP报文头中获得所述第二主机的直连公网IP地址和直连公网端口地址;
所述利用第一主机所发送的探测响应包将第一主机的直连公网IP地址和直连公网端口地址发送给第二主机之后还包括:
第二主机从所获得的第一主机所发送的探测响应包中的UDP报文头中获得所述第一主机的直连公网IP地址和直连公网端口地址。
为实现上述目的,本发明还提供了一种建立对等直连通道的方法,该方法包括如下步骤:
步骤a1:第一主机和第二主机登录转发服务器,第一主机和第二主机分别在自身建立包括第一主机和第二主机的连接状态的用户信息表;
步骤a2:根据所述用户信息表判断第一主机和第二主机的连接状态,如果判断得到连接状态未知,则第一主机和第二主机分别绑定各自的用户数据报协议UDP端口,在第一主机和第二主机的UDP端口间发送探测包以及探测响应包,实现在第一主机和第二主机间建立对等直连通道。
其中,所述发送探测包以及探测响应包进一步包括:将第一主机和第二主机的连接状态更新为不通状态,步骤a2所述判断进一步包括:
判断第一主机和第二主机的连接状态是否为不通状态,如果是,则该方法进一步包括:
第一主机通过转发服务器向第二主机传送数据。
其中,在相应主机接收到探测包之后,该方法进一步包括:将第一主机和第二主机的连接状态更新为通的状态,步骤a2所述判断进一步包括:
判断第一主机和第二主机的连接状态是否为通的状态,如果是,则该方法进一步包括:
第一主机和第二主机通过已经建立的直连通道传送数据。
其中,所述对连接状态的更新为:
在用户信息表中对所述连接状态进行更新。
其中,所述传送数据之后,该方法进一步包括:
判断数据传送是否已经结束,如果是,则结束数据传送,否则,返回所述步骤a1。
其中,所述第一主机和第二主机分别位于不同NAT所管辖的内网中,所述转发服务器位于公网中。
从上述技术方案可以看出,本发明的方法是两个主机分别绑定一个新的UDP端口,并通过探测包和探测响应包的交互获取对方的新的公网IP地址和UDP端口地址,从而建立直连UDP通道。在现有技术的方法中,需要根据确定的NAT类型采用不同的通讯方式建立P2P通道,并且,由于建立P2P通道时不绑定新端口,有可能造成通道无法建立或与服务器的通信中断。(这是结合现有技术论述本发明的优点)除两主机所处的NAT类型都是Symmetric NAT的情况,本发明的方法适用于在所有NAT类型组合之内的通信双方之间建立P2P通道,并且不导致客户端与转发服务器之间的通信中断。在P2P通道建立的过程中,由于主机之间通过转发服务器转发数据,不会造成数据通信的时延,所以能够很好地满足对实时性要求较高的数据传输的需要。
而且,本发明的方法不需要两台外网服务器协助确定NAT类型,可以节省网络资源和建立P2P通道所需的时间。
附图说明
图1是网络中的主机以客户端/服务器方式连接的示意图;
图2是网络中的主机以P2P方式连接的示意图;
图3是现有技术中主机确定防火墙或NAT类型的方法示意图;
图4是待建立P2P通道的两台主机位于不同内网的结构示意图;
图5是根据本发明一实施例的启动建立UDP直连通道的流程图;
图6是根据本发明一实施例的建立UDP直连通道的流程图。
图7是根据本发明另一实施例的建立UDP直连通道的流程图。
具体实施方式
为了使本发明的目的、技术方案和优点更清楚,下面结合附图和具体实施方式对本发明作进一步描述。
本发明提供了一种在两台位于不同内网的主机之间建立P2P通道的方法,参见图4,客户端A和客户端B分别位于NAT类型为NAT A和NAT B的内网中,转发服务器(以下简称服务器)位于公网环境中,本发明的方法是客户端A和客户端B分别绑定新的用户数据报协议(UDP)端口,在客户端A和客户端B之间建立直连UDP通道。
下面结合图4和具体实施例详细说明本发明的方法。
图5是根据本发明一实施例启动建立直连UDP通道的流程图。在该实施例中,客户端A欲建立与客户端B的直连UDP通道并发送数据,该流程包括如下步骤:
步骤501:客户端A和客户端B通过UDP协议登录服务器。
在客户端A和客户端B登录服务器后,服务器端将更新记录客户端相关网络信息的表,在该表中添加客户端A和客户端B的相关网络信息:
用户编号 | 内网IP | 内网端口 | 公网IP | 公网端口 |
客户端A | aaaa | mm | AAAA | MM |
客户端B | bbbb | nn | BBBB | NN |
在登录成功后,服务器分别向客户端A和B返回各自的公网IP和公网端口,并将成功登录该服务器的其它用户的内网和公网的IP和端口发送至客户端A和客户端B;
客户端A在登录成功后记录自身的网络信息:
内网IP | 内网端口 | 公网IP | 公网端口 |
Aaaa | mm | AAAA | MM |
客户端A在自身保存的其它用户信息表中添加客户端B的信息:
用户编号 | 内网IP | 内网端口 | 公网IP | 公网端口 | 连接状态 |
客户端B | bbbb | nn | BBBB | NN | 未知 |
其中,连接状态为“未知”表示客户端A和客户端B从未进行通信;同时,客户端B也在登录成功后记录自身的网络信息:
内网IP | 内网端口 | 公网IP | 公网端口 |
Bbbb | nn | BBBB | NN |
客户端B也在自身保存的其它用户信息表中添加客户端A的信息:
用户编号 | 内网IP | 内网端口 | 公网IP | 公网端口 | 连接状态 |
客户端A | aaaa | mm | AAAA | MM | 未知 |
步骤502:当客户端A需要向客户端B发送数据时,客户端A通过查询自身保存的其它用户信息表确定与客户端B的连接状态,如果连接状态为“未知”,表示客户端A和客户端B之间还未启动建立直连UDP通道的程序,转到步骤503;如果连接状态为“不通”,表示客户端A和客户端B之间正处于建立直连UDP通道的过程中,转到步骤505;如果连接状态为“通”,表示客户端A和客户端B之间已经建立起直连UDP通道,转到步骤507。
步骤503:客户端A在其它用户信息表中将客户端B的连接状态设置为“不通”。
步骤504:客户端A启动建立直连UDP通道的过程,然后返回步骤502。
步骤505:客户端A向服务器递交转发数据请求。
步骤506:服务器接收到客户端A的转发数据的请求后,将数据传送至客户端B,并告知客户端B数据是由客户端A发送的,然后返回步骤502。
由于建立UDP直连通道需要一定的时间,而且客户端A和客户端B之间存在无法建立直连UDP通道的可能,所以,在通道建立之前通过服务器转发数据可以保证数据收发不受直连UDP通道建立延时的影响。
步骤507:客户端A通过直连UDP通道直接发送数据至客户端B。
步骤508:客户端A检查是否还有数据需要发送,如果有,则返回步骤502判断客户端A与客户端B的连接状态;如果没有,则结束。
从上述流程的可以看出,当客户端A查询到与客户端B的连接状态为“未知”时,说明两客户端之间未建立直连UDP通道,此时,可以启动建立直连UDP通道的流程;当客户端A查询到客户端B的连接状态为“不通”时,说明两客户端之间正处于建立直连UDP通道的过程中,为了不影响数据传输的实时性,通过服务器转发数据;当客户端A查询到客户端B的连接状态为“通”时,说明两客户端之间已经建立了直连UDP通道,可以通过该直连通道发送数据。
下面详细说明客户端A启动建立直连UDP通道的过程。仍以图4所示的网络结构为例,客户端A和客户端B分别位于NAT类型为NAT A和NATB的内网中,服务器位于公网环境中,在客户端A和客户端B之间建立直连UDP通道。
图6是根据本发明一实施例建立直连UDP通道的流程图,从图中可以看出,在该实施例中,建立直连UDP通道的过程包括如下步骤:
步骤601:客户端A绑定一个新的UDP端口,端口地址为xx。
步骤602:客户端A通过新绑定的UDP端口向服务器发送与客户端B建立直连UDP通道的请求,该请求的内容包括:
类型 | 源 | 目的 | 源内网端口 |
直连请求 | 客户端A | 客户端B | xx |
步骤603:服务器接收到该直连请求后,提取出客户端A的公网IP和公网UDP端口,向客户端B转发该请求,所转发的直连请求中包括客户端A的公网IP地址和公网UDP端口,转发的请求内容包括:
类型 | 源 | 目的 | 源公网IP | 源公网端口 | 源内网端口 |
直连请求 | 客户端A | 客户端B | AAAA | XX | xx |
其中,源公网IP和源公网端口由服务器从接收到的客户端A的请求UDP报文头中所获取。
步骤604:客户端B接收到直连请求后,绑定一个新的UDP端口,端口地址为yy,然后通过该端口向服务器发送直连响应1,该响应的内容包括:
类型 | 源 | 目的 | 源内网端口 |
直连响应1 | 客户端B | 客户端A | yy |
步骤605:服务器接收到直连响应1后,提取出客户端B的公网IP和公网UDP端口,向客户端A转发该直连响应1,所转发的直连响应1中包括客户端B的公网IP地址和公网UDP端口,转发的直连响应1内容包括:
类型 | 源 | 目的 | 源公网IP | 源公网端口 | 源内网端口 |
直连响应1 | 客户端B | 客户端A | BBBB | YY | yy |
其中,源公网IP和源公网端口是服务器从接收到的客户端B的响应UDP报文头中获取的信息。
步骤606:客户端A接收到客户端B的直连响应1后,向客户端B发送探测包,该探测包的内容包括:
类型 | 目的公网IP | 目的公网端口 |
探测 | BBBB | YY |
步骤607:客户端B接收到客户端A的探测包后,在自身保存的其它用户信息表中更新客户端A的连接状态为“通”,同时将该表中客户端A的公网IP和公网端口更新为探测包中UDP报文头中的IP地址和端口,更新后的其它用户信息表中客户端A的内容为:
用户编号 | 内网IP | 内网端口 | 公网IP | 公网端口 | 连接状态 |
客户端A | aaaa | xx | RAAA | RX | 通 |
其中,RAAA为客户端A向客户端B发送探测包时所采用的直连公网IP地址,RX为客户端A向客户端B发送探测包时所采用的直连公网端口地址;
步骤608:客户端B向客户端A的新公网IP和端口发送探测响应包,该探测响应包的内容包括:
类型 | 对方探测我的公网IP | 对方探测我的公网端口 |
探测响应 | BBBB | YY |
步骤609:客户端A接收到客户端B的探测响应后,将自身保存的其它用户信息表中的客户端B的连接状态更新为“通”,将表中客户端B的公网IP和公网端口更新为客户端B发来的探测响应包中UDP报文头中的IP地址和端口,更新后的其它用户信息表中客户端B的内容为:
用户编号 | 内网IP | 内网端口 | 公网IP | 公网端口 | 连接状态 |
客户端B | bbbb | yy | RBBB | RY | 通 |
其中,RBBB为客户端B向客户端A发送探测包时所采用的直连公网IP地址,RY为客户端B向客户端A发送探测包时所采用的直连公网端口地址;
如此,在客户端A和客户端B之间建立了直连UDP通道,即P2P通道。由于客户端A和客户端B通过分别绑定一个新的UDP端口建立该直连UDP通道,所以,该通道内传输的数据通过新的UDP端口,当其它客户端需要与客户端A或客户端B建立直连UDP端口时,再分别绑定新端口,这样,即使NAT A或NAT B是restricted clone NAT或port-restricted clone NAT,也可以建立新的通道,同时不会导致客户端A或客户端B与服务器的通信中断。
图7是根据本发明另一具体实施例的建立直连UDP通道的流程图,从图中可以看出,在该实施例中,建立直连UDP通道的过程包括如下步骤:
步骤701:客户端A绑定一个新的UDP端口,端口地址为xx。
步骤702:客户端A通过新绑定的UDP端口向服务器发送与客户端B建立直连UDP通道的请求,该请求的内容包括:
类型 | 源 | 目的 | 源内网端口 |
直连请求 | 客户端A | 客户端B | xx |
步骤703:服务器接收到该直连请求后,向客户端B转发该请求,转发的请求内容包括:
类型 | 源 | 目的 | 源公网IP | 源公网端口 | 源内网端口 |
直连请求 | 客户端A | 客户端B | AAA | XX | xx |
其中,源公网IP和源公网端口是服务器从接收到客户端A的请求UDP报文头中所获取的信息。
步骤704:客户端B接收到直连请求后,绑定一个新的UDP端口,端口地址为yy,然后通过该端口向服务器发送直连响应1,该响应的内容包括:
类型 | 源 | 目的 | 源内网端口 |
直连响应1 | 客户端B | 客户端A | yy |
步骤705:服务器接收到直连响应1后,向客户端A转发该直连响应1,转发的直连响应1内容包括:
类型 | 源 | 目的 | 源公网IP | 源公网端口 | 源内网端口 |
直连响应1 | 客户端B | 客户端A | BBBB | YY | yy |
其中,源公网IP和源公网端口是服务器从接收到的客户端B的响应UDP报文头中获取的信息,然后同时执行步骤706和步骤710。
步骤706:客户端A接收到客户端B的直连响应1后,向客户端B发送探测包,该探测包的内容包括:
类型 | 目的公网IP | 目的公网端口 |
探测 | BBBB | YY |
步骤707:客户端B接收到客户端A的探测包后,在自身保存的其它用户信息表中更新客户端A的连接状态为“通”,同时将该表中客户端A的公网IP和公网端口更新为探测包中UDP报文头中的IP地址和端口,更新后的其它用户信息表中客户端A的内容为:
用户编号 | 内网IP | 内网端口 | 公网IP | 公网端口 | 连接状态 |
客户端A | Aaaa | Xx | RAAA | RX | 通 |
步骤708:客户端B向客户端A的新公网IP和端口发送探测响应,该探测响应的内容包括:
类型 | 对方探测我的公网IP | 对方探测我的公网端口 |
探测响应 | BBBB | YY |
步骤709:客户端A接收到客户端B的探测响应后,将自身保存的其它用户信息表中的客户端B的连接状态更新为“通”,将表中客户端B的公网IP和公网端口更新为客户端B发来的探测响应包中UDP报文头中的IP地址和端口,更新后的其它用户信息表中客户端B的内容为:
用户编号 | 内网IP | 内网端口 | 公网IP | 公网端口 | 连接状态 |
客户端B | bbbb | yy | RBBB | RY | 通 |
然后结束。
步骤710:客户端A向客户端B发送直连响应2,直连响应2的内容为为:
类型 | 源 | 目的 |
直连响应2 | 客户端A | 客户端B |
步骤711:服务器接收到直连响应2后,向客户端B转发该直连响应2,转发的直连响应2内容包括:
类型 | 源 | 目的 |
直连响应2 | 客户端A | 客户端B |
步骤712:客户端B接收到客户端A的直连响应2后,向客户端A发送探测包,该探测包的内容包括:
类型 | 目的公网IP | 目的公网端口 |
探测 | AAAA | XX |
步骤713:客户端A接收到客户端B的探测包后,在自身保存的其它用户信息表中更新客户端B的连接状态为“通”,同时将该表中客户端B的公网IP和公网端口更新为探测包中UDP报文头中的IP地址和端口,更新后的其它用户信息表中客户端B的内容为:
用户编号 | 内网IP | 内网端口 | 公网IP | 公网端口 | 连接状态 |
客户端B | Bbbb | yy | RBBB | RY | 通 |
步骤714:客户端A向客户端B的新公网IP和端口发送探测响应,该探测响应的内容包括:
类型 | 对方探测我的公网IP | 对方探测我的公网端口 |
探测响应 | AAAA | XX |
步骤715:客户端B接收到客户端A的探测响应后,将自身保存的其它用户信息表中的客户端A的连接状态更新为“通”,将表中客户端A的公网IP和公网端口更新为客户端A发来的探测响应包中UDP报文头中的IP地址和端口,更新后的其它用户信息表中客户端A的内容为:
用户编号 | 内网IP | 内网端口 | 公网IP | 公网端口 | 连接状态 |
客户端A | aaaa | xx | RAAA | RX | 通 |
然后结束。
如此,在客户端A和客户端B之间建立了直连UDP通道,即P2P通道。
在上述流程中,步骤706至步骤709是客户端A向客户端B探测的步骤,步骤712至步骤715是客户端B向客户端A探测的步骤。本发明的方法是客户端A和客户端B分别向对方发送探测,这样,不仅可以保证客户端A和客户端B还可以与其它客户端建立P2P通道,而且,也可以保证在NAT A是Symmetric NAT时,通过客户端B向客户端A的探测,成功建立UDP直连通道。
需要说明的是,除了NAT A和NAT B都是Symmetric NAT的情况,本发明的方法适用于其它任何NAT类型的组合。
其中,在本发明中,如果在建立P2P通道之后,还需要进一步建立新的P2P通道,则可采用新的UDP端口,按照与上述各实施例完全相同的方法建立新的通道,并不影响本发明的实现。
在具体的实施过程中可对根据本发明的方法进行适当的改进,以适应具体情况的具体需要。因此可以理解,根据本发明的具体实施方式只是起示范作用,并不用以限制本发明的保护范围。
Claims (13)
1、一种建立对等直连通道的方法,其特征在于,该方法包括如下步骤:
A、第一主机绑定第一用户数据报协议UDP端口,并通过第一UDP端口向转发服务器发送直连请求,转发服务器提取出第一主机的公网IP地址和公网UDP端口,然后向第二主机转发该直连请求,其中,所转发的直连请求中包括第一主机公网IP地址和公网UDP端口;
B、第二主机接收到直连请求后绑定第二UDP端口,并通过第二UDP端口向转发服务器发送直连响应,转发服务器提取出第二主机的公网IP地址和公网UDP端口,然后向第一主机转发该直连响应,其中,该直连响应中包含第二主机公网IP地址和公网UDP端口;
C、第一主机通过第一UDP端口向第二主机公网IP地址和公网UDP端口地址发送探测包,第二主机从探测包获取第一主机的直连公网IP地址和直连公网UDP端口地址,并向第一主机的直连公网IP地址和直连公网端口地址发送探测响应包,第一主机从探测响应包获取第二主机的直连公网IP地址和直连公网端口地址,第一主机和第二主机分别根据所获得的对方主机的直连公网IP地址和直连公网端口地址,在彼此间建立对等直连通道。
2、根据权利要求1所述的方法,其特征在于,步骤C中,所述第二主机从探测包获取第一主机的直连公网IP地址和直连公网端口地址之后还包括:
第二主机将收到的直连公网IP地址和直连公网端口地址更新在第二主机的用户信息表中;
所述第一主机从探测响应包获取第二主机的直连公网IP地址和直连公网UDP端口地址之后还包括:
第一主机将收到的直连公网IP地址和直连公网端口地址更新在第一主机的用户信息表中。
3、根据权利要求1或2所述的方法,其特征在于,步骤C中所述第二主机从探测包获取第一主机的直连公网IP地址和直连公网UDP端口地址包括:
第二主机从所获得的探测包中的UDP报文头中获得所述第一主机的直连公网IP地址和直连公网UDP端口地址;
所述第一主机从探测响应包获取第二主机的直连公网IP地址和直连公网UDP端口地址包括:
第一主机从所获得的探测响应包中的UDP报文头中获得所述第二主机的直连公网IP地址和直连公网UDP端口地址。
4、根据权利要求1所述的方法,其特征在于,步骤C之后,该方法进一步包括:
判断是否需要建立新的对等直连通道,如果是,则第一主机和第二主机分别采用新的第一UDP端口和新的第二UDP端口,然后返回步骤A。
5、一种建立对等直连通道的方法,其特征在于,该方法包括如下步骤:
a、第一主机绑定第一用户数据报协议UDP端口,并通过第一UDP端口向转发服务器发送直连请求,转发服务器向第二主机转发该直连请求,其中,所转发的直连请求中包括第一主机公网IP地址和第一UDP公网端口地址;
b、第二主机接收到直连请求后,绑定第二UDP端口,并通过第二UDP端口向转发服务器发送直连响应,转发服务器向第一主机转发该直连响应,其中,该直连响应中包含第二主机公网IP地址和第二UDP公网端口地址;
c、第一主机根据收到的直连响应中所包含的第二主机公网IP地址和第二UDP公网端口地址,通过第一UDP端口向第二主机发送探测包,通过第一主机所发送的探测包将第一主机的直连公网IP地址和直连公网端口地址发送给第二主机,第二主机收到第一主机所发送的探测包后,向第一主机发送探测响应包,通过第二主机所发送的探测响应包将第二主机的直连公网IP地址和直连公网端口地址发送给第一主机,
第一主机通过转发服务器将接收到的直连响应发送至第二主机,第二主机接收到该直连响应后,通过第二UDP端口发送探测包至第一主机,利用第二主机所发送的探测包将第二主机的直连公网IP地址和直连公网端口地址发送给第一主机,第一主机收到第二主机所发送的探测包后,向第二主机发送探测响应包,利用第一主机所发送的探测响应包将第一主机的直连公网IP地址和直连公网端口地址发送给第二主机;和,
第一主机和第二主机分别根据所获得的对方主机的直连公网IP地址和直连公网端口地址,在彼此间建立对等直连通道。
6、根据权利要求5所述的方法,其特征在于,步骤c中,所述利用第二主机所发送的探测包将第二主机的直连公网IP地址和直连公网端口地址发送给第一主机之后还包括:
第一主机将收到的第二主机的直连公网IP地址和直连公网端口地址更新在第一主机的用户信息表中;
所述利用第一主机所发送的探测响应包将第一主机的直连公网IP地址和直连公网端口地址发送给第二主机之后还包括:
第二主机将收到的第一主机的直连公网IP地址和直连公网端口地址更新在第二主机的用户信息表中。
7、根据权利要求5或6所述的方法,其特征在于,步骤c中所述利用第二主机所发送的探测包将第二主机的直连公网IP地址和直连公网端口地址发送给第一主机之后还包括:
第一主机从所获得的第二主机所发送的探测包中的UDP报文头中获得所述第二主机的直连公网IP地址和直连公网端口地址;
所述利用第一主机所发送的探测响应包将第一主机的直连公网IP地址和直连公网端口地址发送给第二主机之后还包括:
第二主机从所获得的第一主机所发送的探测响应包中的UDP报文头中获得所述第一主机的直连公网IP地址和直连公网端口地址。
8、一种建立对等直连通道的方法,其特征在于,该方法包括如下步骤:
步骤a1:第一主机和第二主机登录转发服务器,第一主机和第二主机分别在自身建立包括第一主机和第二主机的连接状态的用户信息表;
步骤a2:根据所述用户信息表判断第一主机和第二主机的连接状态,如果判断得到连接状态未知,则第一主机和第二主机分别绑定各自的用户数据报协议UDP端口,在第一主机和第二主机的UDP端口间发送探测包以及探测响应包,实现在第一主机和第二主机间建立对等直连通道。
9、根据权利要求8所述的方法,其特征在于,所述发送探测包以及探测响应包进一步包括:将第一主机和第二主机的连接状态更新为不通状态,步骤a2所述判断进一步包括:
判断第一主机和第二主机的连接状态是否为不通状态,如果是,则该方法进一步包括:
第一主机通过转发服务器向第二主机传送数据。
10、根据权利要求8所述的方法,其特征在于,在相应主机接收到探测包之后,该方法进一步包括:将第一主机和第二主机的连接状态更新为通的状态,步骤a2所述判断进一步包括:
判断第一主机和第二主机的连接状态是否为通的状态,如果是,则该方法进一步包括:
第一主机和第二主机通过已经建立的直连通道传送数据。
11、根据权利要求9或10所述的方法,其特征在于,所述对连接状态的更新为:
在用户信息表中对所述连接状态进行更新。
12、根据权利要求9或10所述的方法,其特征在于,所述传送数据之后,该方法进一步包括:
判断数据传送是否已经结束,如果是,则结束数据传送,否则,返回所述步骤a1。
13、根据权利要求8所述的方法,其特征在于,所述第一主机和第二主机分别位于不同网络地址转换器NAT所管辖的内网中,所述转发服务器位于公网中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100020580A CN100426769C (zh) | 2005-01-12 | 2005-01-12 | 一种建立对等直连通道的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100020580A CN100426769C (zh) | 2005-01-12 | 2005-01-12 | 一种建立对等直连通道的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1805388A CN1805388A (zh) | 2006-07-19 |
CN100426769C true CN100426769C (zh) | 2008-10-15 |
Family
ID=36867240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100020580A Active CN100426769C (zh) | 2005-01-12 | 2005-01-12 | 一种建立对等直连通道的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100426769C (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101442478B (zh) * | 2007-11-21 | 2013-01-30 | 华为技术有限公司 | 一种无线网络中数据通道建立的方法、系统及设备 |
CN101217536B (zh) * | 2007-12-28 | 2011-11-09 | 腾讯科技(深圳)有限公司 | 穿越网络地址转换设备/防火墙的方法、系统及客户端 |
CN102546559B (zh) * | 2010-12-29 | 2015-10-28 | 北京新媒传信科技有限公司 | 受限网络中端到端传输数据的方法、设备和系统 |
CN102497446B (zh) * | 2011-12-26 | 2015-04-15 | 杭州华三通信技术有限公司 | 一种穿越nat设备的业务流传输方法及装置 |
CN103188134B (zh) * | 2011-12-29 | 2016-12-21 | 腾讯科技(深圳)有限公司 | 逻辑中转通信方法、逻辑中转服务器和逻辑中转通信系统 |
CN103873600B (zh) * | 2012-12-10 | 2018-10-26 | 中兴通讯股份有限公司 | 一种网络地址转换穿透方法及设备 |
CN103347099B (zh) * | 2013-05-29 | 2016-08-10 | 华为技术有限公司 | 一种数据交互的方法、装置及系统 |
US9432330B2 (en) | 2013-05-29 | 2016-08-30 | Huawei Technologies Co., Ltd. | Data interaction method, apparatus, and system |
CN104519022A (zh) * | 2013-09-29 | 2015-04-15 | 北京新媒传信科技有限公司 | 一种建立连接通道的方法及装置 |
CN104702565B (zh) * | 2013-12-05 | 2019-09-17 | 南京中兴新软件有限责任公司 | 媒体资源共享的方法、共享服务器及共享系统 |
CN105306441A (zh) * | 2015-09-18 | 2016-02-03 | 四川效率源信息安全技术股份有限公司 | 基于p2p网络在线传输的阅后即焚方法和装置 |
CN114423098B (zh) * | 2020-10-10 | 2024-02-06 | 海能达通信股份有限公司 | 多基站的组网方法、多基站网络的通信方法及其相关装置 |
CN112887187B (zh) * | 2021-01-19 | 2022-09-06 | 海尔数字科技(青岛)有限公司 | 一种设备间通信建立方法、系统、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1493140A (zh) * | 2001-02-20 | 2004-04-28 | �������繫˾ | 允许数据传输穿越防火墙的方法和设备 |
JP2004180003A (ja) * | 2002-11-27 | 2004-06-24 | Kitt Peak:Kk | 通信ネットワークシステムおよび通信の接続方法 |
CN1531801A (zh) * | 2000-09-13 | 2004-09-22 | ������̩��������Դ�������ϻ﹫˾ | 便于对等应用通信的方法和装置 |
-
2005
- 2005-01-12 CN CNB2005100020580A patent/CN100426769C/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1531801A (zh) * | 2000-09-13 | 2004-09-22 | ������̩��������Դ�������ϻ﹫˾ | 便于对等应用通信的方法和装置 |
CN1493140A (zh) * | 2001-02-20 | 2004-04-28 | �������繫˾ | 允许数据传输穿越防火墙的方法和设备 |
JP2004180003A (ja) * | 2002-11-27 | 2004-06-24 | Kitt Peak:Kk | 通信ネットワークシステムおよび通信の接続方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1805388A (zh) | 2006-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100426769C (zh) | 一种建立对等直连通道的方法 | |
US11522734B2 (en) | Method for controlling a remote service access path and relevant device | |
US8631155B2 (en) | Network address translation traversals for peer-to-peer networks | |
JP6721166B2 (ja) | 仮想ネットワークにおける分散型フロー状態p2p設定のためのシステムおよび方法 | |
US10375193B2 (en) | Source IP address transparency systems and methods | |
CN101848235B (zh) | 一种支持nat穿越的实时多媒体数据p2p传输方案 | |
US8055771B2 (en) | Network traversal method for establishing connection between two endpoints and network communication system | |
CN100521663C (zh) | 点对点通信中穿越网络地址转换的方法 | |
US7739384B2 (en) | System and method for load balancing | |
US9143421B2 (en) | Network system capable of implementing stun with the assistance of two network devices and method thereof | |
CN1917512B (zh) | 一种建立对等直连通道的方法 | |
EP1892929A1 (en) | A method, an apparatus and a system for message transmission | |
US20020129165A1 (en) | Network address translation and port mapping | |
US20060209830A1 (en) | Packet processing system including control device and packet forwarding device | |
US10212126B2 (en) | System for mediating connection | |
CN106302322B (zh) | 一种虚拟机数据流管理方法和系统 | |
CN102594672A (zh) | 适用于低可靠网络环境下高质量互联网通讯的方法及系统 | |
CN105591962B (zh) | 一种链路负载均衡的探测方法和装置 | |
CN113542244B (zh) | 微服务调用方法、装置、服务器和系统 | |
CN104618491B (zh) | 一种代理服务器及数据转发方法 | |
CN107786536B (zh) | 一种tcp反向端口穿透方法及其系统 | |
CN107659436A (zh) | 一种防止业务中断的方法及装置 | |
CN102480503A (zh) | P2p流量识别方法和装置 | |
CN108462612A (zh) | 调整rtp媒体流传输的方法、装置、电子设备和存储介质 | |
CN108337331B (zh) | 网络穿透方法、装置、系统及网络连通性检查方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |