我们的 Windows 计算机中有一台 Mac(MacBook Pro Unibody),它连接到“服务器”(实际上是一台运行 Windows XP Pro 的戴尔)来访问文档。这在大多数情况下都运行正常,但有时从睡眠状态唤醒后,它无法连接到任何网络上的 Windows 计算机。
尝试通过 Finder 的网络浏览进行连接时,或使用“连接到服务器”菜单(通过名称或 IP)时,控制台应用程序中没有错误(甚至没有任何消息)。
我尝试过在 Finder 上“重新启动”,切换文件共享,禁用并重新启用 Airport,但没有什么能让 Mac 再次连接,直到我重新启动它!
其他计算机可以连接到机器,因此肯定是 Mac 的问题。
有没有人找到解决方法?有没有办法重新启动 samba 客户端?
编辑:
笔记本电脑确实在使用无线,但所有网络连接均正常,Mac 可以 ping 其尝试连接的 XP 主机并正常浏览互联网。我尝试在“连接到服务器”菜单项中使用主机的 IP 地址;上面已经提到了这一点。
答案1
[编辑:删除了您在编辑中回答的问题,提出了新的问题,并做出了澄清。]
- 已挂载的 SMB 共享(或同名文件夹)是否仍显示在
/Volumes
? - 命令报告了什么
mount
? - 做
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_ack
0:
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
。
希望这可以帮助!