1. 程式人生 > >根域名伺服器和對域名的查詢

根域名伺服器和對域名的查詢

名是網際網路的基礎設施,只要上網就會用到。

它還是一門利潤豐厚的生意,所有域名每年都必須交註冊費,這是很大的一筆錢。

這些錢交到了哪裡?到底誰控制域名的價格?為什麼有的域名註冊費很貴,有的便宜?......今天,我就來談談這些與根域名(root domain)相關的知識。

一、ICANN

全世界域名的最高管理機構,是一個叫做 ICANN (Internet Corporation for Assigned Names and Numbers)的組織。它的總部在美國加州。

它原來是美國商務部下面的一個非盈利機構,所以有人說,美國政府控制了全世界的域名,這種說法是有根據的。2016年,美國政府宣佈,ICANN 不再隸屬於商務部,成為一個自我管理的獨立機構。但是可想而知,美國政府依然對它有絕對影響。

ICANN 負責管理全世界域名系統的運作。它的一項主要工作,就是規定頂級域名(top level domain,簡寫為 TLD)。

二、TLD

所謂頂級域名(TLD),就是最高層級的域名。簡單說,就是網址的最後一個部分。比如,網址www.example.com的頂級域名就是.com

ICANN 就負責規定,哪些字串可以當作頂級域名。截至2015年7月,頂級域名共有1058個。

它們可以分成兩類。一類是一般性頂級域名(gTLD),比如.com.net.edu.org.xxx等等,共有700多個。另一類是國別頂級域名(ccTLD),代表不同的國家和地區,比如.cn(中國)、.io(英屬印度洋領地)、.cc

( 科科斯群島)、.tv(吐瓦魯)等,共有300多個。

三、頂級域名託管商

ICANN 自己不會去管理這些頂級域名,因為根本管不過來。想想看,頂級域名有1000多個,每個頂級域名下面都有許多批發商,如果每個都要管,就太麻煩了。

ICANN 的政策是,每個頂級域名都找一個託管商,該域名的所有事項都由託管商負責。ICANN 只與託管商聯絡,這樣管理起來就容易多了。舉例來說,.cn域名的託管商就是中國網際網路絡資訊中心(CNNIC),它決定了.cn域名的各種政策。

目前,世界最大的頂級域名託管商是美國的 Verisign 公司。

四、Verisign

Verisign 是一家商業公司,總部在美國維吉尼亞州。它託管了.com

.net 、.name.gov這四個一般性頂級域名,以及.cc.tv這兩個國別頂級域名。另外,.edu.jobs的後臺管理工作,也外包給了它。

它對.com.net的獨家壟斷是歷史形成的。最早的時候, Network Solutions 公司接受美國國家科學基金會的委託,管理頂級域名。2000年,Verisign 收購了這家公司,繼承了域名業務。2003年,Verisign 賣掉了域名註冊業務,只保留頂級域名管理。也就是說,它只做域名批發,不做域名零售了。

2010年,Verisign 又把網站安全和加密證書業務賣給了 Symantec 公司。後者又在2017年把這項業務賣給了 DigiCert。

五、ICANN 與 Verisign 打官司

按理說,Verisign 是 ICANN 最大的託管商,兩家的關係應該很好才對。事實卻是它們的關係很差,甚至還打過官司。

原因在於,ICANN 是政府支援的非盈利機構,不以盈利為目標,而 Verisign 是一家商業公司,追求利潤最大化,每年必須交大量的託管費給前者。兩家的矛盾就源於此。

2003年,Verisign 推出了一項新業務 Site Finder,使用者訪問沒有註冊過的.com.net域名,都會被導向 Verisign 的網站。這意味著,它事實上擁有了所有沒有註冊過的.com.net域名。 幾天之內,Verisign 就擠入了全世界的前10大網站。

ICANN 要求 Verisign 立刻停止該業務,否則將終止域名託管合同。Verisign 屈服了,停止了這項業務,但是接著就把 ICANN 告上了法庭,要求法庭釐請兩者之間的合同,ICANN 到底有沒有權力干涉它的業務。

2006年底,它們達成了庭外和解。ICANN 同意延長 Verisign 的頂級域名託管合同,並且同意 Verisign 向消費者收取的單個域名註冊費的上限,從6美元提高到了7.85美元。這個費用標準,一直沿用到了今天,你去註冊一個.com.net域名,所交的錢有0.18美元是 ICANN 收取的管理費,7.85美元是 Verisign 收取的託管費,其餘的錢就是域名零售商的費用。

如果一個.com.net域名售價10美元,ICANN 和 Verisign 合計拿走8.03美元。

後來,Verisign 的頂級域名託管合同又延長過兩次,當前合同要到2024年才會到期。

表面上看,ICANN 讓 Verisign 獲得了鉅額壟斷利潤。(曾經有公司提出,只要讓它來託管.com域名,單個域名的託管費,可以降低到每年1美元。)但是實際上,ICANN 通過另一種方式在發揮市場的力量,那就是它不斷提高頂級域名的數量和品種。如果你覺得.com域名太貴,你完全可以申請其他的頂級域名,有 1000多個頂級域名任你選擇。

六、根域名

由於 ICANN 管理著所有的頂級域名,所以它是最高一級的域名節點,被稱為根域名(root domain)。在有些場合,www.example.com被寫成www.example.com.,即最後還會多出一個點。這個點就是根域名。

理論上,所有域名查詢都必須先查詢根域名,因為只有根域名才能告訴你,某個頂級域名由哪臺伺服器管理。事實上也確實如此,ICANN 維護著一張列表,裡面記載著頂級域名和對應的託管商。

比如,我要訪問www.example.com,就必須先詢問 ICANN 的根域名列表,它會告訴我.com域名由 Verisign 託管,我必須去找 Verisign,它會告訴我example.com伺服器在哪裡。

再比如,我要訪問abc.xyz,也必須先去詢問根域名列表,它會告訴我.xyz域名由 CentralNic 公司託管。根域名列表還記載,.google由谷歌公司託管,.apple由蘋果公司託管等等。

由於根域名列表很少變化,大多數 DNS 服務商都會提供它的快取,所以根域名的查詢事實上不是那麼頻繁。

七、DNS 根區

根域名列表的正式名稱是 DNS 根區(DNS root zone),ICANN 官網可以檢視這個根區檔案

該檔案儲存所有頂級域名的託管資訊,所以非常大,超過2MB。

舉例來說,頂級域名.com可以查到13個域名伺服器。


com.            172800  IN  NS  a.gtld-servers.net.
com.            172800  IN  NS  b.gtld-servers.net.
com.            172800  IN  NS  c.gtld-servers.net.
com.            172800  IN  NS  d.gtld-servers.net.
com.            172800  IN  NS  e.gtld-servers.net.
com.            172800  IN  NS  f.gtld-servers.net.
com.            172800  IN  NS  g.gtld-servers.net.
com.            172800  IN  NS  h.gtld-servers.net.
com.            172800  IN  NS  i.gtld-servers.net.
com.            172800  IN  NS  j.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  m.gtld-servers.net.

也就是說,.com域名的解析結果,可以到這個13個伺服器的任一臺查詢。細心的讀者可能發現,這些伺服器本身也是使用域名(比如a.gtld-servers.net.)標識,那麼還得去查詢它們指向的伺服器,這樣很容易造成迴圈查詢。

因此,DNS 根區還會同時提供這些伺服器的 IP 地址(IPv4 和 IPv6)。


a.gtld-servers.net. 172800  IN  A   192.5.6.30
a.gtld-servers.net. 172800  IN  AAAA    2001:503:a83e:0:0:0:2:30
b.gtld-servers.net. 172800  IN  A   192.33.14.30
b.gtld-servers.net. 172800  IN  AAAA    2001:503:231d:0:0:0:2:30
c.gtld-servers.net. 172800  IN  A   192.26.92.30
c.gtld-servers.net. 172800  IN  AAAA    2001:503:83eb:0:0:0:0:30
... ...

八、根域名伺服器

儲存 DNS 根區檔案的伺服器,就叫做 DNS 根域名伺服器(root name server)。

由於早期的 DNS 查詢結果是一個512位元組的 UDP 資料包。這個包最多可以容納13個伺服器的地址,因此就規定全世界有13個根域名伺服器,編號從a.root-servers.net一直到m.root-servers.net

這13臺根域名伺服器由12個組織獨立運營。其中,Verisign 公司管理兩臺根域名伺服器:A 和 J。每家公司為了保證根域名伺服器的可用性,會部署多個節點,比如單單 Verisign 一家公司就部署了104臺根域名伺服器(2016年1月資料)。

所以,根域名伺服器其實不止13臺。據統計,截止2016年1月,全世界共有 517 臺根域名伺服器。你可以在 http://root-servers.org 這個網站查到所有根域名伺服器的資訊。

根域名伺服器雖然有域名,但是最少必須知道一臺的 IP 地址,否則就會陷入迴圈查詢。一般來說,本機都儲存一份根域名伺服器的 IP 地址的快取,叫做 name.cache 檔案。


A.ROOT-SERVERS.NET.   3600000 A 198.41.0.4
A.ROOT-SERVERS.NET.   3600000 AAAA 2001:503:ba3e :: 2:30

B.ROOT-SERVERS.NET.   3600000 A 199.9.14.201
B.ROOT-SERVERS.NET.   3600000 AAAA 2001:500:200 :: b

C.ROOT-SERVERS.NET.   3600000 A 192.33.4.12
C.ROOT-SERVERS.NET.   3600000 AAAA 2001:500:2 :: c

... ...

這個檔案記錄了13臺根域名伺服器的 IP 地址。

九、參考連結