该问题特定于家庭网络。
Windows、Linux 和 MacOS 计算机都有主机名。此外,MacOS 计算机有计算机名和本地主机名。当设备连接到家庭网络时,会创建一个可能具有不同名称的 DHCP 条目。
所有这些名称可能都不同,而且我发现它们大多数都没什么用处。在 MacOS 上,除了从命令行查询外,计算机名称似乎几乎没有用处。Bonjour 显然使用本地主机名来识别计算机。默认情况下,主机名未设置。如果设置,hostname 命令将返回该名称,但如果未设置,则返回本地主机名。
在 Linux 上,主机名似乎除了通过执行 hostname 命令来识别计算机之外没什么用处。在 Windows 上,hostname 返回一个值,但我没有发现它有任何其他用途。也许是 Wins 服务器中的某个东西?
我不确定 DHCP 从哪里获得它使用的名称。对于我的 MacOS 计算机,它不使用任何计算机名称、本地主机名或主机名。对于我的 Linux 计算机,DHCP 名称与计算机的主机名相同;这是偶然的,还是 Linux 提供了该名称?我在 Linux 计算机上更改了主机名,然后重新启动了它,但 DHCP 名称没有改变。
我只能通过在 /etc/hosts 文件中添加条目将计算机或主机名映射到静态 IP 地址,因此一般来说,所有这些名称似乎都没什么用。
那么,这些名字的真实用途是什么呢?
答案1
在 Linux 上,主机名似乎除了通过执行 hostname 命令来识别计算机之外没什么用处。在 Windows 上,hostname 返回一个值,但我没有发现它有任何其他用途。也许是 Wins 服务器中的某个东西?
是的,它曾经使用 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 和基于 Unix 的 OSX 的 Mac 上。
我不确定 DHCP 从哪里获得它使用的名称。对于我的 MacOS 计算机,它不使用任何计算机名称、本地主机名或主机名。对于我的 Linux 计算机,DHCP 名称与计算机的主机名相同;这是偶然的,还是 Linux 提供了该名称?
是的,它通常由系统主机名提供。Windows 总是如此;在 Linux 上,这取决于您使用的 100 个不同的 DHCP 客户端中的哪一个,但一般来说默认使用系统主机名。
虽然在小型 LAN 中主机名通常通过 DHCP 到达本地 DNS,但这并不是唯一方法 – 在具有 Active Directory 的大型网络中,Windows 还会将其系统主机名的 DNS“更新”直接发送到 AD DNS 服务器。
默认情况下,未设置主机名。如果设置,hostname 命令将返回该名称,但如果未设置,则返回本地主机名。
另请注意,默认情况下,macOS 也会采用主机名从DHCP(如果租约提供了)。(您经常会看到这里的人们困惑于为什么他们[email protected]
的 shell 提示符是 DHCP。)因此,现在您还有两个参数:一个是永久的、手动配置的主机名(在 Linux 上的 /etc/hostname 中),另一个是临时的、当前活动的主机名(在hostname
Linux 上的命令中)。
这就是总共有三个的原因:
苹果系统 | Linux(hostnamectl) | 用法 |
---|---|---|
“主机名” | “临时主机名” | 当前实际活动的系统主机名(从静态主机名初始化,或从 DHCP 覆盖)。这是各种程序和服务在调用“gethostname()”时检索的内容。 |
“本地主机名” | “静态主机名” | 如果没有其他主机名覆盖该主机名,则手动设置主机名作为系统主机名。应用程序不直接使用该主机名。 |
“计算机名称” | “漂亮的主机名” | 自由格式的“显示名称”显示在网络发现列表 (Bonjour/Avahi) 中;一般不被其他程序使用。 |
最后,由于程序可以轻松访问相同的系统主机名(传统上,只需一个非常简单的 API 调用即可检索它),因此各种第三方功能通常也会使用相同的系统主机名。例如,它充当 Dropbox、Syncthing、Steam 或 Spotify 中的默认设备标签;即使操作系统不一定经常使用它,其他软件也会发现很多用途。
答案2
简短的回答是,它是长期以来不兼容的名称解析和服务发现协议遗留下来的一堆乱七八糟的包袱,这些协议有不同的规则,例如允许的字符集和长度限制。
因此,主机名可能会因您提出问题所使用的协议而有所不同。
它从未融合到一个广泛兼容的系统上,而且可能永远也不会融合。每个操作系统都有不同的策略来处理这种混乱局面 - 例如尝试根据另一个名称生成一个名称,或者让您分别自定义每个名称 - 这只会在跨平台工作时增加复杂性。