DNS1034中文版
域名的概念與機(jī)制1. 介紹本文主要介紹域名(DNS )的一些機(jī)制及實(shí)現(xiàn)方法,下面我們就具體看一下它的情況。1.1. 域名的歷史產(chǎn)生域名的的根本動(dòng)機(jī)在于管理方便,原來(lái)的主機(jī)名與IP 地址映射是保存在NI
域名的概念與機(jī)制
1. 介紹
本文主要介紹域名(DNS )的一些機(jī)制及實(shí)現(xiàn)方法,下面我們就具體看一下它的情況。
1.1. 域名的歷史
產(chǎn)生域名的的根本動(dòng)機(jī)在于管理方便,原來(lái)的主機(jī)名與IP 地址映射是保存在NIC 的hosts .txt 文件中的,當(dāng)時(shí)因?yàn)橹鳈C(jī)數(shù)量少,這個(gè)文件也不經(jīng)常變化,因此其它主機(jī)幾天一次 從NIC 的主機(jī)上下載這個(gè)文件進(jìn)行主機(jī)名和IP 地址映射就可以了。但隨著網(wǎng)絡(luò)的發(fā)展,這 種方法變得無(wú)法使用,因?yàn)榻?jīng)常會(huì)有主機(jī)要求下載,對(duì)NIC 的主機(jī)造成巨大的壓力,而且 也不能保證服務(wù)的質(zhì)量。許多局域網(wǎng)用戶希望自己管理自己的主機(jī)名,而不希望等NIC 許 多天把自己的主機(jī)名加在hosts.txt 文件中,有些組織也希望有自己的名字空間配置。是 需要一個(gè)能夠簡(jiǎn)單管理的方法了。最后決定使用層次式的名字空間組織方案,以. 為分隔 標(biāo)準(zhǔn)不同的層次。整個(gè)名字空間以分布式數(shù)據(jù)庫(kù)管理。請(qǐng)看閱讀前不要把平常的域名和 這里的域名系統(tǒng)混在一起。最好的方法就是把原來(lái)的觀念忘記了,看現(xiàn)在的新東西。
1.2. DNS設(shè)計(jì)目標(biāo)
DNS 的設(shè)置目標(biāo)影響了它的結(jié)構(gòu),主要目標(biāo)是對(duì)資源有一個(gè)一致的名字空間,為了避免不 同編碼帶來(lái)的問(wèn)題,需要包括網(wǎng)絡(luò)標(biāo)記,地址,路由或其它信息作為名字的一部分。出 于對(duì)實(shí)驗(yàn)數(shù)據(jù)的分析,看來(lái)分布式的存儲(chǔ)條件是必須的。要在獲取數(shù)據(jù)的代價(jià)和數(shù)據(jù)準(zhǔn) 確性之間有一個(gè)平衡。需要對(duì)名字所代表的資源類型有一個(gè)標(biāo)記。要支持多協(xié)議訪問(wèn)。 名字服務(wù)器操作獨(dú)立于通信系統(tǒng)。應(yīng)該能夠使用不同的機(jī)器都能夠使用這一系統(tǒng),使用 的方法可能不同,但是都要能夠使用。
1.3. 基于使用的一些假設(shè)
設(shè)計(jì)系統(tǒng)時(shí)是基于下面假設(shè)進(jìn)行的:數(shù)據(jù)庫(kù)的初始大小和使用系統(tǒng)的主機(jī)成正比,但最 后數(shù)據(jù)庫(kù)的大小會(huì)和用戶的數(shù)目成正比,這一過(guò)程會(huì)發(fā)生在一些資源(如郵箱和其它一 些要加入到域名系統(tǒng)中的信息)進(jìn)入系統(tǒng)開(kāi)始;大部分的數(shù)據(jù)改變比較慢,但系統(tǒng)能夠 對(duì)改變有一些快速的適應(yīng)。由相應(yīng)的組織負(fù)責(zé)分布式數(shù)據(jù)庫(kù)的維護(hù)。域名系統(tǒng)的用戶可 以選擇自己喜歡的主機(jī)。因?yàn)槠渲械臄?shù)據(jù)十分敏感而且重要,因此一定要保證正確性, 如果因?yàn)橹鳈C(jī)或網(wǎng)絡(luò)失敗而造成無(wú)法為用戶服務(wù),用戶要以原來(lái)的數(shù)據(jù)為準(zhǔn),不要自己 胡亂想一個(gè)數(shù)據(jù)就用。在查詢的時(shí)候要避免循環(huán)查詢,一種方法是將未找到這一信息返 回給用戶,讓用戶再找新的主機(jī)尋找相應(yīng)的地址,一種是由主機(jī)找別的主機(jī)尋找相應(yīng)的 地址,找到后由相應(yīng)的主機(jī)返回地址給用戶,這兩個(gè)方法各有好處。域名系統(tǒng)假設(shè)所有 的數(shù)據(jù)是在一個(gè)主文件中保存,這個(gè)主文件的內(nèi)容分布存儲(chǔ)于系統(tǒng)中的各臺(tái)主機(jī)上。用 戶通過(guò)標(biāo)準(zhǔn)的查詢程序resolover 查詢。主文件的標(biāo)準(zhǔn)形式使得它可以在不同主機(jī)間進(jìn)行 傳輸(利用FTP ,電子郵件等方式)。本地可以使用文本編輯器進(jìn)行管理,然后將這個(gè)文 件傳輸?shù)矫址?wù)器那里,然后通知名字服務(wù)器的管理員加載這個(gè)文件就是了。對(duì)于re solver 來(lái)說(shuō),配置好的名字服務(wù)器是地址信息的主要來(lái)源。域名系統(tǒng)定義了訪問(wèn)數(shù)據(jù)的 過(guò)程和訪問(wèn)其它名字服務(wù)器的方法,它還定義了緩沖的大小和更新緩沖的時(shí)間等配置信 息。
系統(tǒng)管理員需要提供:
區(qū)域(zone )邊界定義
主文件數(shù)據(jù)
主文件的更新
更新策略描述
域名系統(tǒng)需要提供:
,源數(shù)據(jù)的標(biāo)準(zhǔn)格式
查詢數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)方法
多其它名字服務(wù)器上更新數(shù)據(jù)的標(biāo)準(zhǔn)方法
1.4. DNS組成
DNS 由下面三個(gè)部分組成:
域名空間和資源記錄,域名空間是一個(gè)樹(shù)狀結(jié)構(gòu),資源記錄是與名字相關(guān)的一些數(shù)據(jù)。 從概念上說(shuō),每個(gè)結(jié)點(diǎn)和域名空間樹(shù)的葉子結(jié)點(diǎn)都有一定的信息,而查詢是要查詢出一 些與之相關(guān)的特定信息。
名字服務(wù)器是服務(wù)器程序,它保留域名樹(shù)結(jié)構(gòu)和相應(yīng)的信息,它可以緩沖各種數(shù)據(jù),保 存域名樹(shù)中的任何部分,但是通常它保存域名空間的一個(gè)子集,如果需要查詢其它信息 可以通過(guò)指向其它名字服務(wù)器的地址尋找。這個(gè)名字服務(wù)器是這一部分的認(rèn)證權(quán)威,所 有的認(rèn)證信息組成一個(gè)單元稱為區(qū),這些區(qū)可以分布于不同的服務(wù)器上以保證數(shù)據(jù)的冗 余。
resolver 是向名字服務(wù)器提出查詢請(qǐng)求并將結(jié)果返回給客戶的程序,它必須可以訪問(wèn)至 少一個(gè)名字服務(wù)器,并將結(jié)果直接返回給用戶或向別的名字服務(wù)器查詢。它通常是用戶 可以訪問(wèn)的系統(tǒng)方法,在resolver 和用戶程序之間不需要協(xié)議。
下面我們通過(guò)三個(gè)不同的角度來(lái)看看它們的相互關(guān)系:
從用戶的角度,域名系統(tǒng)可以通過(guò)簡(jiǎn)單的過(guò)程或操作系統(tǒng)調(diào)用來(lái)調(diào)用本地resolver 進(jìn)行 查詢。域名空間包括一個(gè)單獨(dú)的樹(shù),用戶可以從樹(shù)中的任何一個(gè)部分查詢信息。
從resolver 的角度,域名系統(tǒng)由一些名字服務(wù)器組成,每個(gè)服務(wù)器有域樹(shù)的整個(gè)或部分 數(shù)據(jù),resolver 將這些數(shù)據(jù)庫(kù)視為基本是靜態(tài)的。
從名字服務(wù)器的角度,域名系統(tǒng)由稱為區(qū)(zone )的本地?cái)?shù)據(jù)集組成,名字服務(wù)器必須 定期從主備份上更新自己區(qū)內(nèi)的數(shù)據(jù),它還必須處理從resovler 傳送來(lái)的查詢請(qǐng)求。
2. 域名空間和資源記錄
2.1. 定義和名詞
域名空間是樹(shù)狀結(jié)構(gòu),每個(gè)結(jié)點(diǎn)和資源集相對(duì)應(yīng)(這個(gè)資源集可能為空),域名系統(tǒng)不 區(qū)別樹(shù)內(nèi)結(jié)點(diǎn)和葉子結(jié)點(diǎn),統(tǒng)稱為結(jié)點(diǎn)。每個(gè)結(jié)點(diǎn)有一個(gè)標(biāo)記,這個(gè)標(biāo)記的長(zhǎng)度為0到6 3個(gè)字節(jié)。不同的結(jié)點(diǎn)可以使用相同的標(biāo)記。0長(zhǎng)度的標(biāo)記(空標(biāo)記)為根記錄保留。結(jié) 點(diǎn)的域名是從結(jié)點(diǎn)到根的標(biāo)記組成的。這些標(biāo)記對(duì)大小寫(xiě)不敏感,這就是說(shuō),A 和a 對(duì)域 名是等效的。但是你在收到域名時(shí)最好保留它的大小寫(xiě)狀態(tài)以便以后的服務(wù)擴(kuò)展便于使 用。
用戶需要輸入域名時(shí),每個(gè)節(jié)點(diǎn)的標(biāo)記長(zhǎng)度不管多長(zhǎng),總要以點(diǎn)分隔。絕對(duì)域名的最后 總以點(diǎn)結(jié)束,例如"poneria.ISI.EDU." ,而相對(duì)域名則不這樣,它由本地域指明位置即 可。相對(duì)域名相對(duì)于一個(gè)公認(rèn)的域名或相對(duì)于用作搜索列的一串域名。相對(duì)名通常在用 戶接口出現(xiàn),在用戶接口,表示方法因?qū)崿F(xiàn)不同而不同,相對(duì)域名也出現(xiàn)在主文件中, 主文件相對(duì)于一個(gè)源域名而設(shè)立。為了簡(jiǎn)化實(shí)現(xiàn),整個(gè)域名的長(zhǎng)度不得大于255個(gè)字節(jié)。 域由域名標(biāo)記,它由其下的域組成。如果一個(gè)域包括在另一域中,則稱它為這個(gè)域的子 域。我們可能通過(guò)表示很直觀的看出。如A.B.C.D 是B.C.D ,C.D ,D 和" "的子域。
2.2. 管理規(guī)范
作為策略,DNS 技術(shù)說(shuō)明未說(shuō)明一個(gè)特定的樹(shù)結(jié)構(gòu)或什么規(guī)則來(lái)選擇標(biāo)記,此說(shuō)明希望達(dá) 到的目的是越簡(jiǎn)單越好。應(yīng)用程序的開(kāi)發(fā)可以不管名字空間的邊界和名字服務(wù)器的存在 。這不是說(shuō)沒(méi)有規(guī)矩地亂來(lái),而是把規(guī)則制定得開(kāi)放以便于處理問(wèn)題,樹(shù)的不同部分可 以有不同的規(guī)則。例如IN-ADDR.ARPA 分布在網(wǎng)絡(luò)各處,用于將網(wǎng)絡(luò)或主機(jī)號(hào)轉(zhuǎn)換為主機(jī) 名,而NetBIOS 域是平面式的,原因很簡(jiǎn)單,這樣便于應(yīng)用。但是,對(duì)于名字空間的通常
,部分,我們還是有規(guī)定的,目的是為了應(yīng)用起來(lái)比較方便。低層域名最終被分為多個(gè)區(qū) ,這樣的域應(yīng)該在頂層域上提供一個(gè)標(biāo)記使最終的解析可能不必重名字就可以完成。在 管理的時(shí)候,老的軟件可能不支持結(jié)點(diǎn)標(biāo)記中的數(shù)字,特殊字符。
2.3. 技術(shù)規(guī)范
在DNS 能夠被用來(lái)為某些種類的結(jié)點(diǎn)保存名字信息前,必須滿足下面兩個(gè)條件: 要有在對(duì)象名和域之間映射的規(guī)則,這個(gè)規(guī)則描述了關(guān)于對(duì)象的信息如何被訪問(wèn) 需要有描述對(duì)象的RR 類型和數(shù)據(jù)格式
這些規(guī)則可煩可簡(jiǎn),規(guī)則者要考慮到對(duì)現(xiàn)在格式和以后格式的兼容問(wèn)題。多映射或映射 分層是必須的。對(duì)于主機(jī),映射取決于主機(jī)名的現(xiàn)有格式,它是通常文本表示域名的子 集,加上描述主機(jī)地址的RR 格式。因?yàn)槲覀冃枰獜牡刂返街鳈C(jī)的可靠映射,所以定義了 將地址映射到IN-ADDR.ARPA 域的方法。
對(duì)了郵箱,映射會(huì)復(fù)雜一些。通常的郵件地址
域名解析方法進(jìn)行解析,這兩部分組合形成一個(gè)域名。因此郵件地址HOSTMASTER@SRI-N IC.ARPA ,會(huì)變?yōu)镠OSTMASTER.SRI-NIC.ARPA 。通常的用戶不關(guān)心這些定義的規(guī)則,但用
戶應(yīng)該理解它們使用的是一種的許多要求的綜合產(chǎn)物,有要求兼容老產(chǎn)品的,有要求添 加新功能的。
2.4. 例子
下圖是現(xiàn)在域名系統(tǒng)的一個(gè)部分,它在本文中還會(huì)經(jīng)常被用到。請(qǐng)注意,這個(gè)樹(shù)只是實(shí) 際樹(shù)的一個(gè)小小的子樹(shù)。
|
--------------------- ------------------
| | |
MIL EDU ARPA
| | |
----- ----- | ------ ----- -----
| | | | | | |
BRL NOSC DARPA | IN-ADDR SRI-NIC ACC
|
-------- ------------------ --------------- --------
| | | | |
UCI MIT | UDEL YALE
| ISI
| |
--- --- |
| | |
LCS ACHILLES -- ----- ----- --------
| | | | | |
XX A C VAXA VENERA Mockapetris
在此例中,根域有三個(gè)子域:MIL ,EDU 和ARPA ,而LCS.MIT.EDU 域有一個(gè)子域XX.LCS.MI T.EDU ,其它的節(jié)點(diǎn)也是域。
2.5. 命名規(guī)則
DNS 的命名規(guī)則是為了使對(duì)域名的命名比較統(tǒng)一。也就是要將任何現(xiàn)存的對(duì)象都可以在最
,小改動(dòng)的情況下變?yōu)橛蛎V?jǐn)慎的使用者會(huì)選擇域名適合域名系統(tǒng)和應(yīng)用程序。例如在 命名郵件域名時(shí),使用者會(huì)同時(shí)遵守相應(yīng)的郵件協(xié)議。這就使對(duì)老軟件的兼容性提高了 。下面的規(guī)則是一個(gè)較少引起問(wèn)題的規(guī)則:
請(qǐng)注意:域名內(nèi)不分大小寫(xiě)。標(biāo)記必須遵守ARPANET 主機(jī)名規(guī)則,它要求主機(jī)名必須以字 母開(kāi)始,以字母或數(shù)字結(jié)束,中間的可以是數(shù)字字母或連字符,長(zhǎng)度沒(méi)有限制。但標(biāo)記 必須少于63個(gè)字符。下面的字符串就表示了APARNET 中的主機(jī):
A.ISI.EDU XX.LCS.MIT.EDU SRI-NIC.ARPA
2.6. 資源記錄
域名標(biāo)記結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)都有資源信息集,些集可以為空。資源信息集和由分離資源集 (RR )的特殊名字相關(guān)聯(lián)。在集中的RR 順序沒(méi)有關(guān)系,標(biāo)記有這東西就是了,它不用由 名字服務(wù)器,resovler 或DNS 的其它部分保存,只在這兒有。特定的RR 我們認(rèn)為有以下幾 個(gè):
owner
RR 能夠被找到的域名
它是一個(gè)16位值,指定RR 內(nèi)的資源類型,它指一個(gè)抽象資源,具體的標(biāo)記有以下幾個(gè): A
主機(jī)地址
CNAME
一個(gè)擬名的統(tǒng)一命名
HINFO
標(biāo)記由主機(jī)使用折CPU 和OS
MX
標(biāo)記用于域的郵件交換資源
NS
此域的權(quán)威認(rèn)證名字服務(wù)器
PTR
指向其它域名空間的指針
SOA
標(biāo)記區(qū)認(rèn)證權(quán)威的開(kāi)始
class
它是一個(gè)16位值,標(biāo)記協(xié)議族或某一個(gè)協(xié)議實(shí)例,本文中使用IN 代表internet 系統(tǒng),C H 代表Chaos 系統(tǒng)
TTL
它是RR 的生存時(shí)間,它是32位整數(shù),單位是秒,它主要用于resolver 緩存RR 多長(zhǎng)時(shí)間 它是一種類型,有時(shí)是依賴于數(shù)據(jù)的類,它描述了以下資源:
A
,對(duì)于class 是IN 的,它是一個(gè)32位IP 地址,對(duì)于CH ,它是后面跟一個(gè)16位八進(jìn)制Chaos 地
址的域名
CNAME
域名
MX
作為一個(gè)域的郵件服務(wù)資源的主機(jī)名,主機(jī)名后有一個(gè)16位的配置值
NS
主機(jī)名
PTR
域名
SOA
一些域
擁有資源的名字通常是隱式的,不構(gòu)成RR 的一部分。TTL 時(shí)間只影響緩沖內(nèi)的數(shù)據(jù),不影 響區(qū)內(nèi)的已經(jīng)保存的認(rèn)證數(shù)據(jù)。TTL 通常由管理員設(shè)置,TTL=0表示禁止緩沖。RDATA 內(nèi)的
數(shù)據(jù)是二進(jìn)制串和域名的混合。域名通常使用指針指向DNS 內(nèi)的其它數(shù)據(jù)。
2.6.1. RR的文本表示
RR 在DNS 中是以二進(jìn)制形式表示的,而在名字服務(wù)器或resolver 中保存的時(shí)是經(jīng)過(guò)壓縮編 碼處理的。本文中我們采用相同于主文件中表示的表示方法,也就是不壓縮的方法,以 便顯示RR 的內(nèi)容。行開(kāi)始時(shí)給出誰(shuí)擁有RR ,如果這一位置空出,就表示本行RR 的擁有者
和上面RR 的擁有者是一個(gè)。其后是TTL ,type 和RR 的class 。RR 的RDATA 部分是在當(dāng)前數(shù)據(jù)
的表示類型的基礎(chǔ)上得到的。下面是一些RR 的例子:
ISI.EDU. MX 10 VENERA.ISI.EDU.
MX 10 VAXA.ISI.EDU.
VENERA.ISI.EDU. A 128.9.0.32
A 10.1.0.52
V AXA.ISI.EDU. A 10.2.0.27
A 128.9.0.33
其中我們注意到MX 那一部分,它的RDA TA 部分有是一個(gè)16位數(shù)后面跟一個(gè)域名組成。其它
的也就不說(shuō)了。本例子顯示了6個(gè)RR ,第三個(gè)域名有兩個(gè)RR 。下面是一個(gè)例子,它顯示在 不同的class 下如何表示:
XX.LCS.MIT.EDU. IN A 10.0.0.44
CH A MIT.EDU. 2420
2.6.2. 別名和統(tǒng)一命名
現(xiàn)存的系統(tǒng)中有時(shí)會(huì)對(duì)相同的資源有不同的命名,不但主機(jī)是這樣,郵箱也是這樣,不 同的名字指向的是同一個(gè)位置。大部分系統(tǒng)都能夠?qū)Χ鄠€(gè)名字指定一個(gè)是統(tǒng)一命名的結(jié) 果,另外的是別名。域名系統(tǒng)提供使用統(tǒng)一命名的機(jī)制(CNAME RR ),CNAME RR 標(biāo)記它
的owner 名為別名,并指出在RDA TA 部分的相應(yīng)統(tǒng)一命名。如果一個(gè)結(jié)點(diǎn)存在CNAME RR, 不應(yīng)該有其它的數(shù)據(jù),這保證了統(tǒng)一命名和它的別名不能不同。這也使得緩沖的CNAME
,可
以不用檢索認(rèn)證權(quán)威服務(wù)器就可以提供服務(wù)。在有CNAME RR時(shí),DNS 軟件如果查詢不到與
域名相關(guān)的資源,它會(huì)檢查資源集中是不是有一個(gè)有匹配class 的CNAME ,如果有,名字 服務(wù)器返回的應(yīng)答中包括這個(gè)CNAME 記錄,并根據(jù)在CNAME 中指定的數(shù)據(jù)開(kāi)始新的查詢。
下面我們看一個(gè)例子,假設(shè)名字服務(wù)器處理對(duì)USC-ISIC.ARPA 的查詢,它要求查詢A 信息 ,下面是RR 的內(nèi)容:
USC-ISIC.ARPA IN CNAME C.ISI.EDU
C.ISI.EDU IN A 10.0.0.52
這兩個(gè)RR 都作為響應(yīng)返回,而只查詢CNAME 的*查詢則只返回CNAME 。
RR 中指向其它名字的域名應(yīng)該指向主名而不是別名,這就避免了查詢中過(guò)多的轉(zhuǎn)向查詢 。例如,對(duì)于上面的RR ,它的IN-ADDR.ARPA 記錄應(yīng)該是:
52.0.0.10.IN-ADDR.ARPA IN PTR C.ISI.EDU
最后指向的是C.ISI.EDU ,而不是USC-ISIC.ARPA ,當(dāng)然一個(gè)健壯的域名軟件不會(huì)因?yàn)樘?供了循環(huán)的CNAME 而失敗。
2.7. 查詢
查詢就是發(fā)向名字服務(wù)器要求響應(yīng)的一個(gè)請(qǐng)求。在Internet 上,這種請(qǐng)求以UDP 或TCP 傳 輸,名字服務(wù)器的響應(yīng)可以是查詢結(jié)果,或是另一個(gè)名字名字器地址,要么就是一個(gè)錯(cuò) 誤信息。通常用戶并不直接發(fā)送請(qǐng)求,而是向resolver 發(fā)送請(qǐng)求,由resolver 依次將一 個(gè)或多個(gè)請(qǐng)求發(fā)向名字服務(wù)器,并負(fù)責(zé)處理錯(cuò)誤情況。請(qǐng)求和響應(yīng)有標(biāo)準(zhǔn)格式,它們包 括一個(gè)頭和數(shù)個(gè)固定的域,然后是包括查詢參數(shù)和RR 的四個(gè)部分。頭中最重要的域是稱 為操作符的東西,它指出要進(jìn)行什么操作。在所有可能的16個(gè)值中,標(biāo)準(zhǔn)查詢是必須的 ,反向查詢和狀態(tài)查詢是可選的,有一個(gè)完全查詢已經(jīng)過(guò)時(shí),其它的還未指定。而上面 的提到的四個(gè)部分如下:
Question
包括查詢名和其它參數(shù)
Answer
包括查詢結(jié)果的RR
Authority
包括一個(gè)RR ,但這個(gè)RR 包括的是另一個(gè)名字服務(wù)器
Additional
包括了一個(gè)些在其它部分中使用RR 時(shí)會(huì)有用的信息
請(qǐng)注意:因頭中操作符(碼)的不同,這些部分的內(nèi)容可能不同,但格式可是一樣的。
2.7.1. 標(biāo)準(zhǔn)查詢
標(biāo)準(zhǔn)查詢指定一個(gè)目標(biāo)域名(QNAME ),查詢類型(QTYPE )和查詢類(QCLASS ),然后 尋找相應(yīng)的RR ,這類的查詢占了DNS 查詢的絕大部分,如果未有特殊說(shuō)明,一般都指這種
查詢。
QTYPE 和QCLASS 域?yàn)?6位,是定義的type 和class 的超集。QTYPE 域可以包括:
AXFR :由QTYPE 指定的特定區(qū)
MAILB :和RR 相關(guān)的所有郵箱
*:所有RR 類型
,QCLASS 域可以包括:
*:所有的RR 類
使用查詢域名,QTYPE 和QCLASS ,名字服務(wù)器就會(huì)檢查相應(yīng)的RR ,服務(wù)器可以返回一個(gè)可
能包括相應(yīng)RR 的服務(wù)器名。例如:希望向Mockapetris@ISI.EDU發(fā)郵件,應(yīng)用程序會(huì)向r esolver 要求了解關(guān)于ISI.EDU 的信息,會(huì)產(chǎn)生下面的查詢:QNAME=ISI.EDU,QTYPE=MX, QCLASS=IN,可能產(chǎn)生響應(yīng)的區(qū)可能是:
ISI.EDU. MX 10 VENERA.ISI.EDU.
MX 10 VAXA.ISI.EDU.
隨此以外還有:
V AXA.ISI.EDU. A 10.2.0.27
A 128.9.0.33
VENERA.ISI.EDU. A 10.1.0.52
A 128.9.0.32
服務(wù)器假設(shè)如果請(qǐng)求者希望得到郵件交換(exchange )信息,它會(huì)馬上請(qǐng)求交換服務(wù)器 的地址,所以找到兩個(gè)。這里需要注意QCLASS=*類型的查詢,因?yàn)榉?wù)器不可能知道了 解域名系統(tǒng)中所有類的可用信息,它也不是所有類的認(rèn)證權(quán)威,因此這類查詢不能得到 認(rèn)證。
2.7.2. 反向查詢(可選)
名字服務(wù)器可以反映資源和域名之間的映射關(guān)系。標(biāo)準(zhǔn)查詢可以對(duì)將域名映射到SOA RR ,相應(yīng)的反向查詢則映射SOA RR到域名。
對(duì)于名字服務(wù)器來(lái)說(shuō)這種實(shí)現(xiàn)是可選的,但是所有的名字服務(wù)器必須至少能夠理解反向 查詢消息,不能說(shuō)發(fā)來(lái)的消息當(dāng)不知道。域名系統(tǒng)不保證反向查詢的完全和唯一性,因 為系統(tǒng)是按照域名而非主機(jī)地址或其它資源類型安排的。反向查詢主要用于調(diào)試,以及 和數(shù)據(jù)庫(kù)支持相關(guān)的活動(dòng)中。反向查詢可以不返回正確的TTL ,也不標(biāo)明RR 是某個(gè)集合中 的一員,我們不知道它是不是唯一的,因此反向查詢的結(jié)果不緩沖。反向查詢對(duì)于映射 主機(jī)地址到主機(jī)名是不合適的,此時(shí)要用IN-ADDR.ARPA 域。
2.8. 狀態(tài)查詢(實(shí)驗(yàn)中)
沒(méi)有定義
2.9. 完整查詢(過(guò)時(shí)的)
這里就不說(shuō)了,以后可能會(huì)支持重設(shè)計(jì)(redegsign )服務(wù)。
3. 名字服務(wù)器
3.1. 介紹
名字服務(wù)器保存了許多信息,這些信息組成了域數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)被分為區(qū),這些區(qū)在不 同的服務(wù)器上保存。服務(wù)器可以有不同的可選函數(shù)和數(shù)據(jù)源,它最基本的工作是響應(yīng)查 詢,它的響應(yīng)是是一種簡(jiǎn)單的形式進(jìn)行的,響應(yīng)可以僅根據(jù)本地?cái)?shù)據(jù)作出,也可以根據(jù) 其它相關(guān)服務(wù)器而做出。一個(gè)給定的區(qū)可以根據(jù)不同的服務(wù)器來(lái)保證其有效性,通過(guò)管 理命令,用戶可以查詢由至少兩臺(tái)服務(wù)器保存的一個(gè)區(qū)上的數(shù)據(jù),多臺(tái)服務(wù)器保存信息 保證了適當(dāng)?shù)娜哂唷?/p>
給定的名字服務(wù)器通常支持一個(gè)或多個(gè)區(qū),但只充當(dāng)域樹(shù)一小部分的認(rèn)證權(quán)威。它有一 些緩沖的非認(rèn)證信息,這些信息是域樹(shù)其它部分的,在響應(yīng)查詢時(shí)名字服務(wù)器會(huì)給出什 么時(shí)它認(rèn)證的,什么是它緩沖的。
3.2. 數(shù)據(jù)庫(kù)如何被劃分為區(qū)
,劃分?jǐn)?shù)據(jù)庫(kù)有兩種方法,一種是根據(jù)class ,另一種是在名字空間的結(jié)點(diǎn)間進(jìn)行分隔,而 產(chǎn)生,我們稱這種分隔為cut 。class (以下我們稱為類)分隔比較簡(jiǎn)單,在傳統(tǒng)上,名 字空間和所有類是一回事,分隔的類可被認(rèn)為是一系列平行的名字空間樹(shù)。創(chuàng)建新類的 通常理由是要為已有的類型創(chuàng)建新的數(shù)據(jù)格式,或是為了對(duì)已有的名字空間進(jìn)行分隔管 理。在一個(gè)類中可在兩個(gè)相鄰的結(jié)點(diǎn)進(jìn)行cut (以下我們稱為切分),在所有的切分完成 后,相連空間的每個(gè)組就是一個(gè)獨(dú)立的區(qū)。此區(qū)是在相連區(qū)域內(nèi)所有數(shù)據(jù)的認(rèn)證權(quán)威。 這種方法意味著所有的區(qū)至少有一個(gè)結(jié)點(diǎn),域名和所有特定區(qū)內(nèi)的結(jié)點(diǎn)是相連的。給定 的樹(shù)型結(jié)構(gòu)一定有一個(gè)點(diǎn)更加靠近根,我們用這個(gè)點(diǎn)標(biāo)記這個(gè)區(qū)。雖然可能沒(méi)什么用, 也可以將每個(gè)域名分在不同的區(qū)中,也可以讓所有的結(jié)點(diǎn)在一個(gè)區(qū)中。另外,數(shù)據(jù)庫(kù)也 可根據(jù)不同企業(yè)對(duì)名字的控制進(jìn)行劃分,有些企業(yè)可能希望自己管理某一部分域名子樹(shù) ,這時(shí)這個(gè)企業(yè)就可以對(duì)域名進(jìn)行相應(yīng)的增加或刪除操作,可以自己加入自己的下一級(jí) 域名。當(dāng)然,這個(gè)企業(yè)也可以對(duì)自己管理的名字空間進(jìn)行進(jìn)一步劃分。
3.2.1. 技術(shù)問(wèn)題
描述一個(gè)區(qū)的數(shù)據(jù)有四部分:
區(qū)中所有結(jié)點(diǎn)的認(rèn)證數(shù)據(jù)
定義區(qū)內(nèi)頂結(jié)點(diǎn)的數(shù)據(jù)(此數(shù)據(jù)可被認(rèn)為是認(rèn)證數(shù)據(jù)的一部分)
描述代表子區(qū)的數(shù)據(jù)
訪問(wèn)服務(wù)器子區(qū)的數(shù)據(jù)(我們也稱為“相關(guān)”(glue )數(shù)據(jù))
所有這些數(shù)據(jù)以RR 的形式表示,所有區(qū)可以被RR 集的形式描述。通過(guò)傳輸RR ,可以傳輸
整個(gè)區(qū),具體的方法可以是通過(guò)FTP 傳輸相應(yīng)的文本文件,或是通過(guò)網(wǎng)絡(luò)消息的形式傳輸 。一個(gè)區(qū)的認(rèn)證數(shù)據(jù)是所有的RR ,這些RR 和樹(shù)中所有的結(jié)點(diǎn)是關(guān)聯(lián)的,要么就是切分后 的結(jié)點(diǎn)關(guān)聯(lián)。描述頂結(jié)點(diǎn)的RR 對(duì)于區(qū)的管理特別重要,這些RR 有兩種類型,名字服務(wù)器 RR ,它描述了區(qū)中的服務(wù)器列表;另一種是SOA RR,它描述的區(qū)的管理參數(shù)。
描述切分的RR 是NS RR,因?yàn)榍蟹质窃诮Y(jié)點(diǎn)間進(jìn)行的,所有RR 不是區(qū)認(rèn)證數(shù)據(jù)的一部分, 它應(yīng)該和相應(yīng)的在子區(qū)內(nèi)的頂結(jié)點(diǎn)一致。因?yàn)槊址?wù)器通常和區(qū)邊界相關(guān),NS RR只在 一些區(qū)的頂結(jié)點(diǎn)上有。在組成一個(gè)區(qū)的數(shù)據(jù)中,NS RR在頂層結(jié)點(diǎn)和在邊界底的切分處出 現(xiàn),不在其它地方。
區(qū)結(jié)構(gòu)所要實(shí)現(xiàn)的一個(gè)目標(biāo)是任何區(qū)都有足夠的數(shù)據(jù)可以和任何子區(qū)建立通信。也就是 說(shuō),父區(qū)有足夠的信息可以訪問(wèn)子區(qū)中的任何一臺(tái)名字服務(wù)器。NS RR命名了子區(qū)服務(wù)器 ,它不足以完成上面的要求,因此有了名字但仍然不知道地址。特別地,如果名字服務(wù) 器的名字在子區(qū)內(nèi)是它自己,我們就無(wú)法知道通過(guò)它的任何信息了。為了解決這一問(wèn)題 ,區(qū)中包括了一個(gè)關(guān)聯(lián)RR ,它不是認(rèn)證權(quán)威數(shù)據(jù)的一部分,但它表示了服務(wù)器的地址。 如果名字服務(wù)器名在切分下,就需要這些RR 了。
3.2.2. 管理問(wèn)題
當(dāng)有些組織希望掌握自己的域時(shí),第一步是標(biāo)記合適的父區(qū),然后取得父區(qū)中管理結(jié)點(diǎn) 的許可來(lái)管理。管理的時(shí)候沒(méi)有什么具體的技術(shù)問(wèn)題,可是還是有一些規(guī)則的,對(duì)中型 的區(qū)可以沒(méi)有這些規(guī)定,但是小型的就不行了。本文不具體討論這一問(wèn)題了,有興趣可 參閱相關(guān)的資料。
一旦選擇了子區(qū)的名字,此區(qū)的新管理結(jié)點(diǎn)要冗余的名字服務(wù)器來(lái)支持。注意:沒(méi)有要 求一個(gè)區(qū)的服務(wù)器必須在此域中有名字的主機(jī)上。在許多種情況下,一個(gè)區(qū)要想被更容 易地訪問(wèn)到最好把內(nèi)容放得分散一點(diǎn),不要集中在一起?,F(xiàn)在許多國(guó)家的名字服務(wù)器是 放置在別國(guó)的,這樣在取得名字解析的時(shí)候不用把請(qǐng)求千里迢迢送到遠(yuǎn)程主機(jī)上去了。 作為配置的最后一步,就是要選擇NS RR和關(guān)聯(lián)RR 。
,3.3. 深入名字服務(wù)器
3.3.1. 查詢和響應(yīng)
名字服務(wù)器的主要內(nèi)容就是響應(yīng)標(biāo)準(zhǔn)查詢。查詢和響應(yīng)有專用的格式,查詢包括QTYPE , QCLASS 和QNAME ,它描述了需要數(shù)據(jù)的類型,類(class )和名字。服務(wù)器的響應(yīng)取決于 它支持不支持循環(huán)查詢:
最簡(jiǎn)單的是不支持循環(huán)查詢,它返回的要么是本地信息,要么是一個(gè)錯(cuò)誤碼,告訴用戶 你要的信息這里沒(méi)有,然后再返回一個(gè)鄰近服務(wù)器的地址,讓用戶到那里去查一查。 如果支持循環(huán)查詢,那名字服務(wù)器如果未能在本地找到相應(yīng)的信息,就代替用戶向其它 服務(wù)器進(jìn)行查詢,這時(shí)它是代替用戶扮演了resolver 的角色,直到最后把結(jié)果找到(也 可能根本沒(méi)有結(jié)果,那就返回錯(cuò)誤),并返回給用戶為止。
使用循環(huán)查詢要客戶和服務(wù)器雙方都支持才行。這個(gè)信息通過(guò)查詢和響應(yīng)中的兩位來(lái)交 換:
如果允許循環(huán)查詢則設(shè)置RA 位,服務(wù)器方可以不管客戶是否進(jìn)行請(qǐng)求而直接設(shè)置此位 查詢中如果請(qǐng)求循環(huán)查詢則設(shè)置RD 位,客戶只有在知道服務(wù)器方支持循環(huán)查詢后才能夠 進(jìn)行循環(huán)查詢請(qǐng)求
客戶可以在響應(yīng)中同時(shí)設(shè)置RA 和RD 位來(lái)確認(rèn)是否支持循環(huán)查詢請(qǐng)求。請(qǐng)注意:服務(wù)器在 客戶未指明RD 位時(shí)不會(huì)自己進(jìn)行循環(huán)查詢。
如果請(qǐng)求了循環(huán)查詢,同時(shí)也支持循環(huán)查詢,對(duì)查詢的響應(yīng)會(huì)是以下之一:
查詢指定的CNAME RR有多個(gè)別名
指定的名字服務(wù)器不存在
臨時(shí)錯(cuò)誤
如果未請(qǐng)求循環(huán)查詢或不支持循環(huán)查詢,則響應(yīng)可以可能是:
- 認(rèn)證權(quán)威服務(wù)器指出名字不存在
- 臨時(shí)錯(cuò)誤
另外還會(huì)提供一些信息,指出所查詢的RR 是否從一個(gè)區(qū)來(lái),或者是不是被緩存;另一種 信息指明名字服務(wù)器指出還有一個(gè)服務(wù)器擁有相同的記錄,這個(gè)服務(wù)器更靠近要查詢的 名字的祖先。
3.3.2. 算法
名字服務(wù)器使用的算法和本地操作系統(tǒng)和數(shù)據(jù)結(jié)構(gòu)相關(guān),下面的算法假設(shè)RR 以幾個(gè)樹(shù)型 結(jié)構(gòu)組織,一個(gè)樹(shù)就是區(qū),有一個(gè)樹(shù)是用于緩沖的:
是不是支持循環(huán)查詢要看服務(wù)器,如果支持,而且需要循環(huán)查詢,轉(zhuǎn)到第5步;
查詢最靠近QNAME 祖先的結(jié)點(diǎn)所在的區(qū),如果未找到這個(gè)區(qū),轉(zhuǎn)第4步;
開(kāi)始在區(qū)內(nèi)從上到下進(jìn)行匹配,匹配過(guò)程的結(jié)束條件有以下幾個(gè):
如果整個(gè)QNAME 匹配了,我們就找到了。如果數(shù)據(jù)所在結(jié)果是CNAME ,QTYPE 不匹配CNAME
,復(fù)制CNAME RR到響應(yīng)的應(yīng)答區(qū),將QNAME 改變?yōu)镃NAME RR中的標(biāo)準(zhǔn)形式后返回第1步;
否則復(fù)制所有匹配QTYPE 的RR 到響應(yīng)的應(yīng)答區(qū),然后轉(zhuǎn)第6步;
如果匹配的結(jié)果使我們離開(kāi)了認(rèn)證權(quán)威,我們就獲得一個(gè)參照(referral ),我們這時(shí)
會(huì)碰到一個(gè)帶有NS RR的結(jié)點(diǎn),復(fù)制NS RR到響應(yīng)的認(rèn)證區(qū)內(nèi),在其它區(qū)域隨便放上什么 地址,如果從認(rèn)證數(shù)據(jù)或緩沖內(nèi)沒(méi)有獲得地址,可以使用關(guān)聯(lián)RR 。然后轉(zhuǎn)到第4步; 如果在一些標(biāo)記上不可能有匹配,看看是不是有"*"標(biāo)記存在,如果"*"標(biāo)記不存在,檢 查我們要查找的名字是不是QNAME ,如果名字就是原來(lái)的QNAME ,在響應(yīng)中設(shè)置錯(cuò)誤,否
,則退出。如果"*"存在,以RR 和QTYPE 匹配,如果匹配成功,將它們復(fù)制到響應(yīng)中,但設(shè) 置RR 的擁有者(owner )為QNAME ,不是帶有"*"的結(jié)點(diǎn),然后轉(zhuǎn)到第6步;
在緩沖中進(jìn)行匹配,如果在緩沖中找到QNAME ,將所有和它關(guān)聯(lián)的而且匹配QTYPE 的RR 復(fù)
制到響應(yīng)區(qū),如果沒(méi)有從認(rèn)證權(quán)威來(lái)的授權(quán),可以在緩沖中尋找最好的一個(gè),將它放在 認(rèn)證區(qū)內(nèi),然后轉(zhuǎn)到第6步;
使用本地resolver 響應(yīng)請(qǐng)求。保存包括中間CNAME 在內(nèi)的結(jié)果到應(yīng)答中。
僅使用本地?cái)?shù)據(jù),試著加入其它有用的RR 到查詢的附加部分。然后退出。
3.3.3. Wildcard
在前面的算法中,我們對(duì)其擁有者以*開(kāi)始的RR 進(jìn)行了特殊處理,這類的RR 稱為wildcar ds 。Wildcard RR 可以看成合成RR 的指令,在有合適的條件時(shí),服務(wù)器創(chuàng)建RR ,這個(gè)RR 的
擁有者名和查詢名相同,而內(nèi)容是從wildcard RR獲得的。這種機(jī)制經(jīng)常用于創(chuàng)建一個(gè)區(qū) ,這個(gè)區(qū)可用于在網(wǎng)絡(luò)上從一個(gè)郵件系統(tǒng)向另一個(gè)郵件系統(tǒng)轉(zhuǎn)發(fā)郵件。這種情況下,通 常的假設(shè)是區(qū)中的所有名字都存在,只要沒(méi)有說(shuō)不存在,都認(rèn)為有。
wildcard RR的內(nèi)容遵守通常RR 的格式,區(qū)中的wildcard 有一個(gè)擁有者名,它控制者可以 進(jìn)行匹配的查詢名。wildcard RR的擁有者名是以下的形式:"*.
如果區(qū)中已經(jīng)存在了它所代表的某個(gè)域。例如,如果wildcard RR有"*.X",區(qū)中包括了
B.X ,那么wildcard 就不代表B.X ,A.B.X 或X ,而只能代表Z.X 了。
在查詢名中的*沒(méi)有什么特殊作用,它只用于在認(rèn)證權(quán)威區(qū)中檢測(cè)wildcard ,這樣的查詢 是唯一可以在響應(yīng)中獲得包括擁有者名中包含*的查詢請(qǐng)求,其它請(qǐng)求的響應(yīng)都不能包含 *。這樣查詢的結(jié)果不能緩沖。在合成RR 時(shí),wildcard RR的內(nèi)容不應(yīng)該被改變。
下面是一個(gè)例子,我們假設(shè)一個(gè)大公司有一個(gè)大型的非TCP/IP網(wǎng)絡(luò),它要?jiǎng)?chuàng)建一個(gè)郵件 網(wǎng)關(guān)。如果公司是X.COM ,而TCP/IP網(wǎng)關(guān)為A.X.COM ,下面的RR 可能會(huì)在COM 區(qū)中: X.COM
MX
10
A.X.COM
*.X.COM
MX
10
A.X.COM
A.X.COM
A
1.2.3.4
A.X.COM
MX
10
A.X.COM
*.A.X.COM
MX