首页> 中国专利> 网络上的对等链接建立的方法和设备

网络上的对等链接建立的方法和设备

摘要

一种用于链接到对等(“P2P”)网络(100)以进行VOIP通信的方法和设备。中间对等体(102)创建用于在P2P网络中将对等体链接在一起的映射(300)。生成一系列消息以打开可接入到P2P网络上的其他对等体(106)的一个对等体(104)的端口。然后,使得对等体能够直接地与其他对等体进行通信。监管对等体可以承担中间对等体的功能。

著录项

  • 公开/公告号CN101843076A

    专利类型发明专利

  • 公开/公告日2010-09-22

    原文格式PDF

  • 申请/专利权人 摩托罗拉公司;

    申请/专利号CN200880114246.4

  • 申请日2008-10-14

  • 分类号H04L29/08;

  • 代理机构中原信达知识产权代理有限责任公司;

  • 代理人穆德骏

  • 地址 美国伊利诺伊州

  • 入库时间 2023-12-18 00:48:18

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-12-12

    授权

    授权

  • 2010-11-10

    实质审查的生效 IPC(主分类):H04L29/08 申请日:20081014

    实质审查的生效

  • 2010-09-22

    公开

    公开

说明书

技术领域

本发明一般地涉及因特网电话。本发明更具体地涉及对等因特网电话的链接建立和保持。

背景技术

因特网协议电话(以下称为“VOIP”)是在因特网上或者通过基于因特网协议(以下称为“IP”)的系统的会话的路由。VOIP在普遍性和使用性上正在逐渐加强。用于通过VOIP来建立会议呼叫的系统也在加强。这些系统已经经历了在普遍使用和软件开发二者的迅速增长。

对于VOIP会议呼叫系统的一个挑战是通过防火墙和地址转换器的VoIP业务的路由。与防火墙一起使用专用会话边界控制器以使得VoIP呼叫能够出入受保护的企业网络。一些VOIP系统使用对等(以下称为“P2P”)网络来克服各种VOIP技术问题,诸如吞吐量和接入延迟。

一些VOIP协议将呼叫从一个对等体通过控制器对等体路由到网络上的其他对等体,允许系统穿越网络地址转换器(以下称为“NAT”)和防火墙。NAT和防火墙防止对等体彼此直接地进行通信。控制器(以下称为“中间体”)对等体接收该呼叫,并且将其路由到网络上的其余的对等体。然而,当前不存在使对等体直接地向其中所有的对等体都在NAT/防火墙之后的网络上所有其余对等体发起群呼叫的技术。换句话说,所有的语音分组通过P2P网络上的例如中间对等体的中央点来进行路由。然后,中间对等体将语音分组中继到P2P网络上的目的地对等体。

需要一种方法和设备来使得能够打开通过NAT和防火墙的路径,使得任何一个对等体可以直接地从任何数目的对等体接收未请求的语音分组,以使得能够最小地延迟的群呼叫。

附图说明

在附图中,各个视图中的相同的附图标记表示相同或者功能上类似的元素,并且附图与下面的详细描述一起被并入本说明书中,并且形成本说明书的一部分,用于进一步说明各个实施例,并且解释所有根据本发明的各种原理和优点。

图1是根据本发明的一些实施例的P2P拓扑的示例。

图2是根据本发明的一些实施例的用于保持对等体的示例性消息序列。

图3a是根据本发明的一些实施例的对等体ID映射的示例。

图3b是根据本发明的一些实施例的更新的对等体ID映射的示例。

图4是根据本发明的一些实施例的用于链接到P2P拓扑的预期对等体的进程的示例。

图5是根据本发明的一些实施例的用于链接对等体的消息序列图的示例。

图6是根据本发明的一些实施例的与对等体映射相比较的示例性UDP_SYN_CommandMap。

图7是根据本发明的一些实施例的使对等体保持与其他对等体的连接的示例性消息序列。

图8是根据本发明的一些实施例的用于同时进行链接的状态图的示例。

图9是根据本发明的一些实施例的P2P拓扑的另一个示例。

图10是根据本发明的一些实施例的用于标识监管对等体(stewardpeer)的流程图。

图11是根据本发明的一些实施例的标识监管对等体功能的流程图。

本领域的技术人员可以明白,附图中的元素为了简单和清楚而进行图示,并且不必按照比例绘制。例如,附图中的一些元素的尺寸可以相对于其他元素被放大,以有助于促进对本发明的实施例的理解。

具体实施方式

在详细描述根据本发明的实施例之前,应当认识到,实施例主要属于与网络上的对等链接建立相关的方法步骤和设备部件的组合。因此,已经在适当时在附图中用常规符号表示了设备组件和方法步骤,仅示出了与理解本发明的实施例相关的那些特定细节,以便于不使本公开与对于受益于在此的描述的本领域内的普通技术人员来说显然的细节相混淆。

在本文中,诸如第一和第二、顶部和底部等的关系术语可以仅用于将一个实体或者动作与另一个实体或者动作进行区分,而不必要求或者暗示在这样的实体或者动作之间的任何实际这样的关系或者顺序。术语“包括”、“包含”或者其任何其他变化形式意在涵盖非排他性包括,使得包括一系列元素的过程、方法、物品或者设备不仅包括那些元素,而且还可以包括没有明确列出或者这样的过程、方法、物品或者设备所固有的其他元素。由“包括...一”引导的元素在没有更多约束的情况下不排除在包括该元素的过程、方法、物品或者设备中存在另外的相同元素。

可以明白,在此所述的本发明的实施例可以包括一个或多个常规处理器和独特存储的程序指令,该独特存储的程序指令控制该一个或多个处理器结合某些非处理器电路来实现在此所述的网络上的对等链接建立的一些、大多数或者全部功能。非处理器电路可以包括,但不限于,无线电接收机、无线电发射机、信号驱动器、时钟电路、电源电路和用户输入装置。如此一来,这些功能可以被解译为用于执行网络上的对等链接建立的方法的步骤。替代地,可以通过不具有存储的程序指令的状态机来实现一些或者全部功能,或者在一个或多个专用集成电路(ASIC)中实现一些或者全部功能,其中,每个功能或者某些功能的一些组合被实现为定制逻辑。当然,可以使用两种方法的组合。因此,已经在此描述了这些功能的方法和装置。而且,尽管由例如可用时间、当前技术和经济考虑而促动了可能大量的努力和许多设计选择,但是希望普通技术人员在由在此公开的概念和原理来引导时,将容易地能够通过最少试验来生成这样的软件指令和程序以及IC。

公开了用于对对等(“P2P”)网络的链接建立的方法。各种方法包括:传送用于保持现有的对等链接的消息,并且传送用于建立对P2P网络的新的链接的消息。其他方法包括:登入用于同时进行链接的消息,并且将链接功能从中间对等体传送到监管对等体。

公开了一种用于建立对P2P网络的链接的设备。该设备包括:中间对等体,该中间对等体可操作成接收和确认来自现有对等体的消息;接收用于加入P2P网络的请求,并且将新的对等体链接到P2P网络。该中间对等体进一步可操作成标识能够执行中间对等体的功能的对等体。该中间对等体可操作成向有能力的对等体传送中间对等体功能。

现在参考图1,示出了P2P拓扑的示例。P2P网络100包括:中间对等体102(以下称为“中间体”),通过诸如因特网110的通信网络来数据连接到对等体1 104和对等体2 106。本领域的普通技术人员可以明白,示出经由通信网络110连接到中间体的两个对等体仅仅是示例性的,并且可以连接多个对等体。对等体104、106和中间体102可以位于同一建筑物中、同一城市中的多个建筑物中、在多个城市中或者在其任何组合中。

对等体是需要管理和向在网络110中的其他对等体分发音频的实体。该对等体功能可以被内置在诸如摩托罗拉的MOTOTRBO固定站的密码站中;或者其可以被内置在独立的箱体中,其物理上接近密码站。

中间体102的功能是独特的。中间体102可以作为独立的箱体或者计算机而存在,或者其可以是网络100上的对等体(诸如对等体1 104或者对等体2 106)的一部分。中间体102是使所有的对等体找到网络100上的所有其他对等体的中央点。例如,中间体102是使对等体1 104找到对等体2 106并且使对等体2 106找到对等体1 104的中央点。中间体102是网络100中的一个对等体,该对等体通过进行提供来被指定成当诸如对等体1 104和对等体2 106的其他对等体加电时或者当可能的对等体希望加入P2P网络时的该对等体的初始联系点。中间体102的目的在于将诸如对等体1 104和对等体2 106的网络100中的对等体的地址提供给希望加入网络100的可能对等体。

对等体1 104可以是个人计算机(以下称为“pc”)或者可以是通过pc进行交谈的用户。对等体1还可以是固定基站。可以通过网络地址转换器(“NAT”)和防火墙将对等体1 104数据连接到因特网110。NAT防火墙组合是组合了NAT和防火墙功能的装置。

防火墙禁止接收从因特网110发送到对等体1 104的任何通信(例如,语音)分组。这是通过使用IP信令来实现的。更特定地,防火墙使用用户数据报协议(以下称为“UDP”)和传输控制协议(以下称为“TCP”)报头。UDP是IP协议组的核心协议的一个。使用UDP,联网的计算机上的程序可以(使用数据报套接字)彼此发送有时被称为数据报的短消息。UDP有时被称为通用数据报协议。TCP是IP协议组的另一个核心协议;经常被简称为TCP/IP。使用TCP,联网的主机上的应用可以创建对彼此的连接;通过该连接,它们可以交换数据流。该协议保证了从发送方向接收方的数据的可靠和顺序的传递。TCP还通过在同一主机上运行的并行应用(例如,Web服务器和电子邮件服务器)来区分用于多个连接的数据。UDP/TCP报头包括端口号。防火墙读取UDP/TCP报头中的端口号。然后,防火墙在定义的时间段中使与在UDP/TCP报头中读取的端口号相对应的端口保持打开。因此,如果先前在该端口上将第一分组从对等体1104发送到因特网110,则允许对等体1 104从因特网110接收通信分组。

NAT将源IP地址和源端口号转换为新的IP地址和新的端口号。NAT转换用于被发送到因特网110并且从因特网110接收到的所有分组的IP地址和端口号。

通过NAT和防火墙还将对等体2 106数据连接到因特网110。因此,由于相应的防火墙而导致对等体1 104和对等体2 106中无法直接地彼此进行通信。

可以将中间体102直接地连接到因特网110。换句话说,中间体102具有不通过NAT和防火墙的对因特网110的数据连接。然而,如果通过防火墙将中间体102连接到因特网110,则中间体102可以在其防火墙上始终使至少一个端口打开。中间体102具有静态IP地址。因此,中间体102可以在任何时间从对等体1 104和对等体2 106接收分组。中间体102保存对等体ID对对等体地址的表格(如下关于“映射300”所述)。中间体102还可以与不在网络100中的任何可能的对等体进行通信。因此,中间体102可以从不在网络100上的对等体接收分组。中间体102还可以操作成执行对等体104、106之间的端口转发。端口转发是下述功能,通过该功能,例如,中间体102与对等体1 104进行通信,使得对等体1104将为对等体2 106打开其端口。端口转发允许对等体1 104和对等体2106彼此直接地进行通信。中间体102还能够监看在NAT处发生的转换。因此,中间体102便利在对等体1 104和对等体2 106之间的直接通信。如此以来,可以将对等体1 104和对等体2 106链接在一起。

保持现有的链接

现在参考图2,示出了用于保持P2P网络中的对等连接的示例性消息序列。对等体1 104和对等体2 106已经建立了与P2P网络的链接。对等体1 104具有被称为keepAliveTimerwithIntermediary(与中间体的保持活动计时器)的计时器。该keepAliveTimerwithIntermediary是用于确保与保持中间体102的有效链接的等待计时器。然而,在该状态中时,对等体1 104可以接收用于更新和同步映射300和命令映射516的信号(如在此以下参考图6所述),被称为UDP_SYN_CommandMap(UDP_SYN_命令映射)。由于来自随后试图连接到网络100的其他对等体的推动而导致从中间体102发送对等体1 104可以接收到的信号。keepAliveTimerwithIntermediary被设置成15至45秒的范围,并且递减计数到0秒。如果keepAliveTimerwithIntermediary期满202,则对等体1 104向中间体102发送称为keepAlive(保持活动)消息的信号204。该keepAlive消息204是IP分组。该keepAlive消息包括将其标识为keepAlive消息的代码。该keepAlive消息204由对等体1 104来发送,以向中间体102通知对等体1 104仍然具有与中间体102的数据通信链接。当中间体102从对等体1 104接收到keepAlive消息204时,中间体102将称为keepAliveACK(保持活动确认)消息的确认信号206发送回对等体1104。该keepAliveACK消息206是由中间体102向诸如对等体1 104的对等体发送的信号,向该对等体通知中间体102接收到keepAlive消息。因此,当接收到keepAliveACK消息206时,对等体1 104知道在对等体1 104和中间体102之间的数据连接是活动的。当对等体1 104从中间体102接收到keepAliveACK消息206时,对等体1 104将keepAliveTimerwithIntermediary 208重新设置成在15至45秒范围中的预先设置的值。然后,keepAliveTimerwithIntermediary 208重新启动。对等体1 104还具有计数器(未示出),该计数器用于响应于keepAlive消息204来跟踪对等体1 104还没有接收到keepAliveACK消息206的连续的次数。当对等体1 104接收到keepAliveACK消息206时,对等体1 104将称为peerIntermediaryKeepAliveFailureCount(对等体中间体保持活动实效计数)的该计数器重新设置为0。

对等体2 106还具有keepAliveTimerwithIntermediary 212。如此处以上所述,keepAliveTimerwithIntermediary 212是用于确保保持与中间102的有效链接的计时器。该keepAliveTimerwithIntermediary 212被设置成15至45秒的范围,并且递减计数到0秒。如果keepAliveTimerwithIntermediary 212期满,则对等体2 106向中间体102发送keepAlive消息214。如在此以上所述,keepAlive消息214是IP分组。该keepAlive消息214包括将其标识为keepAlive的代码。当中间体102从对等体2 106接收到keepAlive消息214时,中间体102将keepAliveACK消息216发送回对等体2 106。对等体2 106从中间体102接收keepAliveACK消息216。然后,对等体2 106将keepAliveTimerwithIntermediary 218重新设置为15至45秒范围中的预先设置的值。对等体2 106还将peerIntermediaryKeepAliveFailureCount重新设置为0(未示出)。

对等体1 104和对等体2 106如上所述地每15至45秒发送keepAlive消息204、214。可以连续地或者在重叠的时间段期间发送keepAlive消息204、214。例如,对等体1 104可以发送keepAlive 204。在中间体102用keepAliveACK 206来对对等体1 104进行响应之前,对等体2可以发送其keepAlive消息214。中间体102可以分别地对每个keepAlive消息204、214进行响应。另外,中间体102可以在已经将keepAliveACK 206发送到对等体1 104之后从对等体2 106接收keepAlive消息214。keepAlive204、214和关联的keepAliveACK 206、216用于使得对等体1 104和对等体2能够通过打开在对等体104、106上的相应的端口来从中间体102接收通信。如果没有分别发送或者接收到keepAlive 204、214或者keepAliveACK 206、216,则对等体104、106将不能与P2P网络100进行通信。由对等体1 104或者对等体2 106从中间体102接收到的任何信令将对等体1和对等体2的keepAliveTimerwithIntermediary重新设置为就像从中间体102接收到keepAliveACK。

中间体102具有P2P映射300(以下称为“映射”),该P2P映射300是活动地作为网络100的一部分的所有对等体104、106的注册表:该映射被称为peerIDPeerAddressMap(对等体ID对等体地址映射)。映射300具有连接到网络100的对等体104、106的对等体ID。该映射还包括对等体1 104和对等体2 106的相应的地址和端口号(即一个对等体ID对至少一个对等体IP地址和端口的简单映射)。该映射包括用于独特对等体ID、IP地址和端口的每次出现的条目。中间体102用发布版本和本地时间戳来标记映射300。该时间戳可以基于日期和时间以避免重复,并且提高独特性的可能性。keepAlive消息204、214更新相应的对等体104、106的地址和端口号,并且所更新的地址/端口号由中间体102登入到更新的peerIDPeerAddressMap 300中。然后,对映射300重新进行版本化和重新加时间戳。下面关于在此的图3a和表格1来进一步详细地描述映射300。

中间体102具有用于评价中间体102与每个对等体104、106所保持的链接的计时器,该计时器被称为linkActive(连接活动)计时器。将该linkActive计时器设置为1至4分钟的范围,并且递减计数到0秒。中间体102具有用于与对等体1 104的链接的linkActive计时器。该中间体还具有用于与对等体2 106的链接的linkActive计时器。当从对等体1 104接收到keepAlive 204时,中间体102将linkActive 222计时器重新设置为在1至4分钟范围中的先前设置的值。然而,如果中间体102没有从对等体1 104接收到keepAlive 204,则linkActive计时器期满。然后,中间体102从映射300中移除对等体1 104。这也适用于从对等体2 106接收keepAlive 214。当接收到keepAlive 214时,中间体102将linkActive计时器224重新设置为在1至4分钟范围中的先前设置的值。如果中间体102没有接收到keepAlive 214,则linkActive计时器期满,并且从映射300中移除对等体2106。

因此,每一个对等体104、106具有keepAliveTimerwithIntermediary202、212,并且中间体102具有关于每个对等体104、106的linkActive计时器222、224。当对等体104、106的各自的keepAlive计时器期满时,对等体104、106发送keepAlive 204、214。当接收到相应的keepAlive 204、214时,中间体102重新设置linkActive计时器222、224。当对应的keepAlive计时器222、224期满时,中间体102移除对对等体104、106的链接。中间体102通过删除与对等体104、106相对应的映射300中的行来移除对对等体104、106的链接。例如,如果linkActive计时器222期满,则中间体移除对对等体1 104的链接。当从映射300中移除对等体1 104时,那么对等体1 104被视作不可用。

如果用于对等体1 104的keepAliveTimerwithIntermediary 202期满,则对等体1 104可能已经丢失了其与中间体102的链接。与中间体102的链接可能因为下述原因而已经丢失:在对等体1 104和因特网110之间的链接不再可行;在中间体102和因特网110之间的链接不再可行;或者,中间体102脱机。对等体1 104使peerIntermediaryKeepAliveFailureCount递增1。对等体1 104向中间体102发送另一个keepAlive 204。对等体1 104将keepAliveTimerwithIntermediary 202重新设置为0。如果keepAliveTimerwithIntermediary 202再次期满,则对等体1 104使peerIntermediaryKeepAliveFailureCount递增1。对等体1 104向中间体102发送另一个keepAlive 204。对等体1 104再次重新设置keepAliveTimerwithIntermediary 202。对等体1 104重复该进程,直至它从中间体102接收到keepAliveACK 206,或者peerIntermediaryKeepAliveFailureCount大于或等于被称为peerIntermediaryKeepAliveFailureCountMax(对等体中间体保持活动实效计数最大值)的预定的最大失效计数。该peerIntermediaryKeepAliveFailureCountMax是表示在没有从中间体102接收回keepAliveACK的情况下对等体将进行尝试的最大次数的值。例如,peerIntermediaryKeepAliveFailureCountMax可以被设置为40。如果peerIntermediaryKeepAliveFailureCount大于或者等于peerIntermediaryKeepAliveFailureCountMax,则对等体1104认为其已经丢失了其与中间体的链接,然后对等体1 104发起链接建立进程,如下参考图4所述。

对等体1 104具有关于对等体2 106的keepAlive计时器232。对等体2也具有关于对等体1 106的keepAlive计时器242。如上所述,keepAlive计时器是用于确保在对等体104、106之间保持的有效链接的等待计时器。当计时器达到预定值时,对等体104、106分别发送keepAlive消息,以便于分别验证与另一对等体106、104的数据通信链接仍然是活动的。将keepAlive计时器232设置为15至45秒的范围,并且递减计数到0秒。如果keepAlive计时器232期满,则对等体1 106向对等体2 106发送keepAlive 234。当对等体2从对等体1 104接收到keepAlive消息234时,对等体2 106将其keepAlive计时器242重新设置为0。然后,对等体2 106向对等体1 104发送keepAliveAck 246。如上所述,keepAliveACK是由对等体2 106发送到对等体1 104的信号,确认对等体2 106已经从对等体1 104接收到keepAlive消息234。当对等体1 104接收到keepAliveACK246时,对等体1 104将其keepAlive计时器236重新设置为在范围15至45秒范围中的预先设置的值。如果对等体2 106在对等体2的keepAlive计时器期满242之前没有接收到keepAlive 234,则对等体2 106将向对等体1104发送keepAlive(未示出)。在该情况下,对等体1 104将用keepAliveAck 246来进行响应。从对等体1 104向对等体2 106发送keepAlive 234保持了在对等体1 104和对等体2 106之间的打开的端口。如此一来,对等体1 104和对等体2 106能够经由打开的端口来传送语音分组。

对等体ID映射(“映射”)

现在参考图3a,示出了示例性P2P映射300。被称为peerIDPeerAddressMap的映射300包括用于对等体ID 302、源IP地址304和端口地址306的字段。当中间体102从对等体104、106接收到keepAlive204、214时,中间体102更新该映射300。对等体ID 302可以是ASCII字符串或数,其标识对等体104、106的名称、位置或者其他标识符。该映射300进一步包括至少等于连接到P2P网络100的对等体104、106的数目乘以在任何给定的对等体之间必须打开的端口的数目的多个行308。如上所述,该映射300包括用于独特对等体ID、IP地址和端口的每次出现的条目。

keepAlive 204、214包括输入到映射300中的下面的多条信息:

源对等体ID 302(ASCII字符串);以及

源IP地址304和端口号306。

如上参考图1所述,中间体102不同于对等体104、106。可以将中间体102直接地连接到因特网110,而不经由防火墙/NAT进行连接。因此,中间体102可以从可能在防火墙/NAT之后的网络中的任何对等体接收分组。

表格1包含示例性映射300。假定每个对等体104、106必须为对等体106、104彼此保持两个打开的端口;那么表格1图示了支持该配置的示例性peerIDPeerAddressMap 300。

表格1:示例性peerIDPeerAddressMap

当对等体试图加入P2P网络100,并且中间体102成功地允许其发起链接建立进程时,中间体102将对等体的源ID、IP地址和端口输入到映射300中。中间体102通过要求所有的对等体104、106保持与中间体102的活动的链接来保持映射300。对等体104、106必须发送keepAlive204、214以保持位于映射300上。如果中间体102没有接收到keepAlive204、214,则在指定的时间量之后,中间体102从映射300中删除对应的对等体104、106。中间体102使用接收到的keepAlive 204、214来更新映射300。例如,如果对等体1 104使用新的端口来发送keepAlive 204,则中间体102用新的端口号来更新映射300中的对应的源端口字段306。

链接建立——对等体加入P2P网络

现在参考图4,示出了链接到P2P拓扑的预期对等体的示例。预期对等体,对等体3 408,试图加入P2P网络100。对等体3可以是第一次尝试加入P2P网络100的新的对等体,或者可以是先前加入而然后断开的试图重新加入P2P网络100的对等体。例如,当对等体1 104启动时,对等体1104尝试重新加入P2P网络100,或者确保其连接到该P2P网络100中所提供的所有对等体,例如,连接到中间体102和对等体2 106。对等体1 104联系中间体102来发起链接。由对等体1 104执行的步骤和由对等体1 104发送的信号(消息)是由任何对等体104、106或者预期对等体(例如,对等体3408)发送的用于连接到P2P网络100的相同步骤和信号,如下在此参考图5所述。

当对等体3 408启动时,对等体3 408开始加入P2P网络100。中间体102是对等体3 408的第一联系点。对等体3 408已经存储了对等体3 408必须与之联系以开始链接建立进程的中间体102的地址和端口号(被称为“P2I_IntermediaryAddressPort(P2I_中间体地址端口)”)。在每个原型对等体中都提供该P2I_IntermediaryAddressPort。

图5图示了用于链接对等体的消息序列图。对等体3408通过发送请求在P2P网络100中的对等体的数目的消息分组来开始链接建立500过程。被称为“numPeersInNetworkRequest(网络中对等体数目请求)”的消息分组是发送到中间体102的请求。对等体3408需要知道有多少对等体可用于进行链接。因此,对等体3408试图从中间体102知道在P2P网络100中有多少对等体。该numPeersInNetworkRequest 502是要求中间体102用在P2P网络100中的对等体的数目来进行响应的消息分组。

为了使对等体3408能够发起numPeersInNetworkRequest 502,P2I_IntermediaryAddressPort:

●在中间体102中统计地进行定义;并且

●因为中间体102必须总是可用于从任何对等体接收分组(例如,接收对等体3408的numPeersInNetworkRequest 502),所以如果中间体102具有防火墙,则在中间体102的防火墙上是打开的。

如果当前没有其他的链接建立进程是活动的,则中间体102发起建立在对等体104、106、408之间的连接的进程。换句话说,中间体102一次仅对一个对等体(例如,对等体3408)对更新或者建立连接的请求进行响应。中间体102不可以同时运行两个或者多个的这样的链接进程。因此,当从对等体3408接收到用于连接或者更新其连接到其他对等体104、106的请求502时,中间体102将信号量(即被称为linkEstablishmentSemaphore_Intermediary(链接建立信号量_中间体)的受保护的变量或者标记)504设置为忙。当将信号量504设置为忙时,中间体102将不接受来自预期对等体或者先前链接的对等体对于链接到P2P网络100的请求。中间体102在对等体3 408的命令下发送命令,并且忽略所有其他的请求,直至信号量计时器(未示出)期满。信号量计时器是建立了中间体102将不从其他对等体接收请求的时段的计时器。将信号量计时器设置为15秒,并且递减计数到0。一旦信号量计时器开始,该计时器就不能被设置为任何其他值;该信号量计时器必须在被重新设置之前期满,即一旦信号量计时器开始,信号量计时器就不能由链接建立500状态机中的任何进程来改变。一旦信号量计时器期满,信号量504就被释放(从忙转换成不忙)。信号量504和信号量计时器服务两个功能:

1.信号量504仅允许一次运行一个链接建立进程。

2.信号量计时器允许中间件102从在P2P网络100中的所有其他对等体104、106接收用于进行响应的时间。

由预期对等体在不使用信号量504的情况下来发起链接请求(也称为“排队”)将需要状态机中的额外的计时器和状态。在对等体3 408中可能需要额外的计时器来等待和确定中间体102是否已经排队了numPeersInNetworkRequest 502,或者中间体102是否已经脱机。当前的信号量计时器将仍然存在,并且将被重新命名;在中间体102中需要该后者计时器来等待来自所有的对等体104、106、408的keepAlive消息响应。

对等体3 408设置等待计时器506,该等待计时器506用于建立使对等体3 408等待接收对发送到中间体102的numPeersInNetworkRequest502的响应的等待时段。将被称为waitToRx_numPeersInNetworkTimer(等待接收_网络中对等体数目计时器)506的计时器设置为10秒,并且递减计数到0秒。将该waitToRx_numPeersInNetworkTimer 506设置为10秒以允许:

●numPeersInNetworkRequest 502从对等体3408穿越因特网110到中间体102;

●中间体102处理该numPeersInNetworkRequest 502;并且

●使被称为numPeersInNetworkResponse 508的包含P2P网络100中的对等体的数目的响应信号(即,消息分组)从中间体102穿越因特网110到对等体3408的时间。

如果waitToRx_numPeersInNetworkTimer 506期满,则对等体3408向中间体102发送另一numPeersInNetworkRequest 502。由对等体3408发送的numPeersInNetworkRequest 502包含对等体3408的对等体ID。对等体3 408将waitToRx_numPeersInNetworkTimer 506重新设置为10秒。

对等体3 408不可以从中间体102接收响应有若干原因。在对等体3408和因特网110之间的通信线路可能是不可用的。在中间体102和因特网110之间的通信线路可能是不可用的。中间体102可能是脱机的。信号量(linkEstablishmentSemaphore_Intermediary)504可能被设置为忙。

当中间体102接收到numPeersInNetworkRequest 502时,中间体102对在映射300中的行308的数目进行计数。中间体102用被称为numPeersInNetworkResponse(网络中对等体数目响应)508的消息分组来进行响应。该numPeersInNetworkResponse 508消息包括在P2P网络100中的对等体的数目。该numPeersInNetworkResponse 508消息还包括在P2P网络100中在对等体之间必须打开的端口的数目。该numPeersInNetworkResponse 508可以具有任何正整数值,包括0。当对等体3408接收到numPeersInNetworkResponse 508时,对等体3408取消waitToRx_numPeersInNetworkTimer 510。

如果numPeersInNetworkResponse 508是0,则可以假定从中间体102最后加电开始,没有其他的对等体尝试联系中间体102。换句话说,可以可靠地假定对等体104、106不是P2P网络100的一部分。因此,对等体3 408转换为保持与中间体102的链接的状态,如在图2中所述(称为状态S3:keepAliveTimerWithIntermediary)。对等体3408将keepAliveTimerWithIntermediary 202重新设置为15秒。如果对等体之间必须打开的端口的数目大于1(例如值numPortsOpenBetweenPeers(对等体之间打开端口的数目)>1),则对等体3 408必须向中间体102发送多个keepAlive 204消息分组。由对等体3 408发送的keepAlive 204消息的数目等于要在对等体之间打开的端口的数目。因此,发送到中间体102的keepAlive 204的数目是numPortsOpenBetweenPeers keepAlive204。例如,如果必须打开的端口的数目是2,则对等体3408向中间体102发送两个keepAlive 102。如果必须打开的端口的数目是5,则对等体3408向中间体102发送5个keepAlive 102。每个keepAlive 102都包括对等体3408的对等体ID。将该对等体ID输入到映射300中。可以在映射300的对等体地址304和对等体端口306中输入空值。当对等体3408响应于接收到numPeersInNetworkResponse 508来向中间体102发送keepAlive时,中间体102更新对等体地址304和对等体端口306列。

如果由对等体3408接收到的numPeersInNetworkResponse 508大于“0”,则可以可靠地假定中间体102现在允许对等体3来发起与P2P网络100中的对等体的链接建立进程。对等体3 408向中间体102发送请求命令映射516的多个命令映射请求信号(消息分组)512。映射请求信号512被称为sendUDP_SYN_CommandMapRequests(发送UDP_SYN_命令映射请求)512。所发送的sendUDP_SYN_CommandMapRequests512的数目基于下式:

(duplicateNumSent(发送重复数目))x(numPortsOpenBetweenPeers)x(numPeersInNetworkResponse)

其中,duplicateNumSent是考虑到网络损耗的值;

numPortsOpenBetweenPeers是要在对等体之间打开的端口的数目;

numPeersInNetworkResponse是在P2P网络100中的对等体的数目。

例如,该值可以是

duplicateNumSent=2

numPortsOpenBetweenPeers=2

numPeersInNetworkResponse=4

对等体3408将8个sendUDP_SYN_CommandMapRequest 512消息发送到中间体102。对等体3408从独特端口发送每个sendUDP_SYN_CommandMapRequest 512(即在8个不同端口上的8个不同的分组)。因为duplicateNumSent等于2,因此必须从每个端口发送第二sendUDP_SYN_CommandMapRequest 512以考虑可能的网络损耗。因此,在该相同的8个端口上,可以(对于全部16个分组)发送一个额外的分组以考虑在因特网110上的可能分组丢失。对等体3408向中间体102发送16个sendUDP_SYN_CommandMapRequest 512消息。中间体102将包含在该sendUDP_SYN_CommandMapRequest 512中的每个独特的源IP地址/端口映射到已经在P2P网络100中的对等体104、106的IP地址/端口。中间体102使用每个sendUDP_SYN_CommandMapRequest 512的独特的源IP地址/端口来建立命令映射516(被称为UDP_SYN_CommandMap 516)。

所发送的sendUDP_SYN_CommandMapRequest 512包括用于对等体3 408的对等体ID和“强制/更新”选项。该对等体ID是在系统提供时间被指配给对等体3408的独特字符串。在该实施例中,没有两个对等体(例如,对等体1 104、对等体2 106和对等体3 408)具有相同的对等体ID。该sendUDP_SYN_CommandMapRequest 512还包括对等体3 408的源IP和源端口。例如,来自对等体3 408的第一和第二sendUDP_SYN_CommandMapRequest 512消息具有如由中间体102读取的下面的源IP和源端口:

249.239.54.123:58920

249.239.54.123:58921

该sendUDP_SYN_CommandMapRequest 512包括“强制”或者“更新”选项。强制选项强制P2P网络100中的所有其他对等体104、106来建立或者重新建立与对等体3 408的链接。如果在对等体1 104和对等体2 106以及预期对等体3408之间已经建立了有效链接,则因为在对等体3 408重新启动后在外部防火墙中和NAT的状态可能必须被重新设置为预定的设置,所以可能仍然需要重新建立在对等体1 104和对等体2 106之间的链接。重新启动的对等体3 408可能没有保存在外部防火墙上或NAT的哪些端口可能或者可能没有打开的状态。

在发送具有强制选项的命令映射请求消息(sendUDP_SYN_CommandRequest(发送UDP_SYN_命令请求)(强制))512之后,将该请求的选项置于对等体“3”408的存储器中(即,将“强制”命令置于存储器中)。对等体3 408设置建立对等体3 408将等待接收命令映射516的时段的计时器(waitToRx_sendUDPSYNCommandTimer)514。对等体3408将waitToRx_sendUDPSYNCommandTimer 514设置为10秒(信号量计时器被设置为的时间段的2/3)。将waitToRx_sendUDPSYNCommandTimer514设置为10秒允许:

●sendUDP_SYN_CommandMapRequest 512从对等体3 408穿越因特网110到中间体102;

●中间体102处理该sendUDP_SYN_CommandMapRequest 512;并且

●使命令映射516从中间体102穿越因特网110返回到对等体3 408的时间。

更新选项请求P2P网络100中的所有其他的对等体确保与对等体3408建立有效链接。如果在对等体104、106、408之间已经建立了有效链接,则无需重新建立该链接。在发送具有更新选项的命令映射请求信号(sendUDP_SYN_CommandRequest(更新))512之后,将请求的选项置于对等体“3”408的存储器中(即将“更新”命令置于存储器中)。对等体3 408将waitForUDPSYNCommandTimer 514设置为10秒(信号量计时器被设置的时间的2/3)。该10秒允许:

●sendUDP_SYN_CommandMapRequest 512从对等体3408穿越因特网110到中间体102;

●中间体102处理该sendUDP_SYN_CommandMapRequest 512;并且

●使命令映射516从中间体102穿越因特网110返回到对等体3 408的时间。

waitToRx_sendUDPSYNCommandTimer 514是用于等待来自中间体102的命令映射516响应的等待计时器。对等体3408从中间体102接收不到响应有若干原因:

●在对等体3408和因特网110之间的线路可能不可用;

●在中间体102和因特网110之间的线路可能不可用;

●中间体102可能是脱机的;以及

●信号量594可能忙。

如果waitToRx_sendUDPSYNCommandTimer 514期满,则对等体3408转换回waitToRx_numPeersInNetworkTimer 506状态。对等体3408通过对等体ID来向中间体102重新发送numPeersInNetworkRequest 502。对等体3408将waitToRx_numPeersInNetworkTimer 506设置为如上所述的10秒。如果在中间体102从对等体3408接收到最小数目的所需要的sendUDP_SYN_CommandMapRequest512消息之前waitToRx_sendUDP_SYN_CommandRequest_Timer 514期满(例如,如果没有接收到4个sendUDP_SYN_CommandRequest 512消息),则留下信号量计时器来通过独立地期满,将信号量504从忙重新设置为不忙。该状态机的例示然后终止。

当中间体102从对等体3408接收到sendUDP_SYN_CommandMapRequest 512时,中间体102向对等体1 104和对等体2 106发送命令映射516。中间体102发送多个命令映射516。所发送的命令映射516的数目等于当前在P2P网络100中的对等体的数目+1乘以每个对等体必须打开的端口的数目。因此,中间体102为在对等体1104、对等体2106和对等体3408上的每个端口发送一个消息分组。例如,如果在对等体之间打开的端口的数目是2(numPortsOpenBetweenPeers=2)并且在P2P网络100上的对等体仅仅是对等体1104和对等体2106,则中间体102发送四个命令映射516。中间体102将向对等体1104发送两个命令映射516。中间体102还向对等体2106发送两个命令映射516。中间体102还向对等体3 408发送两个命令映射516。

图6图示了示例性命令映射516。命令映射516的前三列与映射300(关于图3a和图3b和表格1所描述的peerIDPeerAddressMap 300)相对应。因此,命令映射516的前三列是具有对等体3408的对等体ID、IP地址和端口的行。从sendUDP_SYN_CommandRequest 512填入对等体ID试图列602、IP列604和端口列606。选项列直接来自发送到中间体102的sendUDP_SYN_CommandMapRequest 512(“强制”或者“更新”)。例如,包括在来自对等体3 408的sendUDP_SYN_CommandMapRequest512消息中的源IP、源端口和强制选项可以是:

-249.239.54.123:58920(强制)

-249.239.54.123:58921(强制)

将在来自对等体3 408的sendUDP_SYN_CommandMapRequest 512中的该源IP、源端口和选项置于命令映射516的相应的IP 604、端口606和选项608列中。

当对等体1 104接收到命令映射516时,对等体1 104标识与“强制”选项608相关联的加入对等体ID 602。对等体1 104读取加入对等体ID602。如果对等体1 104识别了已经存在与对等体3 408的链接,则对等体1 104终止与对等体3 408的链接。为了终止该链接,对等体1 104取消与对等体“3”408的加入对等体ID 602相关联的P2P对等链接状态机(即保持与属于对等体3 408的对等体ID的IP地址/端口的链接的SM3_LinkEstablishment-P2P-Peer(SM3_连接连接-P2P-对等体)状态机)的实例。P2P对等体链接状态机是建立和保持在对等体1 104和对等体3408之间的链接的状态机。P2P对等体链接状态机通过由等体1 104发送消息和接收响应(下面参考图7所述)来建立和保持链接。对等体1 104然后接受与对等体3 408的新的链接。例示了P2P对等体链接状态机(以下称为“SM3_LinkEstablishment-P2P-Peer”)的新的实例。例如,如果对等体1 104具有运行的并且专用于与对等体3 408的端口的SM3_LinkEstablishment-P2P-Peer状态机,则对等体1 104将终止该特定的SM3_LinkEstablishment-P2P-Peer状态机,并且释放资源(例如,对等体1 104将释放前一个端口号以使得可用于以后的对对等体3 408或另一个预期对等体的连接)。

对于与“更新”选项608相关联的每个加入对等体ID 602,将例示状态机SM3_LinkEstablishment-P2P-Peer的示例,对等体1 104当前还没有建立与该状态机的链接。如果已经建立了链接(即与对等体3 408的链接当前是活动的),则对等体1 104将不采取任何动作。如果还没有建立链接,则对等体1 104和对等体3 408建立链接,如下参考图5和图7所述。

当对等体2 106接收命令映射516时,对等体2 106标识与“强制”选项608相关联的加入对等体ID 602。对等体2 106读取加入对等体ID602。如果对等体“2”106识别了已经存在与对等体3 408的链接,则对等体2 106终止与对等体3 408的链接。为了终止该链接,对等体2 106取消与对等体“3”408的加入对等体ID 602相关联的状态机(即保持与属于用于对等体3 408的对等体ID的IP地址/端口的链接的SM3_LinkEstablishment-P2P-Peer状态机)的实例。对等体2 106然后接受与对等体3 408的新链接。例示该状态机SM3_LinkEstablishment-P2P-Peer的新实例。例如,如果对等体2106具有运行的和专用于与对等体3 408的端口的SM3_LinkEstablishment-P2P-Peer状态机,则对等体1 104将终止该特定的SM3_LinkEstablishment-P2P-Peer状态机,并且释放资源(例如,对等体2 106将释放前一个端口号,以使得可用于以后的对对等体3 408或另一个预期对等体的连接)。

对于与“更新”选项608相关联的每个加入对等体ID 602,将例示状态机SM3_LinkEstablishment-P2P-Peer的实例,对等体2 106当前还没有建立与该状态机的链接。如果已经建立了链接(即与对等体3 408的链接当前是活动的),则对等体2 106将不采取任何动作。如果还没有建立链接,则对等体2 106和对等体3 408建立链接,如下参考图5和图7所述。

返回参考图5;当对等体1 104确定可以建立与对等体3 408的链接时,如上面参考图5和图6所述的强制/更新选项608所引导的,对等体1104读取在对等体之间打开的端口的数目(numPortsOpenBetweenPeers)要求,并且打开所要求的数目的新端口来与对等体3408进行链接。对等体1 104然后向中间体102发送keepAlive 518。对等体1 104为由P2P网络100要求的每个打开的端口发送keepAlive 518。例如,如果要求在P2P网络100中的对等体104、106具有两个打开的端口,则对等体1 104向中间体102发送两个keepAlive 518。对等体1104然后将keepAlive计时器520重新设置为15至45秒的其先前的值。

与上面的对等体1 104一样,当对等体2 106确定了可以建立与对等体3 408的链接时,如上面关于图5和图6所述的强制/更新选项608所引导的,对等体2 106读取numPortsOpenBetweenPeers要求,并且打开所要求的数目的新端口来与对等体3 408进行链接。对等体2 106然后向中间体102发送keepAlive 528。对等体“2”106为由P2P网络100要求的每个打开的端口发送keepAlive 528。例如,如果要求在P2P网络100中的对等体104、106具有两个打开的端口,则对等体2106向中间体102发送两个keepAlive 528。对等体2106然后将keepAlive计时器530重新设置为15至45秒的其先前的值。

中间体102分别从对等体1 104和对等体2 106接收keepAlive 518、528。到中间体102的keepAlive 518、528消息包括对等体1 104和对等体2 106已经打开来与对等体3 408进行链接的新的源端口号。keepAlive518、528包括对等体ID。等于duplicateNumSent的一系列重复的keepAlive 518、528也由对等体1 104和对等体2进行发送以考虑可能的分组丢失。中间体102将linkActive计时器222、224重新设置为0。中间体102然后向对等体3 408发送命令映射516。中间体102还使用命令映射516来更新映射300(如下在“更新peerIDPeerAddressMap”的部分中所述)。更新的映射300包括用于对等体1 104和对等体2 106的新端口以及用于对等体3 408的对等体ID、源IP和源端口信息。中间体102然后结束信号量550。

因此,信号量计时器被设置得足够长以允许用于下述的时间:

●对等体3 408从中间体102接收numPeersInNetworkResponse;

●对等体3 408将多个sendUDP_SYN_CommandRequest 512消息发送到中间体512并且由中间体102进行接收;

●中间体102构造和向网络100中的对等体104、106发送命令映射516;

●对等体104、106接收命令映射516并且建立与对等体3 408的连接;

●对等体1104和对等体2106在接收命令映射516时发送具有新的源端口号的需要数目的keepAlive(多个);以及

●使中间体102使用源端口号(多个)来更新peerIDPeerAddressMap 300。

对等体3 408从中间体102接收命令映射516。对等体3 408在接收命令映射516时取消554waitToRx_sendUDPSYNCommandTimer 514。对等体3 408然后向中间体102发送keepAlives 558。对等体3 408从需要打开的每个端口发送keepAlive 558。例如,如果在对等体之间的打开的端口的数目等于2(numPortsOpenBetweenPeers=2),则对等体3 408发送总共两个keepAlive 558,例如,从每个端口发送一个keepAlive 558。对等体3 408从每个端口发送等于duplicateNumSent的重复的keepAlive 558。该重复的keepAlive 558是冗余的以考虑可能的分组丢失。对等体3 408设置keepAliveTimer 560。keepAliveTimer 560被设置为15至45秒的范围,并且递减计数到0。

更新peerIDPeerAddressMap

返回参考图3、图5和图6,在接收到keepAlive 518、528、558时,中间体102更新peerIDPeerAddressMap 300。如上所述,每个keepAlive518、528包括对等体ID 302、源IP 304和源端口306值。对等体ID 302是对等体104、106的名称。源IP 304是对等体的IP地址。源端口306是用于发送keepAlive 518、528的对等体104、106的端口。源端口306也是对等体104、106打开用于链接建立500的端口。当接收到命令映射516时,对等体1 104、对等体2 106和对等体3 408在新的未使用的端口上递交keepAlive 518、528、558。中间体102提取包含在每个keepAlive 518、528、558中的源端口306值。中间体102将这些值置于与映射300中的对等体104、106、408相对应的适当行中。当更新映射300时,准备中间体102来为希望加入网络100的新的期望的对等体创建新的命令映射516。更新的映射300用作命令映射516的基础。图3b图示了更新的映射300。中间体102使用命令映射516来用于未来的链接建立序列。对等体4(未示出)可以是要加入P2P网络100的下一个预期对等体。对等体4试图建立与网络100中的每个对等体104、106、408的独特的链接。中间体102向对等体4通知在已经在网络100中的每个对等体104、106、408上可用的端口(多个)。中间体102通过在命令映射516中所包含的内容知道网络100中的每个对等体104、106、408上可用的端口。如上参考图6所述,基于从网络100中的每个对等体104、106、408接收到的keepAlive 518、528、558上读取的最新源端口号来更新命令映射516。与在映射300中的每个对等体104、106、408(例如对等体1 104、对等体2 106、对等体3 408)相关联的(在最新的keepAlive 518、528、558消息中读取的)每个新的源端口是下一个预期对等体(例如对等体4——未示出)可以连接到的可用端口。

中间体102在信号量504被设置为忙的时间期间接收新端口号(多个)。如果中间体102在该时间期间没有接收到新的端口号,则中间体102将不向对等体4通知连接到在对等体104、106、408上的有效的可用端口(多个)。信号量504不允许诸如对等体4(未示出)的任何额外的预期对等体连接到网络100,直至从例如对等体3408的最后一个对等体连接到网络100开始已经度过了如由信号量计时器限定的最小时间量。该信号量504允许中间体102从每个对等体104、106、408接收新的可用端口号的时间。

例如,假定对等体1 104和对等体2 106已经被连接,并且对等体3408刚刚结束建立与对等体1 104和对等体2 106的链接。在表格2中说明了用于链接对等体3 408的命令映射516:

  对等体ID  对等体地址  对等体端口  加入对等体ID  加入对等体  地址  加入对等  体端口  选项  对等体1  对等体2  a.b.c.d  e.f.g.h  33457  43328  对等体3  对等体3  i.j.k.l  i.j.k.l  18000  18001  强制  强制

表2:指示keepAlive更新的需要的UDP_SYN_CommandMap

现在,对等体1 104、对等体2 106和对等体3 408必须在信号量计时器期满之前递交具有新的源端口号的keepAlive 518、528、558。在从对等体104、106、408向中间体102发送keepAlive 518、528、558之前,在中间体102中的映射300可能具有可用于对等体4(希望连接到网络的下一个的对等体)的端口33457和43328。对等体4使用这些端口将导致端口冲突。端口33457是专用于与对等体3 408的链接的对等体1 104上的端口;端口43328是专用于与对等体3 104的链接的对等体2 106上的端口。在中间体102用新端口从对等体1接收到keepAlive 518时,映射300可能指示端口33457可用于使对等体4与对等体1 106进行连接。应当注意,中间体102在准备命令映射516之后将空写入映射300的全部对等体端口列,以防止这样的错误发生。然而,仍然需要端口更新。在中间体102用新端口从对等体2接收到keepAlive 528时,映射300可能指示端口43328可用于使对等体4与对等体2 106进行连接。如上所述,中间体102在准备命令映射516之后将空写入映射300的全部对等体端口列,以防止这样的错误发生。假定对等体1 104、对等体2 106和对等体3 408分别从UDP端口28564、29754和24987递交keepAlive 518、528、558,并且中间体102中的信号量计时器被设置得足够长以允许中间体102在发送出命令映射516之后从在网络100中的所有对等体104、106、408接收keepAlive 518、528、558;那么,映射300将反映正确的可用端口。如果在信号量计时器期满并且信号量504被设置为不忙之后,等体4试图连接到网络100(对等体4向中间体102发送三个sendUDP_SYN_CommandRequest(强制)分组,其中该三个分组的每个都具有独特的端口号[假定P2P网络100在对等体之间需要一个端口——numPortsOpenBetweenPeers=1]);则命令映射516可以被构建有可从对等体1 104、对等体2 106和对等体3 408新获得的端口(类似于表格2)。

对等链接建立

现在参考图7,图示了使对等体保持与其他对等体的连接的消息序列的示例。对等体104、106、408通过网络110来与中间体102进行链接。对等体104、106、408可以在NAT之后。对等体104、106、408可以不在对称NAT之后,诸如首先完全锥型、受限锥型/端口受限和锥型NAT。对等体104、106、408保存与如映射300中标识的相同的源IP和源端口。

对等体2 106发送请求打开端口的信号702(消息分组)。对等体2106向对等体1 104发送打开端口请求信号(以下称为“UDP_SYN”)702。UDP_SYN命令是作为“打开端口”命令字的小分组。对等体2106设置等待计时器(以下称为“UDP_SYN_Timer(UDP_SYN_计时器)”)704,用于建立对等体2106在发送另一个UDP_SYN 702之前等待对UDP_SYN 702消息回复的时段。UDP_SYN_Timer 704可以被设置为250微秒。在对等体1104处的NAT/防火墙阻止UDP_SYN 702。因为在对等体1 104和对等体2 106之间没有先前的通信,所以在对等体1 104处的NAT/防火墙阻止UDP_SYN 702。因此,UDP_SYN 702从不达到对等体1 104。对等体1 104现在向对等体2 106发送UDP_SYN 706。对等体1 104设置UDP_SYN_Timer 708。UDP_SYN_Timer 708可以被设置为250微秒。因为对等体2 106先前向对等体1 104发送消息,因此UDP_SYN 706通过对等体2 106的NAT/防火墙。对等体2106接收UDP_SYN 706。对等体2 106通过发送确认接收到UDP_SYN 706的信号(消息分组)710来进行响应。对等体2 106向对等体1 104发送确认信号710(以下称为“UDP_SYN_ACK”710)。对等体1 104取消UDP_SYN_Timer 712。对等体1104设置keepAliveTimer-Peer2(保持活动计时器-对等体2)714。keepAliveTimer-Peer2 714是对等体1 104用于确保保持与对等体2 106的有效链接的计时器。keepAliveTimer-Peer2 714被设置为15至45秒的范围,并且递减计数到0秒。设置keepAliveTimer-Peer2714,使得在对等体1 104和对等体2 106之间的端口保持打开。

因为UDP_SYN 702从不达到对等体1 104,所以对等体1 104从不对对等体2 106进行响应。对等体2 106仍然等待从对等体1 104接收UDP_SYN_ACK。对等体2 106上的UDP_SYN_Timer 704期满716。对等体2向对等体1 104发送另一个UDP_SYN 718。对等体2 106将UDP_SYN_Timer 720设置为250微秒。因为在对等体1 104和对等体2106之间有打开的端口,因此对等体1 104从对等体2 106接收UDP_SYN718。对等体1 104通过向对等体2 106发送UDP_SYN_ACK 722来进行响应。当对等体2 106接收到UDP_SYN_ACK 722时,对等体2 106取消UDP_SYN_Timer 724,并且设置keepAliveTimer-Peer1(保持期满计时器-对等体1)726。keepAliveTimer-Peer1 726是对等体2 106用于确保保持与对等体1 104的有效链接的计时器。keepAliveTimer-Peer1 726被设置为15至45秒的范围,并且递减计数到0秒。设置keepAliveTimer-Peer1726使得在对等体1 104和对等体2 106之间的端口保持打开。

相同的事务可以在对等体1 104和对等体3 408之间发生。对等体3408向对等体1 104发送UDP_SYN 732。UDP_SYN 732是“打开端口”命令字。对等体3 408设置UDP_SYN_Timer 734。UDP_SYN_Timer 734可以被设置为250毫秒。对等体1 104处的NAT/防火墙阻止UDP_SYN732。因为在对等体1 104和对等体3 408之间没有先前的通信,所以对等体1 104处的NAT/防火墙阻止UDP_SYN 732。因此,UDP_SYN 732从不达到对等体1 104。对等体1 104现在向对等体3 408发送UDP_SYN736。对等体1 104设置UDP_SYN_Timer 738。UDP_SYN_Timer 738可以被设置为250微秒。因为对等体3 408先前向对等体1 104发送了消息,因此UDP_SYN 736通过对等体3 408的NAT/防火墙。对等体3 408接收UDP_SYN 736。对等体3 408通过向对等体1 104发送UDP_SYN_ACK740来进行响应。对等体1 104取消UDP_SYN_Timer 742。对等体1 104设置keepAliveTimer-Peer3(保持活动计时器-对等体3)744。keepAliveTimer-Peer3 744是对等体1 104用于确保保持与对等体3 408的有效链接的计时器。keepAliveTimer-Peer3 744被设置为15至45秒的范围,并且递减计数到0秒。设置keepAliveTimer-Peer3 744使得在对等体1 104和对等体3 408之间的端口保持打开。

因为UDP_SYN 732从不达到对等体1 104,所以对等体1 104从不对对等体3 408进行响应。对等体3 408仍然等待从对等体1 104接收UDP_SYN_ACK。对等体3 408上的UDP_SYN_Timer 734期满746。对等体3 408向对等体1 104发送另一个UDP_SYN 748。对等体3 408将UDP_SYN_Timer 750设置为250微秒。因为在对等体1 104和对等体3408之间存在打开的端口,因此对等体1 104从对等体3 408接收UDP_SYN 748。对等体1 104通过向对等体3 408发送UDP_SYN_ACK752来进行响应。当对等体3 408接收到UDP_SYN_ACK 752时,对等体3 408取消754 UDP_SYN_Timer 750,并且设置keepAliveTimer-Peer1756。keepAliveTimer-Peer1 756被设置为15至45秒的范围,并且递减计数到0秒。keepAliveTimer-Peer1 756是对等体3 408用于确保保持与对等体1 104的有效链接的计时器。设置keepAliveTimer-Peer1 726使得在对等体3 408和对等体1 104之间的端口保持打开。

这些事务是示例性的。对等体104、106、408以其进行彼此连接的顺序可以变化。对等体104、106、408的任何一个可以是通过发送UDP_SYN命令来发起进程的第一个。对等体1 104和对等体2 106可以同时向对等体3 408发送UDP_SYN命令。在对等体1 104向对等体3 408发送UDP_SYN命令的同时,对等体2 106可以向对等体1 104发送UDP_SYN命令。当对等体3 408从对等体2 106接收UDP_SYN命令时,对等体3 408可以对来自对等体1 104的UDP_SYN命令进行响应。对等体3 408然后还对来自对等体2 106的UDP_SYN命令进行响应。如此一来,该操作可以同时或者顺序或者以其任何组合来发生。该UDP_SYN命令是在60字节或者更小的范围中的小分组。因此,彼此连接的对等体104、106、408的进程可以很快地发生。如此一来,UDP_SYN_Timer704、708、714、720、726、734、738、744、750、756可以被设置为小于秒的范围。

在建立了链接后,对等体104、106、408彼此发送keepAlive(未示出)以保持端口打开。如果对等体1 104、对等体2 106或对等体3 408确定了链接已经失效,例如,没有接收到keepAlive,则该对等体(对等体1 104、对等体2 106或者对等体3 408)与中间体102一起运行参考图7概述的具有“更新”选项的链接建立步骤序列。例如,如果对等体1 104向对等体2 106和对等体3 408发送keepAlive,但是没有接收回某个数目的keepAliveACK,则对等体1 104发起链接建立序列。

在另外的实施例中,中间体102可以归拢来自试图加入P2P网络100的对等体的请求,如图8中所示。当接收到numPeersInNetworkRequest802时,中间体102用keepAliveLaunchTime(保持活动发动时间)804来进行响应。该keepAliveLaunchTime 804是限定应当何时发动keepAlive的时间的信号(消息分组或者消息)。发动时间806是,例如,keepAliveLaunchTime+30秒。发动时间806是链接建立会话将发生的下一个时间。使用30秒是示例性的。发动时间可以被设置为30秒到10分钟范围中的任何位置。在发动时间806,P2P网络100中的所有对等体104、106都递交keepAlive 812、814。中间体102使用keepAlive 812、814来确保映射300是最新的。中间体102也使用keepAlive 812、814来确保P2P网络100中的每个对等体104、106上的端口是打开的。对等体运行以下参考图7所述的链接建立步骤。然而,对等体1104和对等体2106不必响应于接收到命令映射816而发送keepAlive。在参考图5和图6所述的前一个实施例中,要求对等体1 104和对等体2 106发送keepAlive 518、528以更新命令映射516(参见图5)。然而,由对等体1 104和对等体2 106在发动时间806发送的keepAlive 812、814现在由中间体102来使用以更新命令映射816。命令映射816包括下一个keepAliveLaunchTime 804。发动时间804是下一个链接建立会话将发生的时间。中间体102可以仅仅对该时间之前的链接建立请求进行排队。如此一来,可以归拢新的预期对等体的链接以在离散的时间发生。

现在参考图9,图示了P2P拓扑的另一个示例。P2P网络100包括中间体102和通过网络110来数据连接的若干对等体104、106、408。对等体104、106、408和中间体102可以位于同一物理位置、同一城市中的不同位置、多个不同城市中或者在其任何组合中。将对等体1 104直接地连接到网络110。经由NAT/防火墙将对等体2 106连接到网络110。也经由NAT/防火墙将对等体3 408连接到网络110。

现在参考图10,图示了图示监管对等体的指定的示例性流程图。中间体102确定对等体(对等体1 104、对等体2 106和对等体3 408)是否在NAT/防火墙之后。对等体2 106启动1002,并且与中间体102一起开始上面参考图2、图5、图7和图8所述的链接建立序列。在链接建立序列期间,中间体102确定了1004对等体2 106在NAT/防火墙之后。中间体102向对等体2 106回报1006对等体2 106在装置之后。对等体“3408”启动1002,并且与中间体102一起开始如上所述的链接建立序列。在链接建立序列期间,中间体102确定了1004对等体3 408在NAT/防火墙之后。中间体102向对等体3 408回报对等体3 408在装置之后。对等体1 104启动1002,并且与中间体102一起开始如上所述的链接建立序列。在链接建立序列期间,中间体102确定了1004对等体1 104不在NAT/防火墙之后。中间体102向对等体1 104回报对等体1 104不在装置之后。中间体102将对等体1 104置于可能的监管对等体列表1008上。监管对等体(以下称为“监管”)是能够执行与中间体相同的功能的对等体;诸如从试图加入P2P网络的预期的对等体接收请求。中间体102然后可以向对等体1 104传送一些或者全部链接建立功能。作为监管,对等体1104可以辅助对等媒体呼叫控制。

现在参考图11,示出了用于标识监管的流程图。订户是移动站,诸如无线电装置。对等体3 408接收订户登记。对等体3 408联系1102中间体102以找到负责该订户的呼叫控制的监管。对等体3 408要求中间体102标识监管1104。中间体102向对等体3 408通知对等体1 104负责监管。对等体3 408联系该监管(例如,对等体1 104以下也被称为监管104)。对等体3 408向监管104报告其NAT/防火墙状态。监管104确定1106对等体3是否在NAT/防火墙之后。对等体3 408和监管104运行如上参考图2、图5和图7所述的链接建立1108。然而,监管104承担中间体102的功能。监管104用作仅用于链接建立的中间体102。

在上面的说明书中,已经描述了本发明的特定实施例。然而,本领域的普通技术人员明白,在不偏离在权利要求中所阐述的本发明的范围的情况下,可以进行各种修改和改变。因此,在说明性而不是限制的意义上看待本说明书和附图,并且希望所有这样的修改被包括在本发明的范围内。益处、优点、问题的解决方案以及可以使得任何益处、优点或者解决方案发生或者变得更显著的任何元素(多个)不应当被解释为任何或者全部权利要求的关键的、必需的或者必要的特征或者元素。本发明仅由所附的权利要求来限定,所述权利要求包括在本申请待决期间进行的任何修改和所公布的那些权利要求的所有等同物。

权利要求书(按照条约第19条的修改)

1.一种用于在网络上的对等链接建立的方法,所述方法包括:

由中间对等体来创建映射,其中,所述中间对等体是连接到多个对等体的网络,所述映射包括:来自在对等网络中已经联网的对等体的多个对等体ID、源地址和端口号,其中,所述源地址和所述端口号被保留用于要加入所述对等网络的下一个预期对等体;

保持在所述中间对等体和所述多个对等体的至少一个之间的活动的链接;

由所述预期对等体来发送请求消息,其中,所述请求消息包括:对于表示在所述对等网络中的所述多个对等体的数目的请求;

由所述中间对等体响应于所述请求消息来向所述预期对等体发送作为所述对等网络的一部分的对等体的数目以及要在每个对等体之间打开的端口的数目;

由所述预期对等体向所述中间对等体发送多个命令映射请求消息,其中,所述命令映射请求消息的数目等于作为所述对等网络的一部分的对等体的数目乘以在每个对等体之间必须打开的端口的数目,其中,每个命令映射请求消息从独特源端口从所述预期对等体进行发送;

由所述中间对等体来接收所述多个命令映射请求消息;

针对从所述预期对等体接收到的所述命令映射请求消息的每一个,由所述中间对等体用所述源地址和所述端口号来填入所述命令映射;

由所述中间对等体向所述命令映射中所列出的每个对等体发送更新的命令映射包括向所述预期对等体发送命令映射;

响应于从所述中间对等体接收到所述命令映射,使用所述命令映射中的IP地址和端口号来在所述预期对等体和已经联网的对等体之间建立对等链接;

响应于从所述中间对等体接收到所述命令映射,由包括所述预期对等体的所述多个对等体的至少一个从先前未使用的新打开的源端口向所述中间对等体发送保持活动消息,所述保持活动消息还包括对等体ID和IP地址;

由所述中间对等体来接收所述保持活动消息的至少一个;以及

用从包括所述预期对等体的所述对等体的每一个接收到的所述新打开的源端口来更新所述映射。

2.根据权利要求1所述的链接建立方法,其中,保持进一步包括:

由所述中间对等体来发起链接活动计时器;

由所述多个对等体的至少一个向所述中间对等体发送保持活动消息;

由所述中间对等体响应于所述保持活动消息来向所述多个对等体的至少一个发送确认;以及

在接收到所述保持活动消息时,重新设置所述链接活动计时器。

3.根据权利要求1所述的链接建立方法,其中,发送所述命令映射请求消息进一步包括:设置等待映射计时器。

4.根据权利要求1所述的链接建立方法,进一步包括:

建立监管列表,所述监管列表包括:表示能够执行所述链接步骤的多个对等体的一系列监管对等体。

5.一种用于在网络上建立对等链接的对等(P2P)系统,所述系统包括:

中间对等体,所述中间对等体位于网络上,所述中间对等体保持P2P连接,并且接收P2P链接请求;所述中间对等体包括:

处理器,以及

数据库,所述数据库由所述处理器来控制,其中,所述数据库进一步包括:P2P映射和第一P2P状态机;

至少一个对等体,所述至少一个对等体进一步包括:第二P2P状态机;其中,所述中间对等体可以通过所述网络来数据连接到所述至少一个对等体,并且其中,所述至少一个对等体经由防火墙来数据连接到所述网络;

其中,所述P2P映射包括:用于所述至少一个对等体的多个源IP和源端口地址;所述P2P链接请求由所述中间对等体来使用,以将预期对等体链接到所述中间对等体和所述至少一个对等体;并且更新所述P2P映射;并且

其中,所述中间对等体可操作成,响应于所述链接请求消息来连接所述预期对等体,使得所述预期的对等体能够直接地与所述至少一个对等体进行通信。

6.根据权利要求5所述的P2P系统,其中,所述链接请求进一步包括:对于数据连接到所述中间对等体的对等体的数目的请求。

7.根据权利要求5所述的P2P系统,其中,所述第二P2P状态机向所述中间对等体发送至少一个保持活动消息。

8.根据权利要求5所述的P2P系统,其中,所述至少一个对等体向所述预期对等体发送所述至少一个保持活动消息。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号