DNS 就是將域名轉(zhuǎn)換為 IP 的,因為我們?nèi)祟惖挠洃浟μ睿居洸蛔?IP,而電腦通信又必須用 IP,所以人類發(fā)明了域名,讓我們可以記住 baidu.com、taobao.com 這種還算能記得住的域名。然后通過 DNS,將這些域名轉(zhuǎn)換為電腦需要的 IP。
2、DNS 是怎么工作的?
每個電腦里面都設(shè)置了本地 DNS 服務(wù)器(簡稱?LDNS),需要的時候,就向 LDNS 發(fā)出請求,LDNS 在網(wǎng)上問權(quán)威域名服務(wù)器(簡稱?權(quán)威 DNS),有時候問一家是不夠的,要問一大圈下來,最后才能得到答案。
A 開頭那個簡稱 A 根,是主根,其他 12 個(B、C、D、E、F、G、H、I、J、K、L、M)是輔根。
為什么根 DNS 只有 13 臺?
本節(jié)看不懂沒關(guān)系(一般人都看不懂),你只需要知道,由于歷史原因和技術(shù)原因,對于 IPv4 而言,根 DNS 只能有 13 個 IP。
正宗答案是:DNS 主要使用 UDP 數(shù)據(jù)報傳送報文,不含前面的各種頭部,DNS 報文要求被控制在 512 字節(jié)之內(nèi)( RFC1035 ),主要考慮是這個大小幾乎可以在互聯(lián)網(wǎng)上暢通無阻,不會因為路徑中某個 MTU 太小( MTU 通常總會 >= 576,見 RFC791 )而導(dǎo)致 IP 分片,從而預(yù)防了各種不可預(yù)期的后果?3。
而每一個根 DNS 在 DNS 報文中都要占用一定的字節(jié)數(shù),比如根的名稱、TTL、IP 地址等。這樣,13 個根域名服務(wù)器基本上就把空間占差不多了,剩余的字節(jié)還要用于包裝 DNS 報頭以及其它協(xié)議參數(shù),所以根域名服務(wù)器不易太多,13 個算是比較合適的數(shù)目。具體可以看一下 “Why 13 DNS root servers?” 這篇文章。4
再介紹一下最常見的兩種域名服務(wù)器:權(quán)威 DNS:負(fù)責(zé)對請求作出權(quán)威的回答。權(quán)威 DNS 中存儲著記錄,最常見的 3 種:A 記錄(記錄某域名和其 IP 的對應(yīng)),NS 記錄(記錄某域名和負(fù)責(zé)解析該域的權(quán)威 DNS),CNAME 記錄(負(fù)責(zé)記錄某域名及其別名)。權(quán)威能直接回答的,就回 A 記錄;需要其他權(quán)威 DNS 回答的,就回 NS 記錄,然后 LDNS 再去找其他權(quán)威 DNS 問;如果該記錄是別名類型的,就回 CNAME,LDNS 就會再去解析別名。遞歸 DNS:通常就是 LDNS,它接受終端的域名查詢請求,負(fù)責(zé)在網(wǎng)上問一圈后,將答案返回終端。現(xiàn)在舉一個具體的例子:比如終端請求 www.baidu.com 這個域名的 IP。在沒有緩存時,LDNS 會從根 DNS 問起:1、LDNS 問根 DNS 說:“www.baidu.com 的 IP 是多少啊?”。2、根 DNS 說:“我哪有時間管你這么細(xì)的問題,你去問 com 頂級域的 DNS 吧,我只管到頂級域,喏,這些是 com 頂級域 DNS 的名字和 IP,你去問它們吧”。(以 NS 記錄回應(yīng))3、LDNS 又忙問 com 的權(quán)威 DNS,com 權(quán)威 DNS 說:“你問的這是三級域名,我不管這么多,你去問 baidu.com 的權(quán)威 DNS 吧,它的名字是 ns.baidu.com,他的 IP 是 XXX(這里可能給出多個權(quán)威 DNS)”。4、LDNS 繼續(xù)問 baidu.com 的權(quán)威 DNS,這次痛快,因為 www.baidu.com 正是它管的,它可能直接給出 A 記錄,也可能給出 CNAME 記錄,如果是前者,就直接得到 IP,如果是后者,就需要對別名再做查詢。5、最終,LDNS 得到 www.baidu.com 的 IP,并將其返回給終端。細(xì)心的人會問,在第 1 步中,LDNS 問根 DNS 的時候,他是怎么知道根 DNS 的 IP 的?這 13 個 IP 通常是預(yù)先配置在 LDNS 里面的。在 LDNS 初始化 DNS 緩存或者緩存失效的時候,LDNS 向自己被預(yù)先配置的這些 IP 中的一個,發(fā)起對根的查詢(也即詢問。的 NS 記錄),獲得最新的根 DNS 的信息?6。
根鏡像承擔(dān)起和根一樣的功能。根 DNS 中,最重要的文件就是根區(qū)文件(Root Zone file)。所有頂級域名記錄都存在根區(qū)文件中。輔根從主根同步數(shù)據(jù),根鏡像從根同步數(shù)據(jù)。最終,所有根和鏡像都有著同樣的根區(qū)文件。而且最有意思的是,根鏡像和根有著同樣的 IP。我們知道,全球有一千多個根鏡像,但是大多數(shù)人不知道,它們一起共享 13 個 IP!? 對的。因為只有 13 個根。這是如何做到的?答案是任播(Anycast,又譯泛播)技術(shù)。不關(guān)心技術(shù)細(xì)節(jié)的,請直接看本節(jié)的最后一句。任播最初由 RFC1546 提出,主要用在 DNS 根服務(wù)器上。
任播是指在 IP 網(wǎng)絡(luò)上通過一個 IP 地址標(biāo)識一組提供特定服務(wù)的主機,服務(wù)訪問方并不關(guān)心提供服務(wù)具體是哪一臺主機提供的,訪問該地址的報文可以被 IP 網(wǎng)絡(luò)路由到 “最近” 的一個(最好也只是一個,別送到多個)服務(wù)器上。這里 “最近” 可以是指路由器跳數(shù)、服務(wù)器負(fù)載、服務(wù)器吞吐量、客戶和服務(wù)器之間的往返時間( RTT,round trip time )、鏈路的可用帶寬等特征值。
根 DNS 目前由 12 家機構(gòu)管理。A 根是主根,由美國公司 Verisign 管理。根 DNS 中最重要的文件,根區(qū)文件,由 ICANN 管理。ICANN(The Internet Corporation for Assigned Names and Numbers,互聯(lián)網(wǎng)名稱與數(shù)字地址分配機構(gòu))是成立于 1998 年的一家注冊在美國的非營利性組織。根 DNS 管理的歷史變遷過程還是比較復(fù)雜的。這里簡要說一下。DNS 最初的技術(shù)開發(fā)者與管理者是美國南加州大學(xué)的 Jon Postel 博士,他掌管互聯(lián)網(wǎng)初期根 DNS 的管理和分配。1988 年,美國政府要求 Jon Postel 采取更安全和更合理的措施來保證互聯(lián)網(wǎng)核心資源的分配和管理?7。于是,大名鼎鼎的 IANA(The Internet Assigned Numbers Authority,互聯(lián)網(wǎng)數(shù)字分配機構(gòu))被組建,并在 DARPA 和南加州大學(xué)信息科學(xué)研究所(ISI)的合同下管理。