为什么通过 PC 名称访问共享文件夹与通过 IP 地址访问无关?

为什么通过 PC 名称访问共享文件夹与通过 IP 地址访问无关?

为什么当我使用 PC 的名称浏览 Windows 中的共享文件夹时……

\\pc-name\c\folder

...并提供凭证,然后再次浏览,但这次使用 IP 地址...

\\_ipaddress_\c\folder

...我需要再次输入凭据,即使第一个文件夹仍然可以访问文件?

答案1

存储凭证的层不知道主机的 IP 地址 - 它只获得您输入的名称,并只以该名称存储凭证。它不会自行进行任何地址查找。


只有微软知道确切地为什么会这样。然而,可能有几个原因:

  • IP 地址可能是动态的。在一个简单的工作组 LAN 上,所有名称都通过 NetBIOS 或 LLMNR 进行解析,您可能甚至不会注意到一些廉价路由器会忘记以前的租约并每次都给您不同的 IP 地址。因此,上周属于主机 A 的地址现在可能属于主机 B,并且具有不同的凭据。

  • SMB 不仅限于 IPv4。同一个文件服务器今天可以通过 IPv4 访问,明天则可以通过 IPv6 访问(在后一种情况下,服务器将同时提供两个地址)。将凭据存储在主机名下可使事情变得更容易。

    SMB 实际上早于IP 在 LAN 上的广泛使用(它大约是在 IPv4 诞生的同时创建的)。在 Windows NT 4.x 时代,同一个文件服务器可能可以通过 IPv4、NetWare 的 IPX 和/或 MAC 级“NetBEUI”访问。(据我所知,在某些情况下,甚至不是可能的仅通过服务器地址来访问服务器(您必须使用名称)。

  • 基于 NetBIOS 的 SMBv1 支持“虚拟托管”,即客户端始终发送一个数据包,指示哪个主机姓名它想要访问。(对于某些 LAN 协议来说,这可能是强制性的,但无论如何仍保留在 IPv4/TCP 中。)

    从理论上讲,NetBIOS 会话协议功能可以让同一系统充当不同的服务器,根据您用于访问它的名称使用不同的凭据,我个人怀疑它可能实际上被协议网关使用,例如允许仅 IPv4 的客户端访问仅 IPX 的服务器,反之亦然。网关在两端都只有一个地址,并会根据名称改变其行为,就像现在的 HTTP“反向代理”一样。

    (SMBv3 支持一些相似的,并且我了解到 Azure Cloud 实际上使用依赖于它的负载均衡器。)


最后,它类似于 HTTP vhosts 和 cookies。虽然浏览器会存储一个表明您已登录的 cookie https://superuser.com,但如果您访问 ,它不会将该 cookie 泄露出去https://151.101.1.69

相关内容