欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

为什么无法用“\\localhost”访问本机的共享?

 其实碰到这个问题已经很久了──在运行对话框里输入“\\localhost”并回车,Windows 2000/XP居然会提示网络重名,并且居然建议我们更改计算机名,如下图所示。相反如果输入“127.0.0.1并回车,则可以顺利访问本机的共享文件夹。

提示 对于Windows NT,则会出现找不到网络路径的错误信息。

工作组环境网络访问需要受到多种因素的制约。从TCP/IP协议层次的角度来看,从下到上依次是物理底层(网线网卡等)、网络协议|服务|端口、用户身份验证、安全策略、和共享资源的权限等。

从故障现象来看,可以进行名字解析,此时尚未进行用户身份验证(安全策略和资源权限无从谈起),所以问题应该与“网络协议|服务|端口”等因素有关。只是“网络重名”这个故障现象着实“妖异”得紧……

 

通过查阅KB254210,总算知道了原因,由于该KB写得相对比较粗略,所以这里我特地撰写本帖,以作为该KB的补充读物:

 

大家知道,从Windows 2000开始,Windows同时采用以下两套相对独立的机制,来支持Microsoft文件和打印机服务,如下图所示。

 

 

1)传统的NetBTNetBIOS over TCP/IP),走137/UDP138/UDP139/TCP端口。

2TCP/IP上的SMB直接承载(Direct Hosting of SMB Over TCP/IP),走445/TCP端口。

也就是说“Microsoft文件和打印机服务”现在同时支持Windows SocketsNetBIOS API。在默认情况下,Windows会同时尝试这两种机制。客户机和文件服务器建立新连接的时候,两套机制进行公平竞争,谁先做出响应就使用谁。

 

那么\\localhost应该走哪一条路呢?先做一个实验帮助理解:

1)打开命令提示符窗口,运行以下命令:

net config workstation

2)命令结果将类似下图所示。

图中的“NetBT_Tcpip_{C5665A07-7119-4A2B-B970-02C01FD663C8} (000C29C1E329)”表明,NetBT绑定到具体的物理网卡(但是不包括Loopback接口),其中的{C5665A07-7119-4A2B-B970-02C01FD663C8}表示该网卡的GUID(000C29C1E329)则是该网卡的MAC地址。

图中的“NetbiosSmb (000000000000)”则表明,“SMB直接承载”绑定到所有网络接口(ADDR_ANY),也包括Loopback接口。

 

从这个实验可以得知,\\localhost只能走第二条路“SMB直接承载”,而不能走NetBT,这就是为什么在NT上会出现找不到网络路径的原因(NT不支持“SMB直接承载”)。

 

\\localhost走“SMB直接承载”的大致过程是这样的:

1)将localhost解析为127.0.0.1

2)顺利建立TCP连接。

3)系统会验证目标计算机(就是本机)的计算机名是否为“localhost”,而本机的计算机名并不是“localhost”,所以验证失败,系统会认为在网络中存在一台重名计算机而报错。

 

这就是\\localhost为什么会失败的原理,原因在于系统会验证目标计算机的计算机名。我们还可以“构造”以下的案例来证实这个验证机制:

1)假设文件服务器的计算机名为TestIP地址是192.168.0.1

2)在客户机的hosts文件里添加一条错误的名字解析记录“192.168.0.1 NoTest”。

3)在客户机的“运行”对话框里输入\\NoTest并回车,虽然NoTest被解析为192.168.0.1,客户机能够和Test计算机建立连接,但是系统接下来会发现目标计算机的计算机并不是“NoTest”,而是“Test”,所以会报错──错误信息正是我们所预料的──“由于网络上有重名,没有连接”。

 

参考资料

有以下参考资料可以供您参考:

1)微软知识库文章KB254210:这是本帖的主要参考资料,其URL为:

http://support.microsoft.com/kb/254210

2Windows 2000 Server Resource Kit

http://www.microsoft.com/resources/documentation/Windows/2000/server/reskit/en-us/Default.asp?url=/resources/documentation/Windows/2000/server/reskit/en-us/cnet/cnbc_imp_wcug.asp

3)我的webcast《工作组环境里的网络访问疑难解答》

http://www.microsoft.com/china/technet/webcasts/ondemand/episode.aspx?newsID=msft032205vx

已发表 2005年8月2日 2:58 作者 ahpeng

评论通知

如果您想在帖子更新时接到邮件通知,请先登录。这里

订阅帖子评论使用 RSS

评论

2005年8月2日 9:58 by ahpeng

# re: 奇怪,为什么无法用“\\localhost”访问本机??

好文,学习中...

说说您的看法?

(必填) 
必填 
(必填)