一种实现数据通讯的***及其方法
技术领域
本发明涉及数据通讯技术领域,尤其涉及一种采用点对点(P2P)技术实现多方数据通讯的***及其方法。
背景技术
当前,随着数据通讯技术的不断发展,已经能够实现多个通讯方之间的多方数据通讯。例如,可以在多个通讯方之间进行音视频数据的传输,从而实现这些通讯方之间的影音交互。
在现有技术中,对于各个通讯方例如端口号和IP地址的网络信息采用统一管理方式,采用一个网络信息管理服务器统一保存和管理各个通讯方的网络信息,在数据通讯过程中,各个通讯方从网络信息管理服务器获得对方的网络信息,以根据该网络信息与对方建立数据连接,实现和对方的数据通讯。
采用如上方式,虽然能够实现数据通讯,但是,由于采用网络信息管理服务器对各个通讯方的网络信息进行统一管理,因此,一旦该服务器发生故障,则会导致大量通讯方无法获得对方的网络信息,无法建立和目的通讯方的数据连接,从而使得数据通讯在很大范围内不能得以实现。
另外,在现有技术中,一部分数据通讯是通过中转服务器中转数据得以实现。采用中转服务器转发数据,虽然能够实现数据通讯,但是,具有如下缺点:
由于在数据通讯过程中,数据需要通过中转服务器进行中转,而所中转的数据通常又都是例如音频、视频等数据量较大的数据,因此,需要中转服务器具有较大的带宽,从而增加了中转服务器的实现成本,另外,由于中转服务器自身带宽毕竟有限,采用中转服务器只能支持有限数量通讯方之间的数据中转,如果通讯方数量较多,则需投入大量的中转服务器,从而进一步增加了数据通讯的实现成本。此外,如果中转服务器在数据通讯过程中发生故障,则会导致通过该中转服务器转发所进行的多方数据通讯中断,从而导致一定范围内的数据通讯瘫痪。
发明内容
有鉴于此,本发明的主要目的在于提供一种实现数据通讯的***及其方法,无须对各个通讯方的网络信息采用统一管理的方式,从而避免由于该统一管理方式所带来的由于网络信息管理服务器发生故障而使得数据通讯在较大范围内无法实现的问题,另外,本发明的目的还在于在数据通讯过程中不采用中转服务器转发数据,从而避免由此带来的成本增加、容易导致通讯瘫痪的问题。
为实现上述目的,本发明提供了一种实现数据通讯的***,该***包括各个通讯节点,通讯节点之间根据网络信息建立连接并利用该连接实现数据通讯,该***包括超级节点层,该超级节点层中包括至少两个超级节点,其中:
所述通讯节点登录与之物理上最临近的超级节点并发起查询目的通讯节点的请求,各超级节点利用各自所保存的路由信息,将登录的通讯节点的网络信息依次转发并记录到与登录的通讯节点逻辑上最接近的超级节点中;各个超级节点用于保存与之逻辑上最临近的通讯节点的网络信息,还用于根据各自所保存的路由信息和所接收到的查询目的通讯节点的请求进行超级节点之间的消息转发,直至将该查询目的通讯节点的请求转发到与目的通讯节点逻辑上最接近的超级节点,所述与目的通讯节点逻辑上最接近的超级节点将其保存的目的通讯节点的网络信息发送给源通讯节点。
其中,所述超级节点为所述通讯节点中的部分通讯节点。
其中,所述超级节点是网络类型为公网类型或者混合网络地址转换类型的通讯节点。
其中,所述超级节点为:
带宽和在线时长大于等于设定的带宽和在线时长的通讯节点。
其中,该***进一步包括中央服务器,用于收集各个超级节点的网络信息,并指导各个超级节点更新自身的路由表。
本发明还提供了一种实现数据通讯的方法,该方法包括:
步骤A:源通讯节点登录预先建立的与其物理上最临近的超级节点,各超级节点利用各自所保存的路由信息,将登录的通讯节点的网络信息依次转发并记录到与登录的通讯节点逻辑上最接近的超级节点中;所述源通讯节点向所登录的超级节点发送查询目的通讯节点的请求,自该超级节点开始,各超级节点之间利用各自所保存的路由信息,依次转发该查询请求,直至将该查询请求转发到与目的通讯节点逻辑上最接近的超级节点,所述与目的通讯节点逻辑上最接近的超级节点将其保存的目的通讯节点的网络信息返回给源通讯节点;
步骤B:源通讯节点利用得到的目的通讯节点的网络信息,建立与目的通讯节点之间的连接,通过该连接传输数据,实现数据通讯。
其中,步骤A中的源通讯节点登录预先建立的与其物理上最临近的超级节点包括:
步骤a:将***中的部分通讯节点确定为超级节点;其中,每个超级节点中保存有与之连接的通讯节点或超级节点的路由信息;
步骤b:通讯节点登录与之物理上最临近的超级节点,自该超级节点开始,各个超级节点之间利用各自所保存的路由信息,依次转发登录的通讯节点的网络信息,直至将登录的通讯节点的网络信息转发并记录到与登录的通讯节点逻辑上最接近的超级节点中。
其中,步骤a中所述将***中的部分通讯节点确定为超级节点包括:
步骤a1:依次读取网络中各个通讯节点的信息;
步骤a2:根据读取的当前通讯节点的信息,判断当前通讯节点的网络类型是否为公网或混合网络地址转换,如果是,则继续执行步骤a3,否则,确定当前通讯节点不是超级节点,然后返回步骤a1,继续对其它通讯节点进行判断;
步骤a3:判断当前通讯节点的带宽及在线时长是否大于等于预先设定的带宽及在线时长,如果是,则确定当前通讯节点为超级节点,否则,确定当前通讯节点不是超级节点,然后返回步骤a1,继续对其它通讯节点进行判断。
其中,所述与通讯节点物理上最临近的超级节点称为该通讯节点的物理超级节点,将所述与通讯节点逻辑上最临近的超级节点称为该通讯节点的逻辑超级节点,步骤b包括:
步骤b1:通讯节点登录***后,登录到该通讯节点的物理超级节点上,并将其网络信息发送到该物理超级节点上;
步骤b2:该物理超级节点根据该登录通讯节点网络信息中的ID号码,查找得到其保存的各个ID号码中与该ID号码最接近的ID号码,并将登录通讯节点的网络信息转发到该最接近的ID号码所对应的超级节点,网络信息转发到的超级节点重复上述转发过程,直至将所述网络信息转发至所述通讯节点的逻辑超级节点上并保存。
其中,所述与通讯节点物理上最临近的超级节点称为该通讯节点的物理超级节点,将所述与通讯节点逻辑上最临近的超级节点称为该通讯节点的逻辑超级节点,步骤A包括:
步骤A1:源通讯节点向该源通讯节点的物理超级节点发送查询请求,其中,该查询请求中包括目的通讯节点的ID号码;
步骤A2:所述物理超级节点在本地查找是否保存有目的通讯节点的网络信息,如果存在,则直接将该网络信息返回给源通讯节点,并结束本流程,否则,该物理超级节点根据目的通讯节点的ID号码,在该物理超级节点所保存的各个ID号码中查找与该ID号码最接近的ID号码,然后,将查询请求转发到该最接近的ID号码所对应的超级节点,查询请求转发到的超级节点重复上述转发过程,直至将查询请求转发到所述目的通讯节点的逻辑超级节点;
步骤A3:所述目的通讯节点的逻辑超级节点将其保存的目的通讯节点的网络信息返回给源通讯节点。
其中,步骤B所述源通讯节点建立与目的通讯节点之间的连接包括:
源通讯节点根据获取得到的目的通讯节点的网络信息中的内网IP地址和端口号,直接向目的通讯节点的内网IP地址和端口号发送连接请求,建立源通讯节点和目的通讯节点之间的连接。
其中,步骤A之前,该方法进一步包括:
对所述通讯节点进行简单穿越方式测试,获取通讯节点的外网IP地址和端口号,将该外网IP地址和端口号添加到该通讯节点的网络信息中;
步骤B所述源通讯节点建立与目的通讯节点之间的连接包括:
源通讯节点根据获取得到的目的通讯节点的网络信息中的外网IP地址和端口号,直接向目的通讯节点的外网IP地址和端口号发送连接请求,建立源通讯节点和目的通讯节点之间的连接。
其中,步骤A之前,该方法进一步包括:
对所述通讯节点进行简单穿越方式测试,获取通讯节点的外网IP地址、端口号、和网络类型,将该外网IP地址、端口号、和网络类型添加到该通讯节点的网络信息中;
步骤B所述源通讯节点建立与目的通讯节点之间的连接包括:
源通讯节点根据自身的网络类型以及目的通讯节点的网络类型判断采用何种方式进行连接:
如果一方是公网另一方是混合网络地址转换类型,则混合网络地址转换类型一方让另一方主动连接过来;如果双方既不是公网也不是混合网络地址转换类型,则源通讯节点发送穿越请求给目的通讯节点的物理超级节点,该物理超级节点将该请求分别转发给源通讯节点和目的通讯节点,源通讯节点和目的通讯节点接收到请求后,分别向对方的外网IP地址和端口号发送UDP穿越的数据包,以实现源通讯节点和目的通讯节点之间建立连接。
其中,步骤B所述源通讯节点建立与目的通讯节点之间的连接包括:
同时采用内网直连、外网直连、以及通过UDP穿越的方式建立连接,如果任何一种方式建立连接成功,则停止采用其余方式建立连接。
其中,如果所述三种方式均不能建立连接,该方法进一步包括:
源通讯节点发送查找中转种子的请求到其所连接的超级节点上,超级节点通过中央服务器或者其它超级节点获取能够进行数据转发的通讯节点的信息,然后将该信息返回给源通讯节点,源通讯节点根据该信息建立中转通道,与目的通讯节点建立连接。
其中,源通讯节点建立中转通道包括:
建立多条中转通道,其中的一条通道作为主通道,其余通道作为备份通道;
如果进行数据通讯的主通道断开连接,则立即将数据通讯切换到其余备份通道。
其中,该方法进一步包括对各个超级节点中的路由信息进行更新。
其中,所述对路由信息进行更新包括:
超级节点定期向中央服务器发送路由表更新请求,中央服务器返回最新的路由表给该超级节点。
其中,所述对路由信息进行更新包括:
各个超级节点之间相互交换路由信息以不断更新各自的路由表。
可见,采用本发明,将各个通讯方的网络信息分散在与各自逻辑上最接近的超级节点中进行保存,从而实现对于各个通讯方网络信息的分散管理。在此情况下,即使保存有网络信息的某个超级节点发生故障,则也只会影响到与该超级节点逻辑上最接近的通讯节点的数据通讯,不会造成数量较多的通讯方无法实现建立数据连接,从而提高了数据通讯实现的可靠性。另外,在本发明中,数据不再经过中转服务器转发,从而避免了由于采用中转服务器转发多个通讯方的数据而带来的成本增加、容易导致大范围数据瘫痪的问题。
附图说明
图1为本发明所提供的***的示意图。
图2为实现本发明的流程图。
图3为实现本发明步骤201的流程图。
图4为实现本发明步骤202的流程图。
图5为实现本发明步骤203的流程图。
具体实施方式
本发明为一种实现数据通讯的***及其方法,将通讯***中的部分通讯节点(peer)确定为超级节点(super peer),各个超级节点组成超级节点层;在通讯节点登录***时:每个通讯节点登录与其物理上最临近的超级节点,该物理上最临近的超级节点通过超级节点之间的转发,将该通讯节点的网络信息登记到与该通讯节点的ID最临近的超级节点中;在源通讯节点需要向目的通讯节点发送数据时:源通讯节点向与其物理上最临近的超级节点发送查询请求,该物理上最临近的超级节点通过超级节点之间的转发,首先在本地进行查找,如果查找不到目的通讯节点的网络信息,则将该查询请求发送至与目的通讯节点的ID最临近的超级节点上,该与目的通讯节点的ID最临近的超级节点将目的通讯节点的网络信息返回给源通讯节点,以使得源通讯节点能够根据该网络信息建立与目的通讯节点之间的网络连接,从而实现数据通讯。
下面结合附图对本发明进行详细描述。
参见图1,本发明所提供的***包括:
各个用于进行数据通讯的通讯节点,其中,包括超级节点层,该层中的各个超级节点组成图1所示的超级节点层,超级节点层中的各个超级节点用于进行消息的转发以实现:
在通讯节点登录***时,通过超级节点层中的各个超级节点之间的消息转发,将该登录***通讯节点的网络信息保存到与登录***的通讯节点在逻辑上最临近的超级节点中;
以及,在源通讯节点查询目的通讯节点时,通过超级节点层中的各个超级节点之间的消息转发,将目的通讯节点的网络信息由与该目的通讯节点在逻辑上最临近的超级节点返回给源通讯节点。
其中,在该***中,各个超级节点具有如下属性:
1、为了保证进行数据传输的通讯节点都能够登录到超级节点上,因此,超级节点的网络类型必须为公网类型或者混合网络地址转换(Full Cone)类型;
2、为了提高整个网络的效率,超级节点的带宽和在线时长需要大于等于预先设定的带宽和在线时长;其中,预先设定的在线时长可以根据实际情况进行改变,在网络形成初期,该预先设定的在线时长较小,而在网络形成较长时间后,该预先设定的在线时长相应地也应设定为较大的值。
其中,每个超级节点都分别具有一张路由表,在该路由表中保存着与该超级节点连接的其它超级节点的ID和网络信息,所述的网络信息包括:网络类型、内外网IP地址和端口号,利用该路由表,超级节点层中的各个超级节点能够根据登录***的通讯节点或者目的通讯节点的ID号,在路由表中查找该超级节点范围内与所述通讯节点在ID号上最接近的超级节点,然后,路由到该超级节点上,该超级节点再利用其上的路由表进行如上所述的查找及路由,直至路由到与所述通讯节点在ID号上最接近的超级节点上。
参见图1,本发明所提供的***还可以包括中央Server,该中央Server包括一个或一个以上的服务器,用于收集各个超级节点的网络信息,并指导各个超级节点更新自身的路由表;本发明所提供的***也可不具有该Server层,并不影响本发明的实现。
下面结合附图,对本发明所提供的方法进行详细介绍。
参见图2,本发明所提供的方法包括:
步骤201:将***中的部分通讯节点确定为超级节点;其中,每个超级节点中保存有与之连接的通讯节点或超级节点的路由信息;
步骤202:通讯节点登录与之物理上最临近的超级节点,自该超级节点开始,各个超级节点之间利用各自所保存的路由信息,依次转发登录的通讯节点的网络信息,直至将登录的通讯节点的网络信息转发并记录到与登录的通讯节点逻辑上最接近的超级节点中;
步骤203:源通讯节点向与其物理上最临近的超级节点发送查询目的通讯节点的请求,自该超级节点开始,各个超级节点之间利用各自所保存的路由信息,依次转发该查询请求,直至将该查询请求转发到与目的通讯节点逻辑上最接近的超级节点中,该超级节点将其保存的目的通讯节点的网络信息返回给源通讯节点;
步骤204:源通讯节点利用得到的目的通讯节点的网络信息,建立与目的通讯节点之间的连接,通过该连接传输数据,实现数据通讯。
下面结合具体实例,对以上步骤的具体实现进行详细介绍。其中,在该实例中,采用ID号作为各个通讯节点或超级节点的路由信息,所述与通讯节点逻辑上最接近的超级节点为ID号与该通讯节点最接近的超级节点;并且,为了描述方便,将所述与通讯节点物理上最临近的超级节点称为该通讯节点的物理超级节点(PSP),将所述与通讯节点逻辑上最临近的超级节点称为该通讯节点的逻辑超级节点(LSP)。
(一)步骤201的具体实现:
参见图3,在本发明实施例中,通过以下步骤实现步骤201:
步骤301:依次读取网络中各个通讯节点的信息;
步骤302:根据读取的当前通讯节点的信息,判断当前通讯节点的网络类型是否为公网或Full Cone,如果是,则继续执行步骤303,否则,确定当前通讯节点不是超级节点,然后返回步骤301,继续对其它通讯节点进行判断;
步骤303:判断当前通讯节点的带宽及在线时长是否大于等于预先设定的带宽及在线时长,如果是,则确定当前通讯节点为超级节点,然后返回步骤301,继续对其它通讯节点进行判断;否则,确定当前通讯节点不是超级节点,然后返回步骤301,继续对其它通讯节点进行判断;其中,在本步骤中,预先设定的在线时长可以根据网络运行情况改变:在网络形成初期,该预先设定的在线时长较小,在网络运行一段时间之后,该预先设定的在线时长较长。
(二)步骤202的具体实现:
参见图4,在本发明实施例中,实现步骤202需要以下步骤:
步骤401:通讯节点登录***后,通过向该登录通讯节点的PSP发送Pub消息登录到该通讯节点的PSP上,并将该登录通讯节点的网络信息发送到该PSP上;
步骤402:所述的PSP根据该登录通讯节点网络信息中的ID号码,首先在该PSP本地查找是否保存有目的通讯节点的网络信息,如果存在,则直接将该网络信息返回给源通讯节点,并结束本流程,否则,在该PSP所保存的各个ID号码中查找与该ID号码最接近的ID号码,然后,通过转发Pub消息,将登录通讯节点的网络信息路由到该最接近的ID号码所对应的超级节点;
步骤403:当前路由到的超级节点在其所保存的各个ID号码中,查找得到与登录通讯节点最接近的ID号码,然后,通过转发Pub消息,将登录通讯节点的网络信息路由到该最接近的ID号码所对应的超级节点上;
步骤404:当前路由到的超级节点判断其保存的ID号码中是否还有更接近登录通讯节点的ID号码的ID号码,如果是,则返回步骤403,直至查找得到网络的所有通讯节点的ID号码中与登录通讯节点的ID号码最接近的ID号码,然后执行步骤405,否则,直接执行步骤405;
步骤405:当前路由到的超级节点作为登录通讯节点的LSP保存登录通讯节点的网络信息。
(三)步骤203的具体实现:
参见图5,实现步骤203需要以下步骤:
步骤501:源通讯节点向该源通讯节点的PSP发送查询请求,其中,该查询请求中包括目的通讯节点的ID号码;
步骤502:源通讯节点的PSP根据目的通讯节点的ID号码,在该PSP所保存的各个ID号码中查找与该ID号码最接近的ID号码,然后,将查询请求路由到该最接近的ID号码所对应的超级节点;
步骤503:当前路由到的超级节点在其所保存的各个ID号码中,查找得到与目的通讯节点最接近的ID号码,然后,将查询请求路由到该最接近的ID号码所对应的超级节点上;
步骤504:当前路由到的超级节点判断其保存的ID号码中是否还有更接近目的通讯节点的ID号码的ID号码,如果是,则返回步骤503,直至查找得到网络的所有通讯节点的ID号码中与目的通讯节点的ID号码最接近的ID号码,然后执行步骤505,否则,直接执行步骤505;
步骤505:当前路由到的超级节点作为目的通讯节点的LSP,将其所保存的目的通讯节点的网络信息返回给源通讯节点。
(四)步骤204的具体实现:
在本发明实施例中,可以采用如下方式建立源通讯节点与目的通讯节点之间的连接:
1、通过内网直连建立连接:
源通讯节点根据获取得到的目的通讯节点的网络信息中的内网IP地址和端口号,直接向目的通讯节点的内网IP地址和端口号发送连接请求,从而建立源通讯节点和目的通讯节点之间的连接;其中,所述连接请求可以通过TCP和UDP两种形式进行发送,可以根据具体应用选择其中的一种来发送连接请求:对于音视频数据通讯,通常设置为优先采用用户数据报协议(UDP)方式发送连接请求,对于一些传输可靠性要求较高的应用,则优先采用传输控制协议(TCP)方式发送连接请求。在具体应用中,如果优先采用TCP发送连接请求,则在采用TCP方式无法建立连接的情况下,还可进一步尝试采用UDP方式尝试建立连接,同理,如果优先采用UDP方式发送连接请求而无法建立连接时,同样可以进一步采用TCP方式尝试建立连接。
2、通过外网直连建立连接:
采用此种方式建立连接,需要在通讯节点登录***前,进行UDP对网络地址转换(NAT)的简单穿越方式(Stun)测试,以获取该通讯节点的外网IP地址和端口号,该登录通讯节点将获取得到的外网IP地址和端口号添加到其网络信息中;在此情况下,源通讯节点所获取的目的通讯节点的网络信息中包括有该目的通讯节点的外网IP地址和端口号,源通讯节点直接向目的通讯节点的外网IP地址和端口号发送连接请求,从而建立源通讯节点和目的通讯节点之间的连接,具体实现过程与上述通过内网直连方式建立连接的过程类似,在此不再赘述;
3、通过UDP穿越方式建立连接:
采用此种方式建立连接,需要在通讯节点登录***前,进行Stun测试,以获取该通讯节点的外网IP地址、端口号、和网络类型;在此情况下,源通讯节点所获取的目的通讯节点的网络信息中包括有该目的通讯节点的外网IP地址、端口号、和网络类型,源通讯节点根据自身的网络类型以及目的通讯节点的网络类型判断采用何种方式进行连接:
如果一方是公网另一方是FullCone,则FullCone一方可以让另一方主动连接过来;如果双方既不是公网也不是FullCone,则源通讯节点发送穿越请求给目的通讯节点的PSP,目的通讯节点的PSP将该请求分别转发给源通讯节点和目的通讯节点,源通讯节点和目的通讯节点接收到请求后,分别向对方的外网IP地址和端口号发送UDP穿越的数据包,以实现源通讯节点和目的通讯节点之间建立连接。
在实际应用中,上述三种连接方式同时进行,如果任何一种方式建立成功,则停止采用其余的连接方式建立连接,如果三种连接方式均不能建立连接,则源通讯节点发送查找中转种子的请求到其所连接的超级节点上,超级节点通过中央Server或者其它超级节点获取能够进行数据转发的通讯节点的信息,然后将该信息返回给源通讯节点,源通讯节点根据该信息建立中转通道,与目的通讯节点建立连接;其中,如果有多个通讯节点能够进行数据转发,则源通讯节点可以根据这些通讯节点的信息建立多条中转通道,其中的一条通道作为主通道,其余通道作为备份通道,如果主通道断开连接则立即切换到其余备份通道,从而减少由于第三方通讯节点退出而引起的双方通讯失败的问题。
在实际应用中,由于***中的各个通讯节点会出现退出***以及登录***的变化,因此,需要对各个超级节点中的路由表进行更新,在本发明实施例中,可以采用以下两种方式进行路由表更新:
1、在有中央Server的情况下,各个超级节点与中央Server保持连接,中央Server保存有所有超级节点的信息,超级节点定期向中央Server发送路由表更新请求,中央Server返回最新的路由表给该超级节点;
2、在没有中央Server的情况下,各个超级节点之间相互交换路由信息,从而不断更新各自的路由表。
采用本发明提供的***和方法,能够实现多方通讯,其具体应用主要有两种方式:
(1)会议模式,***对各个参会人员的语音处理后中转给其他参会人员,以实现多人语音,在其他人需要加入会议时,首先查找***,然后通过上面的方式和***建立连接,将自己的数据发送给***,***进行处理后转发给其他人,***可以对不同人的语音进行混音,然后将混音后的数据发送给其他人。
(2)点对点模式,每两点间建立数据通道,如多人视频:
用户采用本发明提供的方法直接和所有需要进行数据通讯的用户建立,然后利用该连接发送应用数据。如多人的视频会议,A希望看到B和C的视频,A分别和B、C建立数据通道,以实现多人视频通讯。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。