是的,没有。有两个不同的东西称为主机名。
“内部”主机名基本上是内核保留的字符串。这是hostname
命令(或gethostname()
调用)返回的值,在系统(*)中是唯一的。
通常在程序要为其运行的系统输出一些标识符时使用。例如,\h
在Bash的PS1
扩展名中将扩展为主机名。同样,syslog样式的日志文件还包括日志条目中的主机名。
(*尽管正如Stephen Kitt所说,名称空间可用于在同一系统上向进程显示不同的主机名。这主要用于容器,这些容器试图像它们是不同的系统一样工作。)
然后还有其他系统用来查找其他IP地址的DNS名称。可能有多个DNS名称指向同一IP地址,因此也指向同一主机。
内部主机名和DNS名称不必相同。假设有人决定使用IP地址呼叫orange
(*)网络服务器192.0.2.9
。它可以服务于两个不同的域,并且DNS将被设置为具有www.example.org
和www.example.com
都指向192.0.2.9
,而系统的内部主机名可能是orange.example.org
或orange
。在这种情况下,DNS设置通常还会对指向该名称的点进行反向查找,但是没有什么可强制执行的。192.0.2.9
orange.example.org
(*因为他们喜欢用水果来命名服务器。有人可能会使用webserver1
诸如此类的名称,但要点是,它不需要以实际域之一来命名。)
除此之外,虚拟主机还要求浏览器告诉Web服务器它试图访问的站点的名称。否则,服务器将不知道客户端尝试访问哪个虚拟站点。HTTP具有该Host
标头。
混淆DNS名称和内部主机名之间区别的是mDNS协议
(例如,由avahi守护程序实现)和其他发现协议。mDNS使主机可以查询同一网络上的所有其他主机以获取名称信息,并使自己的主机名在其他主机上可见,而无需在DNS中进行显式设置。