引言
什麼是DNS
DNS服務:將主機名映射成IP地址
一個主機可以有一個規範主機名、多個別名(www.sina.com就是個別名)
郵件服務器也有別名
目的:負載平衡,通過IP分流
DNS的架構
前面我們說DNS是將主機名對應到IP,那麼這些東西關係(表)應該如何存儲呢?
首先集中式存儲的問題:
容易訪問失敗
流量
距離,要在哪裏建設服務器
維護問題
所以有了現在的層次架構
根名稱服務器:
負責引導查詢獲取頂級域名稱服務器的域名及對應的頂級域服務器的IP地址。
根基服務器的分佈:
根域名服務器
截至2014年10月,全球有504臺根服務器,被編號爲A到M共13個標號。 大部分藉由任播(Anycast)技術,編號相同的根服務器使用同一個IP, 504臺根服務器總共只使用13個IP,因此可以抵抗針對其所進行的分佈式拒絕服務攻擊(DDoS) 。
. 中國大陸在北京有三臺編號爲L的鏡像,編號爲F、I、J的鏡像各-臺,共6臺;
香港有編號爲D、J的鏡像各2臺,編號爲A、F、I、L的鏡像各一臺,共8臺; 臺灣則有編號爲F、I、J各一臺,共3臺。
全球13組根域名服務器以英文字母A到M依序命名, 網域名稱格式爲“字母. root-servers. org”。其中有11個是以任播技術在全球多個地點設立鏡像站。 所有根域名服務器都是以同一份根域文件返回頂級域名權威服務器(包括通用頂級域和國家頂級域),
文件只有550KB 大小。
目前全球一共有13臺
根域名服務器,其中有10個是在美國,有2個在歐洲,還有一個在日本,這裏說的是服務器都是邏輯上的IP地址
,對應了 A-M 13 個編號,藉由任播(Anycast)技術,編號相同的根服務器使用同一個IP(類似一個集羣)。並不是真正的物理機器。
那麼爲什麼DNS根服務器只有13個IP呢
參考:https://miek.nl/2013/november/10/why-13-dns-root-servers/
我們都知道DNS協議是使用了UDP和TCP協議
UDP協議:用於查詢和響應(不可靠傳輸特性等)
TCP協議:用於主服務器和從服務器之間的區域傳送(有可靠傳輸特性等)
在所有 UDP 實現中能保證正常工作的最大包是 512
字節,而這512字節還影響了根服務器的數量和名字。
要讓所有的根服務器數據能包含在一個 512 字節的 UDP 包中,接下來我們看UDP包的構成:
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 518400 IN NS a.root-servers.net.
. 518400 IN NS b.root-servers.net.
;; ADDITIONAL SECTION:
a.root-servers.net. 3600000 IN A 198.41.0.4
b.root-servers.net. 3600000 IN A 192.228.79.201
數據包頭:12字節
問題部分:5字節
答案部分一個資源記錄:31字節
答案部分的其他記錄採用DNS壓縮:15字節*n
附加記錄:16字節*m(名字字段壓縮)
所以:
12 ;; ->>HEADER<<-
5 ;; QUESTION SECTION:
31 + 15n ;; ANSWER SECTION:
16m ;; ADDITIONAL SECTION:
48 + 31n = 512
n = 464 / 31 = 14.96
所以,可以具有14臺根服務器,現在13臺已經分配,爲將來的擴展留出一些空間。
作者:@XiangFeiDe