你目前正处于脱机状态,正在等待 Internet 重新连接

如何对黑洞路由器问题进行故障排除

Support for Windows XP has ended

Microsoft ended support for Windows XP on April 8, 2014. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

有关本文的 Microsoft Windows 2000 版本,请参阅 159211

重要说明:本文包含有关修改注册表的信息。修改注册表之前,一定要备份注册表,并且一定要知道在发生问题时如何还原注册表。有关如何备份、还原和编辑注册表的信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
256986 Microsoft Windows 注册表说明
概要
本文对术语“黑洞”路由器进行了定义,介绍了一种查找黑洞路由器的方法,并建议了三种避免由于黑洞路由器而造成数据损失的方法。
更多信息
在基于 TCP/IP 的广域网 (WAN) 中,如果某个中间网段的最大数据包大小小于通讯主机的最大数据包大小,并且路由器无法在这种情况下发送适当的 Internet 控制消息协议 (ICMP) 响应,则某些路由上的通讯可能会失败。这样的路由器有时称为“黑洞”路由器。

可以通过使用 Ping 实用工具找到黑洞路由器,该实用工具是随 Microsoft Windows TCP/IP 协议一起安装的标准实用工具。然后,可以使用三种方法之一来修复或解决黑洞路由器问题。

如果网络路由器收到的数据包大于下一个通讯网段的最大传输单位 (MTU) 的大小,并且该数据包的 IP 层“don't fragment”位(不分段)进行了标记时,该路由器应当向发送主机发回一个 ICMP“destination unreachable”(无法到达目标)消息。

如果路由器不发送此消息,数据包可能被丢弃,并随通过失败链接进行通讯的程序的不同而导致多种不同的错误。(如果程序连接到本地子网上的计算机,则不会发生这些错误。)这种情况可能看上去是间歇发生的,但如果进一步研究,能够发现这种情况可以重现,例如,通过让客户端读取从远程主机发送的大型文件,就可以做到这一点。

客户端错误

客户端无法建立与远程计算机的连接。造成这一错误的最可能的原因是:
  • 无法在远程计算机上启用远程连接。
  • 远程计算机上超出了最大连接数。
  • 建立连接期间发生网络错误。
    服务器端错误:事件 ID 1004
    来源:TermService
    说明:“The terminal server cannot issue a client license.It was unable to issue the license due to a changed (mismatched) client license, insufficient memory, or an internal error.Further details for this problem may have been reported at the client's computer.”(终端服务器无法颁发客户端许可证,原因是客户端许可证已更改(不匹配)、内存不足或者存在内部错误。有关此问题的详细信息可能已在客户机进行报告。)

查找黑洞路由器

可以使用 Ping 实用工具查找黑洞路由器,方法是在键入 ping 命令时设置 -f-l 参数。
  • -f 参数会使 Ping 实用工具发送设置了 IP“do not fragment”(不分段)位的 ICMP 回应数据包。
  • -l 参数设置 ICMP 回应数据包的缓冲区或有效负载的大小。可以在 -l 参数后键入一个数字,以指定此大小。
可以不分段发送的最大缓冲区的大小等于路由上存在的最小 MTU 减去 IP 和 ICMP 头(换句话说,就是最小 MTU 减去 28)。例如,以太网的 MTU 为 1,500 字节,因此在最佳情况下,Ping 实用工具可以回应一个不分段的数据包,加上一个大小为 1,472 字节(即 1,500 减去 28)的 ICMP 缓冲区。这种情况下,ping 命令的语法为:
ping 计算机名或 IP 地址 -f -l 1472
对于所有本地 IP 地址,预期结果如下所示:
  • 如果路由连接的每段的 MTU 都最小为 1,500,则数据包将被成功返回。
  • 如果某些中间段的 MTU 小于 1500,并且路由器返回相应的 ICMP“destination unreachable”(目标无法到达)数据包,Ping 实用工具将显示消息“Packet needs to be fragmented but DF set”(数据包需要进行分段,但设置了 DF)。
  • 如果某些中间段的 MTU 小于 1500,并且路由器不返回相应的 ICMP“destination unreachable”(目标无法到达)数据包,则 Ping 实用工具将显示消息“Request timed out”(请求超时)。
通过为后续的 ping 命令增加 -l 参数,可以识别不经分段就可通过特定路由的数据包的最大大小。通常使用的最小 MTU 为 576 字节,因此,可以安全地从大小为 548 的 ICMP 缓冲区开始,然后逐渐增大其大小。例如,如果命令 Ping 计算机名或 IP 地址 -f -l 972 可以返回数据包,但是 Ping 计算机名或 IP 地址 -f -l 973 不能返回数据包,则该路由上的最大 MTU 为 1,000(972 加 28)。以下 Microsoft 知识库文章对常见网络媒体的默认 MTU 进行了说明:
314496 不同网络拓扑的默认 MTU 大小

修复或变通解决黑洞路由器问题

警告:注册表编辑器使用不当可导致严重问题,可能需要重新安装操作系统。Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器需要您自担风险。

以下三种方法可用于修复或变通解决黑洞路由器问题。

方法 1

在将要通过广域网连接通讯的基于 Windows 的主机上启用 PMTU 黑洞检测。按照下列步骤操作:
  1. 启动注册表编辑器 (Regedit.exe)。
  2. 在注册表中找到下面的项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip\parameters
  3. 编辑菜单上,单击添加数值,然后添加以下注册表值:
    数值名称: EnablePMTUBHDetect
    数据类型: REG_DWORD
    值: 1
  4. 退出注册表编辑器,然后重新启动计算机。

方法 2

将中间路由器配置为发送 ICMP 类型 3 代码 4 消息(“destination unreachable, don't fragment (DF) bit sent and fragmentation required”)(目标无法到达,设置了“不分段”(DF) 位但需要进行分段)。这可能需要进行路由器软件或固件升级、重新配置路由器或者更换路由器。

方法 3

将主机接口的 MTU 设置为黑洞路由器可以处理的最大大小,以确保可以通过该连接发送尽可能大的数据包。但是,请注意,本地通信使用比所需大小更小的数据包,能够成功使用该路由连接的通信也是如此。

此解决方法假定您已经识别主机可能使用的所有链接的 MTU 和状态。在识别受支持的最大 MTU 大小之后,请手动设置 MTU。按照下列步骤操作:
  1. 单击开始,然后单击控制面板
  2. 双击“网络和 Internet 连接”,然后单击以打开网络连接文件夹。
  3. 如果列出了多个网络连接,则对于每个连接,双击该连接,然后单击所打开的状态界面的支持选项卡。显示默认网关项的连接可能就是用于连接到 Internet 的网络连接。记下该连接的名称(例如“Local Area Connection 2”)。
  4. 启动注册表编辑器 (Regedit.exe)。
  5. HKEY_LOCAL_MACHINE 树下,转到以下项:
    SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\
  6. 该项下有一个或多个具有数值标识符的项。这些项分别具有一个 Connection 子项。检查每个与以下项类似的项:
    适配器 ID\Connection
    Connection 子项中的 Name 值提供在“网络连接”文件夹中所使用的网络连接名称。当您找到与在步骤 3 中找到的名称匹配的项时,请记下该网络连接名称所属的适配器 ID
  7. 返回到 HKEY_LOCAL_MACHINE,然后找到下面的项
    SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\适配器 ID
    其中,适配器 ID 是在步骤 6 中记下的数字。突出显示该项时,屏幕的右侧将显示几个值,包括 DefaultGatewayEnableDHCP
  8. 右键单击屏幕右侧,单击新建,然后单击双字节值。将该值命名为 MTU
  9. 双击该值以便进行编辑,将基数更改为十进制,然后输入可接受的最大 MTU 大小,即使用 Ping 测试所识别的大小。
  10. 退出注册表编辑器。
请注意,如果某些服务器仍出现问题,可能需要将 MTU 设置为比 Ping 测试所指示的值更小的值,原因是该特定路径中存在其他路由器。每次将 MTU 减小 10 并重复此过程,直到能够成功访问这些站点。

有关手动设置 MTU 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
314053 Windows XP 的 TCP/IP 和 NBT 配置参数

有关其他信息,请参阅 Internet RFC 1191 和 RFC 1435,可以在以下 Internic Web 站点找到它们:
prodnt blackhole
属性

文章 ID:314825 - 上次审阅时间:03/29/2004 20:27:00 - 修订版本: 1.1

  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional Edition
  • kbinfo kbenv kbnetwork KB314825
反馈
pt" src="https://c.microsoft.com/ms.js" '="">