一种p2p网络中穿透nat建立覆盖网的方法和系统的制作方法

文档序号:7741393阅读:104来源:国知局
专利名称:一种p2p网络中穿透nat建立覆盖网的方法和系统的制作方法
技术领域
本发明涉及一种P2P网络中穿透NAT建立覆盖网的方法及系统。
背景技术
随着音视频等大带宽数据交换的迅猛发展,传统的C/S架构由于服务器带宽及处 理能力等瓶颈很难适应大规模的数据交换。点对点P2P(Peer-To-Peer)技术能够很好的解 决这个问题,在P2P系统中,节点之间通过直接建立通道来传输数据,同时将很多数据处理 放在节点本地进行,能够很大地降低服务器的带宽和处理能力压力,因而得到广泛的应用。
P2P网络是指通过P2P系统中节点间互联通道建立起来的网络。中心化P2P网络 是指在整个P2P网络中有一个中心节点负责管理所有节点,这种结构特点是所有节点都和 中心节点保持连接,中心节点保存所有在线节点的相关信息,同时对节点进行必要的管理。
覆盖网是指建立在已有网络之上的网络,通过节点间增加虚拟的、额外的连接来 达到某种网络性能。P2P覆盖网是指在现有的INTERNET网之上搭建一层网络,用来传输所 需的P2P数据,P2P覆盖网的建立关系到整个P2P网络的性能和承载能力。
NAT (网络地址转换器)是一种把内部网络(简称内网)私有IP及端口转换为外 部网络(简称公网)IP及端口的一种技术。它是由于目前IPv4网络环境中,网络地址匮乏 而产生的,位于NAT之后的多台主机可以通过一个或几个公网IP连接到INTERNET,这在某 种程度上缓解了目前IPv4环境中IP地址紧张的状况,但是NAT的存在会使得位于NAT之 后的两个节点之间建立连接非常困难。NAT穿透就是采用某种技术使得位于NAT之后的两 台主机之间能够互联。目前常用的UDP穿透方法包括STUN协议、TRUN协议和UDP打洞等。
NAT地址转换一般有两种策略,静态转换和动态转换。包含NAT的设备(路由器、 交换机或者防火墙等,以下简称NAT设备) 一般会保存一个地址映射表,该表项记录一对内 网地址和对应的转换后的公网地址。NAT设备收到数据包后会查找该表项决定发送的目标 地址。静态转换是指地址映射表中记录几条固定的映射表项。动态转换是指当内网向外网 发送数据时,查询地址映射表项未找到对应表项时,NAT会采用一定的算法临时为该连接分 配一个公网端口,并在影射表中临时添加一项映射关系,当目标公网主机返回数据时,NAT 设备会查找到映射表中刚才的映射表项,将数据转发给刚才的内网主机。
NAT设备具有如下特点1)会丢弃一些外部主动发送来的映射表中没有的数据 包。2)NAT设备会删除映射表中长期不活动的动态映射表项,所以动态映射有生存周期,也 就是说当位于NAT之后的主机向外部地址发送数据包,隔太久时间后,NAT设备也会丢弃该 外部地址发送来的数据包。3)同时根据2)的原因,NAT之后的主机向外网地址发送数据 包,产生一个映射表项,如果隔太久时间后该主机利用相同端口向外发送数据包,可能会产 生另一个映射表项,映射为另一个公网端口。 4)由于不同的NAT设备采用的地址转换算法 不同,穿透NAT建立连接有可能失败。5)目前大部分NAT穿透技术采用UDP打洞技术,由于 网络的波动性,当网络状况差时会产生UDP丢包,降低穿透的成功率。6)位于多级NAT网关 之后节点之间的穿透问题。
4
由于这些原因,目前的穿透方法存在可靠性差、穿透率低等特点,不能在各种复杂 网络状况下,建立高效的、高可靠的P2P覆盖网络。

发明内容
针对现有的上述问题,本发明提供一种中心化P2P网络中,能够适应各种网络环 境,提高NAT穿透的成功率,建立高效的、可靠的P2P覆盖网的方法和系统。
本发明的方案如下 —种P2P网络中穿透NAT建立覆盖网的方法,步骤是 步骤IO)节点获取自己的最内层子网的IP,并TCP连接公网中心服务器,注册ID,
步骤20)当节点要向目标节点打洞时,先和公网UDP打洞服务器交互获取自己的 公网IP和UDP端口, 步骤30)节点将包含自己公网和最内层子网IP和UDP端口的通知,通过公网中心 服务器转发给目标节点, 步骤40)目标节点收到上述通知后,按上述方法获取其公网IP和UDP端口,通过 公网中心服务器转发给本节点自己的公网和最内层子网IP和UDP端口。同时判断对方公 网IP是否和本节点的公网IP相同,如果相同开始周期性向对方最内层子网地址UDP打洞, 否则开始周期性向对方公网地址UDP打洞, 步骤50)本节点收到中心服务器发送来的打洞应答后,判断对方公网IP是否和本 节点的公网IP相同,如果相同开始周期性向对方最内层子网地址UDP打洞,否则开始周期 性向对方公网地址UDP打洞, 步骤60)本节点和目标节点在收到对方UDP打洞后,修改对方的IP和端口 ,并应 答一个UDP包。收到打洞应答消息后认为打洞成功,建立UDP通道,打洞持续一定时间,不 管有没有收到UDP打洞包或UDP应答包, 步骤70)打洞持续时间结束后,如果仍未收到UDP打洞包或则UDP打洞应答包,认 为打洞失败。本节点和目标节点间的数据通过中心服务器进行转发。
其中步骤10)包括 步骤110)节点获取自己的最内层子网的IP,同时绑定一个本地UDP端口,
步骤120)节点TCP连接到中心服务器,并注册自己的ID。
其中步骤20)包括 步骤210)通过本地UDP端口向公网UDP打洞服务器发送一个获取公网IP和UDP 端口的UDP包,该UDP包只包含获取公网地址标示, 步骤220) UDP打洞服务器收到请求公网地址的UDP包之后,提取该UDP包的IP和
PORT,将包含该IP和PORT的UDP包返回给节点,不做任何记录, 步骤230)节点收到UDP返回包后,记录自己的公网IP和PORT, 步骤240)为避免UDP包丢失,节点周期执行步骤1)直至获取公网IP、P0RT成功。 其中步骤30)包括 步骤310)节点获取自己UDP端口对应的公网IP和PORT后,向中心服务器发送一 个TCP打洞请求消息,该请求包含自己的公网IP和P0RT、自己的ID、目标节点的ID,
步骤 )中心服务器收到上述TCP打洞请求后,提取其中的目标节点的ID,查找该ID对应的连接,并将该TCP打洞请求转发给目标节点。
其中步骤40)包括 步骤410)目标节点收到公网TCP转发服务器发送来的TCP打洞请求后,按照步骤 30)所述方法获取自己的公网UDP端口 , 步骤420)目标节点向公网TCP转发服务器发送一个TCP打洞应答包,该包包含自 己的最内层子网的IP-PORT和公网IP-PORT及自己的ID和对方的ID,
步骤430)目标节点判断对方的公网IP是否和自己的公网IP相等。若相等,开始 周期向本节点的最内层子网IP-PORT发送UDP打洞包;若不等,开始周期向本节点的公网 IP-PORT发送UDP打洞包, 步骤440) TCP转发服务器收到打洞应答后,根据其中的IDKEY将该应答转发给本 节点。 其中步骤50)包括 步骤510)本节点收到打洞应答后,记录对方的公网IP-PORT及最内层子网 IP-PORT, 步骤520)本节点判断对方的公网IP是否和自己的公网IP相等。若相等,开始周 期向对方的最内层子网IP-PORT发送UDP打洞包;若不等,开始周期向对方的公网IP-PORT 发送UDP打洞包。 本发明同时又提供一种P2P网络中穿透NAT建立覆盖网的系统,包括
公网TCP转发服务器、公网UDP打洞服务器、客户终端; 其中,客户终端用于连接公网TCP转发服务器,并注册自己的ID ;获取并记录自 己的公网IP-PORT及最内层子网的IP-PORT ;及向目标节点打洞或响应对方节点的打洞请 求; 公网TCP转发服务器主要功能是记录注册的PEER列表;转发打洞请求消息和打洞 应答消息UDP打洞失败后,转发节点之间的数据; 公网UDP打洞服务器用于为客户终端获取自己的公网IP-PORT,不记录任何信息。
本发明有益效果 本发明可以很好的解决复杂网络状况下,P2P网络中节点间穿透NAT建立覆盖网 问题,能够解决NAT映射的生命周期问题、udp丢包造成的穿透成功率下降问题、多层子网 后的节点间打洞问题。


图1为本发明P2P网络中节点间穿透NAT建立覆盖网的消息时序图。
图2为本发明P2P网络中节点间穿透NAT建立覆盖网的流程图。
图3为本发明P2P网络中节点间穿透NAT建立覆盖网的系统示意图。
具体实施例方式
下面以具体实施例对本发明作进一步的阐述,但实施例仅用于说明,并不限制发 明的范围。 下面结合附图对本发明的方法和系统作详细描述
实施例1 如图l描述了整个方法的消息时序图,下面主要结合图l和图2对整个发明的方 法进行阐述。 在步骤S110中,节点PEER1绑定一个本地UDP端口号,然后获取自己的最内层子 网的IP,并将该UDP端口和该IP记作L0CALIP-P0RT。 在步骤S120中,节点PEER1连接公网TCP转发服务器,并向该服务器注册自己的 ID。 TCP转发服务器记录该ID及对应的连接SOCKET 。 在步骤S210中,节点PEER1向公网UDP服务器发送获取公网IP端口 UDP包。
在步骤S220中,公网UDP服务器提取出UDP包中的IP和PORT,并将其返回给节点 PEER1, PEER1记录自己的PUBLICIP-PORT。 考虑到在网络状况比较差的时候,UDP丢包比较严重PEER1在获取自己的 PUBLICIP-PORT时,通过周期反复发送请求直到获取返回的UDP包为止,提高了成功率。
在步骤S310中,PEER1向TCP转发服务器发送打洞请求消息,该消息包括PEER1的 LOCALIP-PORT、 PUBLICIP-PORT、 PEER1ID及目标PEER2ID。 在步骤S320中,TCP转发服务器收到打洞消息后,根据其中的PEER2ID找到对应 的SOCKET,将该消息发送给PEER2。 在此需要举例说明 一 下NAT映射的生命周期问题,假设PEER1在Tl时刻 的LOCALIP-PORT为192. 168. 200. 3 :2000向PEER2发送UDP包,映射出去的公网地址 PUBLICIP-PORT为218. 83. 243. 94 :8005,此时PEER2发送往218. 83. 243. 94 :8005的UDP包 也能够到达PEER1。如果PEER1很久没有通过2000端口向PEER2发送UDP包,该映射关系 可能已经被删除。在T2时刻,如果PEER2向218. 83. 243. 94 :8005发送UDP包,由于映射关 系已经不存在,该UDP包浆被丢弃。同时PEER1通过2000端口向PEER2发送UDP包将有可 能产生另一个映射218. 83. 243. 94 :29008。 如果通过UDP打洞服务器转发该打洞请求,而不是通过TCP转发服务器转发该消 息,一方面当网络拥挤时可能会造成该命令丢包,另一方面由于发送该UDP打洞命令包时, 由于映射关系已经被删除导致UDP打洞命令包根本到达不了 PEER2。利用TCP的可靠性,可 以消除这些问题。 在步骤S410中,PEER2收到TCP转发服务器发送来的打洞请求消息后,按照步骤 S210和S220方法,获取自己的PUBLICIP-PORT。 这样做的目的也是考虑的NAT映射的生命周期问题,获取最新的映射关系,提高 打洞成功率。 在步骤S420和S440中,通过和步骤S310、 S320类似的操作,PEER2将自己的 LOCALIP-PORT、 PUBLICIP-PORT发送给PEER1。 在步骤S430中,节点PEER2判断PEER1的PUBLICIP是否和自己的PUBLICIP相 等,如果相等说明PEER1和PEER2在一个公网IP之后,可能PEER1和PEER2在不同的子网 之后,由于PEER1经过公网到PEER2路径所经过的NAT个数一定会比PEER1经内网到PEER2 要多,限制的更多,所以如果PEER1和PEER2经过内网不能穿透,经过外网更不能穿透。鉴 于这个原因我们采取PEER2向PEER1内网地址打洞,这样可以解决处于多层子网之后的节 点间的打洞。
在步骤S510中,采取和步骤S430相同的操作。 步骤S510和S430中为了减少丢包原因造成的打洞成功率低,同时也为了增加各 种类型NAT的穿透成功率,降低TCP传输打洞应答延时造成的打洞成功率的降低,PEERl和 PEER2节点间周期性对发UDP包,并持续一定时间。 步骤S510和步骤S430中,PEERl节点收到PEER2节点的UDP打洞包后,修改PEER2 的IP-PORT,如果PEERl的PUBLICIP等于PEER2的PUBLICIP,修改PEER2的L0CALIP-P0RT 否则修改PEER2的PUBLICIP-PORT。然后继续向修改后的地址发送UDP打洞包。PEER2收 到PEERl的UDP打洞包后,采取相同的操作。 如果PEER1收到PEER2的打洞消息,认为打洞成功,PEER2节点相同,以后PEERl和 PEER2之间可以直接发送消息。 在步骤S70中,当节点PEERl和PEER2打洞时间结束,仍未收到打洞消息,PEERl和 PEER2会认为它们之间不能直接建立连接,PEERl和PEER2之间的数据,通过公网TCP转发 服务器来转发。具体的,为每个要发送的数据加上目标节点ID, TCP转发服务器收到后,提 取出来目标节点ID,然后将数据转发给目标节点。 当PEERl和PEER2打洞成功时,当网络拥挤时,在节点间发送一些可靠性要求高的 消息时,也可以通过TCP转发服务器转发。
实施例2 如图3所示,本发明的系统示意图,一种P2P网络中穿透NAT建立覆盖网的系统, 包括公网TCP转发服务器10,公网UDP打洞服务器20及客户终端30,其中客户终端维护一 个TCP连接并绑定一个UDP端口 。 其中,客户终端用于连接公网TCP转发服务器,并注册自己的ID ;获取并记录自己 的公网IP-PORT及最内层子网的IP-PORT ;及向目标节点打洞或响应对方节点的打洞请求。
公网TCP转发服务器主要功能是记录注册的PEER列表;转发打洞请求消息和打洞 应答消息;UDP打洞失败后,转发节点之间的数据。 公网UDP打洞服务器用于为客户终端获取自己的公网IP-PORT,不记录任何信息。
本发明可以很好的解决复杂网络状况下,P2P网络中节点间穿透NAT建立覆盖网 问题,能够解决NAT映射的生命周期问题、UDP丢包造成的穿透成功率下降问题、多层子网 后的节点间打洞问题。
8
权利要求
一种P2P网络中穿透NAT建立覆盖网的方法,其特征在于,步骤是步骤10),节点获取所处子网地址,并TCP向公网TCP转发服务器注册ID;步骤20),当节点要向目标节点打洞时,先和公网UDP打洞服务器交互获取自己的公网IP和UDP端口;步骤30),节点将包含自己公网和内网IP和UDP端口的通知,通过公网中心服务器转发给目标节点;步骤40),目标节点收到上述通知后,按上述方法获取其公网IP和UDP端口,通过公网TCP转发服务器将该信息转发给本节点;同时判断对方公网IP是否和本节点的公网IP相同,如果相同开始周期性向对方最内层子网地址UDP打洞,否则开始周期性向对方公网地址UDP打洞,步骤50)本节点收到中心服务器发送来的打洞应答后,判断对方公网IP是否和本节点的公网IP相同,如果相同开始周期性向对方最内层子网地址UDP打洞,否则开始周期性向对方公网地址UDP打洞;步骤60)本节点和目标节点在收到对方UDP打洞后,修改对方的IP和端口,并应答一个UDP包;收到打洞应答消息后认为打洞成功,建立UDP通道,打洞持续一定时间,不管有没有收到UDP打洞包或UDP应答包;步骤70)打洞持续时间结束后,如果仍未收到UDP打洞包或则UDP打洞应答包,认为打洞失败,本节点和目标节点间的数据通过中心服务器进行转发。
2. 根据权利要求1所述的一种P2P网络中穿透NAT建立覆盖网的方法,其特征在于,其 中步骤10)包括步骤110)节点获取自己的最内层子网的IP,同时绑定一个本地UDP端口 , 步骤120)节点TCP连接到中心服务器,并注册自己的ID。
3. 根据权利要求1所述的一种P2P网络中穿透NAT建立覆盖网的方法,其特征在于,其 中步骤20)包括步骤210)通过本地UDP端口向公网UDP打洞服务器发送一个获取公网IP和UDP端口 的UDP包,该UDP包只包含获取公网地址标示,步骤220) UDP打洞服务器收到请求公网地址的UDP包之后,提取该UDP包的IP和PORT, 将包含该IP和PORT的UDP包返回给节点,不做任何记录,步骤230)节点收到UDP返回包后,记录自己的公网IP和PORT,步骤240)为避免UDP包丢失,节点周期执行步骤1)直至获取公网IP、P0RT成功。
4. 根据权利要求1所述的一种P2P网络中穿透NAT建立覆盖网的方法,其特征在于,其 中步骤30)包括步骤310)节点获取自己UDP端口对应的公网IP和PORT后,向中心服务器发送一个 TCP打洞请求消息,该请求包含自己的公网IP和PORT、自己的ID、目标节点的ID,步骤320)中心服务器收到上述TCP打洞请求后,提取其中的目标节点的ID,查找该ID 对应的连接,并将该TCP打洞请求转发给目标节点。
5. 根据权利要求1所述的一种P2P网络中穿透NAT建立覆盖网的方法,其特征在于,其 中步骤40)包括步骤410)目标节点收到公网TCP转发服务器发送来的TCP打洞请求后,按照步骤30)所述方法获取自己的公网UDP端口 ,步骤420)目标节点向公网TCP转发服务器发送一个TCP打洞应答包,该包包含自己的 最内层子网的IP-PORT和公网IP-PORT及自己的ID和对方的ID,步骤430)目标节点判断对方的公网IP是否和自己的公网IP相等。若相等,开始周 期向本节点的最内层子网IP-PORT发送UDP打洞包;若不等,开始周期向本节点的公网 IP-PORT发送UDP打洞包,步骤440) TCP转发服务器收到打洞应答后,根据其中的IDKEY将该应答转发给本节点。
6. 根据权利要求1所述的一种P2P网络中穿透NAT建立覆盖网的方法,其特征在于,其 中步骤50)包括步骤510)本节点收到打洞应答后,记录对方的公网IP-PORT及最内层子网IP-PORT, 步骤520)本节点判断对方的公网IP是否和自己的公网IP相等。若相等,开始周期向对方的最内层子网IP-PORT发送UDP打洞包;若不等,开始周期向对方的公网IP-PORT发送UDP打洞包。
7. —种P2P网络中穿透NAT建立覆盖网的系统,其特征在于,包括 公网TCP转发服务器、公网UDP打洞服务器、客户终端;其中,客户终端用于连接公网TCP转发服务器,并注册自己的ID ;获取并记录自己的公 网IP-PORT及最内层子网的IP-PORT ;及向目标节点打洞或响应对方节点的打洞请求;公网TCP转发服务器主要功能是记录注册的PEER列表;转发打洞请求消息和打洞应答 消息;UDP打洞失败后,转发节点之间的数据;公网UDP打洞服务器用于为客户终端获取自己的公网IP-PORT,不记录任何信息。
全文摘要
本发明为P2P网络中穿透NAT建立覆盖网的方法和系统。包括节点获取所处子网地址,并TCP向公网TCP转发服务器注册ID。当节点要向目标节点打洞时,先和公网UDP打洞服务器交互获取自己的公网IP和UDP端口。节点将包含自己公网和内网IP和UDP端口的通知,通过公网中心服务器转发给目标节点。目标节点收到上述通知后,按上述方法获取其公网IP和UDP端口,通过公网TCP转发服务器将该信息转发给本节点。本节点和目标节点收到对方的通知后,开始周期性向对方发送UDP打洞包,并在收到对方UDP打洞后,修改对方的IP和端口,打洞持续一定时间。收到打洞应答消息后认为打洞成功。如果打洞失败,和目标节点间的数据通过TCP转发服务器转发。
文档编号H04L29/12GK101741914SQ20101010483
公开日2010年6月16日 申请日期2010年2月3日 优先权日2010年2月3日
发明者方文杰 申请人:上海悠络客电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1