适用于: Windows 客户端
连接到 Windows Management Instrumentation (WMI) 或 Microsoft SQL Server 时,在远程过程调用 (RPC) 会话期间,或者使用各种 Microsoft 管理控制台 (MMC) 管理单元时,可能会遇到“RPC 服务器不可用”错误。下图显示了 RPC 错误的示例。
这是一个常见的网络错误,需要基本熟悉该过程才能成功进行故障排除。 首先,有几个重要的术语需要理解:
- 终结点映射器 (EPM) :一种服务,该服务在服务器上侦听,并使用端口和 UUID 信息将客户端应用引导到服务器应用。
- 塔:介绍使客户端和服务器能够协商连接的 RPC 协议。
- 楼层:塔内包含特定数据(例如端口、IP 地址和标识符)的内容层。
- UUID:标识 RPC 应用程序的已知 GUID。 在故障排除期间,可以使用 UUID 跟踪单一类型的 RPC 对话, (在一台计算机上同时发生的多种类型) 。
- Opnum:标识客户端希望服务器执行的函数。 这只是一个十六进制数。 但是,一个好的网络分析器会为你转换函数。 如果无法识别函数,请联系应用程序供应商。
- 端口:客户端或服务器应用程序的通信终结点。 EPM 分配动态端口 (也称为高端口或临时端口) 供客户端和服务器使用。
- 存根数据:客户端上的函数与服务器上的函数之间交换的数据。 此数据是有效负载,是通信的重要组成部分。
下图显示了客户端连接到服务器以运行远程操作。 客户端最初联系服务器上的 TCP 端口 135,然后与 EPM 协商动态端口号。 EPM 分配端口后,客户端断开连接,然后使用动态端口连接到服务器。
默认情况下,EPM 根据) 使用的操作系统的实现,从为 TCP 和 UDP (配置的范围随机分配动态端口。 但是,此方法可能不实用,尤其是在客户端和服务器必须通过防火墙进行通信的情况下。 另一种方法是指定 EPM 要使用的端口号或端口号范围,并在防火墙中打开这些端口。
许多依赖于 RPC 的 Windows 服务器应用程序都提供了 (选项,例如注册表项) 来自定义允许的端口。 Windows 服务对此任务使用 HKEY_LOCAL_MACHINESOFTWAREMicrosoftRpcInternet 子项。
指定端口或端口范围时,请使用超出常用端口范围的端口。 可以在 Windows 的服务概述和网络端口要求中找到 Windows 和主要 Microsoft 产品中使用的服务器端口的完整列表。 本文还列出了 RPC 服务器应用程序,并提到了哪些 RPC 服务器应用程序可以配置为使用超出 RPC 运行时功能的自定义服务器端口。
默认情况下, Internet 密钥不存在。 因此,必须创建它。 对于 Internet 密钥,可以配置以下条目:
- 端口REG_MULTI_SZ:指定端口或端口的包含范围。 Internet 下显示的其他条目指示这些是要使用的端口还是要排除的端口。
- 值范围: 0 - 65535
例如, 5984 表示单个端口, 5000–5100 表示一组端口。 如果任何值超出了 0 到 65535 的范围,或者无法解释任何值,则 RPC 运行时会将整个配置视为无效。
- 值范围: 0 - 65535
- PortsInternetAvailable REG_SZ:指定 Ports 值是表示要包含的端口还是要排除的端口。
- 值: Y 或 N (不区分大小写)
- Y: “端口 ”条目中列出的端口表示该计算机上可供 EPM 使用的所有端口。
- N: “端口 ”条目中列出的端口表示 EPM 不可用的所有端口。
- 值: Y 或 N (不区分大小写)
- UseInternetPorts REG_SZ:指定默认系统策略。
- 值: Y 或 N (不区分大小写)
- Y:使用默认系统策略的进程是从 Internet 可用端口集中分配的端口,如前所述。
- N:使用默认系统策略的进程是从仅限 Intranet 的端口集中分配的端口。
- 值: Y 或 N (不区分大小写)
应打开大于端口 5000 的端口范围。 小于 5000 的端口号可能已被其他应用程序使用,它们可能会导致与 DCOM 应用程序冲突。 此外,以前的经验表明,至少应打开 100 个端口。 这是因为多个系统服务依赖于这些 RPC 端口来相互通信。
有关 RPC 工作原理的详细信息,请参阅 RPC over IT/Pro。
在此示例中,端口 5000 到 6000 (包含) 任意选择,以帮助说明如何配置新的注册表项。 此示例不是任何特定系统所需的最小端口数的建议。 此类配置需要在 HKEY_LOCAL_MACHINESOFTWAREMicrosoftRpc下添加 Internet 密钥,并添加以下条目:
- 端口MULTI_SZ
- 数据类型: MULTI_SZ
- 值: 5000-6000
- PortsInternetAvailable REG_SZ
- 数据类型: REG_SZ
- 值: Y
- UseInternetPorts REG_SZ
- 数据类型: REG_SZ
- 值: Y
计算机必须重启才能使此配置生效。 之后,将使用 RPC 的所有应用程序分配动态端口,范围为 5000 到 6000 (包括) 。
在深入了解网络跟踪数据之前,PortQry 可以快速了解 RPC 的工作原理。 可以通过在客户端计算机上运行以下命令来快速确定是否可以建立连接:
例如,请考虑以下命令:
此命令生成类似于以下摘录的输出:
通过检查此输出,可以确定以下信息:
- DNS 正常工作 (将 IP 地址解析为完全限定的域名 (FQDN) ) 。
- PortQry 已联系目标计算机上的 RPC 端口 (135) 。
- EPM 响应了 PortQry,并分配了动态端口 49664 (括在方括号) 以供后续通信。
- PortQry 已重新连接到端口 49664。
如果这些步骤中的任何一个失败,通常可以开始收集同时的网络跟踪,如下一部分所述。
有关 PortQry 的详细信息,请参阅 使用 PortQry 命令行工具。
可以使用 Windows netsh 工具在客户端和服务器上同时收集网络跟踪数据。
若要同时收集网络跟踪,请在客户端和服务器上打开提升的命令提示符窗口。
在客户端上运行以下命令:
在服务器上,运行以下命令:
现在,尝试在客户端计算机上重现你的问题。 然后,在两个窗口中的命令提示符处运行以下命令以停止跟踪:
在 Microsoft 网络监视器 3.4 或消息分析器中打开跟踪文件,并筛选服务器或客户端计算机的 IP 地址以及 TCP 端口 135 的跟踪数据。 例如,使用筛选器字符串,如下所示:
- Ipv4.address==<client-ip> and ipv4.address==<server-ip> and tcp.port==135
在此筛选器字符串中,<client-ip> 表示客户端的 IP 地址,server-ip>< 表示服务器的 IP 地址。
- tcp.port==135
在筛选的数据中,在“协议”列中查找 EPM 条目。
在包含动态端口号的服务器) 查找来自 EPM (的响应。 如果存在动态端口号,请记下它以供将来参考。
重新调整动态端口号和服务器 IP 地址的跟踪数据。 例如,使用筛选器字符串,例如 tcp.port==<dynamic-port-allocated> 和 ipv4.address==<server-ip>。 在此筛选器字符串中, <动态端口分配> 表示动态端口号, <server-ip> 表示服务器的 IP 地址。
在筛选的数据中,查找客户端成功连接到动态端口的证据,或查找可能发生的任何网络问题。
“RPC 服务器不可用”错误的最常见原因是客户端无法连接到已分配的动态端口。 然后,客户端跟踪会显示动态端口的 TCP SYN 重新传输。
此行为表示以下条件之一正在阻止通信:
- 动态端口范围在环境中的防火墙上被阻止。
- 中间设备正在丢弃数据包。
- 目标服务器正在丢弃数据包。 这种情况可能是由以下配置引起的: Windows 筛选平台 (WFP) 数据包丢弃、网络接口卡 (NIC) 数据包丢弃或 筛选器驱动程序 修改。
在联系 Microsoft 支持人员之前,我们建议你收集有关你的问题的信息。
这些过程使用 TroubleShootingScript (TSS) 工具集。 若要使用此工具集,应注意以下先决条件:
- 必须对本地计算机具有管理员级权限。
- 首次运行工具集时,必须接受 EULA。
- 确保计算机的Windows PowerShell脚本执行策略设置为 。 有关 PowerShell 执行策略的详细信息,请参阅 about_Execution_Policies。
- 在所有节点上下载 TSS ,并将其展开到 C: ss 文件夹。
- 在提升的 PowerShell 命令提示符窗口中打开 C: ss 文件夹。
- 通过运行以下 cmdlet 在有问题的计算机上启动跟踪:
- 响应 EULA 提示符。
- 重现问题。 可以使用 事件查看器 或 wbemtest 等工具来监视或测试问题。
- 重现问题后,请立即停止收集数据。
- 自动脚本收集完所需数据后,将数据附加到支持请求。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/haskellbc/45091.html