JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

DNS 階層:根、頂級網域與區域

網際網路的電話簿,大到沒有任何一本書裝得下,也重要到不能交給任何一個擁有者。本篇要說明 DNS 如何用一個優雅的想法同時解決這兩個難題:一棵由名字組成的樹,切成一塊塊「區域」,再透過「委派」一層層交出去。

一本電話簿是不可能的

在前一篇裡你已經見過這個問題和它的形狀:人類想要像 example.com 這樣的名字,機器需要像 192.168.1.10 這樣的位址,而 網域名稱系統 就是把前者翻成後者的那本電話簿。但停下來想想,那本電話簿得有多大。已註冊的名字有好幾億,裝置有數十億,而且這份清單每秒鐘都在變動上千次,因為網站不斷搬家、擴張、消失。沒有任何單一檔案裝得下它,沒有任何單一伺服器供應得了它而不熔毀——同樣重要的是,也沒有人會同意讓某一家公司獨自擁有唯一的那份副本。

所以 DNS 根本不去建一本電話簿。它建的是一個結構——一種把這個巨大難題切成數百萬個微小、獨立片段的辦法,每一片都由負責它的人擁有並回答。整個 DNS 其實就是兩個想法協同運作:一個把所有可能的名字組織成一棵樹的 階層(hierarchy),以及讓那棵樹的每根分枝都能交給不同擁有者的 委派(delegation)。掌握這兩個詞,這一級接下來的內容——解析器、記錄、快取——就都成了掛在你已經理解的骨架上的細節。

由右往左讀一個名字

從單一個名字開始,並用 DNS 的方式看它。一個像 www.example.com 的 網域名稱 不是一團東西;它是一條由「標籤(label)」以點分隔而成的路徑,而令人意外的是,它最重要的部分在右邊。由右往左讀,你就是從樹幹開始往下走這棵樹:先是一個看不見的根,接著是 com,接著是 example,接著是 www。每一個點,都是往整個 DNS 名稱空間 中更特定的部分再深入一步——這棵單一的全球樹,包含了所有可能存在過的名字。

                    (root)            <- the empty label, the trunk
                   /  |   \
                 com  org   uk         <- top-level domains (TLDs)
                 /          \
           example         co           <- second level
            /   \           \
          www   mail        bbc          <- where real hosts live

        www . example . com . (root)
         |       |       |      |
        host  who you   TLD   the empty
              registered      label
名稱空間是一棵樹。像 www.example.com 這樣的名字,是一條由右往左讀的路徑:從沒有名字的根,往下到一個頂級網域,往下到某人註冊的那一段,再往下到一台個別主機。

com 後面那個結尾的點是真的存在的,儘管你幾乎從不打它。它代表 根(root):樹頂那個空白標籤,是網際網路上每一個名字共同的祖先。一個一路寫到根的名字,例如帶著那個結尾點的 www.example.com.,被稱為「完全限定(fully qualified)」——它毫不含糊,是一條從葉子到樹幹的完整路徑。當你省略那個點時,軟體只是逕自假設你本來就是這個意思。所以每一次查詢,不論名字多麼奇特,在概念上都從同一個單一地點開始:根。

根與頂級網域:樹的頂端

在最頂端坐著 根名稱伺服器。它們的工作刻意做得極小:它們不知道 example.com 住在哪,而且本來就不該知道。根只知道一件事——對每一個 頂級網域(TLD),像是 com、org、net、jp、uk,是哪些伺服器在負責它。問根關於 www.example.com 的事,它不會回答;它只是相當於說:「這我不處理,但負責 com 的那些伺服器處理,這是聯絡它們的方式。」這個單一、狹窄的回答,正是讓 DNS 最繁忙的那一層不至於滅頂的原因。

TLD 大致分成兩種,這個區別值得知道。通用頂級網域(gTLD),例如 com、org、info,以及較新的 xyz 或 app,是依照用途或主題組織的。國碼頂級網域(ccTLD),例如 uk、de、jp、tw,是綁定到某個國家或地區的兩字母代碼,通常由當地的一個組織營運。在一個 TLD 底下,同樣的模式重複:com 的伺服器一樣不知道你網站的位址;它們只知道是誰在 com 底下經營 example。這棵樹一次只往下委派一層的責任,一路到底。

區域與委派:到底是誰擁有一個名字

這裡有一個把這棵樹和真實世界綁在一起的想法。一個 區域(zone),是名稱空間中由「一位管理者」實際以「單一可編輯單位」來管理的那一塊。人們很容易以為「網域(domain)」和「區域(zone)」是同一回事,但它們不是,而這個差別正是整場遊戲的關鍵。網域是一個名字加上它底下概念上的一切;區域則是那個網域中「你親自負責」的那一片,止於你把某個子部分交給別人的那個地方。

那個「交出去」就是 委派(delegation),正是它讓 DNS 能擴展、又保持去中心化。當 com 的營運者讓你註冊 example.com 時,他們不會開始替你管理你的記錄。取而代之的是,在 com 區域裡,他們放下一個小小的路標——一個指標,說「example.com 底下的任何東西,改去問這些其他伺服器吧。」那些由你控制的伺服器,就成了 example.com 這個區域的 權威名稱伺服器:那一片的唯一真相來源。「權威」意味著它們的答案就是真正的答案,直接來自擁有者,不是某人在途中快取下來的副本。

所以一個區域,恰恰由它的那些委派來界定邊界。com 區域握有數百萬個名字的路標,卻不握有它們任何一個的實際記錄;你的 example.com 區域握有 www、mail 以及其餘的真實記錄——除非你反過來又把比方說 eu.example.com 委派給一位同事,這時那一塊就成了一個有自己擁有者的獨立區域。於是這棵名字之樹,悄悄被切成一塊塊區域拼布,每一塊都是一本小小、自成一體、由某一方編輯並供應的電話簿,彼此之間只靠這些單向指標縫合。沒有中央清單,沒有單一擁有者:只有一條從根往下、「改去問他們」的鏈。

順著路標走:一條委派鏈

讓我們追蹤這棵樹實際上如何回答一個問題,並且停留在階層本身這個層次——完整的逐步解析,包含快取與解析器自身的聰明之處,正是緊接著下一篇的工作。這裡重要的是要看見:每一層只為自己的區域作答,然後再往下指一步。想像你想要 www.example.com 背後的位址,並請系統去順著路標走。

  1. 向一台根伺服器詢問 www.example.com。根不知道它,但根擁有樹的頂端,所以它回以一個「轉介(referral)」:「這我沒有,但這是負責 com 這個 TLD 的權威伺服器。」
  2. 向一台 com 伺服器問同樣的問題。com 區域握有 example.com 的委派,所以它回以另一個轉介:「這我也沒有,但 example.com 被委派給了這些名稱伺服器——去問它們吧。」
  3. 向 example.com 的其中一台權威名稱伺服器詢問。這一次,這台伺服器真的擁有包含 www.example.com 的那個區域,所以你拿到的不再是轉介,而是終於得到真正的答案:位址本身,並標記為「權威」。
  4. 三個問題、三個層次,而在每一步,答案不是「這是真相」就是「這是下一個該問的人」。沒有任何一台伺服器需要知道超過它自己區域的事——這正是為什麼這套系統能擴展到整個網際網路。

註冊商擺在哪裡,以及該帶走什麼

還剩一個實務問題:你的 example.com 一開始究竟是怎麼進到 com 區域裡的?你不會直接打電話給 com 的營運者。你會透過一個 網域註冊商——一家獲得認證的公司,它收下你的錢和你選的名字,代你去請求營運 com 的那個「註冊局(registry)」加上這筆委派。粗略地說,註冊局擁有某個 TLD 的主清單;註冊商則是獲授權在其中新增與編輯項目的零售商。當你「買一個網域」時,你其實是在租下「控制這棵樹其中一根分枝」的專屬權利一兩年,外加註冊局承諾把你的委派路標保持在原位。

這裡有個微妙之處值得誠實說清楚:註冊一個名字,和供應它的記錄,是兩件分開的工作,而且不必由同一家公司來做。註冊商負責把你的委派寫進 TLD 區域(也就是指向你名稱伺服器的 NS 記錄);而一家 DNS 託管供應商——很可能完全是另一家——才是真正在跑那些權威名稱伺服器、回答關於你區域查詢的角色。許多人兩件事都用同一家公司、從沒注意到這條接縫——但它們真的是不同的角色,混淆它們正是「我買了網域,為什麼還什麼都不能用?」這個經典問題的成因。

退後一步,形狀就清楚了。DNS 不是一本電話簿;它是一棵名字之樹,被切成一塊塊區域,由委派接合,並紮根於一小群「只知道如何往下指」的伺服器。這個單一的設計,一口氣買到了三樣東西:它能擴展,因為每個擁有者只管理自己那一片;它保持堅固又去中心化,因為沒有人握有整個東西;而且它讓「擁有與編輯」可以在地化。下一篇會把這張靜態地圖動起來——那個替你走完整條鏈的解析器,以及它為什麼能回答大多數問題、卻根本碰都不必碰一下根。