对等网络概述
对等网络可运用存在于 Internet 边缘的相对强大的计算机(个人计算机),执行较基于客户端的计算任务更高级的任务。现代的 PC 具有速度极快的处理器、海量内存以及超大的硬盘,而在执行常规计算任务(比如:浏览电子邮件和 Web)时,无法完全发挥这些设备的潜力。新式 PC 很容易就能同时充当许多类型的应用程序的客户端和服务器(对等方)。
许多应用程序的典型计算模型为客户端/服务器模型。通常,服务器计算机拥有庞大的资源,可响应客户端计算机对资源和数据的请求。客户端计算机向服务器计算机上的资源或数据发出请求。对于客户端/服务器计算模型,Web 浏览是一个不错的例子。Internet 上的 Web 服务器通常是专用的高端服务器计算机,配有速度极快的处理器(或多颗处理器)及超大硬盘阵列。Web 服务器可存储与某个网站相关联的所有内容(HTML 文件、图形、音频和视频文件等),并监听要求查看特定网页上的信息的传入请求。收到针对某个页面的请求时,Web 服务器会向发出请求的客户端发送相应页面及其关联文件。
• | 与客户端/服务器网络相比,对等网络具有下列优势: |
• | 可在网络的中央及边缘区域共享内容和资源。在客户端/服务器网络中,通常只能在网络的中央区域共享内容和资源。 |
• | 由对等方组成的网络易于扩展,而且比单台服务器更加可靠。单台服务器会受制于单点故障,或者会在网络使用率偏高时,形为瓶颈。 |
• | 由对等方组成的网络可共享处理器,整合计算资源以执行分布式计算任务,而不只是单纯依赖一台计算机,如一台超级计算机。 |
• | 用户可直接访问对等计算机上的共享资源。网络中的对等方可直接在本地存储器上共享文件,而不必在中央服务器上进行共享。 |
• | 对等网络解决了以下问题: |
• | 允许运用边缘计算机的处理资源,执行分布式计算机任务。 |
• | 允许直接共享本地资源,无需中间服务器。 |
• | 允许进行高效的多点通信,不必依靠 IP 多播基础结构。 |
对等网络技术方案
对等网络实现或改进了下列技术方案:
• | 实时通信 (RTC) |
• | 协作 |
• | 内容分布 |
• | 分布式处理 |
• | 改进的 Internet 技术 |
实时通信 (RTC)
对于 RTC,对等网络可实现无服务器介入的即时通讯以及实时的游戏对战。
无服务器即时通讯
RTC 现在已经得到应用。如今,计算机用户可与其他用户聊天,进行语音或视频对话。但是,许多现有的程序及其通信协议必须依赖服务器才能发挥作用。如果用户加入了特殊的无线网络或独立的网络,就无法使用这些 RTC 设备。对等技术允许将 RTC 技术扩展到其他网络环境中。
实时游戏对战
与 RTC 一样,用户如今也可以在网上实时玩游戏。有许多基于 Web 的游戏网站通过 Internet 来迎合游戏社区的需求。他们使用户可以寻找志趣相投的玩家,一起玩游戏。问题在于,游戏网站只存在于 Internet 上,面向那些想要与世界上最优秀的玩家对战的狂热的游戏爱好者。这些网站会跟踪并提供有关统计数字,为用户提供帮助。然而,这些网站不允许玩家在各种网络环境下,为好友建立特定的游戏。而对等网络可提供这项功能。
协作
在协作方面,对等网络允许用户共享工作区、文件和体验。
建立项目工作区来实现目标
共享工作区应用程序允许用户创建特殊的工作组,然后允许工作组所有者为共享工作区提供可帮助工作组解决问题的工具和内容。这些工具和内容包括留言板、生产效能工具和文件。
与他人共享文件
项目工作区共享可提供文件共享能力。虽然 Windows 的当前版本如今具备这种能力,但是借助对等网络可增强该功能,能够通过一种简单、友好的方式提供文件内容。允许用户轻松访问位于 Internet 边缘或特殊计算环境中的庞大内容,增加了网络计算的价值。
分享体验
随着无线连接越来越普及,对等网络可允许用户与一组对等方进行联机,在第一时间与他人分享自己的体验(比如:日落、摇滚音乐会或水上度假)。
内容分发
对等网络允许对用户分发文本、音频和视频,以及软件产品更新。
本文消息
对等网络允许以文件或消息的形式,将文本信息分发给一大群用户。新闻列表就是一个例子。
音频和视频
对等网络还允许将音频或视频信息分发给一大群用户,如大型音乐或公司会议。如今,要分发内容,用户必须配置大容量服务器,来收集内容并分发给成千上百个用户。实际上,只有一小部分对等方可通过对等网络,从中央服务器获得内容。这些对等方会将获得的信息传播给其他一些人员,而这些人又会将该信息发送给其他人。分发内容的负载会被分布给 cloud 中的对等方。需要接收内容的对等方会寻找最近的分发对等方,来获取有关内容。
产品更新分发
对等网络还可提供一个高效的机制,用以分发软件,如产品更新(安全更新和服务软件包)。连接到软件分发服务器的对等方可获取产品更新,并将其传播给所在组的其他成员。
分布式处理
对等网络允许分发计算任务,并聚合处理器资源。
任务分割与分发
大型计算任务可先被分割为几个较小的独立计算任务,从而与对等方的计算资源很好得匹配。对等方可对大型计算任务进行分割。然后,对等网络可将分割后的各个任务分发给组中各个对等方。每个对等方执行各自的计算任务,并向中央聚集点汇报结果。
计算机资源聚合
运用对等网络执行分布式处理的另一种方法是:在每个对等方上运行程序。这类程序在处理器闲置期间运行,属于大型计算任务(由一台中央服务器协调)的一部分。通过聚合多台计算机的处理器,对等网络可将一组对等计算机转变成一个用以执行大型计算任务的大型的并行处理器。
改进的 Internet 技术
对等网络还可进一步挖掘 Internet 的潜能,支持新的 Internet 技术。过去,Internet 被设计成使网络对等方具备端到端连接能力。而当今的 Internet 更像是一个客户端/服务器环境,由于网络地址转换器 (NAT) 的普及,在很多情况下,通信都不是以端到端的方式进行的。
向 Internet 最初用途的回归,将迎来创建用以实现个人通信和团队效率的应用程序的新潮流。
Windows 对等网络
Windows 对等网络是一种开发平台,用以为运行 Windows XP 的计算机创建对等应用程序。Windows 对等网络的长期目标如下:
使人们在不借助中央服务器的情况下,彼此间可以进行安全的通信和信息共享,并且在存在服务器的情况下,能够获得更好的效果。
Windows 对等网络功能包含在 Windows XP Service Pack 2 (SP2) 中。如需在安装完 Windows XP SP2 后,安装 Windows 对等网络,请执行如下操作:
1. | 依次单击“开始”、“控制面板”和“添加或删除程序”。 |
2. | 单击“添加/删除 Windows 组件”。 |
3. | 在“组件”中,单击“网络服务”(但不要选中对应的复选框),然后单击“详细信息”。 |
4. | 选定“点对点”复选框,然后单击“确定”。 |
5. | 单击“下一步”,然后按照向导的指示进行操作。 |
对于运行带有 Service Pack 1 (SP1) 的 Windows XP 的计算机,可通过Windows XP 高级网络软件包(可免费下载),安装 Windows 对等网络。
Windows 对等网络的设计遵循下列准则:
• | 安全 |
• | 可伸缩 |
• | 分布式 |
• | 无服务器 |
• | 可抵御故障和/或攻击 |
• | 自动优化 |
• | 自动修复 |
关于这些设计准则的实现方法将在本文后面各章节予以介绍。
Windows 对等网络的技术方案
Windows 对等网络实现或改进了下列技术方案:
• | 实时通信 (RTC)
| ||||||
• | 协作
| ||||||
• | 内容分发
| ||||||
• | 分布式处理
|
Windows 对等网络与 DNS
客户端/服务器网络与对等网络间的另一个对比点表现在对域名系统 (DNS) 的运用。通常,服务器计算机在 DNS 中进行注册,从而客户端计算机可以将名称解析为服务器计算机的 IP 地址。而客户端计算机一般不在 DNS 中进行注册,原因如下:
• | 许多客户端计算机的连接时间很短;它们的连接时间无法预料,而且每建立一个连接就会分配到一个新的 IP 地址。 |
• | 客户端计算机不具有共享资源,不会相应有关资源的请求。所以,其他计算机不必解析客户端计算机的名称。没有必要记录客户端计算机的 DNS 地址。 |
相反,对等计算机具有可共享的资源。但是,它们的连接时间仍旧很短。对等计算机可使用 DNS 动态更新进行名称注册,但是只有极少数 DNS 服务器可在 Internet 上支持 DNS 动态更新。为了成功建立对等网络,对等计算机必须依赖现有的 DNS 基础结构。因此,必须有一个不依赖于 DNS 的机制,将对等方名称解析为地址。对于 Windows 对等网络,该机制为对等名称解析协议 (PNRP),在本文的“通过 PNRP 实现名称解析与对等发现”一节中有所描述。
Windows 对等网络的安全性
在对等环境中,不存在带有安全数据库的中央服务器,或可提供典型安全服务(比如:身份验证和授权)的服务器。例如,在 Active Directory 域中,域控制器可提供 Kerberos 身份验证服务。在无服务器的对等环境中,对等方必须自行提供身份验证。
Windows 对等网络使用自签名证书(部分采用 X.509 证书格式)提供身份验证。虽然人们常常会将 X.509 证书与包含一个证书颁发机构 (CA) 分层结构的公钥基础结构 (PKI) 联系在一起,但是自签名证书是由每个对等方创建的证书。对等网络允许任何节点充当 CA,而且不要求将根证书保存在每个对等方的受信任的根存储中。每个对等方都会生成公钥/私钥对以及使用私钥签名的证书。自签名证书可用于进行身份验证,并提供有关对等实体的信息。与 X.509 一样,对等网络身份验证也依赖证书链,追溯受信任的公钥。
有关 Windows 对等网络身份验证的详细信息,请参阅本文的“分组”一节。
Windows 对等网络的工作原理
我们将在本节中简要介绍 Windows 对等网络体系结构,并详细描述对等发现及名称解析、图生成、分组、已复制存储以及搜索等基本对等功能。
Windows 对等网络体系结构
Windows 对等网络的体系结构如图 1 所示。
图 1:Windows 对等网络体系结构
Windows 对等网络体系结构由下列组件构成:
• | 图生成 图生成 (Graphing) 组件负责维护一组连接节点(称为图),并对该图提供数据泛洪和复制。“图生成”组件使用“泛洪和同步”、“存储”以及“图维护”子组件。 |
• | 分组 分组 (Grouping) 组件是在图上默认提供的安全层。该安全层定义了组创建、邀请和对组的连接背后的安全模型。另外,分组组件将 PNRP 用作名称解析协议——并使多个应用程序可以共享相同的图。分组组件使用了“组安全”和“组安全服务提供程序 (SSP)”子组件。 |
• | NSP 名称服务提供程序 (NSP) 组件提供了一个用以访问任意名称服务提供程序的机制。对于 Windows 对等网络,对等应用程序使用了 NSP 接口来访问 PNRP。 |
• | PNRP PNRP 组件可提供对等方名称解析。 |
• | 标识管理器 标识管理器可创建和管理对等标识。 |
• | Microsoft TCP/IP 第 6 版协议 Microsoft TCP/IP 第 6 版协议 (IPv6) 提供了实现 Windows 对等网络的载体。 |
以下各节详细介绍了 Windows 对等网络的工作原理:
• | IPv6 与 NAT 遍历 |
• | 通过 PNRP 实现名称解析与对等发现 |
• | 图生成 |
• | 分组 |
• | 已复制存储 |
• | 搜索 |
IPv6 与 NAT 遍历
Windows 对等网络将 IPv6 作为其 Internet 层。之所以选择 IPv6 的原因是:它能将端到端计算模型还原到联网状态。使用 IPv6,就不会存在因地址短缺而需使用网络地址转换器 (NAT) 的问题。有关 NAT 如何转换地址和端口号,以及如何使用端口映射的详细信息,请参阅Windows 2000 网络地址转换器 (NAT). 用于 IPv4 的 NAT 延长了 IPv4 公共地址空间的使用寿命,但同时付出了使端到端通信中断的代价。
在 Windows XP 和带有 SP1 的 Windows XP 中,IPv6 作为开发者预览版得到支持。带有 SP1 的 Windows XP、带有 SP2 的 Windows XP 以及 Windows Server 2003 系列操作系统提供了 IPv6 协议的正式标准版。人们常常误认为,必须升级现有的 IPv4 基础结构(Intranet 和 Internet)以支持 IPv6,然后才能使用这一新协议。不是这么回事。IPv6 的设计者们认识到 IPv4 基础结构仍将适用于可预知的未来,并开发了一系列转换技术,通过在 IPv6 数据包中封装一个 IPv4 标头,从而实现在 IPv4 网络上发送 IPv6 流量。
Windows XP 和 Windows Server 2003 系列操作系统中,推荐使用并针对 IPv6 协议默认启用的两种转换技术为:
• | 站内自动隧道寻址协议 (ISATAP) ISATAP 是一种地址分配及自动隧道技术,用于在 IPv4 Intranet 上提供 IPv6 主机间的单播 IPv6 连接。有关 ISATAP 的描述,请见 Internet 草案“站内自动隧道寻址协议 (ISATAP)". |
• | 6to4 6to4 是一种地址分配及自动隧道技术,用于在 IPv4 Internet 上提供 IPv6 站点间的单播 IPv6 连接。6to4 在 RFC 3056 中有所描述。 |
有关 ISATAP 和 6to4 的详细信息,请参阅“IPv6 传输技术” 白皮书。
对于 IPv4 Internet 上的 IPv6 连接,6to4 是首选的地址分配及隧道技术。但是,6to4 依赖于向连接到专用网络(充当 6to4 路由器)的计算机分配公共 IP 地址。可通过启用 Internet 连接共享 (ICS),自动将用于 Windows XP 和 Windows Server 2003 系列操作系统的 IPv6 协议用作 6to4 路由器,或者可以通过手动配置来实现。目前,许多用于将小型办公室或家庭办公室网络连接到 Internet 的网络地址转换器 (NAT) 尚不具备 6to4 路由器功能。另外,专用网络上的主机和 IPv4 Internet 间可能不止有一个 NAT。这样,即便连接到专用网络的 NAT 具有 6to4 功能,也无法使用 6to4。涉及 NAT 的另一个问题是:默认情况下,无法转发未使用 TCP 或 UDP 协议的流量。IPv4 流量上的 IPv6 使用协议 41。如果这类流量无法被 NAT 识别,就会被丢弃。
为了将 IPv4 上的 IPv6 地址分配及隧道解决方案应用于位于 NAT(无法充当 6to4 路由器)上的主机,Microsoft 正在联合 Internet 标准制定机构,共同定义 Teredo,也称为 IPv6 NAT 遍历 (NAT-T)。Teredo 的定义请见 Internet 草案“Teredo:通过 NAT 在 UDP 上建立 IPv6 隧道".
Teredo 的工作原理是:分配全局 IPv6 地址(基于连接到 Internet 的 NAT 接口的公共 IPv4 地址),然后在 IPv6 数据包中,同时封装一个 IPv4 标头和一个 UDP 标头。通过同时使用 IPv4 和 UDP 标头,多数 NAT 可转换 Teredo 流量。
Windows XP SP2 支持 Teredo 客户端。对于运行 Windows XP SP1 的计算机,必须安装 Windows XP 高级网络软件包。
有关 Teredo 工作原理的其他信息,请参阅“Teredo 概述”白皮书。
通过 PNRP 实现名称解析与对等发现
为了实现对等通信,各个对等方必须能够发现彼此存在,并由名称或其他类型的标识符,相互解析对方的网络位置(地址、协议和端口)。由于连接时间短暂,而且在 DNS 中缺乏地址记录,因此使得对等方发现彼此并相互解析通信名称的方法变得复杂。
Windows 对等网络运用一个带有如下属性的名称解析和对等发现方案,解决了一个问题:
• | 分布式和无服务器介入的名称解析 与 DNS 一样,完整的名称列表存储在 cloud 中的各台计算机上。与 DNS 不同的是,不存在提供名称解析的服务器。每个对等方都在各自的缓存中保存有一部分列表,并可相互调用。中央服务器不用于解析名称。Windows 对等网络并不是完全没有服务器介入,因为网络中存在帮助完成初始化的种子节点。 |
• | 使用标识符 (ID) 而非名称 不使用名称(比如:DNS 中的完全合格域名),而是用 ID 标识对等实体。ID 只是有一些数字构成,因而不会牵涉到语言及商标或者版权问题。 |
• | 使用多个 ID 每个单独的对等计算机、用户、组、设备、服务或其他类型的对等节点,都可以有自己的对等 ID。 |
• | 可增添大量 ID ID 列表是通过一个多级缓存和一个检索系统,在各个对等方间进行分发的。该系统可对名称解析进行扩展,增加到数十亿个 ID,同时在每个节点上仅需最少的资源。 |
对等名称解析协议 (PNRP) 用于在各个对等方间发送消息,从而实现名称解析和对等发现。
PNRP 使用多个 cloud,每个 cloud 都是一组使用特定作用域的地址的计算机。作用域指具有唯一地址的网络区域。PNRP cloud 基于 IPv6 地址的地址作用域。定义了如下 cloud:
• | 全局 cloud 对应于全局 IPv6 地址范围,代表整个 IPv6 Internet 上的所有计算机。仅有一个全局 could。 |
• | 特定于站点的 cloud 对应于站点 IPv6 地址范围和 site-local 地址。站点是组织网络的一部分,具有已定义的地理或拓扑边界。可以同时存在多个特定于站点的 cloud。 |
• | link-local cloud 对应于 link-local IPv6 地址范围和 link-local 地址。link-local cloud 针对特定的链接,通常与本地连接的子网相同。可以同时存在多个 link-local cloud。 |
对等方名称与 PNRP ID
对等方名称是一种通信端点,可以是计算机、用户、组、服务,或者任何欲将其解析为 IPv6 地址的对象。对等方名称可注册为安全或不安全的。不安全的名称仅由文本字符串构成,用户可能会受欺骗,因为任何人都可以注册一个安全相同的不安全名称。不安全的名称最适合于专用或安全网络。安全的名称只能由所有者进行注册,并受证书及数字签名保护。
PNRP ID 的长度为 256 位,由以下几个部分组成:
• | 高顺序 128 位,称为对等 (P2P) ID,是分配给端点的对等方名称的哈希。 端点的对等方名称的格式为:Authority.Classifier.对于安全名称,Authority 为十六字符对等方名称的公钥的安全哈希算法 (SHA) 哈希。对于不安全的名称,Authority 为单字符“0”。Classifier 是用于标识应用程序的字符串,可以是任意的 Unicode 字符串(最大长度可为 150 字符)。 |
• | 低顺序 128 位作用于服务位置,是用以唯一识别相同 cloud 中同一个 P2P ID 的不同实例,而生成的数字。 |
P2P ID 和服务位置的 256 位组合,可实现从单台计算机注册多个 PNRP ID。
对于每个 cloud,每个对等节点都管理者 PNRP ID 的缓存,其中包括它们自己的已注册的 PNRP ID 以及之前缓存的一些条目。位于 cloud 中所有对等节点上的整组 PNRP ID 包含有一个分布式哈希表。可以将给定 PNRP ID 的条目放在多个对等方上。PNRP 缓存中的每个条目都含有 PNRP ID、一个认证对等方地址 (CPA) 和注册节点的 IPv6 地址。CPA 是一种自签名证书,可对 PNRP ID 提供身份验证保护,并包含应用程序端点信息(地址、协议号和端口号)。
所以,名称解析过程涉及将 PNRP ID 解析为 CPA。获得 CPA 后,便可开始与目标端点进行通信。
PNRP 名称解析
当对等方要将某个对等方名称解析为地址、协议和端口号时,会根据该对等方名称建立 P2P ID。对等方会在自己的缓存中搜寻与该 P2P ID 相匹配的条目。如果找到匹配的条目,对等方就会向目标对等方发送一条 PNRP 请求消息,然后等待回应。这种方法可确保要与之通信的对等节点在 cloud 中处于活动状态。
如果未找到匹配的条目,则对等方会向具有与所解析的 P2P ID 最匹配的 P2P ID 的条目相对应的对等方,发送一条 PNRP 请求消息。收到 PNRP 请求消息的节点将检查自己的缓存。如果找到相应的条目,就会把该请求转发到目标节点,而目标会通过该请求途径返回响应。如果未找到相应的条目,则会向具有与所解析的 P2P ID 最匹配的 P2P ID 的条目相对应的对等方,发送一条 PNRP 请求消息,依此类推,直至找到正确的对等方。
例如,对等方 A 本身含有 PNRP ID (200) 和 PNRP ID 分别为 450 和 500 的条目。对等节点组如图 4 所示。两个节点间的箭头表示,箭头起始端处的节点在其缓存中,具有对应于箭头所指的节点的条目。
图 4 对等网络示例
当对等方 A 要解析 NRP ID (800) 时,将发生以下情况:
1. | 由于 500 在数值上最接近于 800,因此对等方 A 将向把 PNRP ID 注册为 500 的节点(对等方 C),发送一条 PNRP 请求消息。 |
2. | 对等方 C 没有 PNRP ID 为 800 的条目,也没有任何接近于 800 的条目。对等方 C 将向对等方 A 返回响应。 |
3. | 由于 450 是下一个在数值上更接近于 800 的 PNRP ID,因此对等方 A 将向把 PNRP ID 注册为 450 的节点(对等方 B),发送一条 PNRP 请求消息。 |
4. | 对等方 B 将把该请求转发到将 PNRP ID 注册为 800 的 IP 地址(对等方 E)。虽然对等方 B 在其缓存中拥有对等方 E 的一个条目,但是存在该缓存条目,并不能保证对等方 E 目前在网络上可用。 |
5. | 对等方 E 将向对等方 B 返回响应。 |
6. | 而对等方 B 将向对等方 A 返回响应。 |
该过程如图 5 所示。
图 5:PNRP 名称解析示例
为了防止循环转发 PNRP 请求消息,消息中包含了已转发过该请求的对等方的列表。
转发 PNRP 请求消息时,消息的内容被用于填充正在转发该请求的节点的缓存。当通过返回途径发回响应时,其内容也被用于填充节点缓存。
运用多级缓存扩展对等名称解析
为了维持较小的 PNRP 缓存,对等节点使用了多级缓存,其中每一级缓存都含有最大数量的条目。每一级缓存占 PNRP ID 数值空间 (2256) 的十分之一。最低一级缓存包含一个本地注册的 PNRP ID 以及其他在数值上与之接近的 PNRP ID。当某一级缓存填满了最多 20 个条目后,就会创建一个新的次级缓存。缓存可具有的最大级数大约为 log10(cloud 中 PNRP ID 的总数)。例如,对于带有 1 亿个 PNRP ID 的全局 cloud,缓存级数不会超过 8 (=log10(100,000,000)),并存在数量大致相当的跃点,用以在名称解析过程中,解析 PNRP ID。该机制允许使用分布式哈希表,用以通过在找到带有对应 CPA 的对等方后,将 PNRP 请求消息转发到次临近的对等方,来解析任意 PNRP ID。
图 6 展示了具有 1000 个条目 (0-999) 的数值空间的多级缓存方案的一个例子,其中每一级缓存各占 10% 的数值空间,并且只能存储 4 个条目(每条刻度线各代表一个缓存条目)。
图 6:多级缓存示例
采用这种多级缓存方案后,每个对等方就不必存储大量缓存条目。即便存在大量 PNRP ID,解析任意 PNRP ID 的本地存储和网络流量也不会很大。
注意: 图 6 是 PNRP 数值空间的简单示意图,实际上它是一个循环命名空间(本例中,999 后的第一个数字是 0)。
为了确保能够完成解析,每次节点向其最底层的缓存级添加条目时,都会将该条目的副本扩散到最后一级缓存中的所有节点上。
随后,缓存条目会被刷新。旧的缓存条目将从缓存中删除。因此,PNRP ID 的分布式哈希表基于活动端点,这一点不同于 DNS。在 DNS 中,地址记录和 DNS 协议无法保证与地址相关联的节点在网络上处于活动状态。
PNRP 缓存初始化
为了在对等节点启动时初始化 PNRP 缓存,可对节点使用以下方法:
• | 永久性缓存条目 节点关闭前存在的缓存条目由硬盘存储器进行加载。 |
• | PNRP 种子节点 PNRP 允许管理员指定 PNRP 种子节点(包含 cloud 中当前参与者的 CPA)的地址或 DNS 名称。 |
• | 简单服务发现协议 要求 PNRP 节点使用通用即插即用 (UPnP) 简单服务发现协议 (SSDP) 进行注册。加入 cloud 的节点可用 SSDP Msearch 消息定位临近的 SSDP 节点。 |
图生成
对等图(或称为图)是一组节点,它们以多种方式连接以形成节点的耦合网络,用于以记录或点对点数据流的形式传播数据。还可以将图想象成一群相互连接的对等图节点,其中任何对等图节点都可以通过一系列逻辑上相邻的连接,与其余图节点进行通信。对等图节点即连接到某个对等图的对等方。
对等图是基于泛洪进行构建的。泛洪指把某个记录传播给连接到图的所有用户的过程。泛洪协议可用于:
• | 向图的所有节点传播新增记录。 |
• | 向图的所有节点传播已更改记录的更新信息。 |
• | 向图的所有节点传播已删除记录的操作信息。 |
为了执行上述功能,全局唯一标识符 (GUID) 所识别的每个被泛洪的记录,都有一个不断递增的版本号或序列号,并进一步由使用期限或状态进行限定。
另外,同步过程可确保各对等方具有一组相同的记录,从而可以对更多的记录执行泛洪操作。
建立有完善连接体系的图具有如下特性:
• | 相互连接。 任意两个节点间都存在连接途径。 |
• | 范围较小。即便在图的最远端,节点间的跃点数也相对较少。范围小的好处在于,可以快速地向所有图节点传播更新。 |
• | 稳固。 即使某些节点或连接消失,图也可以保持完好的连接状态。 |
图是在邻居连接的基础上进行构建的。图中的邻居指相距一个图跃点的对等图节点(通过 TCP 连接直接进行连接)。图跃点是 Internet 层上的逻辑连接,因而相互间可相距一个或多个路由器跃点。
节点 ID 是对等图节点在连接到对等图时,所选择的随机数字。节点 ID 在图中必须是唯一的。图由图签名进行识别。图签名是所有连接到对等图的图节点的最小节点 ID。图签名可用于检测图中的分断,即分区。
图维护
泛洪协议已经定义了在整个图中执行信息泛洪的方式。图维护协议定义了图发展到维护稳固的连接并维持小范围连接的方式。可通过执行下列操作来完成上述任务:
• | 通过一个签名步骤计算出组的签名。如果对组进行分区,那么每个分区都将有一个不同的签名。这样就可检测出有两个或更多的分区需要修复。图中已指定的节点称为联系人,可跟踪签名记录。联系人是随机选取的。 |
• | 通过一个重新连接步骤,允许节点建立适当的连接。 |
• | 通过一个断开连接步骤,允许节点在离开图时不在图上产生漏洞。 |
• | 在图上泛洪信息时,具有多个连接的图节点将接收到多个信息副本。在决定保留及删除哪些连接时,图节点会评估已泛洪的信息,并计算出一个双向效用指数(该数字用于指示在给定的连接对等方间传送的信息的有效性)。当通过某个连接发送的信息过去已被统一接收,而且毫无价值,那么效用指数的数值将较低。 |
从长远来看,对等节点会根据当前的效用指数以及在泛洪过程中接收到的信息,调节与相邻节点的连接。通过创建和删除连接,图将聚合到一个最适于泛洪当前通讯模式的拓扑中。
连接到图
在最初连接到图时,对等节点会连接到一个已经与图建立连接的节点上。对等节点将通过任何方法来解析图节点的 IP 地址(比如:DNS 或本白皮书的“通过 PNRP 实现对等发现与名称解析”一节所介绍的对等发现及名称解析方法),从而决定连接到图的对等节点的地址。
如果所选的对等节点与邻居建立的图连接的数量少于可允许的最大连接数,那么它将发送接受响应。如果已经达到了最大连接数,则将发送拒绝响应。拒绝响应中含有一个推荐列表,列出了图中的其他节点。尝试连接到接收了拒绝响应的图的对等节点,将从推荐列表中随机选取一个对等图节点,尝试与之建立连接。
连接到图后挑选新邻居的过程与之相同。来自暂定的新邻居的拒绝消息含有一个推荐列表。尝试连接到接收了拒绝响应的新邻居的对等节点,将从推荐列表中随机选取一个对等图节点,尝试与之建立连接。
与图断开连接
与图断开连接时,节点会发送断开连接消息。这样就可能导致创建图分区。断开连接消息带有一个推荐列表,包含除断开连接的节点外的所有邻居。收到来自邻居的断开连接消息后,节点会尝试重新连接推荐列表中的对等方。
检测并修复图分区
当节点与图建立或断开连接时,可能导致图分区。每个图都有一个图签名及一个或多个联系人。图的联系人数量与图的大小成正比。对等方可同时隶属于多个图。联系人和图签名信息将被泛洪到图的所有节点上。联系人和图签名信息会被定期刷新。如果联系人和图签名信息过时,就会产生分区。如果发现这种情况,将尝试与联系人节点进行通信。如果成功建立了通信,将尝试重新连接图。
图分区修复示例
为了举例说明图分区,让我们先构建一个图,然后检查用于检测分区并对其进行修复而交换的信息。
构建示例图
下列过程描述了图的构建方法:
• | 我们先从一个节点(节点 A)开始构建图(图 X)。节点 A 具有节点 ID 2。节点 A 为图 X 创建了一个签名记录,其图签名为 2。节点 A 还为图 X/节点 A 创建了一个联系人记录,其图签名为 2。 |
• | 节点 B 加入了图。节点 B 具有节点 ID 1,并通过节点 A 连接到图 X。节点 B 将获取节点 A 的记录数据库。该数据库由图的签名记录和节点 A 的联系人记录组成。 |
• | 节点 B 发现图 X 的图签名数值高于自己的节点 ID。图 X 的图签名应为 1 而不是 2。 |
• | 节点 B 把图 X 的新的签名记录(图签名为 1)泛洪到节点 A。节点 A 用来自节点 B 的新的签名记录,更新自己的记录数据库。 |
• | 节点 A 检查自己的联系人记录。节点 A 发现自己的联系人记录的图签名被设为 2,但应设为 1(图 X 的新的图签名)。 |
• | 节点 A 将其联系人记录的图签名更改为 1,并将新的联系人签名的副本泛洪到节点 B。 |
• | 节点 B 将针对 A(其新图签名为 1)更新其联系人记录。 |
注意: 图记录含有一个数字签名,并且不可更改。但是,图记录可以替换。因此,此处使用了“更新”一词,表示用高版本记录替换低版本记录,而不更改记录的内容。
这样就同步了图记录,并聚合了图拓扑。节点 A 和节点 B 在各自的记录数据库中拥有相同的图信息:签名记录(图签名设为 1)和节点 A 的联系人记录(图签名设为 1)。
节点 C(节点 ID 为 5)通过节点 B 连接到图 X。连接到节点 B 后,节点 C 将获取节点 B 的记录数据库。该数据由签名记录和节点 A 的联系人记录组成。图再次聚合:对于图 X,节点 A、节点 B 和节点 C 在各自的记录数据库中拥有相同的信息。
稍后,节点 C 和节点 A 间将建立单独的图连接,从而形成完全互连的图。
下面,让我们进一步讨论具有 6 个节点的图 X,如图 7 所示。
图 7:具有六个节点的图 X 示例
图 X 由节点 A(节点 ID 2)、节点 B(节点 ID 1)、节点 C(节点 ID 5)、节点 D(节点 ID 7)、节点 E(节点 ID 8)和节点 F(节点 ID 9)组成,其中节点 A 和节点 D 为联系人。
图拓扑已聚合。所有节点都具有相同的记录数据库:一个签名记录(图签名为 1)、一个节点 A 的联系人记录(图签名为 1)以及一个节点 D 的联系人记录(图签名为 1)。签名记录的有效期为 5 分钟,由节点 B 定期刷新(5 分钟内)。联系人记录也具有有效期,同样会定期刷新。
修复图分区
节点 A 和节点 E 间的图连接被断开。修复分区的过程如下:
• | 在图的底层分区(由节点 D、节点 E 和节点 F 组成)中,签名记录在 5 分钟有效期过后到期,因为节点 B 发送的经过刷新的签名记录,未被传播到底层分区的节点上。 |
• | 当前签名记录到期后,图的底层分区中的所有节点在泛洪一个带有其各自节点 ID 的新的签名记录之前,将计算一个与其节点 ID 成正比的随机补偿延迟。由于节点 D 具有最小的节点 ID,因而将先泛洪一个图签名为 7 的新的签名记录。节点 E 和节点 F 将接收这个新的签名记录,并各自更新其签名记录。 |
• | 节点 D 将自己的联系人记录的图签名更新为 7,并将新记录泛洪到节点 E 和节点 F。随着该信息被传播到各个图节点,每个节点都发现节点 A 的联系人记录(图签名为 1)与节点 D 的联系人记录(图签名为 7)不相匹配。为了解决这种不一致性,每个节点都会算出一个随机补偿延迟。延迟过后,各节点将尝试连接节点 A,以修复分区。本例中,节点 D 的延迟短于节点 E 或节点 F 的延迟。节点 D 与节点 A 建立了连接。 |
• | 节点 A 与节点 D 交换记录。节点 D 发现节点 A 对其发送了一个新的签名记录(图签名为 1,小于当前的图签名)。节点 D 将新的签名记录(图签名为 1)泛洪到节点 E 和节点 F。 |
• | 节点 D 将其联系人记录的图签名更新为 1,并把更新后的联系人记录泛洪到节点 E 和节点 F。然后,节点 D 泛洪节点 A 的新的联系人记录(图签名为 1)。 |
图已聚合。图中的所有节点都有一组相同的图记录:一个签名记录(图签名为 1)、节点 A 的一个联系人记录(图签名为 1)和节点 D 的一个联系人记录(图签名为 1)。
如果节点 D、节点 E 或节点 F 原先因网络连接问题,而无法与节点 A 或上层分区(由节点 A、节点 B 和节点 C)中的其他任何节点建立图连接,就会同时存在两个图。有另一个过程可用于执行长期分区修复。
图分区检测基于签名记录的到期情况。而图分区修复则通过尝试纠正当前签名记录中的图签名与联系人记录中的图签名间的不一致性来实现。对于签名记录中存在错误图签名的联系人,将尝试与之建立新的连接。这些新连接及随后的图记录同步将修复图。随着时间的推移,将通过常规图维护,自动获得用于泛洪的可选拓扑。
图安全
图只是关联一组节点,节点间的连接定义了用于泛洪的拓扑。图本身并不安全。Windows 对等网络提供了一个体系结构,允许使用可插接模块以保证图的安全。特定的安全模块可定义:
• | 谁可以连接图并向图发送数据(连接身份验证、保密性和完整性) |
• | 通过图的流量是如何加密的(消息/记录保密性) |
• | 通过图的流量是如何验证的(消息/记录完整性) |
Windows 对等网络提供了一个名为“Microsoft 对等分组”的图安全提供程序。
Windows XP Peer-to-Peer SDK 提供了一些 API,可帮助用户自己动手开发图安全提供程序。如需更多信息,请参阅标题为“增强对等图的安全性”的技术文章,位于:Microsoft 开发人员网络.
分组
分组是 PNRP、对等图生成和“Microsoft 对等分组”安全提供程序的组合Microsoft 对等分组安全提供程序具有下列功能:
• | 管理组成员的凭据 |
• | 安全地发布组中的记录 |
一个唯一的组 ID 可识别每个组。组成员用该组 ID 区分本地计算机所隶属的不同的组,并识别不同对等方间的组。组使用安全的对等方名称(如对 PNRP 所定义的)作为组 ID。
只有称为组成员的用户才能加入安全的组。每个组成员都有一个身份标识、一个唯一的对等方名称以及一些用以证明组成员身份的所有权的凭据。每个组成员还拥有一些可证明其隶属于某个组的凭据。
以记录为形式的信息被安全地泛洪到整个组中。记录包含:
• | 发布成员 ID |
• | 用于证明记录有效的数据 |
• | 一个有效期 |
• | 一个包含记录信息的负载 |
Windows 对等分组可为下列对象提供安全机制:
• | 对等方名称 |
• | 组成员身份证书(与对等方相关联的凭据) |
• | 角色(成员与管理员) |
• | 安全发布 |
• | 安全策略 |
• | 安全连接 |
对等方名称
正如本文“通过 PNRP 实现对等发现与名称解析”一节所描述的,安全的对等方名称只能由所有者进行注册,并受公钥加密机制的保护。不安全的对等方名称最短可以为 3 个字符。安全的对等方名称不得少于 40 个字符。任何对等方名称都不得超过 191 个字符(外加一个空字符)。
一般认为拥有相应私钥的对等方实体具有安全的对等方名称。可通过 CPA(使用私钥进行签名)证明对等方名称的所有权。没有对应的私钥,恶意用户就无法伪造对等方名称的所有权。
组安全机制用对等方名称识别每个组成员。根据统计,对等方名称都是唯一的。组安全机制也用对等方名称识别组。创建完组后,随即将对该组创建组对等名称所基于的新的公钥/私钥对。拥有对应于组对等名称的私钥的成员即为该组的所有者。
组成员身份证书 (GMC)
为了加入一个组,每个成员都必须具有一些凭据,用以在执行组功能(如连接到组或在组中发布记录)时,证明组成员身份。这些凭据为 X.509 证书,称为组成员身份证书或简称 GMC。GMC 的特征如下:
1. | GMC 的使用字段是一个可识别成员的对等方名称。 为了证明 GMC 的所有权,持有 GMC 的成员必须证明对证书中所含对等方名称的所有权。必须知道对应于对等方名称的私钥,才能获得对等方名称的所有权。使用一个简单的质询,很容易就可以验证凭据所有权。 |
2. | 对于受信任的 X.509 证书,证书链会通向一个自签名根证书。该证书的颁发机构是受信任的。 为了实现验证,GMC 必须是来自受信任颁发机构的分支证书。根据组的对等方名称来识别组。这样,对等方名称就可以受信任,进而充当可颁发 X.509 证书的受信任的颁发机构。当组对等方名称被用作根颁发机构时,很容易就可以验证用于签名根证书的密钥为组的私钥。因此,通向组的自签名根证书的任何证书链都是受信任的。这种根证书应包含:使用者:组对等方名称,颁发者:组对等方名称,使用组私钥进行签名。这种自签名的根证书称为组根证书或简称 GRC。 |
3. | 在 X.509 证书中,可将颁发证书的机构委派给受信任的子颁发机构。 颁发成员 GMC 的负载可分布给的其他组成员(即管理员)。如果经组的安全策略授权,管理员可进一步委派该责任。 |
4. | 与其他任何 X.509 证书一样,GMC 具有有效期。 只要一过有效期,GMC 就被认为是无效的。一个组成员通过在 GMC 到期前进行续订,来维护组的成员关系。 |
注意: Windows 对等网络 GMC 使用证书属性的方式不同于 X.509。GMC 中的“使用者名称”是一个无意义的友好名称,而“使用者备用名称”属性用于存储证书使用者的实际对等方名称。
安全发布
组数据库包含组成员发布的信息。除了成员发布的信息外,该数据库还包含有安全信息。必须同时保护常规信息及与安全相关的信息。组安全机制可为安全发布提供数据完整性和授权:
1. | 数据完整性 在组中发布的记录带有安全数据。该安全数据含有记录内容的加密签名(包含负载和部分标头)。从而可以进行记录篡改检测。只有得到明确授权的组成员才能在不使其他组成员发布的记录无效的情况下,进行记录更新。 |
2. | 授权 不是所有的成员都可以得到发布各类记录的授权,而且也不是所有成员都可以更新其他组成员发布的记录。所以,要求进行授权检查,以确认发布者是否有权发布记录,以及签名人是否有权对记录进行签名。根据发布者和签名人所具有的特权进行授权。 安全数据所含的签名人信息为签名人的对等方名称和 GMC 序列号。由于 GMC 中的角色可提供发布记录授权,因此其他安全数据附带了一个序列号,用以确保根据角色的权限集进行授权验证。一个组成员可拥有多个有效的 GMC。在成员的当前 GMC 到期前,对其发布了具有多个角色的 GMC,往往就会出现这种情况。 |
发布 GMC
GMC 包含对相应的组成员执行任何验证所需的多数信息(如用于签名的公钥、用于授权的角色等等)。验证组成员发布的信息需要该组成员的 GMC。GMC 的发布会在恰当的时机自动代表用户来执行。这样,其他成员就可以使用这个 GMC,验证该成员发布的信息。如果用户的当前 GMC 已被发布,那么在发布其他记录时,就不必再次进行发布。
安全策略
组创建者会要求对组安全机制的行为进行一定程度的控制。例如,组创建者会要求控制是否允许管理员授权其他用户作为管理员等权限。这个控制级别由一些不同的可配置的安全策略提供。在进行任何类型的验证时,系统会在执行任何更复杂的加密检测之前,先咨询这些安全策略。
安全连接
安全连接是通过安全服务提供程序 (SSP) 建立在图的成员间。用于组的 SSP 称为 P2P 组连接协议 SSP。建立连接所用的凭据为组成员的 GMC。进行一般的建立连接操作时,可以对成员的 GMC 链进行更新并保存在本地。
组过程
本节介绍下列组过程:
• | 创建组 |
• | 加入组 |
创建组
对等节点上的应用程序通过以下步骤来创建组:
• | 创建一个组根证书 (GRC),使用组所有者拥有的私钥进行签名 GRC 是一种不同于身份证书(也归组所有者拥有)的自签名证书。 |
• | 通过 PNRP 注册组的组 ID |
• | 配置一组组安全策略 组安全策略可定义组安全机制的行为。 |
• | 发出邀请 邀请是一种 XML blob,包含邀请参数和预备组成员的一个 GMC。 |
加入并连接到组
为了加入一个组,对等节点必须先接收来自组所有者的邀请。为了从组所有者那里接收邀请,预备组成员必须首先向组所有者传递识别材料,也就是对等方名称及其公钥。这个信息使用带外进程来传递,比如电子邮件、文件共享、XML 等等。然后,组所有者向这个预备组成员发出邀请。
接收到邀请后,该预备组成员将使用邀请信息,连接到该组的图。为了连接到组,预备组成员使用 PNRP 和组 ID,解析某个组成员的地址。通常,每个用户都会有一个身份证书 (IDC)。IDC 可用于初始的安全 TLS 通道(与一个当前组成员建立)。
预备组成员和当前的组成员间将进行相互的身份验证。预备组成员和当前的组成员都信任链接到组所有者的 GRC 的 GMC 证书链。这种信任存在于对等组的上下文环境中,用以实现对等组操作。预备组成员将邀请中所收到的分支 GMC(与 IDC 中的 ID 相同)传递给当前的组成员。当前的组成员将验证预备组成员的 GMC 拥有一个链接到组的 GRC 的有效证书链。当前组成员将其分支 GMC 传递给预备组成员。预备组成员将验证当前的组成员的 GMC 拥有一个链接到组的 GRC 的有效证书链。
完成相互身份验证后,这个预备组成员现在就成了一个拥有单个邻居(即接受连接并进行身份验证的那个图节点)的新的组成员。新的组成员从当前组成员那里获得该组的当前记录集。
以后,这个新的组成员就可以使用图生成功能,建立多个邻居连接,并为泛洪而优化底层组图的形状。
已复制存储
已复制存储是与图相关联的一组记录,这些记录可在组的所有成员间,安全地进行发布和同步。已复制存储代表组数据(对于所有组成员都应该是相同的)的视图。图生成功能可确保将记录传播到所有节点。图生成功能也可阻止在整个图中传播未经授权的记录。组成员间的记录复制使用 SSL,为记录数据提供加密及数据完整性。
加入组时,新的组成员会自动接收来自其所连接的当前组成员的所有组记录。初次同步后,组成员会定期重新同步其已复制存储,从而确保所有组成员都拥有相同的视图。
加入组后,应用程序可以注册新的记录类型,并运用组的安全机制开始进行发布。应用程序发布新记录时,组的安全机制将应用于该记录,并安全地进行发布。应用程序所发布的新纪录将自动泛洪到所有组成员。
应用程序也可以通过注册,专门接收特定的记录类型。收到记录后,应用程序会接到通知,然后有关记录数据就会传递给该应用程序。例如,组对话应用程序可通过注册,专门接收对话记录类型,从而可以监视组中的对话活动,并正确地通知有关用户。
搜索
搜索是用于定位组中数据的一种机制。有两种不同的搜索模型:
本地搜索可对已复制存储(组的本地记录集)进行搜索。在本地搜索中,组成员不会向其他成员发送搜索查询。
分布式搜索会想组成员发送查询。Windows 对等网络目前还