RELOAD的分析

RELOAD的分析

P2P SIP将Peer-to-peer (P2P) 网络和Session Initiation Protocol (SIP)相融合,以提高系统的survivability和scalability。
在实现上,通常是将SIP的节点定位服务由p2p协议取代。SIP使用P2P层来进行discovery and rendezvous。使用URI作为查找的Key。
P2PSIP是以P2P方式组织起来的节点集,用于使用SIP进行实时通讯。覆盖网上的节点提供了一种将名字映射为覆盖网位置的分布式机制。

RELOAD提供一种通用的自组织的覆盖网服务,用于节点间的消息传递和数据存储服务。在RELOAD中,任何符合协议的节点都可以加入到该网络中去。面对的是复杂的网络状况。由于网络分区、NAT或firewall造成的丢包或节点间不可连同是非常经常的情况。节点间的时延、带宽、连通性都不可保障。存在恶意和欺骗节点。将节点分为Peer和Client。Peer节点可以为其他节点中转消息和存储数据,文档中并未要求Peer一定需要具有公网IP,也可能是内网节点。也对节点间的连通性不做假定。Client 可以在覆盖网上存取数据,但不存储数据和路由消息。RELOAD没有对如何优化覆盖网进行讨论,而是描述了一个加入RELOAD的节点所需要遵循的基本原则。
RELOAD并非只针对SIP应用。RELOAD中任意加入的节点都有可能成为Peer。

如果通过RELOAD可建立主被叫的直接连接,则主被叫间直接传递SIP消息,而不需要经过任何Peer节点。而根据移动的要求,只有移动部署的服务器为SN-C,可以负责SIP注册和会话控制。

架构
RELOAD通过 Message Transport和Storage模块为上层应用提供消息路由和数据存取服务,而使用Forwarding and Link Management管理和维护与其他节点建立的连接。而拓扑插件负责实现特定的覆盖网拓扑算法,例如Chord,KAD 等。

RELOAD对于节点采用单层结构。每个节点都有独立的Node-ID。RELOAD不存在注册服务器和会话控制服务器,标准SIP终端无法接入。通过RELOAD找到被叫后,如果可以直连,则主被叫间直接进行SIP交互,不需经过其他节点。
而我们采用2层结构,由SN-C组成覆盖网,所有的UA必须连入一个SN-C做为自己的注册服务器和会话控制服务器,主叫的所有SIP信令经由SN-C转发到被叫SN-C,再转发到被叫UA。另外,我们假定任意两SN-C间可以建立稳定可靠的连接,允许标准SIP终端的接入。

路由消息:
如前所述,RELOAD需要面对的是复杂的异构网络环境。并非任意两Peer间都可以建立连接。但是每个Peer都与若干邻近节点建立连接关系。
在RELOAD中,如果两节点没有建立连接关系(必须通过Attach消息),则不会成为消息传递的路径。消息的路由必须经由Peer间已经建立的连接。
在覆盖网上,如果A要与Z传输消息,可以通过Iterative或Recursive的路由方式,逐跳将消息传送到Z。通常采用Recursive方式。
Z对于A的回应,可以通过
1,建立直接连接。
2,Symmetric response 按照原路径逐跳迭代返回到A。
3,Forward  response 独立选择到A的路径,如同Z发送一条新的请求,逐跳传递回A。
显然,如果A和Z可以建立直连通路,是最理想的方式。但当无法两者无法建立连接时,需要回退到Symmetric Route的方式。

NAT及防火墙问题
    为应对NAT和防火墙问题,节点通过RELOAD的路由消息功能建立交互后,通过ICE Checks尝试建立直接连接或通过中转节点中转。
作为以后SIP消息,再通过针对媒体流的ICE检测建立RTP数据流。
ICE的实现: 搜集STUN服务器,由于级联NAT及Peer并不一定是公网节点;为提高节点间能够直连的概率。每个Peer都可以作为STUN服务器,并通过其他Peer所发现的自己的reflexive address将这些Peer分组,在每组中选择一个作为以后建立连接的STUN服务器。而初始的 bootstrap节点做为初始STUN服务器列表。与ICE中在SDP消息中携带候选信息(IP地址、端口、传输协议、优先级等),RELOAD使用Attach消息携带此信息。

路由寻址:定位功能的实现
RELOAD的SIP实现分为两步:
   1,AOR --> destination lists (一个或一系列Node-ID)
   2,根据Node-ID通过路由寻址找的目的节点
缺点:实际进行了两次覆盖网查询,是否有必要?
优点:只要网络不分区,主被叫节点就可以进行消息交互。通过覆盖网的消息路由功能,进行消息交互后。
     Alice的 AOR是"sip:[email protected]" ,Node-ID 是 "1234"。
如果我们做如下映射:
Hash(Alice)->"1234",or Hash([email protected]) -->"1234".
来生产Alice的Node-ID.这样,一旦用户知道被叫的AOR,就会根据Hash函数生成被叫的Node-ID,从而找到节点,这样会减少一次覆盖网查询。

我们先前的做法:
我们假定任意两SN-C间必然可以直接建立连接关系,且连接稳定可靠。(如果我们假定媒体层的网络链路不可靠的,SN-C之间的直连链路又如何可靠呢?)
[email protected]。其中211.69.198.223为用户的SIP注册服务器。
DHT中存储的信息:HASH(alice)-->211.69.198.223
缺点:
1,主叫找到的是被叫的SIP注册服务器。无法进行SIP服务器卸载,所有SIP信令都要经过主被叫SIP服务器。
当主被叫SIP服务器无法建立直接连接时,通话过程无法建立。且对于SIP服务器都有负载。
2. 由于要允许节点的注册服务器和数据存储服务器分开。应当允许将用户注册到任意的SN-C。
为保证任意两节点间可达。
通过已经建立的连接,利用覆盖网拓扑结构,将消息转发到目的地节点。
为找到节点并将消息路由到对方接节点。

计费模式
  RELOAD没有虽然出于安全考虑讨论了认证问题,但是没有讨论计费问题。
  Skype的计费模式:任意两Skype终端间的通话不需交费,只有通过PSTN拨打手机或固话是进行计费。
  如果采用每次通话计费方式。如何实现:
  1,要求至少有一个服务器处于SIP信令的中间,媒体流可以不经过服务器。
  2,服务器不在SIP信令中间,而通过主被叫客户端通告服务器计费信息。
  第二种方式是不可靠的,因为客户端如果通话中掉线,如何计费;由于协议开放,如何面对恶意客户端逃避计费。
  从技术角度,主被叫直接进行SIP消息的交互,可以大大减少整个系统的负荷。但是却无法按照通话时长计费,只能按次(每次呼叫后进行ICE检测)或数据流量(GPRS流量)计费。

p2p SIP相关的文档

http://tools.ietf.org/wg/p2psip/
draft-ietf-p2psip-base-02
draft-ietf-p2psip-sip-04.txt
draft-ietf-p2psip-reload-00.txt
RELOAD的主要目的是: 进行分布式数据存储和消息路由。主要完成了三方面的工作: 覆盖网管理,数据存储,Chord算法。

10年03月 通过这次去北京测试媒体层可靠性的设计测试用例,认识到单纯的媒体层可靠性无法实现,必须将 信令层的可靠性和媒体层的可靠性统一起来。RELOAD给出了一种在某些网络链路发生故障时,仍能进行信令层传输的方法。但是由于会通过多跳路由节点,使得效率不佳。
更认识到,信令层的可靠性。

你可能感兴趣的:(p2p,reload,SIP,IETF)