DNS解析原理
內(nèi)部公開▲DNS 域名解析原理(轉(zhuǎn)帖)從應(yīng)用的角度上看,對(duì)DNS 的訪問是通過一個(gè)地址解析器(resolver )來完成的。在Unix 該解析器主要是通過兩個(gè)庫(kù)函數(shù)gethostbyname(3) 和
內(nèi)部公開▲
DNS 域名解析原理(轉(zhuǎn)帖)
從應(yīng)用的角度上看,對(duì)DNS 的訪問是通過一個(gè)地址解析器(resolver )來完成的。在Unix 該解析器主要是通過兩個(gè)庫(kù)函數(shù)gethostbyname(3) 和gethostbyaddr( 3 )來訪問 的,它們?cè)诰幾g應(yīng)用程序時(shí)與應(yīng)用程序連接在一起。前者接收主機(jī)名字返回I P地址,而后者 接收IP 地址來尋找主機(jī)名字。解析器
通過一個(gè)或多個(gè)名字服務(wù)器來完成這種相互轉(zhuǎn)換。
DNS 基礎(chǔ)
DNS 的名字空間和Unix 的文件系統(tǒng)相似,也具有層次結(jié)構(gòu)。
每個(gè)結(jié)點(diǎn)(如noao 就是一個(gè)節(jié)點(diǎn))有一個(gè)至多63個(gè)字符長(zhǎng)的標(biāo)識(shí)。這顆樹的樹根是沒有任何標(biāo)識(shí)的特殊結(jié)點(diǎn)。命名標(biāo)識(shí)中一律不區(qū)分大寫和小 寫。命名樹上任何一個(gè)結(jié)點(diǎn)的域名就是將從該結(jié)點(diǎn)到最高層的域名串連起來,中間使用一個(gè)點(diǎn)“.”分隔這些域名(注意這和Unix 文件系統(tǒng)路徑的形成不同,文 件路徑是由樹根依次向下的形成的)。域名樹中的每個(gè)結(jié)點(diǎn)必須有一個(gè)唯一的域名,但域名樹中的不同結(jié)點(diǎn)可使
用相同的標(biāo)識(shí)。
以點(diǎn)“.”結(jié)尾的域名稱為絕對(duì)域名或完全資格的域名FQDN (Full Qualified Domain Name),例如sun.tuc.noao.edu .。如果一個(gè)域名不以點(diǎn)結(jié)尾,則認(rèn)為該域名是不完全的。 如何使域名完整依賴于使用的DNS 軟件。如果不完整的域名由兩個(gè)或兩個(gè)以上的標(biāo)號(hào)組成, 則認(rèn)為它是完整的;或者在該域名的右邊加
入一個(gè)局部后綴。例如域名s u n通過加上局部后綴.tuc.noao.edu. 成為完整的。
所以設(shè)置 DNS是要注意 完全資格的域名 和不完整的域名 的區(qū)別,很多 DNS服務(wù)器的控制面板都是這樣的,比如eNom 的MX 設(shè)置 需要在 域名后 加一個(gè)局部后綴 "." 使其成為 FQDN 未命名樹
根 ()
頂級(jí)域 arpa com edu gov int mil net org biz info ae..us..zw
頂級(jí)域名分為三部分:
1)arpa是一個(gè)用作地址到名稱轉(zhuǎn)換的特殊域
2)3字符長(zhǎng)的普通域(組織域)
3)2字符的國(guó)家域(地理域)
解析
正向解析,IPv4的地址正向解析的資源記錄是"A"
反向解析,IPv4反向解析的記錄是“PTR”(指針記錄)
DNS 中一直難于理解的部分就是指針查詢方式,即給定一個(gè)IP 地址,返回與該地址對(duì)應(yīng)的域名。 首先 查看一下 頂級(jí)域 arpa,及它下面的in-addr 域。當(dāng)一個(gè)組織加入Internet ,并獲得DNS 域名空間的授權(quán),如noao.edu ,則它們也獲得了對(duì)應(yīng)IP 地址 的in-addr.arpa 域名空間的授權(quán)。在noao.edu 這本文所有信息為中興通訊股份有限公司內(nèi)部信息,未經(jīng)允許,不得外傳 第1頁(yè),共7頁(yè)
,內(nèi)部公開▲ 個(gè)例子中,它是網(wǎng)絡(luò)號(hào)為140.252的B 類網(wǎng)絡(luò)。在DNS 樹中結(jié)點(diǎn)in- addr.arpa的下一級(jí)必須是該IP 地址的第一字節(jié)(例中為140),再下一級(jí)為該IP 地址的下一個(gè)字節(jié)(252),依此類推。但應(yīng)牢記的是DNS 名 字是由DNS 樹的底部逐步向上書寫的。這意味著對(duì)于IP 地址為140.252.13.33的sun 主機(jī),它的DNS 名字為 33.13.252.140.in-addr.arpa。必須寫出4字節(jié)的IP 地址,因?yàn)槭跈?quán)的代表是基于網(wǎng)絡(luò)號(hào): A類地址是第一字節(jié),B 類地址是第一、二字節(jié),C 類地址則是第一、二、三字節(jié)。IP 地址的第一字節(jié)一定位于in-addr 的下一級(jí),但FQDN 卻是自樹底 往上書寫的。如果FQDN 由頂往下書寫,則這個(gè)IP 地址的DNS
名字將是arpa.in-addr.140.252.13.33,而它所對(duì)應(yīng)的域名將是 edu.noao.tuc.sun。
如果DNS 樹中沒有獨(dú)立的分支來處理這種地址—名字的轉(zhuǎn)換,將無法進(jìn)行這種反向轉(zhuǎn)換,除非從樹根開始依次嘗試每個(gè)頂級(jí)域。毫不夸張地說, 這將需要數(shù)天或數(shù)周的時(shí)間。雖然反寫IP 地址和特殊的域名會(huì)造成某些混亂,但in-addr 解決方案仍是一種最有效的方式。只有在使用host 程序或 tcpdump程序直接同DNS 打交道時(shí),才會(huì)擔(dān)心in-addr 域和反寫IP 地址影響我們。從應(yīng)用的角度上看,正常的名字解析器函數(shù)( gethostbyaddr )將接收一個(gè)IP 地址并返回對(duì)應(yīng)主機(jī)的有關(guān)信息。反轉(zhuǎn)這些字節(jié)和添加in-addr.arpa
域均由該函數(shù)自動(dòng)完成。
在反向解析的命名空間中, 所有的 IP 組成一個(gè)叫作 arpa.in-addr 的 頂級(jí)域, 然后再按 IP 層層細(xì)分 比如 166.111.4.100 ,我們可以在負(fù)責(zé) 4.1111.166.in-addr.arpa(注意是過來寫, 因?yàn)?頂級(jí)域 要在最后
面) 這個(gè) 子域名 的機(jī)器上, 可以查到其 映射表 上有一個(gè)記錄是 100
在PHP 中也有兩個(gè)跟C 中一模一樣的函數(shù)可以調(diào)用
運(yùn)行這段腳本,就可以 顯示 www.tsinghua.edu.cn 哈哈,這是清華大學(xué)的web 服務(wù)器
實(shí)際過程放大到這里: Asking e.root-servers.net for 100.4.111.166.in-addr.arpa PTR record:
e.root-servers.net says to go to figwort.arin.net.
(zone: 166.in-addr.arpa.)
Asking figwort.arin.net. for 100.4.111.166.in-addr.arpa PTR record:
figwort.arin.net [192.42.93.32] says to go to dns.tsinghua.edu.cn.
(zone: 111.166.in-addr.arpa.)
Asking dns.tsinghua.edu.cn. for 100.4.111.166.in-addr.arpa PTR record:
dns.tsinghua.edu.cn [166.111.8.30] says to go to dns.cic.tsinghua.edu.cn.
(zone: 4.111.166.in-addr.arpa.)
Asking dns.cic.tsinghua.edu.cn. for 100.4.111.166.in-addr.arpa PTR record:
Reports www.tsinghua.edu.cn. [from 166.111.4.5]
Answer:
本文所有信息為中興通訊股份有限公司內(nèi)部信息,未經(jīng)允許,不得外傳 第2頁(yè),共7頁(yè)
,內(nèi)部公開▲ 166.111.4.100 PTR record: www.tsinghua.edu.cn. [TTL 86400s] [A=166.111.4.100]
不過gethostbyaddr 很難由IP 得出主機(jī)名,這是因?yàn)殡娦牛ū热缟虾k娦牛?他們沒有作 各個(gè)IP 對(duì)于的主機(jī)名,其實(shí)的確很難作的,對(duì)于流動(dòng)性很強(qiáng)的IDC 機(jī)房和ADSL 用戶IP ,的確沒有對(duì)應(yīng)的主機(jī)名
比如,我們查im286.com
Asking e.root-servers.net for 211.251.152.61.in-addr.arpa PTR record:
e.root-servers.net says to go to ns1.apnic.net.
(zone: 61.in-addr.arpa.)
Asking ns1.apnic.net. for 211.251.152.61.in-addr.arpa PTR record:
ns1.apnic.net [202.12.29.25] says to go to nns.sta.net.cn.
(zone: 152.61.in-addr.arpa.)
Asking nns.sta.net.cn. for 211.251.152.61.in-addr.arpa PTR record:
nns.sta.net.cn [61.152.82.18] says to go to ns2.edatahome.com.
(zone: 211.251.152.61.in-addr.arpa.)
Asking ns2.edatahome.com. for 211.251.152.61.in-addr.arpa PTR record:
ns2.edatahome.com [202.109.72.188] says to go to ns1.edatahome.com.
(zone: 211.251.152.61.in-addr.arpa.)
Asking ns1.edatahome.com. for 211.251.152.61.in-addr.arpa PTR record:
ns1.edatahome.com [202.109.72.189] says to go to ns.sta.net.cn.
(zone: 152.61.in-addr.arpa.)
Asking ns.sta.net.cn. for 211.251.152.61.in-addr.arpa PTR record:
ns.sta.net.cn [202.96.199.133] says to go to ns2.edatahome.com.
(zone: 211.251.152.61.in-addr.arpa.)
暈倒了,ns.sta.net.cn 和ns1.edatahome.com 和ns2.edatahome.com 這3個(gè)白癡相互推諉
就是說找不到 61.152.251.211 對(duì)應(yīng)的主機(jī)名了
本文所有信息為中興通訊股份有限公司內(nèi)部信息,未經(jīng)允許,不得外傳 第3頁(yè),共7頁(yè)
,內(nèi)部公開▲ 有兩點(diǎn)需要說明的是: 1.負(fù)責(zé)正向解析(forward mapping) 和 反向解析(reverse mapping) 的DNS 服務(wù)器不一定是同一臺(tái) 即使是同一臺(tái), 如果不注意的話, 兩邊的內(nèi)容可能也可能有不匹配的情況
2.domain 與ip 子網(wǎng)并沒有一對(duì)一的關(guān)系 如清華大學(xué)的 domain是tsinghua.edu.cn , 但是它的IP
子網(wǎng)有多個(gè),166.111是最古老的一個(gè)而已
zone
談到了解析和域名之后,應(yīng)該說說zone 了。
所謂 zone 就是把一個(gè) domain 扣掉 分給下層域 負(fù)責(zé)的部份, 剩下來的就是 zone.就是一個(gè)
domain ,可能會(huì)將sub domain授權(quán)給下級(jí)的 DNS服務(wù)器去解析。 準(zhǔn)確的說,一個(gè)獨(dú)立管理的DNS 子樹稱為一個(gè)區(qū)域( zone )。一個(gè)常見的區(qū)域是一個(gè)二級(jí)域,如 noao.edu。許多二級(jí)域?qū)⑺鼈兊膮^(qū)域劃分成更
小的區(qū)域。例如,大學(xué)可能根據(jù)不同的系來 劃分區(qū)域,公司可能根據(jù)不同的部門來劃分區(qū)域。 如果你熟悉Unix 的文件系統(tǒng),會(huì)注意到DNS 樹中區(qū)域的劃分同一個(gè)邏輯Unix 文件 系統(tǒng)到物理磁盤分區(qū)的劃分很相似。正如無法確定 區(qū)域的具體位置,我們也 不知道一個(gè)Unix 文件系統(tǒng)中的目錄位于哪個(gè)
磁盤分區(qū)。
一旦一個(gè)區(qū)域的授權(quán)機(jī)構(gòu)被委派后,由它負(fù)責(zé)向該區(qū)域提供多個(gè)名字服務(wù)器。當(dāng)一個(gè)新 系統(tǒng)加入到一個(gè)區(qū)域中時(shí),該區(qū)域的DNS 管理者為該新系統(tǒng)申請(qǐng)一個(gè)域名和一個(gè)IP 地址,并 將它們加到名字服務(wù)器的數(shù)據(jù)庫(kù)中。這就是授權(quán)機(jī)構(gòu)存在的必要性。例如,在一個(gè)小規(guī)模的 大學(xué),一個(gè)人就能完成每次新系統(tǒng)的加入。但對(duì)一個(gè)規(guī)模較大的大學(xué)來說,這一工作必須被 專門委派的機(jī)構(gòu)(可能是系)來完成,因?yàn)橐粋€(gè)人
已無法維持這一工作。
一個(gè)名字服務(wù)器負(fù)責(zé)一個(gè)或多個(gè)區(qū)域。一個(gè)區(qū)域的管理者必須為該區(qū)域提供一個(gè)主名字 服務(wù)器和至少一個(gè)輔助名字服務(wù)器。主、輔名字服務(wù)器必須是獨(dú)立和冗余的,以便當(dāng)某個(gè)名 字服務(wù)器發(fā)生故障時(shí)不會(huì)
影響該區(qū)域的名字服務(wù)。
主、輔名字服務(wù)器的主要區(qū)別在于主名字服務(wù)器從磁盤文件中調(diào)入該區(qū)域的所有信息, 而輔名字服務(wù)器則從主服務(wù)器調(diào)入所有信息。我們將輔名字服務(wù)器從主服務(wù)器調(diào)入信息稱為 區(qū)域傳送。 當(dāng)一個(gè)新主機(jī)加入一個(gè)區(qū)域時(shí),區(qū)域管理者將適當(dāng)?shù)男畔ⅲㄗ钌侔趾虸P 地址)加 入到運(yùn)行在主名字服務(wù)器上的一個(gè)磁盤文件中,然后通知主名字服務(wù)器重新調(diào)入它的配置文 件。輔名字服務(wù)器定時(shí)(通常是每隔3小時(shí))向主名字服務(wù)器詢問是否有新數(shù)據(jù)。如果有新數(shù) 據(jù),則通過區(qū)域傳送方式獲得新數(shù)據(jù)。不要扯遠(yuǎn)了,我們接著說zone, 對(duì)于BIND (世界上最常用的DNS 程序),一個(gè)zone 就對(duì)應(yīng)著一個(gè)
/etc/namedb目錄下的文件
比如localhost 的zone 文件 localhost
1|$TTL 3600
2|@ IN SOA strider.diverge.org. hostmaster.diverge.org. (
3| 1 ; Serial
本文所有信息為中興通訊股份有限公司內(nèi)部信息,未經(jīng)允許,不得外傳 第4頁(yè),共7頁(yè)
,內(nèi)部公開▲
4| 8H ; Refresh
5| 2H ; Retry
6| 1W ; Expire
7| 1D) ; Minimum TTL
8| IN NS localhost.
9|localhost. IN A 127.0.0.1
10| IN AAAA ::1
我們作DNS 查詢時(shí)的信息,就是從Zone 文件里取得的
附:幾個(gè)有名的DNS 程序 BIND (Berkeley Internet Name Domain)
(這個(gè)網(wǎng)站大家應(yīng)該都知道吧,很多root server就是他們架設(shè)的,北京就有)
DJBDNS (Dan J Bernstein's DNS implementation)
MaraDNS
NSD (Name Server Daemon)
PowerDNS
(這個(gè)也和有名,相信很多人還用這他們的免費(fèi)的DNS 服務(wù)吧)
TinyDNS (近來也很流行的開源DNS 軟件)
Root Server
當(dāng)一個(gè)名字服務(wù)器沒有請(qǐng)求的信息時(shí),它將如何處理?它必須與其他的名字服務(wù)器聯(lián)系。 (這正是DNS 的分布特性)。然而,并不是每個(gè)名字服務(wù)器都知道如何同其他名字服務(wù)器聯(lián)系。 相反,每個(gè)名字服務(wù)器必須知道如何同根的名字服務(wù)器聯(lián)系。1993年4月時(shí)有8個(gè)根名字服務(wù) 器,所有的主名字服務(wù)器都必須知道根服務(wù)器的IP 地址(這些I P地址在主名字服務(wù)器的配置 文件中,主服務(wù)器必須知道根服務(wù)器的IP 地址,而不是它們的域名)。根服務(wù)器則知道所有二 級(jí)域中的每個(gè)授權(quán)名字服務(wù)器的名字和位置(即IP 地址)。這意味著這樣一個(gè)反復(fù)的過程:正 在處理請(qǐng)求的名字服務(wù)器與根服務(wù)器聯(lián)系,根服務(wù)器告訴它與
另一個(gè)名字服務(wù)器聯(lián)系。
本文所有信息為中興通訊股份有限公司內(nèi)部信息,未經(jīng)允許,不得外傳 第5頁(yè),共7頁(yè)
,內(nèi)部公開▲
你可以通過匿名的F T P獲取當(dāng)前的根服務(wù)器清單。具體是從ftp.rs.internic.net (在/domain這個(gè)目
錄下) 或nic.ddn.mil 獲取文件netinfo/root-servers.txt。
比如我國(guó)的頂級(jí)域名CN 的根服務(wù)器
是 CN. NS NS.CNC.AC.CN. CN. NS DNS2.CNNIC.NET.CN. CN. NS NS.CERNET.NET. CN. NS DNS3.CNNIC.NET.CN. CN. NS DNS4.CNNIC.NET.CN. CN. NS DNS5.CNNIC.NET.CN. COM的根服務(wù)器是 COM. NS A.GTLD-SERVERS.NET. COM. NS G.GTLD-SERVERS.NET. COM. NS H.GTLD-SERVERS.NET. COM. NS C.GTLD-SERVERS.NET. COM. NS I.GTLD-SERVERS.NET. COM. NS B.GTLD-SERVERS.NET. COM. NS D.GTLD-SERVERS.NET. COM. NS L.GTLD-SERVERS.NET. COM. NS F.GTLD-SERVERS.NET. COM. NS J.GTLD-SERVERS.NET. COM. NS K.GTLD-SERVERS.NET. COM. NS E
.GTLD-SERVERS.NET. COM. NS M.GTLD-SERVERS.NET.
DNS 的一個(gè)基本特性是使用超高速緩存。即當(dāng)一個(gè)名字服務(wù)器收到有關(guān)映射的信息(主 機(jī)名字到IP 地址)時(shí),它會(huì)將該信息存放在高速緩存中。這樣若以后遇到相同的映射請(qǐng)求, 就能直接使用緩存中的結(jié)
果而無需通過其他服務(wù)器查詢。
資源記錄RR
A 一個(gè)A 記錄定義了一個(gè)IP 地址,它存儲(chǔ)32bit 的二進(jìn)制數(shù)。 PTR 指針記錄用于指針查詢。IP 地址被看作是in-addr.arpa 域下的一個(gè)域名(標(biāo)識(shí)符串)。 CNAME 這表示“規(guī)范名字(canonical name)”。它用來表示一個(gè)域名(標(biāo)識(shí)符串),而 有規(guī)范名字的域名通常被稱為別名(alias)。某些FTP 服務(wù)器使用它向其他的系統(tǒng)提供一個(gè)易于記憶的別名。 例如,gated 服務(wù)器可通過匿名FTP 從gated.cornell.edu 獲得,但這里并沒有叫做gated 的系統(tǒng),這僅是為其他系統(tǒng)提供的別名。其他 系統(tǒng)的規(guī)范名為gated.cornell.edu 。
HINFO 表示主機(jī)信息:包括說明主機(jī)CPU 和操作系統(tǒng)的兩個(gè)字符串。并非所有的站 點(diǎn)均提供它們
系統(tǒng)的HINFO 記錄,并且提供的信息也可能不是最新的。
MX 郵件交換記錄,用于以下一些場(chǎng)合: (1)一個(gè)沒有連到Internet 的站點(diǎn)能將一個(gè)連到Internet 的站點(diǎn)作為它的郵件交換器。這兩個(gè)站點(diǎn)能夠用一種交替的方式交 換到達(dá)的郵件,而通常使用的協(xié)議是UUCP 協(xié)議。 (2)MX 記錄提供了一種將無法到達(dá)其目的主機(jī)的郵件傳送到一個(gè)替代主機(jī)的方式。 (3M X記錄允許機(jī)構(gòu)提供供他人發(fā)送郵件的虛擬主機(jī),如c s . u n i v e r s i t y . e d u,即使這樣的主機(jī) 名根
本不存在。 (4)防火墻網(wǎng)關(guān)能使用MX 記錄來限制外界與內(nèi)部系統(tǒng)的連接。
許多不能與Internet 連接的站點(diǎn)通過UUCP 鏈路與一個(gè)連接在Internet 上的站點(diǎn) 如UUNET 相連接通過MX 記錄能使用user@host這種郵件地址向那個(gè)站點(diǎn)發(fā)送電子郵件。例如,一個(gè)假想的域foo.com 可
能有下面的MX 記錄: foo.com MX relay1.UU.NET foo.com MX relay2.UU.NET
MX 記錄能被連接在互聯(lián)網(wǎng)主機(jī)中的郵件處理器使用。在這個(gè)例子中,其他的 郵件處理器則被告知“如
果有郵件要發(fā)往user@foo.com,就將郵件送到 relay1.uu.net或relay2.uu.net ?!?/p>
每個(gè)MX 記錄被賦于一個(gè)16bit 的整數(shù)值,該值稱為優(yōu)先值。如果一個(gè)目的主 機(jī)有多個(gè)MX 記錄,它
們按優(yōu)先值由小到大的順序使用。
另一個(gè)MX 記錄的例子是處理主機(jī)脫機(jī)工作或不可達(dá)的情況。郵件處理器僅在 無法使用TCP 與目的
主機(jī)連接時(shí)才使用MX 記錄。
本文所有信息為中興通訊股份有限公司內(nèi)部信息,未經(jīng)允許,不得外傳 第6頁(yè),共7頁(yè)
,內(nèi)部公開▲ NS 名字服務(wù)器記錄。它說明一個(gè)域的授權(quán)名字服務(wù)器。它由域名表示(符號(hào)串)
SOA Start of Authority. 定義zone 的名稱, 聯(lián)系e-mail 和刷新時(shí)間等等
授權(quán)
每個(gè)domain 都可因?qū)嶋H需求再細(xì)分成許多 sub domain. 上層的 domain 可以將其分出的某
個(gè) sub domain 的 domain name 與 IP mapping 交由另一部機(jī)器管理,
這個(gè)動(dòng)作稱之為 delegation(授權(quán))
當(dāng)我要搜尋 g1.cs.tsinghua.edu.cn 主機(jī)時(shí),就需要向管理 .cs.tsinghua.edu.cn 這個(gè)網(wǎng)域的那部機(jī)器
查詢才行,而要查詢 .cs.tsinghua.edu.cn
則需要在 .tsinghua.edu.cn 上面詢問才可以!這是因?yàn)樯蠈覦NS 主機(jī) .tsinghua.edu.cn 已經(jīng)
將 .cs.tsinghua.edu.cn 這個(gè)網(wǎng)域的管理權(quán) "授權(quán)" 給
ns1.cs.tsinghua.edu.cn 這部機(jī)器,當(dāng)有人要查詢 .cs.tsinghua.edu.cn 這個(gè)網(wǎng)域的主機(jī)IP
時(shí), .tsinghua.edu.cn 將會(huì)把查詢的任務(wù)直接轉(zhuǎn)給
ns1.cs.tsinghua.edu.cn 去管理了!從此, .tsinghua.edu.cn 這個(gè)網(wǎng)域的管理主機(jī),將不會(huì)再接
管 cs.tsinghua.edu.cn 這個(gè)網(wǎng)域的名稱管理
我們有時(shí)候用nslookup 查詢一個(gè)A 記錄時(shí),DNS 通常返回
Non-authoritative answer: Name: www.im286.com Address: 61.152.251.211
這多半是因?yàn)?A記錄在Cache 中的緣故
本文所有信息為中興通訊股份有限公司內(nèi)部信息,未經(jīng)允許,不得外傳 第7頁(yè),共7頁(yè)