代號(hào)9527---DNS協(xié)議
在周星馳的電影《唐伯虎點(diǎn)秋香》中,周星馳飾演的主角一進(jìn)入華府,就被強(qiáng)制增加了一個(gè)代號(hào)9527。從此,華府的人開始稱呼主角為9527,而不是他的姓名。
域名(domain name)是IP地址的代號(hào)。域名通常是由字符構(gòu)成的。對(duì)于人類來說,字符構(gòu)成的域名,比如www.yahoo.com,要比純粹數(shù)字構(gòu)成的IP地址(106.10.170.118)容易記憶。域名解析系統(tǒng)(DNS, domain name system)就負(fù)責(zé)將域名翻譯為對(duì)應(yīng)的IP地址。在DNS的幫助下,我們可以在瀏覽器的地址欄輸入域名,而不是IP地址。這大大減輕了互聯(lián)網(wǎng)用戶的記憶負(fù)擔(dān)。另一方面,處于維護(hù)和運(yùn)營(yíng)的原因,一些網(wǎng)站可能會(huì)變更IP地址。這些網(wǎng)站可以更改DNS中的對(duì)應(yīng)關(guān)系,從而保持域名不變,而IP地址更新。由于大部分用戶記錄的都是域名,這樣就可以降低IP變更帶來的影響。
從機(jī)器和技術(shù)的角度上來說,域名并不是必須的。但I(xiàn)nternet是由機(jī)器和用戶共同構(gòu)成的。鑒于DNS對(duì)用戶的巨大幫助,DNS已經(jīng)被當(dāng)作TCP/IP套裝不可或缺的一個(gè)組成部分。
DNS服務(wù)器
域名和IP地址的對(duì)應(yīng)關(guān)系存儲(chǔ)在DNS服務(wù)器(DNS server)中。所謂的DNS服務(wù)器,是指在網(wǎng)絡(luò)中進(jìn)行域名解析的一些服務(wù)器(計(jì)算機(jī))。這些服務(wù)器都有自己的IP地址,并使用DNS協(xié)議(DNS protocol)進(jìn)行通信。DNS協(xié)議主要基于UDP,是應(yīng)用層協(xié)議(這也是我們見到的***個(gè)應(yīng)用層協(xié)議)。
DNS服務(wù)器構(gòu)成一個(gè)分級(jí)(hierarchical)的樹狀體系。上圖中,每個(gè)節(jié)點(diǎn)(node)為一個(gè)DNS服務(wù)器,每個(gè)節(jié)點(diǎn)都有自己的IP地址。樹的頂端為用戶電腦出口處的DNS服務(wù)器。在Linux下,可以使用cat /etc/resolv.conf,在Windows下,可以使用ipconfig /all,來查詢出口DNS服務(wù)器。樹的末端是真正的域名/IP對(duì)應(yīng)關(guān)系記錄。一次DNS查詢就是從樹的頂端節(jié)點(diǎn)出發(fā),最終找到相應(yīng)末端記錄的過程。
中間節(jié)點(diǎn)根據(jù)域名的構(gòu)成,將DNS查詢引導(dǎo)向下一級(jí)的服務(wù)器。比如說一個(gè)域名cs.berkeley.edu,DNS解析會(huì)將域名分割為cs, berkeley, edu,然后按照相反的順序查詢(edu, berkeley, cs)。出口DNS首先根據(jù)edu,將查詢指向下一層的edu節(jié)點(diǎn)。然后edu節(jié)點(diǎn)根據(jù)berkeley,將查詢指向下一層的berkeley節(jié)點(diǎn)。這臺(tái)berkeley服務(wù)器上存儲(chǔ)有cs.berkeley.edu的IP地址。所以,中間節(jié)點(diǎn)不斷重新定向,并將我們引導(dǎo)到正確的記錄。
在整個(gè)DNS查詢過程中,無論是重新定向還是最終取得對(duì)應(yīng)關(guān)系,都是用戶計(jì)算機(jī)和DNS服務(wù)器使用DNS協(xié)議通信。用戶計(jì)算機(jī)根據(jù)DNS服務(wù)器的反饋,依次與下一層的DNS服務(wù)器建立通信。用戶計(jì)算機(jī)經(jīng)過遞歸查詢,最終和末端節(jié)點(diǎn)通信,并獲得IP地址。

來自wikipedia
緩存
用戶計(jì)算機(jī)的操作系統(tǒng)中的域名解析模塊(DNS Resolver)負(fù)責(zé)域名解析的相關(guān)工作。任何一個(gè)應(yīng)用程序(郵件,瀏覽器)都可以通過調(diào)用該模塊來進(jìn)行域名解析。
并不是每次域名解析都要完整的經(jīng)歷解析過程。DNS Resolver通常有DNS緩存(cache),用來記錄最近使用和查詢的域名/IP關(guān)系。在進(jìn)行DNS查詢之前,計(jì)算機(jī)會(huì)先查詢cache中是否有相關(guān)記錄。這樣,重復(fù)使用的域名就不用總要經(jīng)過整個(gè)遞歸查詢過程。

來自wikipedia
反向DNS
上面的DNS查詢均為正向DNS查詢:已經(jīng)知道域名,想要查詢對(duì)應(yīng)IP。而反向DNS(reverse DNS)是已經(jīng)知道IP的前提下,想要查詢域名。反向DNS也是采用分層查詢方式,對(duì)于一個(gè)IP地址(比如106.10.170.118),依次查詢in-addr.arpa節(jié)點(diǎn)(如果是IPv6,則為ip6.arpa節(jié)點(diǎn)),106節(jié)點(diǎn),10節(jié)點(diǎn),170節(jié)點(diǎn),并在該節(jié)點(diǎn)獲得106.10.170.118對(duì)應(yīng)的域名。
實(shí)例
下面的視頻來自youtube,我覺得它很生動(dòng)的解釋了DNS的工作過程。