主机名
定义
主机名是管理员分配给某台计算机、用于识别该 TCP/IP 主机的别名,它总是与一个 IP 地址相对应,该地址记录在 Hosts 文件、DNS 数据库或 NetBIOS 名称服务器中[2]。在域名系统体系中,完整主机名由主机名与域名两部分组成,中间以句点分隔,写作完全限定域名(FQDN),例如某台主机名 server1 的机器位于 widgets 子域下,其完全限定域名即包含 server1 在内的整串分层名称[3][4]。
只有最左侧的一段才是相对可分辨名称,也就是通常所说的短主机名,其余各段共同构成所属域[4]。在部分语境中,主机名也被称作节点名,而 NIS 域名与 DNS 域名是彼此独立的命名空间,二者不必一致[3]。
原理
主机名本身不承担寻址功能,网络程序在使用名称通信时必须先将其翻译为 IP 地址,这一任务通常由 getaddrinfo 一类接口完成,早期则由已废弃的 gethostbyname 接口承担[5]。Windows 系统解析主机名时依次检查该名称是否与本地主机名相同、检索由 Hosts 文件填充的解析器缓存、再向配置的 DNS 服务器发出请求,多标签名称还可借助链接本地多播名称解析处理[1]。
在 glibc 中,解析顺序由 nsswitch.conf 的 hosts 配置决定;若输入名称不含句点且设置了 HOSTALIASES 环境变量,系统会先在该别名文件中查找替代名称[5]。不含结尾句点的名称会按域搜索列表依次补全后缀重试,带结尾句点的名称则被当作完整名称直接查询、不再追加后缀[5]。Hosts 文件与仅记录远程主机的 Lmhosts 文件不同,可同时把本地与远程主机名映射到相应 IP 地址[2]。
主机名的构成受语法约束:每一段标签长度为 1 至 63 个字符,含句点的完整主机名不超过 253 个字符,可用字符限于 ASCII 字母、数字和连字符,且不得以连字符开头[5]。DNS 采用分层命名空间,同一主机的短名可以出现在不同域中,因而只在层次结构中唯一,必须依靠完整的 FQDN 才能被正确寻址[4]。
发展历程
早期的计算机名称来自平面 NetBIOS 命名空间,名称依靠网络广播注册,并由主浏览器维护列表,适用于对等的小型 Windows 网络;随着网络规模扩大,广播与简单平面列表很快难以支撑[4]。随后出现的 Windows Internet 名称服务(WINS)把基于 NetBIOS 的计算机名称集中存放在服务器上,使查询可以定向到服务器、名称冲突可以集中仲裁,这一时期「主机名」这一说法开始流行,并与计算机名称交替使用[4]。
WINS 的瓶颈并不在于解析所需的处理能力,而在于为大量计算机维持唯一名称带来的管理负担,网络继续扩张后其承受能力逐渐不足[4]。DNS 以分层命名空间取代平面结构,把名称唯一性的要求限制在单个域内,使 server1 这样的短名可同时存在于不同域中,并由此形成完全限定域名的写法[4]。如今 DNS 已成为把主机名解析为 IP 地址的主流标准,同时也能完成反向解析与邮件服务器定位等任务[1]。
应用
主机名在几乎所有 TCP/IP 环境中使用,比 IP 地址便于记忆,使用 ping 等工具时可直接以名称代替地址[2]。在 域名系统中,主机名既用于正向查询 IP 地址,也用于根据日志中的地址反查名称,还用于定位登录所需的域控制器与全局编录服务器以及投递电子邮件所需的邮件服务器[1]。
在 Linux 等系统上,hostname 命令用于显示或设置当前主机的名称,只有超级用户才能修改,启动时通常读取配置文件中的取值来完成设置[6]。该命令还能输出短格式名称、别名、DNS 域名与 IP 地址,这些名称被许多联网程序用来标识机器,NIS 也使用域名信息[6]。在 DNS 主机命名中,主机名即作为相对可分辨名称使用,附加域层次后构成可供应用程序使用的结构化名称[4]。
局限
主机名只是标识而非地址,脱离可用的解析机制便无法定位主机;若既未配置 DNS,也没有其他解析手段,解析过程会中止并返回错误信息[2]。DNS 服务器自己也未必持有全部记录,需向其他服务器递归查询,多次请求无响应时同样只能以失败告终[2]。
字符集与长度的限制使许多自然语言名称无法直接充当主机名,非 ASCII 名称须经编码转换才可进入 DNS[5]。不同 DNS 实现允许的字符和长度并不一致,也与 NetBIOS 的命名限制不同,跨平台环境中名称可能无法通用[7]。此外,在 DNS 中同一台系统可有多个 FQDN 指向它,但只有一个规范 FQDN 是真正的名称,其余仅为别名,这会给名称识别带来歧义[3]。
参见
参考资料
- 说明名称解析的工作原理 [引用日期2026-10-29]
- [科普中国]-名称解析 [引用日期2026-10-29]
- Host-Identification [引用日期2026-10-29]
- 命名约定 [引用日期2026-10-29]
- hostname [引用日期2026-10-29]
- hostname.1.zh_TW [引用日期2026-10-29]
- dd197495(v=ws [引用日期2026-10-29]