我读这手册,我有点困惑。这是我不明白的:
When your system tries to resolve a hostname to an IP address or determine the
ostname for an IP address, it refers to the /etc/hosts file before using the
name servers
所以:
1)系统何时尝试解析主机名?据我了解,当数据报的标头指定主机名时,对吗?
2)为什么提到hosts
之前resolv.conf
?
3)主机名解析完成后,系统转向路由表?
答案1
1) 通常情况下,您的系统会使用“resolv.conf”上的 DNS 服务器。如果您访问 www.yahoo.com,您的系统将联系 DNS,DNS 返回该地址的 IP 地址,然后您的系统就知道哪个 IP 地址与 www.yahoo.com 地址相对应。
2)它hosts
在尝试解析地址之前使用,因为hosts
文件用于覆盖您尝试解析的任何地址。即:您可能已经有一个条目,127.0.0.1 localhost
告诉系统如果您尝试联系名为“localhost”的主机,它将使用地址 127.0.0.1 来进行联系,在这种情况下,它是您的 eth0 上的 lopback 接口。
3) 系统通过直接查找hosts
或联系“resolv.conf”中的 DNS 服务器知道主机地址后,它会查看路由表以查看哪些规则解释了如何处理以所获得的 IP 地址为目的地的流量。
例如:假设您的网络上有两台计算机,主机名分别为“Ubuntu-One”和“Ubuntu-Two”,每台计算机可能都会在文件中分配此名称host
:
127.0.0.1 localhost Ubuntu-One
用于计算机的 Ubuntu-One
127.0.0.1 localhost Ubuntu-Two
用于计算机的 Ubuntu-Two
这是自动完成的,这就是您可以在各个终端上解析“localhost”、“Ubuntu-One”和“Ubuntu-Two”的原因。
尝试从 Ubuntu-One ping Ubuntu-Two,Ubuntu-One 将联系您resolv.conf
文件中的 DNS 服务器,服务器会说“我不知道与该地址相关的任何 IP”,您的 PC 将回复“未知主机名”。将此行添加<IPADDRESSFROMUBUNTU-TWO Ubuntu-Two
到hosts
Ubuntu-One 文件中,当您再次尝试 ping 时,系统将在主机文件上看到 Ubuntu-Two 的 IP 地址是 xxxx,然后会检查您的路由表以查看哪条规则适用于该 IP 或 IP 范围,并使用指定的网关(或无网关)联系主机。这就是为什么hosts
以前总是这样resolv.conf
。
答案2
每当您想要连接任何内容时,它至少需要将主机名解析为 IP。它首先使用 /etc/hosts 中的设置,因为它是系统本地的。如果您没有提供它,那么它将从您的 DNS 服务器(在 resolv.conf 中定义)中查找它。