本地配置 hosts
文件和 DNS 解析密切相关,它们都涉及到将域名解析为 IP 地址的过程,但它们的作用机制和优先级有所不同。下面详细讲解 hosts
文件的作用、DNS 解析的流程,以及它们之间的关系。
1. 什么是 hosts
文件?
hosts
文件是一个本地配置文件,它用于手动指定域名与 IP 地址的对应关系,类似于一个本地 DNS 解析表。
hosts
文件的特点
- 是操作系统本地的静态域名解析文件。
- 具有 最高优先级,比 DNS 服务器解析优先执行。
- 仅对本机生效,无法影响网络中的其他设备。
hosts
文件的默认路径
不同操作系统 hosts
文件的路径如下:
- Windows:
C:\Windows\System32\drivers\etc\hosts
- Linux / macOS:
/etc/hosts
示例 hosts
文件
127.0.0.1 localhost
192.168.1.100 test.local
8.8.8.8 google.com
作用
- 访问
localhost
直接解析到127.0.0.1
(本机)。 - 访问
test.local
时,解析到192.168.1.100
。 - 访问
google.com
时,解析到8.8.8.8
,即强制指定 IP,而不是让系统查询外部 DNS。
2. 什么是 DNS 解析?
DNS(Domain Name System,域名系统)是用于将域名解析为 IP 地址的网络服务。它是一个层级分布式系统,包含多个解析步骤。
DNS 解析流程
当你在浏览器或终端访问一个域名(如 example.com
)时,操作系统会按照以下步骤进行解析:
浏览器缓存(Browser DNS Cache) 浏览器会缓存最近解析的 域名-IP 对应关系,减少重复的 DNS 查询,加快访问速度。
优先级
:如果浏览器缓存中有该域名的解析记录,则不会继续查询 hosts 或 DNS 服务器。 有效期(TTL,Time To Live):浏览器的缓存时间通常较短,如 Chrome 可能在几分钟后自动过期。👉 如何清除浏览器缓存? Chrome:访问 chrome://net-internals/#dns,点击 Clear host cache。 Firefox:访问 about:networking#dns,点击 Clear DNS Cache。
检查
hosts
文件(本地解析,优先级高于 DNS 服务器查询)。- 如果
hosts
文件中已有该域名的映射,则直接返回对应的 IP 地址,结束解析过程。
- 如果
查询本地 DNS 缓存(避免重复查询,提高解析速度)。
- 系统会检查本机 DNS 缓存(Windows 可用
ipconfig /displaydns
查看)。 - 如果缓存命中,则直接使用缓存的 IP。
- 系统会检查本机 DNS 缓存(Windows 可用
请求本地 DNS 服务器(通常是 ISP 提供的)。
- 若
hosts
文件和本地缓存中都没有找到,操作系统会向配置的 DNS 服务器(如8.8.8.8
、114.114.114.114
)发起查询。
- 若
DNS 服务器递归查询:
- 若本地 DNS 服务器无该域名的解析记录,则逐级向上级 DNS 服务器查询,直到获取 IP 地址。
- 例如:
- 先查根 DNS 服务器 (
.
) - 根 DNS 服务器返回
.com
顶级域名服务器(TLD) .com
服务器返回example.com
的权威 DNS 服务器example.com
服务器返回最终 IP 地址
- 先查根 DNS 服务器 (
DNS 解析结果返回客户端:
- 解析完成后,系统将 IP 地址返回给应用程序,并缓存该解析结果。
3. hosts
文件与 DNS 解析的关系
hosts
文件 vs. DNS 解析
hosts 文件 | DNS 服务器解析 | |
---|---|---|
优先级 | 优先级高于 DNS,先查本地 hosts | hosts 解析失败后才会请求 DNS |
生效范围 | 仅作用于本机,不影响其他设备 | 适用于整个网络或互联网 |
维护成本 | 需手动维护,适合临时解析 | 自动更新,适合长期使用 |
适用场景 | 开发调试、屏蔽特定网站、内网解析 | 互联网访问、动态解析 |
解析过程示例
假设 hosts
文件中有以下记录:
192.168.1.100 example.com
当访问 example.com
时:
- 系统先查
hosts
文件,发现匹配的192.168.1.100
,直接返回该 IP。 - 不会进行 DNS 查询,即使
example.com
的真实 IP 不是192.168.1.100
,也不会去 DNS 服务器获取正确的 IP。
如果 hosts
文件中没有 example.com
:
- 系统会查询 本地 DNS 缓存,若缓存命中,则返回缓存的 IP。
- 否则,系统会向 配置的 DNS 服务器 发送查询请求,获取最终的 IP 地址。
4. hosts
文件的应用场景
1. 本地开发和测试
将测试域名指向本机:
127.0.0.1 myproject.local
在浏览器输入
myproject.local
,相当于访问127.0.0.1
,方便调试。将测试环境域名指向特定服务器:
192.168.1.50 test.example.com
让
test.example.com
解析到内网服务器,而不是公网服务器。
2. 跳过 DNS 解析
- 加速访问某些网站(如果知道 IP,可以直接指定):
这样访问203.208.39.99 www.google.com
www.google.com
时,不再查询 DNS,而是直接访问203.208.39.99
。
3. 屏蔽特定网站
- 通过
hosts
屏蔽广告、恶意网站:
这样127.0.0.1 ads.example.com 127.0.0.1 tracking.example.com
ads.example.com
和tracking.example.com
都会解析到127.0.0.1
,阻止访问。
4. 解决 DNS 解析错误
- 如果 ISP 提供的 DNS 解析错误,可以手动配置:
8.8.8.8 example.com
5. 修改 hosts
文件的注意事项
Windows
- 以管理员权限打开
hosts
文件:- 在搜索栏输入
cmd
,右键“以管理员身份运行”。 - 使用
notepad
编辑hosts
:notepad C:\Windows\System32\drivers\etc\hosts
- 修改后保存,可能需要重启网络或清除 DNS 缓存:
ipconfig /flushdns
- 在搜索栏输入
Linux / macOS
- 使用
sudo
编辑hosts
文件:sudo nano /etc/hosts
- 保存后刷新 DNS 缓存:
sudo dscacheutil -flushcache # macOS sudo systemctl restart nscd # Linux(如果使用 nscd)
总结
hosts
文件是本地的静态 DNS 解析表,优先级高于 DNS 服务器。- DNS 解析是一个层级查询过程,如果
hosts
解析失败,系统才会查询 DNS。 hosts
适用于本地开发、临时调试、屏蔽网站,但不适合长期维护大量域名。- 修改
hosts
后,可能需要清除 DNS 缓存才能生效。