SIP(会话发起协议)是当今最流行的 VoIP 协议。1 它被企业、消费者甚至运营商广泛应用于其网络核心。由于 SIP 设计用于建立任何类型的媒体会话,因此它也被用于 VoIP 之外的各种多媒体应用,包括 IPTV、视频会议,甚至协作式视频游戏。
在过去的三年中,人们对去中心化、点对点 SIP (P2PSIP) 的兴趣日益增长。P2PSIP 减少或消除了 SIP 部署中所需的集中式服务器数量。2,3,4,5 人们普遍猜测,这种兴趣可归因于流行的伪 P2P 通信服务 Skype(Skype 仍然严格集中管理身份验证、计费和准入控制)。尽管一个潜在用途是构建一个基于 SIP 的、低成本、无服务器的全球网络,但大部分兴趣与使 SIP 能够在传统基于服务器的 SIP 不太适用的部署中运行有关。
P2PSIP 似乎优于基于服务器的解决方案的一个主要部署场景是小型办公室部署,在这些部署中,用户可能几乎没有或根本没有技术支持能力。P2P 的自组织特性使其非常适合比简单的集中式服务器更易于配置和管理的系统。对于小型办公室应用,配置可能仅包括在每个设备中键入分机号码。P2PSIP 也因其缺乏单点故障而被考虑用于提供高度可靠的系统,并作为在较大部署中现有 SIP 服务器之间共享信息的机制。除了显而易见的电话应用之外,P2PSIP 在断开连接或即时通信环境、应急响应网络,甚至消费电子设备集群彼此流式传输媒体方面也显示出前景。
在本文中,我们将解释什么是 P2PSIP,它与传统 SIP 有何不同,这项技术正在哪些领域使用,标准化工作以及 P2PSIP 的未来。首先,我们将了解 P2P 技术的基础知识,特别是哪些类型的 P2P 正在被使用或考虑用于 P2PSIP。
对于 P2P 系统,存在各种定义,甚至可以有不同程度的 P2P。在最基本的层面上,P2P 系统是指多个软件应用程序作为对等方直接相互交互以完成任务的系统。对等方的整体通常被称为覆盖网络。这与更传统的客户端-服务器模型形成对比,在客户端-服务器模型中,一个集中的软件(服务器)处理来自众多客户端的请求。选择 P2P 或客户端-服务器是关于信息处理发生位置的架构决策。对于诸如设备断开连接的网络之类的部署场景,P2P 解决方案可能是唯一可用的选项。在其他部署中,选择取决于经济或配置方面的考虑,最终用户可能意识不到,甚至可能不在乎处理发生在何处。
认为 P2P 从根本上是一个新想法是一种常见的误解。许多常见的网络协议,包括 BGP(边界网关协议)甚至 SMTP,都可以说是 P2P,但在服务器或路由器实例之间。像互联网的许多方面一样,我们现在看到这种架构正在向边缘移动。越来越多的对等组由最终用户应用程序组成,而不是由托管服务器组组成。当今人们提到 P2P 时,他们通常指的是最终用户应用程序之间的 P2P。
P2P 架构并不一定意味着每个对等方都必须提供每项服务或存储所有可用数据。总体而言,覆盖网络中的所有对等方都必须提供所有服务,但任何一个特定的对等方可能只提供一小部分。例如,复制数据库的对等方集合可能每个都存储数据库中的少量条目。如果一个非常大的对等方组分担了任务,则特定条目位于给定对等方上的几率非常低,但覆盖网络中至少有一个对等方将存储给定的条目,从而保证对等方作为一个组提供完整的数据库服务。
与集中管理的服务器相比,在许多 P2P 系统中,对等方被认为是短暂的。由于对等方软件可能在非托管的最终用户机器上运行,因此它们可能仅在软件运行时可用,并且可能随时因各种原因断开连接。覆盖网络中对等方组成的不断变化(称为抖动)是开发 P2P 应用程序时的一个重要考虑因素。
在某些 P2P 架构中,一部分对等方提供的服务比其他对等方更多。这些对等方通常称为超级节点,甚至可能是唯一提供服务的对等方。在这样的架构中,超级节点可以共同替代服务器,而其余对等方基本上充当客户端,与超级节点通信以获取服务。这种方法通常用于 NAT(网络地址转换器)存在的情况下,在 NAT 后面的对等方可能无法接收请求,因此无法完全作为对等方参与。
P2P 的另一种常见变体是混合架构。混合 P2P 系统使用集中式服务器来定位提供特定服务的特定对等方,但服务直接在对等方之间进行。P2P 最著名的用途,在线文件共享,通常以这种方式工作。每个共享文件的对等方都将列表发布到中央服务器。寻找特定文件的用户在中央服务器上搜索以定位具有该文件的对等方,然后直接从存储该文件的对等方传输文件。今天的 SIP 系统可以被认为是混合 P2P 系统。
随着 P2P 技术的发展,分发和定位数据的机制已分为两大类:非结构化和结构化。
最早的 P2P 系统是非结构化的(图 1)。在这些非结构化系统中,对等方以随意的方式组织。每个新的对等方定位并连接到覆盖网络中的一个或几个其他对等方。没有机制来选择新对等方连接到哪些对等方;任何可用的对等方都可以。因此,某些对等方可能仅连接到少数其他对等方,而另一些对等方可能连接到许多对等方。每个对等方存储的数据或提供的服务也以类似的方式随机分布。对于数据存储,这意味着覆盖网络中的任何对等方都可以存储给定的信息片段,并且该信息可能没有在对等方之间很好地分布。对等方之间的连接是逻辑结构,这意味着连接不必与底层的物理网络有任何关系。
这种安排易于形成,并且维护开销很小,但搜索可能非常困难。由于任何对等方都可以存储信息,因此必须查询每个对等方以确定数据是否不在覆盖网络中。由于结构是随机的,因此不可能知道对等方将连接到多少其他对等方,也不知道最远的对等方将有多少跳。对等方可以很容易地从覆盖网络中分离出来,因为没有结构来确保覆盖网络各部分之间的冗余链接。在大型网络中,穷举搜索可能非常耗时,并且通过限制搜索深度来限制搜索会导致非确定性搜索,因为并非每个对等方都经过咨询。
由于这些原因,非结构化 P2P 已不再受青睐,不适用于大型或互联网规模的部署。对于较小的部署,或者底层网络本身可能具有非结构化安排的部署(尤其是传感器网络和其他即时或无线网络安排),这种方法已被证明非常适合并且仍然被广泛使用。
相比之下,在结构化 P2P 架构(图 2)中,对等方以定义的逻辑结构(例如,环、树或网格)相互连接。许多安排都是可能的,但在大多数情况下,对等方在加入覆盖网络时会被分配一个(希望是)唯一的标识符。此对等方标识符或 PeerID 可以通过某种带外机制分配、随机选择,或者最常见的是通过哈希对等方的属性(例如 IP 地址)来确定。PeerID 确定新对等方与哪些其他对等方建立连接。例如,新对等方可以连接到标识符在某些数学意义上“接近”的对等方,例如数值或匹配的二进制数字的数量。
由于对等方之间的连接受到严格控制,因此设计良好的结构化 P2P 算法可以确保每个对等方都连接到多个其他对等方,从而防止单个对等方发生故障时发生分区。由于覆盖网络的结构受到控制,因此可以控制任意两个对等方之间的总距离,从而限制它们之间的跳数。
DHT(分布式哈希表)是一种广泛部署的特定类型的结构化 P2P。当今讨论最广泛的一些 DHT 算法包括 Chord、Kademlia 和 Bamboo。6,7,8 在 DHT 中,不仅对等方之间连接的结构以数学方式控制,而且资源在对等方上的放置也是如此。每个资源都被分配一个标识符,或 ResourceID,与 PeerID 在相同的标识符空间中。也就是说,PeerID 或 ResourceID 可以采用的值范围是相同的。ResourceID 是资源属性的哈希值,例如文件名或关键字。资源的关键字被哈希以生成 ResourceID,并且 PeerID “最接近”的对等方存储该资源。接近的定义和冗余规定都取决于所使用的特定 DHT 算法。
例如,如果使用环状结构作为连接对等方的逻辑结构,则 ResourceID 为 n 的资源可以存储在 PeerID 最接近但大于 n 的对等方上(参见图 3)。在这种情况下,我们显示了五个对等方(圆圈),PeerID 为 100、200、300、400 和 500。系统存储了两个资源,ResourceID 为 345 和 444,用正方形表示。箭头指示哪个对等方负责存储系统中的每个资源。
当其他一些对等方稍后想要定位资源时,它会哈希该资源的区分名称,并使用覆盖网络联系 PeerID 最接近的对等方。该对等方提供资源(如果存在),或者如果覆盖网络未存储该资源,则它可以报告该资源不存在。此机制需要发送更少的消息来定位数据并提供确定性搜索,从而确保查询唯一的负责对等方以获取资源。
由于每个对等方仅直接连接到整个覆盖网络的一部分子集,因此搜索可能仍然需要多次跳跃。对等方可以询问更接近所需 PeerID 的邻居,然后该邻居询问另一个更近的邻居,依此类推。今天使用的大多数 DHT 的结构都使得它们可以保证最多需要咨询 log(n) 个对等方(其中 n 是覆盖网络中对等方的总数)来定位特定的对等方。虽然这显然比客户端-服务器网络的直接查询和响应的搜索成本更高,但即使对于具有大量对等方的覆盖网络,它也导致相对较低的搜索时间,同时消除了中央服务器。
为什么如此热衷于尝试使 SIP 成为 P2P?为什么不创建一种新协议?从现有标准开始可以利用已经完成的工作——SIP 案例中数年的努力。此外,SIP 具有许多使其对转换为 P2P 具有吸引力的功能。SIP 的设计旨在将尽可能多的功能转移到边缘。SIP 端点很智能,因为大多数呼叫信令都在端点之间处理。当建立呼叫时,发起呼叫、指示呼叫进度(例如,振铃和应答)和终止呼叫的消息都源自端点。功能集和可用媒体编解码器等功能也在端点之间直接协商。一旦呼叫建立,媒体直接在端点之间流动。事实上,如果将两部 SIP 电话配置为它们都认为另一部电话是 SIP 服务器,它们将完美地相互通信并使用它们之间的所有功能。无需服务器!
SIP 中集中化的是资源定位。通过说服两部电话中的每一部另一部是服务器来连接它们,证明了它们之间的功能和协议工作,但这并没有证明其他任何东西。SIP 服务器的主要目的是定位其他端点。
在传统的 SIP 网络中,每部电话都与中央 SIP 注册服务器通信。每个用户都有一个 AoR(记录地址),通常是用户名或电话号码。注册服务器维护 AoR 与该用户电话的 IP 地址之间的映射。将一个 AoR 映射到 IP 地址的每个条目都称为注册。当一个用户希望呼叫另一个用户时,第一个用户的电话会联系 SIP 代理,SIP 代理会联系注册服务器。注册服务器查找请求的 AoR 并将 IP 地址返回给代理。然后,代理使用该地址将呼叫代理到目标电话。
在许多网络中,代理和注册服务器作为一个软件包实现,简称为 SIP 服务器,或者令人困惑的是,有时仅称为代理。中央服务器除了确保端点能够相互定位之外,对呼叫几乎没有做任何事情。如前所述,SIP 在许多方面已经符合混合 P2P 系统的标准。智能和服务驻留在端点中,而集中式服务器仅用于允许对等方(在本例中为 SIP 电话)相互定位和通信。
P2PSIP 可以被认为是将 SIP 中最后残留的集中式功能分发到电话中。SIP 系统最重要的集中式方面是注册服务器,而 P2PSIP 的核心是完全去中心化、无服务器的注册服务器替代方案。在 P2PSIP 中,对等方存储注册信息,而不是集中式服务器。
早期对 P2P 电话系统的一些商业尝试采用了“到处复制一切”的方法,使用广播机制交换数据。每部电话定期广播用户注册信息。每部其他电话都会看到广播的注册信息并存储映射。如果一部电话从网络中断开连接,它将不再定期广播,并且注册信息最终将从其他电话的注册表中删除。要拨打电话,电话只需在本地注册表表中查找它希望呼叫的号码,并在电话之间直接拨打电话。
虽然这种方法适用于小型办公室系统,但它有许多缺点。首先,广播机制不太适合跨多个网络的覆盖网络。广播流量(通常)无法在跨路由器时生存,从而排除了分布式用户的覆盖网络——例如,更广泛互联网上的消费者群体。可扩展性对于此类系统来说也是一个问题,因为每个对等方都需要存储关于每个其他对等方的信息。
最近,许多公司以及 IETF(互联网工程任务组)都专注于使用适用于大型和小型系统的结构化 P2P 方法。特别是,设计建立在 DHT 的基础上。每部电话都充当覆盖网络中的对等方。电话被分配一个 PeerID,可以是 IP 地址的哈希值,也可以是由中央安全服务器分配的值。一旦服务器分配了 PeerID,在基本操作期间就永远不需要再次咨询服务器。该电话用户的 AoR 被哈希到相同的空间以生成 ResourceID,最近的对等方存储注册信息。每个对等方负责标识符空间的一部分;因此,一些注册信息存储在每个对等方上。
与任何 DHT 一样,每个对等方都知道一些固定数量的分布在整个覆盖网络中的对等方。要路由消息,从已知对等方列表中选择 PeerID 最接近请求的 ResourceID 的对等方。然后将消息发送到这个最接近的已知对等方。该过程重复,收敛到值最接近的对等方。
当一部电话加入覆盖网络时,它会确定其 PeerID 并交换一些消息以将其自身放置到覆盖网络中。此过程称为对等方加入,因为它是电话成为覆盖网络中负责对等方之一的过程。对等方了解覆盖网络中的其他对等方,以便它可以路由消息,将其自身插入到覆盖网络中,并负责标识符空间的一部分。由于某些其他对等方曾经负责存储该标识符空间部分中的注册信息,因此这些注册信息在加入过程中被转移到新的对等方。在此阶段,电话本身已成为覆盖网络的一部分,可以参与存储和定位资源,但该电话用户的注册尚未完成。当对等方离开时,它们应该将存储的资源移交给其他设备,但采用各种冗余方案来防止在一个或多个电话发生故障并带走一些信息的情况下丢失数据。
下一步是哈希用户名或电话分机号,以为该用户生成 ResourceID。构造一条消息,其中包含 AoR 与电话 IP 地址之间的映射。在传统的 SIP 中,此消息将发送到中央注册服务器。在 P2PSIP 中,注册消息改为通过覆盖网络的跳跃进行路由。一旦消息到达负责的对等方,它将存储映射,并响应发送方以指示成功。与传统的 SIP 一样,这些注册信息持续有限的时间,并且必须定期刷新以防止过时的注册信息。行为良好的对等方将请求在干净关机的情况下删除与其关联用户的所有注册信息。
当用户想要呼叫另一方时,再次哈希 AoR,为要呼叫的一方生成 ResourceID。包含 AoR 的查询消息(或可选地,直接发起呼叫的消息)通过覆盖网络的跳跃路由到负责 ResourceID 的对等方。如果消息是查询,则接收对等方在其本地映射表中查找并返回请求的用户名或电话分机号的 IP 地址,或者如果未存储该值,则返回未找到。如果收到的消息是直接发起呼叫,则如果未存储该值,则对等方会发回未找到;否则,它会将消息转发到注册映射中存储的 IP 地址。
一旦到达目标对等方,呼叫就在两个对等方之间进行,而覆盖网络不再进一步参与。P2PSIP 的美妙之处在于,在此阶段对等方之间的交互是纯 SIP。构建在现有 SIP 部署之上的实施者可以重用现有代码来实现功能、增强功能等。现有的 SIP 设备也可以很容易地集成,只需将注册信息推送到传统 SIP 设备的覆盖网络中即可。
IETF 中提出的机制以及某些商业部署中选择的机制是向覆盖网络中的每个用户颁发证书。中央服务器颁发此证书,但无需再次咨询该服务器。相反,新电话在首次加入时,会将证书的公共部分呈现给覆盖网络,覆盖网络会存储它。由于颁发其他电话证书的同一中央服务器已签署该证书,因此它可以轻松确定新电话的证书是否有效。证书的公共部分保留在覆盖网络中,并且可以由呼叫者检索并用于加密发送到新电话的流量。这样,证书既为覆盖网络的完整性提供安全保障,也为覆盖网络用户之间的媒体提供安全保障。
SIP 中的大多数功能都可以以未修改的 P2PSIP 方式使用。SIMPLE(SIP for Instant Messaging and Presence Leveraging Extensions)是 SIP 的 IM 和状态扩展集。基于 SIMPLE 的 IM 将在 P2P 部署中工作,而基本上无需修改。但是,状态需要进行一些修改。在传统的 SIMPLE 状态环境中,每个用户都会将其状态信息发布到中央服务器,并且感兴趣的各方会订阅状态信息。由于 P2PSIP 部署没有中央服务器,因此状态信息必须存储在对等方上。用于定位对等方的注册信息的相同机制可用于定位状态更新的负责对等方。虽然这要求每个对等方都实现状态服务器行为,但所需的额外开销已被证明不大。
为新的无服务器通信协议使用 SIP 的驱动原因之一是渴望互操作性。虽然注册信息在 P2PSIP 部署中是分布式的,但基本呼叫信令是使用传统的 SIP 执行的。这意味着互操作性被简化为定位远程方的问题。无法在覆盖网络中定位远程方的 P2PSIP 端点可以回退到基于 DNS 的 SIP 地址传统查找。静态注册信息可以通过辅助应用程序存储到覆盖网络中,从而允许 P2PSIP 系统定位并直接与 SIP 端点、网关甚至应用程序服务器通信。对 P2PSIP 系统的传统 SIP 呼叫以类似的方式执行。要么在传统 SIP 服务器中配置到 P2PSIP 域的静态路由,要么一个或多个对等方始终可用并与 DNS 可解析地址关联,从而允许使用传统的 SIP 基于 DNS 的解析技术访问 P2PSIP 覆盖网络。
语音邮件是另一个必须在 P2PSIP 部署中以不同方式处理的功能。在传统的 SIP 系统中,语音邮件存储在中央语音邮件系统中。当然,P2PSIP 系统仍然可以配置为使用语音邮件服务器,但由于 P2PSIP 背后的许多动机都涉及尽可能多地分配智能,因此这不是一种实用的方法。
在覆盖网络中存储语音邮件本质上与使用覆盖网络进行文件共享相同,因为语音邮件消息通常是小的声音文件。负责特定用户 ResourceID 的对等方可以存储这些文件。当用户上线并尝试注册时,他或她会发现等待的消息。发送者使用安全证书来加密为用户留下的语音邮件消息。
由于网络中的设备可能会来来往往,尤其是在全球家庭用户网络的情况下,冗余是一项关键功能。在大多数情况下,每项信息(注册信息、语音邮件等)都存储在至少三个备用服务器上。为此,已采用各种机制,包括最接近哈希值的三个服务器,或使用三种不同的哈希机制来为冗余生成三个不同的位置。商业 P2PSIP 系统都包含某种形式的冗余,即将出现的 IETF 标准也将如此。
自 2005 年 3 月以来,IETF 一直在进行标准化会议。最初,这些会议是非正式的和非正式的,最近在 2006 年 11 月的 IETF-67 上促成了一个正式的 BoF(birds-of-a-feather,百鸟齐飞)会议。IETF 参与者对 P2PSIP 的兴趣浓厚;P2PSIP BoF 会议是 IETF-67 所有会议中出席人数最多的会议。截至撰写本文时,IETF 正处于组建一个完整的工作组的最后阶段,以评估 P2PSIP 技术并制定标准。
与此同时,IETF 非正式会议的参与者一直非常忙碌。这些会议的出席人数已接近 200 人,使其成为 IETF 几乎任何其他会议中出席人数最多的会议。社区网页 (http://www.p2psip.org) 记录了迄今为止的工作成果。非正式小组已编写了近二十份草案并正在审议中,并且用于讨论 P2PSIP 技术的邮件列表每月有数百条消息。
IETF 似乎很可能在不久的将来通过 P2PSIP 标准。当前正在辩论的技术要点包括将使用哪个 DHT 以及用于维护 DHT 的消息是以 SIP 消息还是其他协议传递。最成熟的提案使用 SIP 消息来传达 DHT 信息。使用 SIP 的一个动机是实现简单。由于设备已经可以使用 SIP,因此消除了对第二个协议栈的需求。此外,SIP 作为 DHT 维护信息的传输似乎是合乎逻辑的选择,因为 SIP 已经包含了许多其他情况下需要在新协议中定义的功能,包括安全原语、NAT 遍历以及重定向和代理路由机制。
与此同时,供应商正在实施他们自己的风格和变体,这将为新兴标准提供部署经验。大多数感兴趣的各方都表示有兴趣在新兴的 IETF 标准中迁移。
P2PSIP 不会替代 SIP,也从未打算这样做。它是 SIP 的增强和补充,使 SIP 能够在原本可能不容易部署的场景中使用。它利用并扩展了 SIP 社区的工作和已部署的基础设施。传统的客户端-服务器 SIP 将继续是许多部署的首选,并且在某些位置,很可能会出现结合了传统和 P2P 部分的系统。
P2PSIP 如今已可从多家供应商处获得,但我们正处于采用曲线的早期阶段。如今,各种实现方案仍然是专有的,导致互操作性问题,但 IETF 的标准化工作将在未来改善这种情况。P2PSIP 似乎注定要成为应用程序开发人员武器库中的强大工具。它很可能在小型企业系统的 VoIP、断开连接和即时部署以及全球去中心化部署中得到广泛采用。
它也似乎很可能成为 IPTV 和家庭消费电子设备之间协议的有力竞争者,在这些领域,它可以用于集群组件并允许它们在彼此之间建立多媒体会话。如果目前的趋势保持下去,您的未来可能会出现大量支持 P2PSIP 的设备。
DAVID BRYAN 在 IETF P2PSIP 工作中发挥着积极作用,并发表了许多关于该主题的 IETF 草案、学术论文和行业贸易文章。他活跃于 SIP 社区,包括领导 www.p2psip.org(P2PSIP 的领先社区网站),并参与 SIPFoundry、reSIProcate 项目和 www.vovida.org。他是 Jasomi Networks 的联合创始人兼首席技术官,Jasomi Networks 是 SIP 会话边界控制器市场的先驱,他之前曾在思科系统和 Vovida Networks 工作。他拥有理查德斯托克顿学院的计算机科学和物理学学士学位,以及威廉玛丽学院的计算机科学硕士学位,他正在那里完成博士学位。
BRUCE LOWEKAMP 与 SIPeerior 合作,并且是威廉玛丽学院的助理教授。他的研究涵盖分布式系统和应用程序中的广泛主题。他发表了许多关于性能监控、点对点通信、自适应应用程序、实时分布式可视化虚拟机器以及即时移动网络模拟的文章。他曾担任 GGF(全球网格论坛)网络测量工作组的联合主席,并且是 GGF 的多项建议和 IETF 互联网草案的贡献者。他获得了弗吉尼亚理工大学的理学学士学位和卡内基梅隆大学的计算机科学博士学位。
最初发表于 Queue 第 5 卷,第 2 期—
在 数字图书馆 中评论本文
- 从负债到优势:与 John Graham-Cumming 和 John Ousterhout 的对话
软件生产(软件开发的后端,包括构建、测试、打包和部署等任务)已成为许多开发组织中的瓶颈。在本次采访中,Electric Cloud 创始人 John Ousterhout 解释了如何将软件生产从负债转变为竞争优势。
- 武装您的应用程序以实现防弹部署:与 Tom Spalthoff 的对话
应用程序、更新和补丁的部署是任何 IT 部门最常见且风险最高的功能之一。部署任何未正确配置用于分发的应用程序都可能中断或崩溃关键应用程序,并使公司在生产力损失和帮助台费用方面付出高昂的代价——而公司每天都在这样做。事实上,Gartner 报告称,即使经过 10 年的经验,大多数公司也无法以 90% 或更高的成功率自动部署软件。
Martin J. Steinmann - 使用 SIP 的统一通信
基于 SIP(会话发起协议)标准的通信系统在过去几年中取得了长足的进步。SIP 现在基本上已经完成,甚至涵盖了高级电话和多媒体功能以及功能交互。来自不同供应商的解决方案之间的互操作性在 SIP 论坛组织的 SIPit(互操作性测试)会议等活动中反复得到证明,并且几家制造商已经证明,对该标准的专有扩展不再受技术需求驱动,而是受商业考虑驱动。
Jason Fischl, Hannes Tschofenig - 让 SIP 赚钱
会话发起协议 (SIP) 用于在基于 IP 的网络中建立实时会话。这些会话可能是用于音频、视频或 IM 通信,或者它们可能用于中继状态信息。SIP 服务提供商主要专注于提供一种服务,该服务复制 PSTN(公共交换电话网络)或 PLMN(公共陆地移动网络)提供给基于互联网的环境的服务。