P2P通信系统与中继通信方法
技术领域
本申请涉及对等网络(Peer-to-Peer,P2P)中的网络地址转换(NetworkAddressTranslation)穿越技术领域,更具体地,涉及一种P2P通信系统与中继通信方法。
背景技术
随着互联网的发展和宽带应用的普及,人们获取信息的方式已经发生改变:从传统的书籍、报纸、电视、广播等方式,继而变成通过互联网获取。尤其是互联网将影视节目、新闻、广告、聊天视频、游戏视频和监控视频等等丰富的综合性网络视频资源进行共享,从而网络视频已经成为人们学习、社交以及休闲娱乐而不可替代的重要方式。传统的基于客户端/服务器架构的网络系统由于服务器带宽和处理能力的限制导致其可扩展性极差。P2P作为一种有效的解决方案在得到了极大的推广。在P2P模式下,每个节点在从别的节点接收数据的同时还向其他节点发送数据,这样利用客户端节点的上传能力可以极大减轻服务器的负担。
RelayServer(中继服务器)是在P2P系统中主要负责辅助客户端之间进行互联互通的服务器,其功能主要包括:辅助Peer(客户端节点)检测NAT类型,帮助Peer检测是否位于防火墙和IP受限NAT后,辅助Peer间进行互联互通。
NAT英文全称是“NetworkAddressTranslation”,中文意思是“网络地址转换”,它是一个IETF(InternetEngineeringTaskForce,Internet工程任务组)标准,允许一个整体机构以一个公用IP(InternetProtocol)地址出现在Internet上。它是一种把内部私有网络地址(内网IP)翻译成合法网络IP地址(公网IP)的技术。网络地址转换(NAT)主要是为了解决IP地址不足,隐藏和保护网络内部计算机,有效地避免来自网络外部的攻击等问题,NAT功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。
NAT类型主要分为:完全圆锥型NAT(FullconeNAT),受限圆锥型NAT(Address-RestrictedconeNAT),端口受限圆锥型NAT(Port-RestrictedconeNAT)和对称型NAT(SymmetricNAT)。
完全圆锥型NAT:一个内部的地址映射到外部地址成功后,任意外部的主机都能够通过这个外部地址发送数据包到达内部地址。
受限圆锥型NAT:一个内部的地址映射到外部地址成功后,外部主机通过外部地址发送数据包到达内部地址的前提条件是:内部地址首先向外部主机的地址(IP:任意端口)发送过数据包,该数据包发送的端口不受限制。
端口受限圆锥型NAT:一个内部的地址映射到外部地址成功后,外部主机通过外部地址发送数据包到达内部地址的前提条件是:内部地址首先向外部主机的地址(IP:固定端口)发送过数据包,该数据发送的端口必须是外部主机绑定的端口。
对称型NAT:每一个来自相同内部IP与端口,到一个特定目的地地址和端口的请求,都映射到一个独特的外部IP地址和端口。同一内部IP与端口发到不同的目的地和端口的信息包,都使用不同的映射,只有收到过内部主机数据包的外部主机才能返回数据包。
在现有技术中,每个Peer都必须注册到指定的RelayServer上,同时RelayServer记录下该Peer的外网IP和外网端口,并将该外网IP和端口返回给Peer。Peer根据从RelayServer返回的外网IP和内网IP进行对比,判断自己是否属于公网用户,如果是公网用户则无需判定自己的NAT类型,否则继续进行NAT类型检测。NAT类型探测完成后,Peer会根据对方的NAT类型选择是否需要通过RelayServer辅助下和对方建立连接,对适合NAT穿越条件的俩个Peer,主动发起连接的Peer首先向被连接的Peer的外网地址发送一个数据包,该数据包基本上会被对端的防火墙丢弃,但是该数据包会在自己的防火墙上注册允许从对端的外部地址发送来的数据包进入,同时主动连接方向被连接的Peer的RelayServer发送连接请求,RelayServer接收到该请求后会发送通知被连接的Peer有连接请求,并把主动方的外网地址和端口告知被动连接方,这时由于在主动发起方的防火墙上已经注册了被动方的外网地址和端口,所以被动方此时经由此外部地址发送给主动连接方的数据包会被允许通过防火墙,并被主动连接方接收到,通路到此建立完成。
目前,RalayServer能够辅助连通的PeerNAT类型包括完全圆锥型,受限圆锥型和端口圆锥型,由于对称型NAT本身的特性,导致多个外部主机不能够共享同一个Peer的外部地址,所以建立连接的俩个Peer如果一者属于对称型NAT,另一者属于受限圆锥型,端口受限圆锥型或者对称型任意一种都无法辅助俩者建立连接。
此外,由于RelayServer大都部署在服务器端,P2P系统对RelayServer的依赖较强,并且Peer对该服务器的请求量比较频繁,会导致服务器部署成本较高;而每个RelayServer需要维护大量的Peer节点,高峰时段短时间内如果有大量的Peer上线,会导致RelayServer的负载突然升高,持续高负载的状态会影响Peer之间建立连接,继而影响P2P系统整体的运行效率。
发明内容
有鉴于此,本申请提供一种P2P通信系统与中继通信方法以解决上述问题。
本申请公开了一种P2P通信系统,其特征在于,包含:
第一客户端节点,用于发送第一连接请求指令至第二客户端节点,并接收与所述连接请求指令对应的第一连接应答指令;
所述第二客户端节点,用于接收所述第一连接请求指令,并转送所述第一连接请求指令至第三客户端节点;以及
所述第三客户端节点,用于接收所述第二客户端节点转送的所述第一连接请求指令,并发送所述第一连接应答指令至所述第一客户端节点,
其中,所述第二客户端节点具有公网IP,以及所述第一连接请求指令是为了请求建立所述第一客户端节点与所述第二客户端节点之间的连接。
优选地,其中,所述第一客户端节点更直接发送第二连接请求指令至所述第三客户端节点,且在接收到所述第二连接请求指令后,所述第三客户端节点发送对应的第二连接应答指令至所述第一客户端节点,其中所述第二连接请求指令是为了请求建立所述第一客户端节点与所述第三客户端节点之间的连接。
优选地,其中,所述第一客户端节点、所述第二客户端节点以及所述第三客户端节点构成树状结构,且所述第二客户端节点在所述树状结构中作为树根节点,所述第一客户端节点和所述第三客户端节点在所述树状结构中作为树叶节点。
优选地,其中,所述树状结构中包含N个树叶节点,且N为预先设定的不小于2的整数。
优选地,其中,所述树叶节点周期性向所述树根节点发送中继UDP保持数据包,所述树根节点接收到所述中继UDP保持数据包后返回对应的应答数据包至所述树叶节点;以及当未收到特定树叶节点按时发送的中继UDP保持数据包或收到所述特定树叶节点发送的离开数据包时,所述树根节点将所述特定树叶节点从所述树状结构中删除。
本申请还公开了一种中继通信方法,应用于客户端节点,其特征在于,包含:
从第一客户端节点向第二客户端节点发送第一连接请求指令;
在所述第二客户端节点接收所述第一连接请求指令;
从所述第二客户端节点转送所述第一连接请求指令至第三客户端节点;
在所述第三客户端节点接收所述第二客户端节点转送的所述第一连接请求指令;以及
从所述第三客户端节点发送对应的第一连接应答指令至所述第一客户端节点,
其中,所述第二客户端节点具有公网IP,以及所述第一连接请求指令是为了请求建立所述第一客户端节点与所述第二客户端节点之间的连接。
优选地,其中,更包含:
从所述第一客户端节点直接发送第二连接请求指令至所述第三客户端节点;
在所述第三客户端节点接收所述第二连接请求指令;以及
从所述第三客户端节点发送对应的第二连接应答指令至所述第一客户端节点,
其中所述第二连接请求指令是为了请求建立所述第一客户端节点与所述第三客户端节点之间的连接。
优选地,其中,所述第一客户端节点、所述第二客户端节点以及所述第三客户端节点构成树状结构,且所述第二客户端节点在所述树状结构中作为树根节点,所述第一客户端节点和所述第三客户端节点在所述树状结构中作为树叶节点。
优选地,其中,所述树状结构中包含N个树叶节点,且N为预先设定的不小于2的整数。
优选地,其中,所述树叶节点周期性向所述树根节点发送UDP保持数据包,所述树根节点接收到所述UDP保持数据包后返回对应的应答数据包至所述树叶节点;以及当未收到特定树叶节点按时发送的UDP保持数据包或收到所述特定树叶节点发送的离开数据包时,所述树根节点将所述特定树叶节点从所述树状结构中删除。
与现有技术相比,本申请所述的P2P通信系统与中继通信方法,达到了如下效果:
1)具有公网IP的Peer充当RelayServer并组成树状结构,有效的缓解了RelayServer的负载,保障了P2P系统在高峰期时段的稳定性;以及
2)采用Peer充当RelayServer大幅度降低RelayServer的部署和运营成本。
当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有技术效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是依据本申请一实施例的P2P通信系统的示意图。
图2为依据本申请一实施例的P2P通信系统的互连互通动作序列的示意图。
具体实施方式
如在说明书及权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可理解,硬件制造商可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”为一开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题,基本达到所述技术效果。此外,“耦接”一词在此包含任何直接及间接的电性耦接手段。因此,若文中描述一第一装置耦接于一第二装置,则代表所述第一装置可直接电性耦接于所述第二装置,或通过其他装置或耦接手段间接地电性耦接至所述第二装置。说明书后续描述为实施本申请的较佳实施方式,然所述描述乃以说明本申请的一般原则为目的,并非用以限定本申请的范围。本申请的保护范围当视所附权利要求所界定者为准。
由于应用了NAT技术,某些客户端节点(Peer)会具有公网IP。公网IP地址是Internet上的非保留地址,公网的计算机和Internet上的其他计算机可随意互相访问。从而,有些具有公网IP的Peer可以充当RelayServer使用,帮助其他Peer来实现互连互通。
依据图论,树是任意两个顶点间只有一条路径的图,而森林是互相不交并树的集合。在本申请的实施例中,按照设计,运营中的所有的RelayServer(具有公网IP的Perr)会形成森林结构,每个RelayServer(0级)构成的体系则是森林中的树。具体来说,0级的RelayServer自身及其所拥有的下一级NAT节点(包含非0级的RelayServer)构成树状结构,0级的RelayServer为树根节点,而NAT则为树中的叶子节点。每一个NAT节点都需要加入到特定的RelayServer中,成为这个RelayServer的成员。每一RelayServer维护的成员是有限制的,当NAT节点达到所属RelayServer维护成员的数量上限时,此RelayServer就会拒绝新成员的加入,同时会介绍其下级RelayServer给新成员使用。
新成员(Peer)加入RelayServer后,须周期性地向它所属的RelayServer发送RelayUDP‘keep’(中继UDP保持)数据包,RelayServer收到RelayUDP‘keep’数据包后,返回对应的应答数据包给发送方。若不能按时收到某成员的RelayUDP‘keep’数据包时,或收到其发送的‘leave’(离开)数据包时,RelayServer就会从其树状体系中删除此成员。RelayServer同时维护一个下级RelayServer列表,以便在不同的应用场景下使用。
图1是依据本申请一实施例的P2P通信系统100的示意图,其包含第一客户端节点(Peer1)101、第二客户端节点(Peer2)102以及第三客户端节点(Peer3)103,其中第二客户端节点(Peer2)102具有公网IP。上述系统中Peer间的互连互通动作的细节将于下文描述。
图2为依据本申请一实施例的P2P通信系统的互连互通动作序列的示意图。以Peer使用UTCP_RELAY_CONNECT连接时的逻辑为例,如图2所示,上述P2P通信系统的互连互通包含以下动作:
步骤一:Peer1(主动发起连接方)向Peer3(被动连接方)的Peer2发送第一连接请求指令(NET_RELAY_REQUEST),也可以另外向Peer2的外网地址发送第二连接请求指令(NET_INTRODUCE);
在上述步骤中,Peer1和Peer3为欲互连互通的两个客户端节点,而Peer2具有公网IP,在此体系中作为Peer3的RelayServer。
步骤二:Peer2收到Peer1发送的第一连接请求指令(NET_RELAY_REQUEST)后,向Peer3转发该指令;
步骤三:Peer3如果收到Peer1发送的第二连接请求指令(NET_INTRODUCE),则直接向Peer1回复第二连接应答指令(NET_RELAY_CONNECT);
步骤四:若Peer3从收到Peer2转发的第一连接请求指令(NET_RELAY_REQUEST),向Peer1的外网地址发送第一连接应答指令(NET_RELAY_CONNECT)。
步骤五:Peer1接收到来自Peer3的连接应答指令(NET_RELAY_CONNECT),表明连接握手成功,本次连接过程结束。
请注意,上述实施例虽然以Peer使用UTCP_RELAY_CONNECT连接时的逻辑为例进行说明,但本发明并非以此为限。本领域的技术人员在了解本发明基本精神的前提下,也可以实施通过其他指令来实现互连互通的系统,其皆应包含在本发明的范围内。
由于使用了具有公网IP的Peer充当RelayServer,与现有技术相比,本申请的技术方案达到了如下:
1)具有公网IP的Peer充当RelayServer并组成树状结构,有效的缓解了RelayServer的负载,保障了P2P系统在高峰期时段的稳定性;以及
2)采用Peer充当RelayServer能够大幅度降低RelayServer的部署和运营成本。
还需要说明的是,术语“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包含一系列要素的过程、方法、商品或者系统不仅包含那些要素,而且还包含没有明确列出的其他要素,或者是还包含为这种过程、方法、商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包含一个……”限定的要素,并不排除在包含所述要素的过程、方法、商品或者系统中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包含但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。