对等名称解析协议(2009,Microsoft。哇)

2020-09-21 00:48:05

简介PNRP云对等名称和PNRP ID PNRP名称解析扩展使用多级缓存的对等名称解析PNRP名称发布PNRP缓存初始化在应用程序开发摘要中使用PNRP相关链接。

在对等环境中,对等方依靠名称解析系统从名称或其他类型的标识符中相互解析对方的网络位置(地址、协议和端口)。由于域名系统(DNS)中的瞬时连接和缺陷,对等名称解析变得复杂。

微软®Windows®对等网络平台使用对等名称解析协议解决了这一问题,对等名称解析协议是一种安全、可扩展的动态名称注册和名称解析协议,最初是为Windows XP开发的,然后在Windows Vista™中进行了升级。PNRP的工作方式与传统的名称解析系统非常不同,为应用程序开发人员打开了令人兴奋的新可能性。

PNRP几乎完全是无服务器的(只有在引导时才需要服务器)。PNRP很容易扩展到数十亿个名字。该系统具有容错能力,不存在瓶颈。

DNS名称发布需要更新DNS服务器。大多数人必须联系服务器管理员。这需要时间和成本。PNRP名称发布是即时的,毫不费力的,而且是免费的。

DNS严重依赖缓存来提高性能。不幸的是,这意味着名称不能可靠地实时更新。PNRP比DNS效率高得多,几乎可以即时处理更新。名称解析永远不会返回陈旧的地址,这使得PNRP成为查找移动用户的优秀解决方案。

PNRP解析包括地址、端口和可能的扩展有效负载。使用PNRP,您可以命名的不仅仅是计算机。您还可以命名服务。

可以使用PNRP将名称发布为受保护(受保护)或不受保护(不受保护)。PNRP使用公钥加密来保护安全对等名称免受欺骗。

PNRP使用多个云,其中一个云是能够找到彼此的一组计算机。PNRP提供两个云:

全局云对应于全局IPv6地址范围和全局地址,并代表整个IPv6互联网上的所有计算机。只有一个全局云。

链路本地云对应于链路本地IPv6地址范围和链路本地地址。链路本地云用于特定链路,通常与本地连接的子网相同。可以有多个本地链路云。

第三个云是特定于站点的云,对应于站点IPv6地址范围和站点本地地址。尽管在PNRP中仍支持此云,但它已被弃用。

对等名称是用于通信的端点,可以是计算机、用户、组、服务或您要解析为IPv6地址的任何其他内容。对等名称可以注册为不安全或安全。不安全名称只是容易被欺骗的文本字符串,因为任何人都可以注册重复的不安全名称。不安全的名称最好用在私有或其他受保护的网络中。受保护的名称使用证书和数字签名进行保护。只有原始出版商才能证明受保护名称的所有权。

高位128位称为对等(P2P)ID,是分配给端点的对等体名称的散列。

端点的对等名称具有以下格式:AUTHORITY。分类器。对于安全名称,授权是以十六进制字符表示的对等名称公钥的安全散列算法1(SHA1)散列。对于不安全的名称,授权是单个字符";0";。分类器是标识应用程序的字符串,可以是最长150个字符的任何Unicode字符串。

低128位用于服务位置,这是一个生成的数字,用于标识同一云中同一P2P ID的不同实例。

P2P ID和服务位置的256位组合允许从一台计算机注册多个PNRP ID。图1显示了P2P和PNRP ID的结构。

对于每个云,每个对等节点管理一个PNRP ID缓存,其中包括其自己注册的PNRP ID和随时间缓存的条目。位于云中所有对等节点上的整个PNRP ID集由分布式哈希表组成。给定PNRP ID的条目可能位于多个对等项上。PNRP缓存中的每个条目都包含PNRP ID、认证的对等地址(CPA)和发布节点的IPv6地址。CPA是一个自签名证书,它为PNRP ID提供身份验证保护,并包含地址、协议号和端口号等应用程序端点信息。

因此,PNRP的名称解析过程包括将PNRP ID解析为CPA。在获得CPA之后,可以开始与所需端点的通信。

根据PNRP的版本,有两种不同的方法来执行PNRP名称解析。PNRP版本1包含在Windows XP Service Pack 2(SP2)、Windows XP Professional x64 Edition、Windows XP Service Pack 1(SP1)和Windows XP Advanced Networking Pack for Windows XP中。它使用递归系统进行名称解析,本文不对此进行讨论。在中为Windows Vista和Windows XP Service Pack 3重新设计了PNRP第2版,以通过使用迭代方法进行名称解析来减少网络带宽。PNRP的两个版本不兼容。

在此阶段,尝试解析对等计算机上的服务的PNRP ID的对等方首先确定发布该对等方上运行的PNRP服务的PNRP ID的对等方的IPv6地址。

在定位并确认具有与期望端点的PNRP服务相对应的PNRP ID的对等体的可用性之后,请求对等体向该对等体发送PNRP请求消息,以获得期望服务的PNRP ID。端点发送确认所请求服务的PNRP ID的回复、注释和请求对等方可用于未来通信的最多4千字节的附加信息。例如,如果期望的端点是游戏服务器,则附加数据可以包含关于游戏、游戏级别和当前玩家数量的信息。

在端点确定期间,PNRP使用迭代过程来定位发布PNRP ID的节点,其中执行解析的节点负责联系连续接近目标PNRP ID的节点。

要在PNRP中执行名称解析,对等方检查其自己缓存中的条目,以查找与目标PNRP ID匹配的条目。如果找到,则对等方向对等方发送PNRP请求消息并等待响应。如果未找到PNRP ID的条目,对等方将向与具有与目标PNRP ID最匹配的PNRP ID的条目相对应的对等方发送PNRP请求消息。接收PNRP请求消息的节点检查其自己的缓存并执行以下操作:

如果找到PNRP ID,则被请求对等设备将直接回复请求对等设备。

如果没有找到PNRP ID并且高速缓存中的PNRP ID更接近目标PNRP ID,则被请求对等体向请求对等体发送响应,该响应包含对等体的IPv6地址,该对等体对应于具有与目标PNRP ID最匹配的PNRP ID的条目。从响应中的IP地址,请求节点向第一节点引用的IPv6地址发送另一个查询。

如果未找到PNRP ID,并且其缓存中没有更接近目标PNRP ID的PNRP ID,则被请求对等设备将向请求对等设备发送指示此情况的响应。然后,请求对等设备选择下一个最接近的PNRP ID。

请求对等设备通过连续迭代继续此过程,最终定位注册PNRP ID的节点。

例如,对等方A具有其自己的PNRP ID(200)和PNRP ID 450和500的条目。这组对等节点如图2所示。从一个节点到另一个节点的箭头表示箭头所源自的节点在其缓存中具有箭头所指向的节点的条目。

当对等A想要确定PNRP ID 800的端点时,会发生以下过程:

由于500在数字上更接近800,因此对等项A向注册PNRP ID 500的节点发送PNRP请求消息(对等项C)。

对等项C没有PNRP ID 800的条目,也没有任何更接近800的条目。对等方C向对等方A发回响应,指示它找不到更接近800的条目。

由于450是数字上最接近800的下一个PNRP ID,因此对等项A向注册PNRP ID 450的节点(对等项B)发送PNRP请求消息。

因为对等方B的缓存中有PNRP ID 800的条目,所以它将对等方E的IPv6地址发送给对等方A。

在端点确定之后,对等体A向对等体E发送服务的PNRP名称解析请求,对等体E发回响应,其中包含请求应用的服务的可选数据。

为了使PNRP缓存的大小保持较小,对等节点使用多级缓存,其中每个级别包含最大数量的条目。高速缓存中的每一级代表PNRP ID号空间(2256)的十分之一小部分。缓存中的最低级别包含本地注册的PNRP ID和其他在数字上接近它的PNRP ID。当高速缓存的一个级别被最多20个条目填充时,将创建一个新的较低级别。缓存中的最大级别数约为log10(云中PNRP ID的总数)。例如,对于具有1亿个PNRP ID的全局云,在名称解析期间,缓存中的级别不超过8(=log10(100,000,000)),解析PNRP ID的跳数相同。该机制允许分布式哈希表,通过将PNRP请求消息转发到下一个最近的对等体,直到找到具有相应CPA的对等体,可以为其解析任意PNRP ID。

图4示出了用于1000个条目(0-999)的数字空间的这种多级高速缓存方案的示例,其中高速缓存的每个级别代表数字空间的10%,并且只能存储4个条目(每个勾号表示一个高速缓存条目)。

这种多级高速缓存方案的结果是每个对等体不必存储大量高速缓存条目。即使对于大量的PNRP ID,解析任意PNRP ID所需的本地存储和网络流量也不是很大。

图4是PNRP编号空间的简化,它实际上是一个循环名称空间(本例中999之后的第一个数字是0)。

为确保解析能够完成,节点每次向其缓存的最低级别添加条目时,都会将该条目的副本泛洪到缓存的最后级别内的所有节点。

随着时间的推移,高速缓存条目被刷新。过期的缓存条目将从缓存中删除。结果是,PNRP ID的分布式哈希表基于活动端点,这与DNS不同,在DNS中,地址记录和DNS协议不能保证与地址相关联的节点在网络上处于活动状态。

将PNRP发布消息发送到其缓存邻居(已在缓存最低级别注册PNRP ID的对等设备),以设定其缓存种子。

选择云中不是其邻居的随机节点,并向它们发送PNRP名称解析请求以获取其自己的P2P ID。由此产生的端点确定过程使用发布对等方的PNRP ID为云中随机节点的缓存设定种子。

如果PNRP版本2节点仅解析其他P2P ID,则它们不会发布PNRP ID。HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\PeerNet\PNRP\IPV6-Global\SearchOnly=1注册表值(REG_DWORD型)允许您指定对等项仅使用PNRP进行名称解析,而不使用PNRP进行名称发布。此注册表值也可以通过组策略配置。

要在对等节点启动时初始化PNRP缓存,节点可以使用以下方法:

从硬盘存储加载节点关闭时存在的先前高速缓存条目。

PNRP允许管理员指定包含云中当前参与者的CPA的PNRP种子节点的地址或DNS名称。

PNRP节点需要使用通用即插即用(UPnP)简单服务发现协议(SSDP)注册自身。加入云的节点可以使用SSDP Msearch消息来定位附近的SSDP节点。

在Windows Vista中,Windows对等网络应用程序可以通过简化的PNRP应用程序编程接口(API)访问PNRP名称发布和解析功能。使用简化的PNRP发布API,您不必指定要向其注册名称和地址的云。Windows Vista中的PNRP组件将自动确定要加入的适当云以及要在云中发布的地址。

对于Windows Vista中高度简化的PNRP名称解析,PNRP名称现在集成到getaddrinfo()Windows套接字函数中。要使用PNRP将名称解析为IPv6地址,应用程序可以使用getaddrinfo()函数解析完全限定域名(FQDN)name.prnp.net,其中名称是要解析的对等名称。Pnrp.net域是Windows Vista中用于PNRP名称解析的保留域。

对于名称发布和解析机制,Windows对等网络使用PNRP。PNRP是一种高效、受保护、低成本的动态协议,它使用迭代的无服务器方法进行名称解析。