hostname
当我在计算机上配置时,我可以像这样查找:
$ hostname
example
然后从同一 LAN 上的另一台计算机 ping 或 ssh:
$ ssh example
user@example's password:
我的另一台计算机在哪里查找此主机名的地址?前一台计算机是否以某种方式将其注册到路由器?第二台计算机是否只是询问 LAN 上的每个 IP 地址“您是吗example
?”?
example
即使我拔掉 ,第二台计算机似乎也知道 对应的 IP 地址example
。该信息是否缓存在第二台计算机中?或者是否以hostnamectl
某种方式向路由器注册了此主机名。
如果我现在将这些计算机插入另一个网络,它们还能通过这些主机名互相找到吗?
它是怎么运行的?
答案1
有几种方法:
零配置网络使用 IP 多播协议(RFC 1112) 将 UDP 数据包发送到特殊地址,LAN 上的许多设备会将这些地址视为向它们发送的消息。因此,无需询问网络上的每个 IP 地址。它们还使用保留的 MAC 地址将数据包转发到交换机上的每个端口。
这动态主机配置协议(DHCP)可能涉及:
连接特定的 DNS 后缀、DHCP 选项 15(RFC 2132,3.17) 为客户端提供了一个域名,该域名将作为后缀添加到这些非 FQDN 查询中。因此,您的DNS 查询
example
可能会example.example.com
使用该域名。可以使用以下方式自动更新 DNSDHCP 客户端 FQDN 选项(RFC 4702)。
NetBIOS。参见 Robert L Bogue 的例子:NetBIOS 名称解析的真正工作原理。
对等名称解析协议(PNRP)。这是一项 Microsoft 技术,需要 IPv6。
答案2
在客户端计算机上,运行“grep hosts /etc/nsswitch.conf”
这将告诉您系统将搜索主机名的位置和顺序。通常,您会看到类似以下内容:
主机:文件 DNS
这意味着它正在查看 /etc/hosts 文件,然后查询 dns。如果它改为说:
主机:dns 文件
然后它将查看 DNS,然后查看本地 /etc/hosts 文件。
此条目还有其他可能性,因此请查看并看看您能找到什么!