DNS 如何運作——由域名到 IP 位址

在一張互動畫布上呈現 DNS 如何運作:你的裝置、遞迴解析器,以及共同把域名變成 IP 位址的根伺服器、頂層網域伺服器與權威伺服器。

DNS 是互聯網的電話簿:它把你輸入的、人類看得懂的名稱,對應到路由器實際使用的 IP 位址,靠的是一串各自只知道答案一小部分的伺服器。

DNS 如何運作——由域名到 IP 位址

The interactive FlowJam canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.

How to read this visual

  • 由「你的裝置」群組的第一個方框——「你輸入一個域名,例如 querychart.io」——開始,橫向跟著這兩列的次序讀:裝置向解析器發問,解析器再判斷自己是否已經知道答案。
  • 當解析器不知道答案時,箭頭就進入「解析」這一欄,沿著鏈往下走——由根伺服器到頂層網域伺服器,再到權威伺服器——然後才返回解析器,並回到你的裝置。
  • 快取決策上的「是」分支直接跳到最後,展示的正是每個人在重複造訪時都會經歷的那條快速路徑。

查詢的鏈條

「瀏覽器把查詢送去遞迴解析器」把問題交給一部獲准代你向其他伺服器發問的伺服器——通常是你的 ISP 的解析器,或者一個公共 DNS 服務。由此,快取決策的「否」分支走完整條鏈:「解析器向根伺服器查詢」、「根伺服器指向 .io 的頂層網域伺服器」、「頂層網域伺服器指向權威伺服器」,最後是「權威伺服器傳回 IP 位址」。每一跳都把問題按名稱的一個層級收窄一次。

解析器的角色

解析器夾在你的裝置與那三個伺服器群組之間是有原因的:它是負責記住的那一部分。「解析器快取答案並傳回」正是為甚麼第二次造訪同一個網站會跳過整條鏈,而快取決策上的「是」分支,就是那條快速路徑被明確地畫了出來。解析器同時處理重試與保安擴充功能,這一切對瀏覽器來說都是看不見的。

鏈條在哪裡結束

「瀏覽器連上該 IP 位址」在「你的裝置」群組裡把整個回路收結——這次查詢存在的唯一目的,就是為真正的請求產生一個目的地。那個目的地正是互聯網那張圖解中「瀏覽器向 DNS 查詢域名在哪裡」這一步所用到的,也是 API 請求生命週期圖解假設早已解析完成的東西。

Key relationships and takeaways

  • DNS 是一條委派的鏈:根伺服器指向頂層網域伺服器,頂層網域伺服器指向權威伺服器,而只有權威伺服器持有最終的紀錄。
  • 遞迴解析器只做一次工夫,然後把答案快取起來,這就是為甚麼重複查詢幾乎是即時的。
  • 域名持有者只控制權威伺服器——他控制不了根伺服器或頂層網域伺服器。
  • 鏈上任何一處查詢失敗,都代表瀏覽器沒有目的地,請求根本不會發出。
  • 每一次連線之前都要先做 DNS 解析,這就是為甚麼它是 API 請求生命週期的第一跳。

When to use this visual

  • 向新加入的成員解釋,為甚麼一個域名第一次解析得慢,之後卻是即時的。
  • 處理「找不到網站」的報告時,沿著這條鏈逐段檢查——快取、權威紀錄、TTL——而不是靠猜。
  • 講解擁有權模型:哪些 DNS 紀錄由你的團隊控制,哪些屬於註冊商或寄存供應商。

運作方式

  1. 用你自己的域名走一次這條鏈

    把 querychart.io 換成一個你自己控制的域名,並在權威伺服器那一步記下它的紀錄由哪一家供應商託管——你的註冊商、一個 DNS 服務,還是你的寄存公司。

  2. 加入你實際使用的保安擴充

    在解析器與答案之間插入一個 DNSSEC 驗證步驟,或者在裝置上加一個 stub 解析器步驟,把你的設定裡真正會執行的部分畫出來。

  3. 在快取上標註真實的 TTL

    把你的紀錄的存活時間寫在快取決策上,令圖表能說出一次改動要多久才會傳播開去——正是這個數字令整幅圖變得實用。

  4. 加入失敗分支

    把鏈上某部伺服器無法連上、或者傳回不到任何紀錄(一個 SERVFAIL)時會發生甚麼也畫進去,每一條都以一個明確的結果收結,令畫布涵蓋真實的事故。

常見問題

簡單來說 DNS 是甚麼?

DNS,即網域名稱系統,是一份把 querychart.io 這類域名轉換成電腦可以連上的 IP 位址的目錄。它以委派的方式運作:一串伺服器各自負責名稱的其中一部分,合起來產生最終的位址。沒有它,你就要記住並輸入 IP 位址。

遞迴解析器與權威伺服器有甚麼分別?

遞迴解析器是你的裝置去查詢的那一部伺服器;它負責搜尋、代你沿著鏈往下走,並把結果快取起來。權威伺服器則是域名擁有者自己的伺服器,是該域名的真實來源——它持有最終的紀錄,也是唯一能夠給出權威答案的伺服器。圖解把兩者放在鏈的兩端,正是這個原因。

為甚麼 DNS 要快取?TTL 又是甚麼?

快取正是令 DNS 保持快速的關鍵:沒有它,每一次載入頁面都會觸發一整條鏈的查詢。每一筆 DNS 紀錄都帶有一個存活時間(TTL),說明解析器可以記住它多久。圖解中的快取決策就是這個機制——當一筆紀錄的 TTL 過期,解析器就必須再走一次那條鏈。

DNS 失敗時會發生甚麼?

如果鏈上沒有任何伺服器能給出答案,解析器就會傳回錯誤,瀏覽器會顯示無法連上該域名。常見的成因是權威伺服器上缺少或打錯了一筆紀錄、域名過期,或者解析器根本連不上那條鏈。按這張圖解的查詢次序逐段檢查,是找出到底屬於哪一種的實用方法。

用 QueryChart(FlowJam)編輯這張圖解

把上面這張 DNS 查詢畫布開啟為你自己的圖表——把伺服器改成你的供應商,然後追蹤你自己的域名。

用 QueryChart(FlowJam)編輯這張圖解

互動圖解的更多內容