专利名称:网络上的对等链接建立的方法和设备的制作方法
技术领域:
本发明一般地涉及因特网电话。本发明更具体地涉及对等因特网电话的链接建立 和保持。
背景技术:
因特网协议电话(以下称为“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中的其他对等体 分发音频的实体。该对等体功 能可以被内置在诸如摩托罗拉的M0T0TRB0固定站的密码站中;或者其可以被内置在独立 的箱体中,其物理上接近密码站。中间体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具有被称 为ke印AliveTimerwithIntermediary (与中间体的保持活动计时器)的计时器。该 ke印AliveTimerwithIntermediary是用于确保与保持中间体102的有效链接的等待计时 器。然而,在该状态中时,对等体1 104可以接收用于更新和同步映射300和命令映射516 的信号(如在此以下参考图6所述),被称为UDP_SYN_CommandMap (UDP_SYN_命令映射)。 由于来自随后试图连接到网络100的其他对等体的推动而导致从中间体102发送对等体1 104可以接收到的信号。ke印AliveTimerwithIntermediary被设置成15至45秒的范围,并 且递减计数到0秒。如果ke印AliveTimerwithIntermediary期满202,则对等体1 104向 中间体102发送称为ke印Alive (保持活动)消息的信号204。该ke印Alive消息204是IP 分组。该ke印Alive消息包括将其标识为ke印Alive消息的代码。该ke印Alive消息204 由对等体1 104来发送,以向中间体102通知对等体1 104仍然具有与中间体102的数据通 信链接。当中间体102从对等体1 104接收到ke印Alive消息204时,中间体102将称为 ke印AliveACK (保持活动确认)消息的确认信号206发送回对等体1104。该ke印AliveACK 消息206是由中间体102向诸如对等体1 104的对等体发送的信号,向该对等体通知中间 体102接收到ke印Alive消息。因此,当接收到ke印AliveACK消息206时,对等体1 104知 道在对等体1 104和中间体102之间的数据连接是活动的。当对等体1 104从中间体102 接收到 ke印AliveACK 消息 206 时,对等体 1 104 将 ke印AliveTimerwithIntermediary 208 重新设置成在15至45秒范围中的预先设置的值。然后,ke印AliveTimerwithIntermediary 208重新启动。对等体1 104还具有计数器(未示出),该计数器用于响应于ke印Alive消 息204来跟踪对等体1 104还没有接收到ke印AliveACK消息206的连续的次数。当对等 体1 104接收到ke印AliveACK消息206时,对等体1 104将称为peerlntermediaryKe印A liveFailureCoimt (对等体中间体保持活动实效计数)的该计数器重新设置为0。对等体 2 106 还具有 ke印AliveTimerwithIntermediary 212。如此处以上所 述,ke印AliveTimerwithIntermediary 212是用于确保保持与中间102的有效链接的计 时器。该ke印AliveTimerwithIntermediary 212被设置成15至45秒的范围,并且递减计数到O秒。如果ke印AliveTimerwithIntermediary 212期满,则对等体2 106向中间 体102发送ke印Alive消息214。如在此以上所述,keepAlive消息214是IP分组。该 keepAlive消息214包括将其标识为ke印Alive的代码。当中间体102从对等体2 106 接收到keepAlive消息214时,中间体102将ke印AliveACK消息216发送回对等体2 106。对等体2 106从中间体102接收ke印AliveACK消息216。然后,对等体2 106将 ke印AliveTimerwithIntermediary 218重新设置为15至45秒范围中的预先设置的值。对 等体 2 106 还将 peerIntermediaryKe印AliveFaiIureCount 重新设置为 0 (未示出)。对等体1 104和对等体2 106如上所述地每15至45秒发送ke印Alive消息204、 214。可以连续地或者在重叠的时间段期间发送ke印Alive消息204、214。例如,对等体 1 104可以发送ke印Alive 204。在中间体102用ke印AliveACK 206来对对等体1 104 进行响应之前,对等体2可以发送其ke印Alive消息214。中间体102可以分别地对每个 ke印Alive消息204、214进行响应。另外,中间体102可以在已经将ke印AliveACK 206发送 到对等体1 104之后从对等体2 106接收keepAlive消息214。ke印Alive204、214和关联 的ke印AliveACK 206,216用于使得对等体1 104和对等体2能够通过打开在对等体104、 106上的相应的端口来从中间体102接收通信。如果没有分别发送或者接收到ke印Alive 204、214或者ke印AliveACK 206、216,则对等体104、106将不能与P2P网络100进行通信。 由对等体1 104或者对等体2 106从中间体102接收到的任何信令将对等体1和对等体2 的ke印々1&6111116作^111壯61~1116乜3巧重新设置为就像从中间体102接收到1 5印41&6六0(。中间体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所保持的链接的计时器,该计时器被称为IinkActive (连接活动)计时器。将该IinkActive计时器设置为 1至4分钟的范围,并且递减计数到0秒。中间体102具有用于与对等体1 104的链接的 IinkActive计时器。该中间体还具有用于与对等体2 106的链接的IinkActive计时器。 当从对等体1 104接收到keepAlive 204时,中间体102将IinkActive 222计时器重新设 置为在1至4分钟范围中的先前设置的值。然而,如果中间体102没有从对等体1 104接收 到ke印Alive 204,则IinkActive计时器期满。然后,中间体102从映射300中移除对等体 1 104。这也适用于从对等体2 106接收ke印Alive 214。当接收到ke印Alive 214时,中 间体102将IinkActive计时器224重新设置为在1至4分钟范围中的先前设置的值。如 果中间体102没有接收到ke印Alive 214,则IinkActive计时器期满,并且从映射300中移除对等体2106。因此,每一个对等体 104、106 具有 ke印AliveTimerwithIntermediary202、212,并 且中间体102具有关于每个对等体104、106的IinkActive计时器222、224。当对等体104、 106的各自的ke印Alive计时器期满时,对等体104、106发送ke印Alive 204、214。当接收 到相应的ke印Alive 204,214时,中间体102重新设置IinkActive计时器222、224。当对 应的ke印Alive计时器222、224期满时,中间体102移除对对等体104、106的链接。中间 体102通过删除与对等体104、106相对应的映射300中的行来移除对对等体104、106的链 接。例如,如果IinkActive计时器222期满,则中间体移除对对等体1 104的链接。当从 映射300中移除对等体1 104时,那么对等体1 104被视作不可用。 如果用于对等体1 104的ke印AliveTimerwithIntermediary 202期满,则对等 体1 104可能已经丢失了其与中间体102的链接。与中间体102的链接可能因为下述原 因而已经丢失在对等体1 104和因特网110之间的链接不再可行;在中间体102和因 特网110之间的链接不再可行;或者,中间体102脱机。对等体1 104使peerlntermedi aryKeepAliveFaiIureCount递增1。对等体1 104向中间体102发送另一个ke印Alive 204。对等体 1 104 将 ke印AliveTimerwithIntermediary 202 重新设置为 0。如果 keepAliveTimerwithlntermediary 202 再次其月满,贝丨J对等体 1 KMiJpeerIntermediaryKe 印AliveFaiIureCount递增1。对等体1 104向中间体102发送另一个ke印Alive 204。对 等体1 104再次重新设置ke印AliveTimerwithIntermediary 202。对等体1 104重复该 进程,直至它从中间体102接收到ke印AliveACK 206,或者peerIntermediaryKe印AliveF aiIureCount 大于或等于被禾尔为 peerIntermediaryKeepAliveFaiIureCountMax (对等体中 间体保持活动实效计数最大值)的预定的最大失效计数。该peerIntermediaryKe印Alive FailureCountMax是表示在没有从中间体102接收回ke印AliveACK的情况下对等体将进 行尝试的最大次数的值。例如,peerIntermediaryKe印AliveFaiIureCountMax可以被设置 为 40。如果 peer IntermediaryKeepAl i veFai IureCount 大于或者等于 peer Intermediary Ke印AliveFailureCountMax,则对等体1104认为其已经丢失了其与中间体的链接,然后对 等体1 104发起链接建立进程,如下参考图4所述。对等体1 104具有关于对等体2 106的ke印Alive计时器232。对等体2也具有 关于对等体1 106的ke印Alive计时器242。如上所述,ke印Alive计时器是用于确保在 对等体104、106之间保持的有效链接的等待计时器。当计时器达到预定值时,对等体104、 106分别发送ke印Alive消息,以便于分别验证与另一对等体106、104的数据通信链接仍然 是活动的。将ke印Alive计时器232设置为15至45秒的范围,并且递减计数到0秒。如 果ke印Alive计时器232期满,则对等体1 106向对等体2 106发送ke印Alive 234。当对 等体2从对等体1 104接收到ke印Alive消息234时,对等体2 106将其ke印Alive计时 器242重新设置为0。然后,对等体2 106向对等体1 104发送ke印AliveAck 246。如上 所述,ke印AliveACK是由对等体2 106发送到对等体1 104的信号,确认对等体2 106已 经从对等体1 104接收到ke印Alive消息234。当对等体1 104接收到ke印AliveACK246 时,对等体1 104将其ke印Alive计时器236重新设置为在范围15至45秒范围中的预先 设置的值。如果对等体2 106在对等体2的ke印Alive计时器期满242之前没有接收到 ke印Alive 234,则对等体2 106将向对等体1104发送ke印Alive (未示出)。在该情况下,对等体1 104将用ke印AliveAck 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接收到ke印Alive204、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。 对等体 2 e.f.g.h 29754 对等体 2 e.f.g.h 29755 对等体 3 i.j.k.l 24987 对等体 3_yjcl_24988_表格 1 示例性 peerIDPeerAddressMap当对等体试图加入P2P网络100,并且中间体102成功地允许其发起链接建立进 程时,中间体102将对等体的源ID、IP地址和端口输入到映射300中。中间体102通过要 求所有的对等体104、106保持与中间体102的活动的链接来保持映射300。对等体104、 106必须发送ke印Alive204、214以保持位于映射300上。如果中间体102没有接收到 ke印Alive204、214,则在指定的时间量之后,中间体102从映射300中删除对应的对等体 104、106。中间体102使用接收到的ke印Alive 204、214来更新映射300。例如,如果对等 体1 104使用新的端口来发送ke印Alive 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将信号量(即被称为1 inkEstablishmentSemaphore_ 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的ke印Alive消息响应。对等体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和因 特网Iio之间的通信线路可能是不可用的。在中间体102和因特网110之间的通信线路 可能是不可用的。中间体102可能是脱机的。信号量(IinkEstabIishmentSemaphore_ 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 :ke印AliveTimerWithIntermediary)。对等体3408将 ke印AliveTimerWithIntermediary 202重新设置为15秒。如果对等体之间必须打开的端 口的数目大于1 (例如值numPortsOpenBetweenPeers (对等体之间打开端口的数目)> 1), 则对等体3 408必须向中间体102发送多个ke印Alive 204消息分组。由对等体3 408发送的ke印Alive 204消息的数目等于要在对等体之间打开的端口的数目。因此,发送到中 间体 102 的 ke印Alive 204 的数目是 numPortsOpenBetweenPeers ke印Alive204。例如,如 果必须打开的端口的数目是2,则对等体3408向中间体102发送两个ke印Alive 102。如 果必须打开的端口的数目是5,则对等体3408向中间体102发送5个ke印Alive 102。每 个ke印Alive 102都包括对等体3408的对等体ID。将该对等体ID输入到映射300中。可 以在映射300的对等体地址304和对等体端口 306中输入空值。当对等体3408响应于接 收到numPeersInNetworkResponse 508来向中间体102发送ke印Alive时,中间体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(发送重复数目))χ(numPortsOpenBetweenPeers) χ(numPeersInNetworkResponse)其中,dupIicateNumSent是考虑到网络损耗的值;
numPortsOpenBetweenPeers是要在对等体之间打开的端口的数目;numPeersInNetworkResponse 是在 P2P 网络 100 中的对等体的数目。例如,该值可以是dup IicateNumSent = 2numPortsOpenBetweenPeers = 2numPeersInNetworkResponse = 4对等体3408 将 8 个 sendUDP_SYN_CommandMapRequest 512 消息发送到中间体 102。对等体 3408 从独特端口发送每个 sendUDP_SYN_CommandMapRequest 512 (即在 8 个 不同端口上的8个不同的分组)。因为dupIicateNumSent等于2,因此必须从每个端口发 送第二 sendUDP_SYN_Co_andMapRequest 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_Co_andMapRequest 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_C0mmandRequeSt (发送 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_C0mmandRequeSt (更新))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 ( “强制”或者“更新”)。例如,包括在来自对等体
3408的sendUDP_SYN_Co_andMapRequest512消息中的源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对等体链接状态机 (以下称为“5]\0_1^111^8丨3131丨81111161^- 2 - 661·”)的新的实例。例如,如果对等体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的链接当前是活动的),则对等体1104将不采取任何动作。如果还没有建立链接,则对等体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发送ke印Alive 518。对等体1 104 为由P2P网络100要求的每个打开的端口发送ke印Alive 518。例如,如果要求在P2P网 络100中的对等体104、106具有两个打开的端口,则对等体1 104向中间体102发送两个 keepAlive 518。对等体1104然后将ke印Alive计时器520重新设置为15至45秒的其先 前的值。与上面的对等体1 104 —样,当对等体2 106确定了可以建立与对等体3 408的 链接时,如上面关于图5和图6所述的强制/更新选项608所引导的,对等体2 106读取 numPortsOpenBetweenPeers要求,并且打开所要求的数目的新端口来与对等体3 408进行 链接。对等体2 106然后向中间体102发送ke印Alive 528。对等体“2” 106为由P2P网 络100要求的每个打开的端口发送keepAlive 528。例如,如果要求在P2P网络100中的对 等体104、106具有两个打开的端口,则对等体2106向中间体102发送两个ke印Alive 528。 对等体2106然后将ke印Alive计时器530重新设置为15至45秒的其先前的值。中间体102分别从对等体1 104和对等体2 106接收keepAlive 518、528。到中间 体102的ke印Alive 518、528消息包括对等体1 104和对等体2 106已经打开来与对等体3 408进行链接的新的源端口号。ke印Alive518、528包括对等体ID。等于duplicateNumSent 的一系列重复的ke印Alive 518、528也由对等体1 104和对等体2进行发送以考虑可能的 分组丢失。中间体102将IinkActive计时器222、224重新设置为0。中间体102然后向对 等体3 408发送命令映射516。中间体102还使用命令映射516来更新映射300(如下在“更新peerlDPeerAddressMap”的部分中所述)。更新的映射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时发送具有新的源端口号的需 要数目的ke印Alive(Sf);以及 使中间体102使用源端口号(多个)来更新peerlDPeerAddressMap 300。对等体3 408从中间体102接收命令映射516。对等体3 408在接收命令映射 516 时取消 554waitToRx_sendUDPSYNCommandTimer 514。对等体 3 408 然后向中间体 102 发送ke印Alives 558。对等体3 408从需要打开的每个端口发送ke印Alive 558。例如, 如果在对等体之间的打开的端口的数目等于2(numPorts0penBetweenPeers = 2),则对等 体3 408发送总共两个ke印Alive 558,例如,从每个端口发送一个ke印Alive 558。对 等体3 408从每个端口发送等于duplicateNumSent的重复的ke印Alive 558。该重复的 keepAlive 558是冗余的以考虑可能的分组丢失。对等体3 408设置ke印AliveTimer 560。 ke印AliveTimer 560被设置为15至45秒的范围,并且递减计数到0。更新 peerlDPeerAddressMap返回参考图3、图5和图6,在接收到keepAlive 518、528、558时,中间体102更新 peerlDPeerAddressMap 300。如上所述,每个 ke印Alive518、528 包括对等体 ID 302、源 IP 304和源端口 306值。对等体ID 302是对等体104、106的名称。源IP 304是对等体的IP 地址。源端口 306是用于发送ke印Alive 518,528的对等体104、106的端口。源端口 306 也是对等体104、106打开用于链接建立500的端口。当接收到命令映射516时,对等体1 104、对等体2 106和对等体3 408在新的未使用的端口上递交ke印Alive 518、528、558。 中间体102提取包含在每个ke印Alive 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接收到的1 5印41丨卯518、528、558上读取的最新源端口号来更新命令映射 516。与在映射300中的每个对等体104、106、408(例如对等体1 104、对等体2 106、对等 体3 408)相关联的(在最新的ke印Alive 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 表2 指示 ke印Alive 更新的需要的 UDP_SYN_CommandMap现在,对等体1 104、对等体2 106和对等体3 408必须在信号量计时器期满之前 递交具有新的源端口号的ke印Alive 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接收到ke印Alive 518时,映射300可能指示端口 33457可用于使对等体4与 对等体1 106进行连接。应当注意,中间体102在准备命令映射516之后将空写入映射300 的全部对等体端口列,以防止这样的错误发生。然而,仍然需要端口更新。在中间体102用 新端口从对等体2接收到ke印Alive 528时,映射300可能指示端口 43328可用于使对等体 4与对等体2 106进行连接。如上所述,中间体102在准备命令映射516之后将空写入映射 300的全部对等体端口列,以防止这样的错误发生。假定对等体1 104、对等体2 106和对 等体 3 408 分别从 UDP 端口 28564、29754 和 24987 递交 ke印Alive 518、528、558,并且中间 体102中的信号量计时器被设置得足够长以允许中间体102在发送出命令映射516之后从 在网络100中的所有对等体104、106、408接收1 5印六1&6 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先前向对等体
1104发送消息,因此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 设置 ke印AliveTimer_Peer2 (保持活 动计时器-对等体2) 714。keepAliveTimer-Peer2 714是对等体1 104用于确保保持与对 等体2 106的有效链接的计时器。ke印AliveTimer-Peer2 714被设置为15至45秒的范 围,并且递减计数到0秒。设置ke印AliveTimer-Peer2714,使得在对等体1 104和对等体
2106之间的端口保持打开。因为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,并且设置ke印AliveTimer-Peerl (保持期满计 时器-对等体1)726。ke印AliveTimer-Peerl 726是对等体2 106用于确保保持与对等体 1 104的有效链接的计时器。ke印AliveTimer-Peerl 726被设置为15至45秒的范围,并 且递减计数到0秒。设置ke印AliveTimer-Peerl726使得在对等体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 设置 ke印AliveTimer_Peer3 (保持活动计时 器_对等体3) 744。keepAliveTimer-Peer3 744是对等体1 104用于确保保持与对等体3 408的有效链接的计时器。ke印AliveTimer-Peer3 744被设置为15至45秒的范围,并且 递减计数到0秒。设置ke印AliveTimer-Peerf 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-Peerl7560 keepAliveTimer-Peerl 756 被设置为 15 至 45 秒的范围,并 且递减计数到0秒。ke印AliveTimer-Peerl 756是对等体3 408用于确保保持与对等体1 104的有效链接的计时器。设置ke印AliveTimer-Peerl 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彼此发送ke印Alive (未示出)以保持端口 打开。如果对等体1 104、对等体2 106或对等体3 408确定了链接已经失效,例如,没有接 收到ke印Alive,则该对等体(对等体1 104、对等体2 106或者对等体3 408)与中间体102 一起运行参考图7概述的具有“更新”选项的链接建立步骤序列。例如,如果对等体1 104向 对等体2 106和对等体3 408发送ke印Alive,但是没有接收回某个数目的ke印AliveACK, 则对等体1 104发起链接建立序列。在另外的实施例中,中间体102可以归拢来自试图加入P2P网络100的对等 体的请求,如图8中所示。当接收至Ij numPeersInNetworkRequest802时,中间体102用 ke印AliveLaunchTime (保持活动发动时间)804来进行响应。该ke印AliveLaunchTime 804 是限定应当何时发动keepAlive的时间的信号(消息分组或者消息)。发动时间806是,例 如,keepAliveLaunchTime+30秒。发动时间806是链接建立会话将发生的下一个时间。使 用30秒是示例性的。发动时间可以被设置为30秒到10分钟范围中的任何位置。在发动时间806,P2P网络100中的所有对等体104、106都递交keepAlive 812、814。中间体102 使用ke印Alive 812,814来确保映射300是最新的。中间体102也使用ke印Alive 812、 814来确保P2P网络100中的每个对等体104、106上的端口是打开的。对等体运行以下参 考图7所述的链接建立步骤。然而,对等体1104和对等体2106不必响应于接收到命令映 射816而发送ke印Alive。在参考图5和图6所述的前一个实施例中,要求对等体1 104和 对等体2 106发送ke印Alive 518、528以更新命令映射516 (参见图5)。然而,由对等体1 104和对等体2 106在发动时间806发送的ke印Alive 812,814现在由中间体102来使用 以更新命令映射816。命令映射816包括下一个ke印AliveLaunchTime 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。在上面的说明书中,已经描述了本发明的特定实施例。然而,本领域的普通技术人 员明白,在不偏离在权利要求中所阐述的本发明的范围的情况下,可以进行各种修改和改变。因此,在说明性而不是限制的意义上看待本说明书和附图,并且希望所有这样的修改被包括在本发明的范围内。益处、优点、问题的解决方案以及可以使得任何益处、优点或者解 决方案发生或者变得更显著的任何元素(多个)不应当被解释为任何或者全部权利要求的 关键的、必需的或者必要的特征或者元素。本发明仅由所附的权利要求来限定,所述权利要 求包括在本申请待决期间进行的任何修改和所公布的那些权利要求的所有等同物。
权利要求
一种用于在网络上的对等链接建立的方法,所述方法包括创建用于中间对等体的映射,其中,所述中间对等体是连接到多个对等体的网络,所述映射包括多个地址和端口号,其每一个都表示在所述网络上的所述多个对等体的一个,所述中间对等体和所述多个对等体是对等网络是一部分;保持在所述中间对等体和所述多个对等体的至少一个之间的活动的链接;由预期对等体来发起到所述对等网络的链接;将所述预期对等体链接到所述对等网络;由所述预期对等体来发送命令映射请求消息;由所述中间对等体来接收所述命令映射请求消息;由所述中间对等体向所述多个对等体的至少一个发送命令映射;响应于接收到所述命令映射,由所述多个对等体的至少一个向所述中间对等体发送保持活动消息的至少一个;由所述中间对等体接收所述保持活动消息的至少一个;由所述中间对等体向所述预期对等体发送所述命令映射;以及更新所述映射。
2.根据权利要求1所述的链接建立方法,其中,发起进一步包括由所述预期对等体来发送请求消息,其中,所述请求消息包括对于表示在所述对等网 络中的所述多个对等体的数目的请求;以及 由所述预期对等体来设置等待计时器。
3.根据权利要求1所述的链接建立方法,其中,所述保持活动消息的至少一个包括所 述多个对等体的至少一个的对等体ID、IP地址和端口地址。
4.根据权利要求1所述的链接建立方法,其中,保持进一步包括 由所述中间对等体来发起链接活动计时器;由所述多个对等体的至少一个向所述中间对等体发送保持活动消息; 由所述中间对等体响应于所述保持活动消息来向所述多个对等体的至少一个发送确 认;以及在接收到所述保持活动消息时,重新设置所述链接活动计时器。
5.根据权利要求1所述的链接建立方法,其中,发送所述命令映射请求消息进一步包 括设置等待映射计时器。
6.根据权利要求1所述的链接建立方法,进一步包括建立监管列表,所述监管列表包括表示能够执行所述链接步骤的多个对等体的一系 列监管对等体。
7.一种用于在网络上建立对等链接的对等(P2P)系统,所述系统包括中间对等体,所述中间对等体位于网络上,所述中间对等体保持P2P连接,并且接收 P2P链接请求;所述中间对等体包括 处理器,以及数据库,所述数据库由所述处理器来控制,其中,所述数据库进一步包括P2P映射和 第一 P2P状态机;至少一个对等体,所述至少一个对等体进一步包括第二 P2P状态机;其中,所述中间对等体可以通过所述网络来数据连接到所述至少一个对等体,并且其中,所述至少一个对 等体经由防火墙来数据连接到所述网络;其中,所述P2P映射包括用于所述至少一个对等体的多个源IP和源端口地址;所述 P2P链接请求由所述中间对等体来使用,以将预期对等体链接到所述中间对等体和所述至 少一个对等体;并且更新所述P2P映射;并且其中,所述中间对等体可操作成,响应于所述链接请求消息来连接所述预期对等体,使得所述预期的对等体能够直接地与所述至少一个对等体进行通信。
8.根据权利要求7所述的P2P系统,其中,所述链接请求进一步包括对于数据连接到 所述中间对等体的对等体的数目的请求。
9.根据权利要求7所述的P2P系统,其中,所述第二P2P状态机向所述中间对等体发送 至少一个保持活动消息。
10.根据权利要求7所述的P2P系统,其中,所述至少一个对等体向所述预期对等体发 送所述至少一个保持活动消息。
全文摘要
一种用于链接到对等(“P2P”)网络(100)以进行VOIP通信的方法和设备。中间对等体(102)创建用于在P2P网络中将对等体链接在一起的映射(300)。生成一系列消息以打开可接入到P2P网络上的其他对等体(106)的一个对等体(104)的端口。然后,使得对等体能够直接地与其他对等体进行通信。监管对等体可以承担中间对等体的功能。
文档编号H04L29/08GK101843076SQ200880114246
公开日2010年9月22日 申请日期2008年10月14日 优先权日2007年10月30日
发明者布拉德利·M·希本, 托马斯·B·博恩, 罗伯特·D·洛加尔博 申请人:摩托罗拉公司