发明内容
本发明所要解决的技术问题是克服现有技术中由于登陆服务器向请求节点分配无法建立连接的邻居节点,从而导致整体性能较差的缺点。
本发明解决上述技术问题所采取的技术方案如下:
一种p2p系统中种子分发方法,包括:
登陆服务器接收节点发来的加入频道请求,该频道请求中包括频道ID信息、节点的IP地址信息和NAT类型、登陆时间;将该节点加入到本地缓存的频道节点列表中;
接收请求节点的查询邻居节点请求;
根据所述请求查询本地缓存的频道节点列表,从中获取符合条件的邻居节点;根据NAT类型和IP地址信息对所述查询到的邻居节点进行筛选,将筛选后的邻居节点信息返回给请求节点。
进一步地,优选的方法包括:
根据所述请求查询本地缓存的节点列表,从中获取符合条件的邻居节点,包括:从缓存的频道节点列表中选取与请求节点在同一ISP号码内的部分或者全部邻居节点;
根据NAT类型和IP地址信息对所述查询到邻居节点进行筛选,包括:根据NAT类型是否可建立直接连接选取可用的邻居节点;
基于IP地址的相似性对所述可用邻居节点进行评分,并选择评分在前的邻居节点。
进一步地,优选的是,所述加入频道请求中,所述IP地址信息包括:
公网IP地址和/或内网IP地址,PORT接口,所述将该节点加入到本地缓存的频道节点列表中,包括:
根据所述公网IP地址信息获取所述节点的ISP号码信息;
获取所述节点的网络拓扑信息;根据所述节点的网络拓扑信息更新或者建立本地缓存的频道节点列表。
进一步地,优选的是,所述将该节点加入到本地缓存的频道节点列表中,进一步具体包括:
从节点的加入频道请求中获取频道ID信息;
根据频道ID信息查询或者建立对应的频道ID对应的数据存储列表;
根据请求节点的公网IP地址获得其ISP号码,并从所述频道ID对应的数据存储列表查询或者建立所述ISP号码所对应的邻居节点Peer ID集合,并将节点的Peer ID和网络拓扑信息插入到集合当中。
进一步地,优选的是,进一步还包括:登陆服务器接收频道节点列表中的节点发来的心跳信息;
其中,当所述心跳信息中包含节点的NAT类型变更的信息时,根据所述NAT类型变更信息更新本地缓存的相应节点的NAT类型。
进一步地,优选的是,还包括:当一段时间内未接收到节点的心跳信息时,则登陆服务器从本地缓存的节点列表中清除相应的节点信息。
一种p2p系统中种子分发装置,包括:
接收单元,接收节点发来的加入频道请求,该频道请求中包括频道ID信息、节点的IP地址信息和NAT类型;
频道管理单元,用于将该节点加入到本地缓存的频道节点列表中;
所述接收单元,进一步用于接收请求节点的查询邻居节点请求;
节点分配单元,进一步用于根据所述请求查询本地缓存的频道节点列表,从中获取符合条件的邻居节点;
根据NAT类型和IP地址信息对所述查询到的邻居节点进行筛选,将筛选后的邻居节点信息返回给请求节点。
进一步地,优选的是,所述节点分配单元,根据所述请求查询本地缓存的节点列表,从中获取符合条件的邻居节点,进一步包括:从缓存的频道节点列表中选取与请求节点在同一ISP号码内的部分或者全部邻居节点;
根据NAT类型和IP地址信息对所述查询到邻居节点进行筛选,包括:根据NAT类型是否可建立直接连接选取可用的邻居节点;
基于IP地址的相似性对所述可用邻居节点进行评分,并选择评分在前的邻居节点。
进一步地,优选的是,所述加入频道请求中,所述IP地址信息包括:
公网IP地址和/或内网IP地址,PORT接口,所述频道管理单元将该节点加入到本地缓存的频道节点列表中,进一步包括:
根据所述公网IP地址信息获取所述节点的ISP号码信息;
获取所述节点的网络拓扑信息;根据所述节点的网络拓扑信息更新或者建立本地缓存的频道节点列表。
进一步地,优选的是,所述频道管理单元,将该节点加入到本地缓存的频道节点列表中,进一步具体包括:从节点的加入频道请求中获取频道ID信息;
根据频道ID信息查询或者建立对应的频道ID对应的数据存储列表;
根据请求节点的公网IP地址获得其ISP号码,并从所述频道ID对应的数据存储列表查询或者建立所述ISP号码所对应的邻居节点Peer ID集合,并将节点的Peer ID和网络拓扑信息插入到集合当中。
进一步地,优选的是,所述频道管理单元,进一步还用于接收频道节点列表中的节点发来的心跳信息;
其中,当所述心跳信息中包含节点的NAT类型变更的信息时,根据所述NAT类型变更信息更新本地缓存的相应节点的NAT类型。
进一步地,优选的是于,所述频道管理单元,进一步还用于当一段时间内未接收到节点的心跳信息时,则登陆服务器从本地缓存的节点列表中清除相应的节点信息。
本发明采取了上述方案以后,由于还包括根据NAT类型和IP地址信息对所述查询到邻居节点进行筛选,将筛选后的邻居节点信息返回给请求节点,因此,其最终分配的邻居节点性能较佳,克服了现有技术中由于Tracker为请求节点分配的邻居节点可能需要多次尝试建立连接之后,才能确定其是否为有效的邻居节点,从而导致系统性能较差的缺点。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
首先,对本发明中出现的英文缩写进行如下解释和说明。
STUN:Simple Traversal ofUDP over NATs,NAT的UDP简单穿越;
ISP:Internet Service Provider,互联网服务提供商;
CID:Channel ID,频道ID;CID time:登陆时间;
Peer ID:peer id,种子的ID号;
Peer:种子,节点;
NAT:Network Address Translation,网络地址转换;
NAT_OPEN:Not in NAT,and UDP are not limited;
NAT_OPEN_SYM:Not in NAT,and Firewall acts like symmetric NAT;
NAT_BLOCK:UDP traffic is blocked;
NAT_FULL_CONE:Full Cone NAT;
NAT_RESTRICT_CONE:Restrict Cone NAT;
NAT_PORT_RESTRICT_CONE:Port Restrict Cone NAT;
NAT_SYMMETRIC:Symmetric NAT;
NAT_UPNP_OPEN:In NAT,but is opened by UpnP;
Nat T:请求查询节点自身NAT TYPE;
Pnat T:种子节点的NAT TYPE。
方法实施例一:
为了克服现有的p2p系统,如视频点播系统中,数据调度中未考虑节点链路代价、不能快速分发种子和种子有效分发的缺限,本发明提出一种p2p视频点播系统中种子高效管理与有效分发方法。
如图2所示,在一个实施例中,根据本发明的一个方面,本发明提供了一种p2p系统中种子分发方法,包括:
步骤S101:登陆服务器接收节点发来的加入频道请求,该频道请求中包括频道ID信息、节点的IP地址信息和NAT类型、登陆时间;
步骤S102:将该节点加入到本地缓存的频道节点列表中;
步骤S103:接收请求节点的查询邻居节点请求;
步骤S104:根据所述请求查询本地缓存的频道节点列表,从中获取符合条件的邻居节点;
步骤S105:根据NAT类型和IP地址信息对所述查询到邻居节点进行筛选,将筛选后的邻居节点信息返回给请求节点。
也就是说,现有技术没有针对NAT类型和IP地址进行邻居节点筛选,因此,其选择的邻居节点往往不是最佳的邻居节点,而本申请则基于一定的策略对邻居节点进行筛选,因此,其最终分配的邻居节点性能较佳,克服了现有技术中为请求节点分配的邻居节点如果根本就无法建立连接,需要多次尝试建立连接之后,才能确定其是否为有效的邻居节点,这样会导致无谓的连接,从而导致系统性能较差的缺点。
方法实施例二:
以下结合具体实施例进一步地描述,其中,在该实施例中,主要对实施例一中的方法和步骤进行细化,如图3所示,具体包括:
步骤S201:登陆服务器接收节点发来的加入频道请求,该频道请求中包括频道ID信息、节点的IP地址信息和NAT类型;
其中,在实施例中,所述加入频道请求中,所述IP地址信息包括:
公网IP地址和/或内网IP地址,PORT接口,即如果节点属于公网的节点,则仅仅携带公网IP地址和公网的PORT接口;
如果节点属于NAT后的节点,则其会携带公网IP地址、内网IP地址、公网PORT接口、私网PORT接口。
步骤S202:登陆服务器将该节点加入到本地缓存的频道节点列表中,具体来说,主要包括:
根据所述公网IP地址信息获取所述节点的ISP号码信息;
获取所述节点的网络拓扑信息;根据所述节点的网络拓扑信息更新或者建立本地缓存的频道节点列表。
更具体地说,在具体的实施例中,上述步骤主要是按照以下的顺序进行相应的频道节点列表加入的:
步骤S2021:从节点的加入频道请求中获取频道ID信息;
步骤S2022:根据频道ID信息查询或者建立对应的频道ID对应的数据存储列表,再根据请求节点的公网IP地址获得其ISP号码;
步骤S2023:从所述频道ID对应的数据存储列表查询或者建立所述ISP号码所对应的邻居节点Peer ID集合,并将节点的Peer ID和网络拓扑信息插入到集合当中。
图5是本发明p2p系统中种子分发方法中登陆服务器管理种子、分配种子的流程图;
图6是本发明p2p系统中种子分发方法中登陆服务器进行NAT类型过滤的流程图;
结合上述具体的流程事宜进行详细说明,其中,根据上述实施例的技术启示,在一个实施例中,登录服务器管理数据存储列表所此前的数据存储信息数据结构如下:CID->ISP->SET<PeerID>。
更具体地说,登陆服务器维护了根据以下三种数据结构的数据存储列表,且这三种格式的数据存储列表分别用于:更新节点列表插入删除时使用(结构一)、查询节点列表时使用(结构二)、登录服务器更新节点过程使用(结构三),以此实现快速地进行查询和全面存储。
结构一:
typedef
std::map<std::string/*ISP*/,std::set<uint32/**PeerID*/>>ISp2pEERs_Orig;//更新节点列表插入删除时使用
结构二:
typedef
std::map<std::string/*ISP*/,std::vector<uint32/**PeerID*/>>ISp2pEERs_Copy;//查询节点列表时使用
结构三:
登录服务器更新节点过程使用。
其中,根据上述数据结构,当登陆服务器接收到节点注册频道的请求的时候,登陆服务器根据上述数据结构进行上述频道节点注册和更新,例如,在进行节点更新的时候,登录服务器从结构三对应的数据存储列表中,根据CID先查询到CID_orig,即如下的结构:
std::map<uint32/*CID*/,ISp2pEERs_Orig>CID_orig;这个是从CID到ISp2pEERs_Orig的一个映射关系;
再根据请求节点的IP获得其ISP号从CID_orig中查询到ISP所对应的PeerID集合如结构一,最后将PeerID插入到集合当中。
在具体的算法中,可以将该集合由二叉树或红黑二叉树实现,由此,其插入和删除的速度比较快。
步骤203:接收请求节点的查询邻居节点请求;
步骤S204:根据所述请求查询本地缓存的频道节点列表,从中获取符合条件的邻居节点,包括:
从缓存的频道节点列表中选取与请求节点在同一ISP号码内的部分或者全部邻居节点:
即根据IP地址中的公网IP地址进行查询并获取相应的处于同一ISP号码的部分或者全部邻居节点。
步骤S205:根据NAT类型和IP地址信息对所述查询到邻居节点进行筛选,包括:S2051:根据NAT类型是否可建立直接连接选取可用的邻居节点;
S2052:基于IP地址的相似性对所述可用邻居节点进行评分,并选择评分在前的邻居节点。
即通过上述方法,其最终分配的邻居节点性能较佳,克服了现有技术中为请求节点分配的邻居节点如果根本就无法建立连接,需要多次尝试建立连接之后,才能确定其是否为有效的邻居节点,这样会导致无谓的连接,从而导致系统性能较差的缺点。
具体来说,根据如上所述的三种数据结构,登陆服务器会在进行节点查询的过程中,首先会将根据每次查询的频道CID在结构三对应的数据存储列表中的CID_time中查看CID_time,即其登陆时间;
如果CID_time超过时(定时),则会从set集合时拷贝一份数据到另一数据存储列表(在实施例中,简称vector数组)当中并随机存储,并更新CID_time时间为当前时间。
然后再从vector数组当中任意点拷贝一组种子;
然后再对这一组种子进行过滤,评分,过滤主要是根据NAT类型是否可以建立连接的条件,评分是根据IP相似程度,其具体实现方式如上面所描述,在此不进行详细说明。
其中,可以认为set和vector是两个容器,Set是插入比较快,查询比较慢。Vector是插入比较慢,查询比较快。即我们在插入时用set容器,查询时用vector容器,由于所有的数据都插入到了set容器当中,所以这里需要定时的从set容器导一份数据到vector当中,由此实现快速查询。
由此,本发明不仅仅实现了选择最合适的种子节点的功能,且在登陆服务器具体查询的时候,实现了插入、删除、查询并存时一种数据结构难以达到最理想的情况,提高了登录服务器的工作性能;并且,该方法能够加快种子查询速度、节约带宽、查询种子更加精准。
其中,该方法还包括:登陆服务器接收频道节点列表中的节点发来的心跳信息;
当所述心跳信息中包含节点的NAT类型变更的信息时,根据所述NAT类型变更信息更新本地缓存的相应节点的NAT类型。
其中,当一段时间内未接收到节点的心跳信息时,则登陆服务器从本地缓存的节点列表中清除相应的节点信息。
通过上述方法,登陆服务器能够较好地掌握相应的节点信息,并据此在后续的种子分发的时候,其分配更为精确。
方法实施例三:
结合进行p2p视频点播的时候对本发明进行详细的说明,当然,本实施例中的方法也可以应用于其他p2p系统中,本实施例仅仅是为示意,并非用于限定本发明。
如图4所示,所述p2p系统中种子分发方法,涉及到如下的节点/服务器:请求节点、邻居节点、STUN SERVER服务器、登陆服务器(Tracker)。
根据如图4所示的各个节点/服务器之间的交互所示,以请求节点为例,本发明实施例的种子分发方法主要包括以下步骤:
步骤S301:请求节点向STUN SERVER服务器发送其NAT类型检测消息,判定其所述节点自身NAT类型;
具体来说,STUN SERVER(Simple Traversal of UDP over NATs),NAT的UDP简单穿越,是一种服务器,节点之间与其交互最终能够获取节点本身的NAT类型,该技术属于现有技术,在此不详述其具体过程。
步骤S302:所述请求节点向登录服务器(Tracker)登录并注册,所述登录服务器获取所述请求节点的网络拓扑信息;所述登录服务器根据所述请求节点的网络拓扑信息更新节点列表。具体来说,包括:
数据请求节点向Tracker进行登录并注册,登录信息包括NAT类型、公网与内网IP,PORT、登录时间,且其注册信息包括其本地所有缓存的频道信息;其中,登录服务器根据请求节点的公网IP地址获取请求节点的ISP号,并将注册的所有频道信息更新节点列表,具体步骤在上面实施例中进行了详细说明,本实施例不再赘述。
其中,与上述方法实施例类似,请求节点定时间隔一段时间向Tracker发送一次心跳信息,当NAT类型有变化时随心跳一起发送给Tracker,用于更新节点当前状态,Tracker会定时清除超时没有心跳的节点。
步骤S303:所述请求节点向所述登录服务器查询邻居节点,所述登录服务器筛选出优质有效的种子返回给请求节点,具体来说,登录服务器先查询到一批种子,之后再对种子进行评分和过滤,过滤条件是:NAT类型可以建立连接的,确保种子的优质有效性,最后分配给请求节点。
步骤S304:请求节点收到登录服务器分配的邻居节点之后,如果是NAT后的种子,可通过STUN SERVER服务器直接建立连接,如图3所示的步骤4、5、6、7所示。
如步骤S304:向STUN SERVER服务器发起桥接请求;
步骤S305:STUN服务器向邻居节点转发请求;
S306:邻居节点连接请求至请求节点;
S307:请求节点与邻居节点建立连接并进行数据传输,由于其属于相应的数据传输的具体实现方法,在此不详细说明。
由此可见,请求节点收到登录服务器分配的邻居节点之后,如果是NAT后的种子,可通过STUN服务器直接建立连接。
其中,如果没有进行相应的过滤,请求节点可能会分配到一些根据无法建立连接的种子,这样会导致无谓的连接,从而导致系统性能较差,也就是说,本实施例中的种子分发方法,基于ISP、NAT类型、IP地址的相似性进行邻居节点过滤,这样就会避免一些无谓的连接,从而节省了不同网络客户端之间的相互连接,减少了系统性能损耗。
装置实施例一:
根据上述方法相对应,本发明还公开了一种种子分发装置,设置于登陆服务器(Tracker)中,主要包括:
接收单元,接收节点发来的加入频道请求,该频道请求中包括频道ID信息、节点的IP地址信息和NAT类型;
频道管理单元,用于将该节点加入到本地缓存的频道节点列表中;其中,登陆服务器中的缓存单元,用于存储上述频道节点列表。
所述接收单元,进一步用于接收请求节点的查询邻居节点请求;
节点分配单元,进一步用于根据所述请求查询本地缓存的频道节点列表,从中获取符合条件的邻居节点;
根据NAT类型和IP地址信息对所述查询到邻居节点进行筛选,将筛选后的邻居节点信息返回给请求节点。
其中,所述节点分配单元,根据所述请求查询本地缓存的节点列表,从中获取符合条件的邻居节点,进一步包括:从缓存的频道节点列表中选取与请求节点在同一ISP号码内的部分或者全部邻居节点;
根据NAT类型和IP地址信息对所述查询到邻居节点进行筛选,包括:根据NAT类型是否可建立直接连接选取可用的邻居节点;
基于IP地址的相似性对所述可用邻居节点进行评分,并选择评分在前的邻居节点。
其中,所述加入频道请求中,所述IP地址信息包括:
公网IP地址和/或内网IP地址,PORT接口,所述频道管理单元将该节点加入到本地缓存的频道节点列表中,进一步包括:
根据所述公网IP地址信息获取所述节点的ISP号码信息;
获取所述节点的网络拓扑信息;根据所述节点的网络拓扑信息更新或者建立本地缓存的频道节点列表。
其中,所述频道管理单元,将该节点加入到本地缓存的频道节点列表中,进一步具体包括:从节点的加入频道请求中获取频道ID信息;
根据频道ID信息查询到对应的频道ID对应的数据存储列表,再根据请求节点的公网IP地址获得其ISP号码,并从所述频道ID对应的数据存储列表查询到所述ISP号码所对应的邻居节点Peer ID集合,并将节点的Peer ID和网络拓扑信息插入到集合当中。
其中,所述频道管理单元,进一步还用于接收频道节点列表中的节点发来的心跳信息;
其中,当所述心跳信息中包含节点的NAT类型变更的信息时,根据所述NAT类型变更信息更新本地缓存的相应节点的NAT类型。
其中,所述频道管理单元,进一步还用于当一段时间内未接收到节点的心跳信息时,则登陆服务器从本地缓存的节点列表中清除相应的节点信息。
此外,本发明装置执行的方法如上述实施例中所描述,由于在方法实施例中已经详细地进行了说明,本发明装置中并未进行详细说明,具体单元之间的功能和执行动作可以参考方法实施例中的描述。
本发明装置同样具有以上方法实施例中的优点,即其最终分配的邻居节点性能较佳,克服了现有技术中由于Tracker为请求节点分配的邻居节点如果根本就无法建立连接,需要多次尝试建立连接之后,才能确定其是否为有效的邻居节点,这样会导致无谓的连接,从而导致系统性能较差的缺点。
需要说明的是,对于上述方法实施例而言,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。
而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。