当 ISA Server 2004 计算机在重负载条件下运行时,CPU 使用率可能超过 50%

重要本文包含有关如何修改注册表的信息。在修改注册表之前,请确保备份注册表。确保知道如何在出现问题时还原注册表。有关如何备份、还原和修改注册表的详细信息,请单击以下文章编号以查看 Microsoft 知识库中的文章:

256986 Microsoft Windows 注册表描述

症状

当基于 Microsoft Internet 安全和加速服务器 (ISA) 2004 的计算机在高负载条件下运行时,您可能会遇到 CPU 使用率高的情况。例如,ISA 服务器计算机上的 CPU 使用率可能超过 50%。

原因

由于在 ISA 服务器安装期间应用的 TCP/IP 最大传输单元 (MTU) 设置,可能会出现此行为。为了防止攻击者更改 MTU 值,ISA Server 2004 禁用路径 MTU (PMTU) 发现。此设置在 Microsoft 安全公告 MS05-019 中记录。要查看此公告,请访问以下 Microsoft 网站:

http://www.microsoft.com/technet/security/Bulletin/MS05-019.mspx注意

  • 默认情况下,Windows 使用 1,480 字节的 MTU 设置,并接受请求较小数据包大小的 Internet 控制消息协议 (ICMP) 消息。

  • 如果在基于 Windows 的服务器上禁用 MTU 发现,则服务器使用 MTU 设置为 576 字节。

解决方案

警告如果使用注册表编辑器或使用其他方法错误地修改注册表,则可能会出现严重问题。这些问题可能需要您重新安装操作系统。微软不能保证这些问题能够得到解决。修改注册表的风险由您自行承担。要解决在 ISA Server 安装期间配置的 MTU 设置导致的行为,请按照以下步骤操作。重要如果已安装 Windows Server 2003 服务包 1 (SP1) 或以下 Microsoft 知识库文章中介绍的修补程序,则必须更改此注册表:

898060安装安全更新 MS05-019 或 Windows Server 2003 服务包 1 后,客户端和服务器之间的网络连接可能会失败

  1. 单击"开始", 单击"运行",键入"注册",然后单击"确定"。

  2. 找到,然后右键单击以下注册表项:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnablePMTUDiscovery值类型: REG_DWORDValue: 0, 1 (False, True) ISA 默认值: 0 (假)注意如果启用PMTUDiscovery条目不可用,则创建该条目。

  3. 如果合适,根据以下信息设置或更改值:

    • 值 = 1将EnablePMTUDiscovery设置为 1 时,TCP 会尝试发现远程主机路径中的 MTU 或最大数据包大小。TCP 可以删除连接使用不同 MMUS 的网络的路径中的路由器上的碎片。TCP 通过发现路径 MTU 并将 TCP 段限制为此大小来这样做。碎片对 TCP 吞吐量有不利影响。

    • 值 = 0将EnablePMTUDiscovery设置为 0 时,对于与本地子网上的主机无关的所有连接,将使用 576 字节的 MTU。如果不将此值设置为 0,攻击者可能会强制 MTU 值设置为非常小的值,并过度处理堆栈。备注

      • EnablePMTUDiscovery设置为 0 时,TCP/IP 的性能和吞吐量将受到影响。在将此值设置为 0 之前,必须完全了解性能吞吐量。

      • 安装 ISA Server 2004 或 ISA Server 2004 服务包 1 时,此值也会重置为 0。

      • ISA服务器 2004 服务包 2 不会更改启用PMTU发现的值。

  4. 要参与发现过程,请为 ISA 服务器创建 ICMP MTU 访问规则。为此,请按照以下各节中介绍的步骤进行操作,具体取决于您的配置。

  5. 退出注册表编辑器,然后重启计算机。

ISA 服务器 2004,标准版

  1. 单击"开始",指向程序,指向微软 ISA 服务器,然后单击ISA 服务器管理

  2. 在左侧窗格中,展开"数组名称",然后单击"防火墙策略"。

  3. 在任务窗格中,单击"工具箱"选项卡,然后单击"协议"。

  4. 在"协议"下,单击"新建",然后单击"协议"。

  5. 在"协议定义名称"框中,键入ICMP MTU 发现,然后单击"下一步"。

  6. 单击"新建", 然后单击"协议类型"列表中的ICMP。

  7. 在"方向"列表中,单击"发送接收"。

  8. ICMP 代码框中键入4,在ICMP 类型框中键入3,然后单击"确定"。

  9. 单击"下一步", 单击"完成",然后单击"应用"。

  10. 在左侧窗格中,右键单击"防火墙策略",单击"新建",然后单击"访问规则"。

  11. 在"访问规则名称"框中,键入"允许 ICMP MTU 发现",然后单击"下一步"。

  12. 单击"允许",然后单击"下一步"。

  13. 在"此规则应用于列表"中,单击"选定协议",然后单击"添加"。

  14. 在"协议"列表中,展开用户定义的

  15. 单击ICMP MTU 发现,单击"添加",单击"关闭",然后单击"下一步"。

  16. 单击"添加"。

  17. 在"网络实体"列表中,展开"网络"。

  18. 单击"外部", 然后单击"添加"。

  19. 单击"内部", 单击"添加",单击"关闭",然后单击"下一步"。

  20. 单击"添加"。

  21. 在"网络实体"列表中,展开"网络"。

  22. 单击"本地主机", 单击"添加",单击"关闭",然后单击"下一步两次"。

  23. 单击"完成",然后单击"应用"。

ISA 服务器 2004, 企业版

对于 ISA Server 2004,企业版要参与 ICMP MTU 发现过程,在企业级别创建 ICMP 协议,然后在阵列级别创建 ICMP MTU 访问规则。

如何在企业级别创建 ICMP 协议

  1. 单击"开始",指向程序,指向微软 ISA 服务器,然后单击ISA 服务器管理

  2. 在左侧窗格中,展开企业,然后单击"企业策略"。

  3. 在任务窗格中,单击"工具箱"选项卡,然后单击"协议"。

  4. 在"协议"下,单击"新建",然后单击"协议"。

  5. 在"协议定义名称"框中,键入ICMP MTU 发现,然后单击"下一步"。

  6. 单击"新建", 然后单击"协议类型"列表中的ICMP。

  7. ICMP 代码框中键入4,在ICMP 类型框中键入3,然后单击"确定"。

  8. 单击"下一步", 单击"完成",然后单击"应用"。备注使用规则创建向导时,无法为用户定义的 ICMP 协议创建企业访问规则。

有关如何在 ISA Server 2004 企业版策略中使用用户定义的 ICMP 协议的详细信息,请单击以下文章编号查看 Microsoft 知识库中的文章:

902348用户定义的 ICMP 协议未显示在 ISA Server 2004 企业版的新访问规则向导中

如果网络中只有一个阵列,如何手动创建 ICMP MTU 访问规则

  1. 单击"开始",指向程序,指向微软 ISA 服务器,然后单击ISA 服务器管理

  2. 在左侧窗格中,展开数组,然后展开"数组名称"。

  3. 右键单击"防火墙策略",单击"新建",然后单击"访问规则"。

  4. 在"访问规则名称"框中,键入"允许 ICMP MTU 发现",然后单击"下一步"。

  5. 单击"允许",然后单击"下一步"。

  6. 在"此规则应用于列表"中,单击"选定协议",然后单击"添加"。

  7. 在"协议"列表中,展开用户定义的

  8. 单击ICMP MTU 发现,单击"添加",单击"关闭",然后单击"下一步"。

  9. 单击"添加"。

  10. 在"网络实体"列表中,展开"网络"。

  11. 单击"外部", 然后单击"添加"。

  12. 单击"内部", 单击"添加",单击"关闭",然后单击"下一步"。

  13. 单击"添加"。

  14. 在"网络实体"列表中,展开"网络"。

  15. 单击"本地主机", 单击"添加",单击"关闭",然后单击"下一步两次"。

  16. 单击"完成",然后单击"应用"。

如果网络中有多个阵列成员,如何创建 ICMP MTU 访问规则

方法 1

  1. 在第一个阵列上手动创建 ICMP MTU 访问规则。为此,请按照所述步骤为单个数组创建访问规则。

  2. 复制 ICMP MTU 访问规则。为此,请按照以下步骤操作:

    1. 单击"开始",指向程序,指向微软 ISA 服务器,然后单击ISA 服务器管理

    2. 在左侧窗格中,展开数组,然后展开"数组名称"。ArrayName是为其创建 ICMP MTU 访问规则的第一个数组。

    3. 单击"防火墙策略",右键单击"防火墙策略规则允许 ICMP MTU 发现"规则,然后单击"复制"。

  3. 将 ICMP MTU 访问规则粘贴到每个阵列中。为此,请按照以下步骤操作:

    1. 在 ISA 服务器管理 Microsoft 管理控制台 (MMC) 中,展开要粘贴 ICMP MTU 访问规则的阵列,然后单击防火墙策略

    2. 在中心窗格中,右键单击要立即遵循 ICMP MTU 访问规则的数组策略规则,然后单击"粘贴"。备注如果不存在阵列策略规则,则必须创建新的阵列策略规则,然后才能将 ICMP MTU 访问规则粘贴到阵列策略中。

    3. 单击"应用"。

  4. 重复步骤 3a 到 3c,直到复制所有阵列成员的 ICMP MTU 访问规则。

方法 2

  1. 在第一个阵列上手动创建 ICMP MTU 访问规则。为此,请按照所述步骤为单个阵列创建 ICMP MTU 访问规则。

  2. 导出 ICMP MTU 访问规则。为此,请按照以下步骤操作:

    1. 在 ISA 服务器管理 MMC 中,展开为其创建 ICMP MTU 访问规则的阵列,然后单击防火墙策略

    2. 右键单击"允许 ICMP MTU 发现"规则下的防火墙策略规则,然后单击"导出选定"。

    3. 在"导出向导"中,单击"下一步"。

    4. 在"导出首选项"页上,单击"下一步"。

    5. 在"导出文件位置"页上,单击"浏览"。

    6. 选择要导出 ICMP MTU 发现规则的位置,在"文件名"框中键入MtuDiscoveryRule,然后单击"打开"。

    7. 单击"下一步", 然后单击"完成"以退出向导。

    8. 当进度指示器显示配置已成功导出的消息时,单击"确定"。

  3. 将 ICMP MTU 访问规则导入每个阵列。为此,请按照以下步骤操作:

    1. 在 ISA 服务器管理 MMC 中,展开要导入 ICMP MTU 访问规则的阵列,然后右键单击防火墙策略

    2. 单击"导入"。

    3. 在"导入向导"中,单击"下一步"。

    4. 单击"浏览",然后找到在步骤 2f 中保存MtuDiscoveryRule文件的文件夹。

    5. 单击MtuDiscovery 规则文件,然后单击"打开"。

    6. 单击"下一步"两次。

    7. 单击“完成”。

    8. 当进度指示器显示配置已成功导入的消息时,单击"确定"。

    9. 单击"应用"。

参考

有关 Microsoft Windows 2000 中 PMTU 发现注册表设置的详细信息,请单击以下文章编号以查看 Microsoft 知识库中的文章:

315669如何强化 TCP/IP 堆栈,防止 Windows 2000 中的拒绝服务攻击有关 Microsoft Windows Server 2003 中 PMTU 发现注册表设置的详细信息,请单击以下文章编号以查看 Microsoft 知识库中的文章:

324270如何强化 TCP/IP 堆栈,防止 Windows 服务器 2003 中的拒绝服务攻击

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×