背景:
阅读内容

P2P-SIP:教你轻松实现多媒体会话

日期:2006-12-21 来源:计算机世界  作者:未知 字体:

  首先讲一讲Chord基础知识,Chord是结构化的overlay。所谓overlay,是指P2P系统在物理连接的基础上构建的逻辑网络。而结构化的overlay,是指在overlay中,特定的资源由特定的节点管理;当查询该资源时,根据某种路由规则,找到管理该资源的特定节点。Chord使用SHA-1哈希算法,哈希值为m个比特。共有2m个可能值分布在圆周上,称做Chord环,如图2所示。

  图中N表示节点,N后的数字是该节点的哈希值,一般通过哈希节点的IP地址得到。K表示资源,K后的数字是该资源的哈希值。Chord用在SIP中时,K应该是SIP URI,例如sip:humingchunno1@163.com。在Chord中,每个节点都负责管理一段哈希空间——顺时针方向上之前一个节点到自己的范围,哈希值落在该空间中的资源K的信息由本节点保存。例如节点N32就负责管理资源K24和K30的信息(图2中指向N32的实线箭头所示)。

  当某个节点比如N8要询问资源K30的信息时,N8首先要找到负责管理K30的节点N32。最简单的做法是N8询问顺时针方向上自己后面的那个节点,称做N8的successor,即N14。如果N14不负责K30,则N14询问自己的successor,即N21。该操作反复进行,直至找到负责K30的节点N32为止。

  这种查询机制只要求节点知道顺时针方向上自己后面那个节点的位置(自己的successor),查询效率低,花费的平均时间是函数O(N/2)的值,N是Chord环的实际节点数。为提高查询效率,Chord中每个节点除了记录successor和predecessor(顺时针方向上自己前面的那个节点)外,还要记录m个其他节点。这m个节点由successor(n+2i-1)确定,其中n是本节点的哈希值,i是1到m间的整数。m个节点的集合就是finger表(图2中给出N8的finger表)。这种方式下查询资源花费的平均时间为O(logN)。

  新节点,例如图2中的N26,要加入Chord环时,先询问自己知道的Chord中任一节点,假定为N8。N8通过查询,发现N26的successor是N32,告知N26。N26得知后把successor设为N32,并通告N32自己的存在。N32得知后把predecessor设为N26,并把K24交由N26管理。N26则完成加入。

  Chord中每个节点都要周期性地更新自己的successor、predecessor和finger表,以保证快速正确的查询。理论的计算和实际的模拟显示,Chord的容错性很强,当网络中50%的节点故障时,查询失败的机率也只有1.3%。

  2. P2P-SIP网络的形成和维护

  在PN的配置文件中应该有一个配置项,其值是“IP地址:端口”或“域名:端口”的形式。存在多个值时,之间用空格分开。其值也可以为空,表示本PN是P2P-SIP网络的第一个节点。值格式错误时,忽略该值。

  PN启动时,如果发现配置项的值为空,PN的Chord层就新建一个Chord环。如果配置项存在一个或多个值,Chord层就依次向这些值发请求直至收到成功应答。如果最终没有收到成功应答,就提示错误或者新建一个Chord环。PN进入P2P-SIP网络后,即PN的Chord层加入到Chord环中,需要从其successor处拷贝一份用户注册信息。

  PN正常退出P2P-SIP网络时,需要将自己管理的用户注册信息发给自己的successor。非正常退出时,P2P-SIP网络会暂时丢失部分用户的注册信息。为保证注册过的用户始终可达,可以让PN周期性地将它管理的用户注册信息通告自己的successor,甚至successor的successor。

  P2P-SIP网络的维护是PN的Chord层来做的。每个PN的Chord层都周期性地更新自己的successor、predecessor和finger表,从而及时地了解网络的变化。

  3. 请求处理过程

  按照RFC3261的规定,SIP服务器(主要指代理服务器)处理请求时与请求的方法无关。我们将SIP服务器改造成PN时增加的步骤也应该是与方法无关的。下面我们通过详细描述用户的注册和呼叫,来展示P2P-SIP网络中PN处理请求的过程,并表明增加的步骤与方法无关。

收藏 推荐 打印 | 录入:admin | 阅读:
本文评论   [发表评论]   全部评论 (0)
Digg排行
热门评论