DNS 究竟查了啥?從輸入網址到打開頁面發生了什么
你在瀏覽器里敲下 www.baidu.com,頁面“嗖”地一下打開了,看起來輕松又理所當然。可其實在這短短一兩秒里,背后發生了一整套“網絡魔法”。
一、一切的開始:你按下了回車
假設你打開瀏覽器,輸入 www.example.com,然后按下了回車。
這個時候,操作系統第一反應不是“去訪問網頁”,而是:
“我得先知道這個域名對應的 IP 地址 才行。”
畢竟瀏覽器、系統和網卡這些底層組件只認 IP 地址,不認人類可讀的域名。
于是它啟動了第一步流程:DNS 查詢。
二、DNS 查詢到底查了啥?
DNS,全稱 Domain Name System,簡單來說就是把人類記得住的網址翻譯成計算機能理解的 IP 地址的一個系統。查詢步驟大致如下:
(1) 查本地緩存
系統先看看:我是不是最近剛查過 www.example.com?如果緩存里就有 IP 地址,直接拿來用,省事。
(2) 查瀏覽器或操作系統緩存
比如 Chrome、Firefox 都會自己維護一個 DNS 緩存池,避免每次都打 DNS 請求。
(3) 查 hosts 文件
如果你電腦里手動配了 hosts 文件(比如改過 127.0.0.1 www.baidu.com 來屏蔽廣告),系統會優先使用這個文件中的解析。
(4) 問“本地 DNS 服務器”
前幾步都沒找到,那就得發一個 DNS 請求,去問網絡提供商的 DNS 服務器(通常是你路由器的上級,或者你手動設的如 8.8.8.8)。
這一步是關鍵:
“嘿,我要訪問 www.example.com,請問它的 IP 地址是多少?”
三、DNS 是怎么回答你的?
如果你的本地 DNS 服務器(比如電信的)也不知道答案,它就會幫你一步步問上去:
根 DNS(.) → 頂級域名服務器(.com) → 權威 DNS(example.com) → 最終 IP
這叫做 遞歸查詢。最終拿到一條信息,比如:
www.example.com -> 93.184.216.34
TTL: 300 秒
意思是:這個域名對應的 IP 是 93.184.216.34,緩存有效期是 300 秒。
拿到這個 IP 后,DNS 查詢這步就結束了。
四、有了 IP,接下來發生了什么?
拿到 IP 地址后,瀏覽器才真正開始進入訪問流程。接下來是:
1. 建立 TCP 連接
瀏覽器發起 TCP 三次握手,準備和目標 IP 建立連接。一般是連到對方服務器的 80(HTTP)或 443(HTTPS)端口。
2. TLS 握手(如果是 HTTPS)
如果是加密連接,還得走一套 TLS 握手流程(驗證證書、公鑰協商、對稱密鑰協商等)。
神的孩子都在歌唱
3. 發起 HTTP 請求
這時候瀏覽器才會發送這樣的內容:
GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0...
服務器收到請求后,返回 HTML 內容、JS、圖片、CSS 等。
4. 渲染頁面
瀏覽器拿到內容,開始解析 HTML → 加載資源 → 執行 JS → 渲染頁面。
這一整個過程,用戶看到的是“頁面打開了”。
五、為什么 DNS 那一步經常被忽略?
因為它快,通常只有幾十毫秒,有時候甚至是 0(本地緩存命中)。但你一旦遇到:
- 網站打不開
- 明明能 ping IP 卻打不開網頁
- 有些域名解析錯了
- 網絡偶爾卡一下
很可能就是 DNS 出了問題。
常見 DNS 故障表現:
- 域名解析超時(運營商 DNS 掛了)
- 被污染(返回錯誤的 IP,常見于某些國際域名)
- 被攔截(指向運營商廣告頁)
- 緩存錯誤(曾經改過 hosts 忘了)
這也是為什么很多人喜歡把 DNS 手動換成:
- 8.8.8.8(Google)
- 1.1.1.1(Cloudflare)
- 223.5.5.5(阿里)
更快、更穩定、更干凈。
六、總結一下
- 你敲域名后,第一步其實是在“問路”,找 IP。
- DNS 就是互聯網的“通訊錄”系統,把人類語言翻譯成 IP。
- 大部分上不了網頁的問題,不是網壞了,是“名字找不到”。
下次網頁打不開,別急著重啟電腦,先試試:
ping www.baidu.com
nslookup www.baidu.com
你可能一眼就看出問題出在哪了。