Peer Name Resolution (PNRP) - netsh






4.33/5 (4投票s)
2005 年 11 月 10 日
8分钟阅读

85435
Peer Name Resolution, netsh 和 Microsoft 的 Peer-to-Peer 技术。
背景
这是我将要讨论 Microsoft 的 Peer-to-Peer 技术的实际应用的第二篇文章。在第一篇文章中介绍了云、对等名称和对等名称解析(一种无服务器 DNS)的概念。本文介绍了一个名为 netsh 的有用工具,Microsoft 将其包含在内用于一般的网络诊断和管理。除了防火墙管理,该工具还更新以帮助诊断 peer-to-peer 通信。在开发 peer-to-peer 应用程序时,此工具对于诊断云和对等名称非常有用。
引言
在安装了 Peer-to-Peer 网络服务的 Windows XP Service Pack 2 计算机上,打开命令提示符并输入 netsh
以启动网络诊断工具。
接着输入 p2p
进入其 peer-to-peer 功能。然后输入 pnrp
进入 Peer Name Resolution 功能。
在此级别有三个有用的命令:cloud
、peer
和 diag
。让我们先通过输入 cloud
来探索 cloud
。
云
cloud
命令包含三个有用的子命令:repair
、sync
和 show
。
修复
Repair
用于检查网络是否已分区,并尝试纠正 peer-to-peer 网络图中的此问题或任何不一致之处。为避免重复详细解释其含义,请查看“资源链接”部分中的以下链接。“Windows Peer-to-Peer 网络简介”页面提供了检测和修复图分区(Graph Partition)的逐步示例。此外,Microsoft 关于“Peer-to-peer cloud-split detection and repair methods”的专利申请提供了有关用于维护一致且最优的对等网络拓扑的算法的深入描述。
Sync
Sync
包含两个子命令:host
和 seed
。Syncing 使用来自指定主机或种子服务器的 PNRP ID 更新云的本地缓存。
Microsoft 维护一个种子服务器(DNS 名称为 pnrp.ipv6.microsoft.com)。此服务器充当对等方可以用来引导到 Global_ PNRP 云的“始终在线”的、众所周知的服务器。使用标准的 ping
或 ping6
命令将从 IPv6 地址获得响应。如果键入“sync seed”并且返回的 ID 数量大于 1,则表示您已连接到 PNRP 种子服务器。返回的 ID 是 Global_ 云中的其他节点。
“sync host”命令需要一个额外的 {host} 名称参数和可选的 {cloud} 名称。键入“sync host pnrp.ipv6.microsoft.com Global_”等同于 sync seed。Sync host 允许与任意主机同步 PNRP ID,前提是该主机正在运行 PNRP 服务并且是同一云的成员。
到目前为止,您可能在想:什么是 PNRP ID?PNRP ID 长 256 位,由以下部分组成:
- 高 128 位,称为 Peer-to-Peer (P2P) ID,是对等名称的哈希。回想第一篇文章,对等名称的格式为
Authority.Classifier
。0.test
是一个未保护的对等名称的示例。 - 低 128 位是生成的数字,用于唯一标识同一云中同一 P2P ID 的不同实例。
P2P ID 和实例的 256 位组合允许从单个计算机注册多个 PNRP ID。您将在下方看到一些 PNRP ID。
显示
Show
命令有四个子命令:init
、list
、names
和 stats
。
“show init”命令显示云引导配置和状态。
Scope Id Addr State Name
----- ----- ----- ---------------- -----
1 0 1 Virtual Global_
Synchronize server: pnrp.ipv6.microsoft.com
Use Server: Not used
Use SSDP: Not used
Use Persisted cache: Not used
Scope Id Addr State Name
----- ---- ----- -------- -----
3 4 1 Virtual LinkLocal_{D18BDF3B-A236-4949-9C1D-AC85D97955FC}
Synchronize server:
Use Server: Disabled
Use SSDP: Not used
Use Persisted cache: Not used
Scope
是一个内部PNRP_SCOPE
值,表示云的范围(Any
=0,1=Global
,2=Site
,3=Local
)。State
是一个内部PNRP_CLOUD_STATE
值,表示云的状态。在此示例中,Virtual
表示云尚未初始化。运行start
命令(从 netsh 的 cloud 上下文中)将使本地节点与云同步,并将状态更改为Active
。但通常,启动第一个 peer-to-peer 应用程序将初始化云。Synchronize Server
表示用于定位对等方和同步的种子服务器。Use Server
表示用于在启动期间加载云当前状态的缓存服务器的 DNS 名称。Use SSDP
表示支持 Universal Plug-and-Play (UPnP) Simple Service Discovery Protocol (SSDP) 的附近节点的地址。加入云的节点可以使用此协议定位附近节点。这在种子服务器不可用时很有用。Use Persisted Cache
表示在节点关机时存在的先前缓存条目已从硬盘加载。
要进一步了解 PNRP 在包含大量节点的云中使用的多级缓存方案,请参考下方的“Windows Peer-to-Peer 网络简介”链接中的 **“使用多级缓存缩放 Peer Name Resolution”** 部分。
请注意,对于您安装的每个网络适配器,都会出现一个 LinkLocal_{GUID} 条目。在企业网络中,您也可能看到 SiteLocal_{GUID} 条目。此外,GUID 对每个链接都是唯一的。
“show list”命令显示节点连接到的云的简单列表。
Scope Id Addr State Name
----- ----- ----- ---------------- -----
1 0 1 Active Global_
3 4 1 Virtual LinkLocal_{D18BDF3B-A236-4949-9C1D-AC85D97955FC}
“show names”显示已注册的对等名称列表。下一节将讨论如何使用 netsh 注册对等名称。
P2P Name: 0.test
Identity: Default
Comment: test
PNRP ID: 6e91887ad830b250369ce44241135dcf.000000000000000026db5841f8689978
State: OK
IP Addresses: [0000:0000:0000:0000:0000:0000:0000:0001]:8350 udp
192.168.2.27:8350 tcp
在此示例中,注册了 0.test
。由于它是一个未受保护的对等名称,因此使用了默认标识。显示了对应的 256 位 PNRP ID。最后,列出了与此名称关联的地址和端口(也称为端点)。
当云处于 Active
状态时,“show stats”命令显示以下附加信息。
IP Addresses: [3ffe:831f:4004:1950:8000:4039:bb6f:38ea]:3540
Number of cache entries: 41
Estimated cloud size: 1250
Number of registered names: 1
Throttled resolves: 0
Throttled solicits: 0
Throttled floods: 0
Throttled repairs: 0
IP Addresses
显示用于连接到云的 IP 地址列表。在本例中,显示了节点在端口 3540 (teredo) 上的 IPv6 地址。- 其余条目是显示缓存和云大小的有用统计信息,以及云中可能发生的任何节流。
Peer
在 cloud 上下文中,只需键入“peer
”即可进入 netsh 工具的 peer 功能。peer
命令包含五个有用的子命令:add
、delete
、list
、resolve
和 tracert
。
Add
Add
命令允许您在云中注册一个对等名称。例如,键入“add 0.test
”以在 Global_ 云中注册一个未受保护的对等名称。
删除
Delete
命令删除先前在云中注册的对等名称。例如,键入“delete 0.test
”以删除刚注册的对等名称。
列表
List
命令仅列出 Global_ 云中注册的任何对等名称。无法列出在其他云中注册的名称。
解析
Resolve
命令允许您在云中解析或查找对等名称。但是,注册该名称的应用程序必须正在运行。使用 Add
命令注册的名称无法解析。要查看此功能,请使用我第一篇文章中包含的 PnrpViewer 应用程序注册一个名称。注册后,键入“resolve 0.Me
”。
netsh p2p pnrp peer>resolve 0.Me
Resolve started...
Found: Comment: It worked!
Addresses: [0000:0000:0000:0000:0000:0000:0000:0001]:0 tcp
退出 PnrpViewer 应用程序后,请注意该名称将无法再解析。
Tracert
Tracert
命令允许您在云中查找对等名称,但会包含到达云中每个节点的路径或跳数。例如,“tracert 0.Me
”与上述名称已注册时的输出相同。但是,如果名称未注册,您会看到类似如下的输出:
netsh p2p pnrp peer>tracert 0.Me
Resolve started...
Not Found.
Resolve Path: [3ffe:831f:4004:1956:8000:4b39:bb6f:38ea]:3540 Accepted
[3ffe:831f:4004:1950:0000:3659:b89f:441d]:3540 Rejected
(Dead end) Suspicious
[3ffe:831f:4004:1950:0000:b80c:306e:cd9d]:3540 Rejected
(Dead end) Suspicious
[3ffe:831f:4004:1950:0000:304e:3746:0bcd]:3540 Accepted
Suspicious
[3ffe:831f:4004:1956:0000:1724:b95d:d0ef]:3540 Rejected
(Dead end) Suspicious
[3ffe:831f:4004:1954:8000:0fc0:7eea:81f6]:3540 Rejected
(Dead end) Suspicious
[3ffe:831f:4004:1952:0000:23bb:b9e4:276b]:3540 Rejected
(Dead end) Suspicious
[3ffe:831f:4004:1956:0000:2477:2722:8954]:3540 Rejected
(Dead end) Suspicious
[3ffe:831f:4004:1952:0000:345f:aea5:5e77]:3540 Accepted
Suspicious
[3ffe:831f:4004:1954:0000:1756:aeaf:9aa2]:3540 Rejected
(Dead end) Suspicious
任何接受(Accepts)的地址都可以 ping(参见下一节)。拒绝(Rejects)的地址是已离开云或未响应 ping 的节点。
Diag
pnrp 功能的最后一个命令是 diag
。Diag
包含一个有用的子命令:ping
。
Ping
Ping
类似于 TCP/IP 工具。它允许您 ping 一个地址。但在本例中,它允许您 ping 云中的 IPv6 节点地址。ping
有两个子命令:host
和 seed
。
“ping host”需要一个 {host} 名称或 IP 地址以及可选的 {cloud} 名称。如上所述,使用 tracert
命令发现云中的节点列表。任何接受(Accepts)的节点的地址都可以 ping。例如:
netsh p2p pnrp diag>ping host 3ffe:831f:4004:1956:0000:fbab:ad03:038c
SOLICIT sent to address: [3ffe:831f:4004:1956:0000:fbab:ad03:038c]:3540.
ADVERTISE returned 5 ID(s) in 500 milliseconds.
eec26ea69f8e7453ea2f2a2c0370b164.3ffe831f40041950ecdda2c2f0f8975f
b85bec395d965258bc3f459b4523b0ef.77006600550044005ba1b9c9d11d9fd4
ce7a7621b3121d342e82e1ac04967aa4.2002cb51ec2b0000b8a93f738e3f351f
d346f4c416b9c761f590f0227c22e72c.7700660055004400ad6a7394f7f283e2
daf9fa3ac213a9098cbb45bf22c15355.fe80000000000000cfd0772ab1e14b88
“ping seed”命令 ping 配置的种子服务器。
看点
如果您的计算机位于隔离网络上,您可以将一台机器设置为一个众所周知的 PNRP 节点,以引导网络上的其他节点。每个 IPv6 范围(local、site 和 global)的注册表项允许设置“SeedServer
”。其值必须包含一个完全限定的 IPv6 地址和端口,或者一个可 DNS 解析的名称。使用 Windows regedit 工具并导航到 HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/PeerNet/PNRP/IPV6-<scope> 来设置 SeedServer
值。
最后,Windows Vista 中的 netsh 命令有几个用于 PNRP 功能的其他命令。一旦 peer-to-peer 功能正常工作,我将更新本文。
资源链接
我发现以下资源对于理解 netsh 工具非常有帮助:
- 如何启用 Peer Name Resolution
- Windows Peer-to-Peer 网络简介
- Windows Peer-to-Peer 网络 FAQ
- Microsoft 关于“Peer-to-peer cloud-split detection and repair methods”的专利申请
结论
我希望本文能作为我第一篇文章的有用补充。我正在考虑撰写更多关于以下主题的文章,以进一步加深您对 Microsoft Peer-to-Peer 技术的理解:
- 对等名称解析 - Windows Vista 增强功能
- Peer Graph - 基础知识
- 对等图形 - 节点和连接
- 对等图形 - 记录
- 对等图形 - 属性
- 对等图形 - 搜索
- 对等组和身份
- 对等协作 - 附近的人
- 对等协作 - 端点
- 对等协作 - 能力
- 对等协作 - 在线状态
- 对等协作 - 邀请
如果您对其他主题有建议,请留下评论。哦!别忘了投票。
历史
初始版本。