这个问题是针对家庭网络的。
Windows、Linux 和 MacOS 计算机都有主机名。此外,MacOS 计算机还有计算机名和本地主机名。当设备连接到家庭网络时,会创建一个可能具有不同名称的 DHCP 条目。
所有这些名称可能都不同,我还没有发现它们中的大多数有多大用处。在 MacOS 上,除了从命令行查询之外,计算机名称似乎很少或根本没有用处。Bonjour 显然使用本地主机名来识别计算机。缺省情况下,未设置主机名。如果设置,则 hostname 命令返回该名称,但如果未设置,则返回本地主机名。
在Linux上,除了通过执行hostname命令来识别计算机之外,主机名似乎没有什么用处。在 Windows 上,主机名返回一个值,但我没有发现它有任何其他用途。也许 Wins 服务器中有什么东西?
我不确定 DHCP 从哪里获取它使用的名称。对于我的 MacOS 计算机,它不使用任何计算机名称、本地主机名或主机名。对于我的 Linux 计算机,DHCP 名称与计算机的主机名相同;这是偶然的,还是 Linux 提供了这个名字?我在 Linux 计算机上更改了主机名,然后重新启动它,但 DHCP 名称没有更改。
我只能通过在 /etc/hosts 文件中添加条目来将计算机或主机名映射到静态 IP 地址,因此一般来说,所有这些名称似乎没什么用处。
那么,所有这些名称的真正用途是什么?
是的,它曾经使用 WINS,类似地,在没有 WINS 服务器的地方使用 NetBIOS 本地名称发现,以便您可以
ping Jimputer
通过家庭网络访问您的计算机。它就像 macOS 中的 Bonjour。事实上,Windows 和 Linux 也使用与 macOS 上相同的 Bonjour 主机名——Linux上的名称为 Avahi,或更广泛地说是通用 mDNS。如今,WINS 和 NetBIOS NBNS已不再是问题- 如果您尝试访问 Windows 中的本地主机名,它将首先通过 Bonjour 进行解析。
但请注意,Bonjour/mDNS 有两件事:它执行主机名查找,但它也执行服务发现。前者使用短“主机名”,但后者(旨在在“网络”列表中显示您的计算机)使用长“计算机名称”,其中可能包含任何特殊字符,因为它不意味着要输入任何地方。
Bonjour 的“服务发现”部分明确是为了模仿 AppleTalk(Mac OS Classic)中的网络工作方式,其中不存在主机名(也不存在 SSH、Ping 或终端)。网络打印、文件服务器访问,一切都通过您从列表中选择的自由格式服务名称进行工作,因此“计算机名称”是 Mac 在 AppleTalk 网络中的主要标识。主机名仅出现在具有 TCP/IP 的 Mac 和基于 Unix 的 OSX 上。
它通常是从系统主机名提供的,是的。Windows 总是这样做;在 Linux 上,这取决于您使用 100 个不同 DHCP 客户端中的哪一个,但通常默认使用系统主机名。
虽然在小型 LAN 中,主机名通常通过 DHCP 到达本地 DNS,但这并不是唯一的方法 - 在具有 Active Directory 的大型网络中,Windows 还会将其系统主机名的 DNS“更新”直接发送到 AD DNS 服务器。
另请注意,默认情况下,macOS 也会从DHCP 获取主机名(如果租约提供主机名)。(您经常看到这里的人们对为什么他们有
[email protected]
shell 提示符感到困惑。)所以现在您还有两个参数:一个是永久的、手动配置的主机名(在 Linux 上的 /etc/hostname 中),另一个是临时的、当前活动的主机名(在hostname
Linux 上的命令中)。这就是总共三个的方式:
最后,同一系统主机名也是各种第三方功能通常使用的名称,因为程序可以轻松访问它(传统上有一个非常简单的 API 调用来检索它)。例如,它充当 Dropbox、Syncthing、Steam 或 Spotify 中的默认设备标签;即使操作系统不一定经常使用它,其他软件也有很多用途。
简而言之,这是一个混乱的遗留包袱,来自长期不兼容的名称解析和服务发现协议,具有不同的规则,如允许的字符集和长度限制。
因此,根据您提出问题所使用的协议,主机名可能会有所不同。
它从未融合在一个广泛兼容的系统上,而且可能永远不会。每个操作系统都有不同的策略来解决这种混乱问题,例如尝试根据另一个名称生成一个名称,或者让您单独自定义每个名称,这只会在跨平台工作时变得更加复杂。