本地配置 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 緩存才能生效。