(这篇文章已经变得相当冗长,但希望能为遇到此问题的其他人提供一个尝试方法的总结——从表面上看,这不是一个简单的一刀切的解决方案;在答案中也可以找到其他解决方案或调查途径)。
我在 x64 Server 2008 R1 SP1 服务器上无法获得可靠的共享。
重启后一切正常,但一段时间后(一天之内)共享对 XP 和 Server 2003 服务器不可用。有趣的是,它们对其他 Server 2008 服务器仍然可用。
尝试访问时\\server\share
,Server 2003 立即返回并只向我显示消息“指定的网络名称不再可用”,XP 需要一两分钟才能超时,然后才显示相同的消息。事件日志中似乎没有任何内容表明存在问题。
在过去一两天里,我通过谷歌搜索发现,有以下指责:
- 网络驱动程序不好(Broadcom [我们使用的 HP 服务器就是用的这种驱动程序] 似乎有几次被提及不稳定)... 我已经更新到最新的驱动程序,但没有任何效果(参见参考文献 1 和 2)
- 赛门铁克防病毒软件...我们没有使用它(目前服务器上没有 AV)(参见参考文献 1 和 3)
- 接收窗口自动调整...我已禁用和
netsh int tcp set global autotuninglevel=disabled
(netsh int tcp set global rss=disabled
参见参考文献 4)
这些都没有任何效果。Windows 防火墙目前已被禁用。
由于其他 Server 2008 机器(x32 和 x64)都可以连接,我只能假设有一些新的安全配置不太正确 - 或者存在 AD 问题,我需要跟踪,但不知道从哪里开始。即使有人不知道如何解决,如果有人知道我需要用 Wireshark 查找什么,这也会有所帮助。
编辑... 我打开了 Wireshark 跟踪(仅按目标主机过滤),我看到的是客户端(在本例中为 Server 2003)向 Server 2008 发送了一条 SMB“协商协议请求”消息,但是没有从服务器收到“协商协议响应”。客户端会重试,直到超时。但请注意,服务器正在积极响应会话请求。这是完整的事件序列:
C -> S NBSS Session Request
S -> C NBSS Positive Session Response
C -> S SMB Negotiate Protocol Request
[no response; time passes].
C -> S NBSS Session Request
S -> C NBSS Positive Session Response
C -> S SMB Negotiate Protocol Request
[no response; time passes].
[repeat]
编辑2... 从 Server 2008 客户端对 SMB 连接进行 Wireshark 显示正在发送协商协议响应,但使用 SMBv2:
C -> S NBSS Session Request
S -> C NBSS Positive Session Response
C -> S SMB Negotiate Protocol Request
S -> C SMB2 NegotiateProtocol Response
C -> S SMB2 SessionSetup Request
S -> C SMB2 SessionSetup Response
[then the conversation contines, bringing the share back]
我将尝试在 2k8 服务器上禁用 SMBv2(按照petri.co.il 上的这些说明) 看看是否有帮助 - 然后应该强制服务器在任何地方使用 SMB1。
编辑3...我还发现Microsoft Technet 论坛上的这篇文章(“Windows 2008 不断断开共享 + Outlook 2007 不断与 Exchange 2007 断开连接”[原文如此]),其他人建议检查 TCP Offload Chimney 配置。不过目前禁用了 SMB2(参见上面的 EDIT2),目前情况似乎还好 - 上周五禁用 SMB2 后,共享尚未消失。快速谷歌搜索发现其他人(MS Technet 论坛“Server 2008 共享上的文件打开问题。”)发现禁用 SMB2 也是一个解决方案。我会让这个问题再持续几天,然后再自行回答并关闭这个问题。
参考...
(1)微软网络团队 -各种客户端与 Windows Server 2008 服务器之间的文件共享连接不稳定
(2)424help.com -Windows 2008 Server网络连接问题
(3)赛门铁克 AVForums -MR3 锁定 Server 2008 文件共享
(4)新闻组 -Server 2008 R2 文件共享访问在高负载下失败(也在各种网络论坛上出现,例如 techarena、eggheadcafe 等)
答案1
在捕获中,将数据包长度添加到显示的列中,并按该列排序。您是否有任何大于正常以太网帧的帧?(我认为是 1514)。如果可能,您应该从服务器进行此捕获。或者在镜像服务器交换机端口的交换机端口上进行捕获。
答案2
自从禁用 SMB2 以来已经过去了将近一周的时间(请参阅问题中的 EDIT2),从那时起共享一直很稳定。作为参考,服务器配置如下:
- 最新网络驱动程序(适用于 HP NC373i)
- 接收窗口自动调节已禁用(详情请参阅问题)
- SMB2 已禁用(通过注册表)
我可能会重新启用接收窗口自动调整,但由于这是一个活动系统,这可能不会很快发生:我现在不去管它,因为如果没有坏,就不要修理它。
如果其他人遇到类似的问题,解决方案可能会有所不同(请参阅该问题的其余部分) - 但禁用 SMB2 最终解决了我的情况。
另外,通过快速谷歌搜索似乎可以发现通过禁用 SMB2 可以解决的其他问题,包括(简短的标题直接来自 MSDN KB):
- 知识库 974103 -如果路径包含连接点,则无法访问基于 Windows Server 2008 或 Vista 的计算机上托管的共享文件或文件夹
- KB 937082 -您无法配置发送到基于 Windows Vista 的文件服务器的最大并发 SMB 请求数
- 知识库 980044 -无法访问运行 Windows Server 2008 或 Windows Vista 的计算机上的共享文件夹中新复制的文件
- KB 950836 -在运行 Windows Server 2008 或 Windows Vista 的计算机上使用 SMB 2.0 协议执行与网络相关的操作(如 ADMT 迁移)时遇到性能不佳的情况
希望这些对其他人有帮助:-)
编辑 - 2014 年 5 月... 多年后。微软最近发布了一篇知识库文章如果使用 SMB v1 协议访问共享文件,Windows 会停止响应针对 Server 2008,文档中记录了问题可能“由于 Mrxsmb10.sys 驱动程序死锁而发生”,并提供了修补程序。问题尚未在这里重新出现,因此我不会应用 - 但是细节听起来像我上面的经验。如果它对其他人有用,我会将其包含在答案中。