为什么 Mac OS X(10.6)Finder 无法连接到 Windows 计算机?

为什么 Mac OS X(10.6)Finder 无法连接到 Windows 计算机?

我们的 Windows 计算机中有一台 Mac(MacBook Pro Unibody),它连接到“服务器”(实际上是一台运行 Windows XP Pro 的戴尔)来访问文档。这在大多数情况下都运行正常,但有时从睡眠状态唤醒后,它无法连接到任何网络上的 Windows 计算机。

尝试通过 Finder 的网络浏览进行连接时,或使用“连接到服务器”菜单(通过名称或 IP)时,控制台应用程序中没有错误(甚至没有任何消息)。

我尝试过在 Finder 上“重新启动”,切换文件共享,禁用并重新启用 Airport,但没有什么能让 Mac 再次连接,直到我重新启动它!

其他计算机可以连接到机器,因此肯定是 Mac 的问题。

有没有人找到解决方法?有没有办法重新启动 samba 客户端?

编辑:

笔记本电脑确实在使用无线,但所有网络连接均正常,Mac 可以 ping 其尝试连接的 XP 主机并正常浏览互联网。我尝试在“连接到服务器”菜单项中使用主机的 IP 地址;上面已经提到了这一点。

答案1

[编辑:删除了您在编辑中回答的问题,提出了新的问题,并做出了澄清。]

  1. 已挂载的 SMB 共享(或同名文件夹)是否仍显示在/Volumes
  2. 命令报告了什么mount
  3. umount /Volumes/<name of share>了什么吗?(​​请注意,是“umount”,而不是“unmount”)。

请注意,Mac OS X 的控制台日志通常仅报告以当前用户身份运行的应用程序的消息。以 root(或“nobody”或任何默认受限系统帐户,如“www”)身份运行的软件通常记录到 /var/log/system.log 或其他日志中。在 10.6 中,内核消息(很可能包括文件系统消息)转到 /var/log/kernel.log,因此也请查看那里。如果您点击“显示日志列表”,控制台应用程序可让您浏览所有这些日志。Mac OS X 的 SMB 客户端(我似乎记得是 Apple 自己的实现,而不是基于 Samba 的,源自 Boris Popov 的 FreeBSD smbfs,它不是基于 Samba)可能不以当前用户身份运行,因此它可能不会记录到控制台日志中。查看 system.log 和 kernel.log。

答案2

我强烈建议你检查一下TCP ACK 修复此处。我已在 Mac OS X 客户端在 Windows 环境中阻塞的许多情况下应用了它并且效果很好。这里有详细解释。

简而言之,此操作的作用是:Mac OS X TCP 堆栈处理 TCP ACK 的方式存在不匹配错误,这基本上会导致数据包丢失。旋转的沙滩球?连接速度慢?诸如此类。这样的修复不会有损坏数据的风险,因为它会改变 TCP 数据包发送/接收的行为方式。因此,此设置不会使用 Nagle 算法的有缺陷的实现,而是禁用该算法,这样数据包就可以直接发送/接收而无需等待

现在开始,从终端检查:

sysctl net.inet.tcp.delayed_ack

它应该是 4 个数字之一:

  • 0= 每个数据包后响应(关闭)
  • 1= 总是采用延迟 ACK,6 个数据包可以获得 1 个 ACK
  • 2= 第二个数据包后立即确认,每个 ACK​​ 2 个数据包(兼容模式)
  • 3= 应自动检测何时采用延迟确认,每个确认 4 个数据包。(默认)

99% 的情况下,Mac 会被设置为 option 3,而这正是 Mac 在连接到非 Mac 服务器时无法正常工作的原因。可以尝试的两个选项是0& 2。我现在默认使用 0 并且没有遇到任何问题。

这会将设置设为delayed_ack0:

sudo sysctl -w net.inet.tcp.delayed_ack=0

卸载文件共享并重新连接。情况应该会好转。

现在如果您想在重启时保留该设置,您需要创建一个sysctl.conf

sudo nano /etc/sysctl.conf

并将此行粘贴到其中:

net.inet.tcp.delayed_ack=0

如果你想测试你是否做对了,只需重启机器并sysctl net.inet.tcp.delayed_ack再次执行此操作。应该是0

希望这可以帮助!

相关内容