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