上帝視角我們平時(shí)在訪問(wèn)網(wǎng)站時(shí),不使用 IP 地址,而是網(wǎng)站域名。但是抓包發(fā)現(xiàn):交互報(bào)文是以?IP 地址進(jìn)行的。那么 IP 地址是從哪來(lái)的呢?這是因?yàn)?DNS?把網(wǎng)站域名自動(dòng)轉(zhuǎn)換為 IP 地址。報(bào)文交互抓包
DNS 出現(xiàn)
TCP/IP 是基于 IP 地址進(jìn)行通信的,但是 IP 地址不太好記。于是出現(xiàn)了另一種方便記憶的標(biāo)識(shí)符,那就是主機(jī)名。為計(jì)算機(jī)配置主機(jī)名,在進(jìn)行網(wǎng)絡(luò)通信時(shí),直接使用主機(jī)名,而不用輸入一大串的 IP 地址。同時(shí),系統(tǒng)通過(guò)一個(gè)叫?hosts?的文件,實(shí)現(xiàn)主機(jī)名轉(zhuǎn)換 IP 地址的功能。hosts 文件包括主機(jī)名和 IP 地址的對(duì)應(yīng)關(guān)系。當(dāng)需要通過(guò)主機(jī)名訪問(wèn)主機(jī)時(shí),它就會(huì)查看本地的 hosts 文件,從文件中找到相對(duì)應(yīng)的 IP 地址,然后進(jìn)行報(bào)文發(fā)送。如果在 hosts 文件中沒(méi)找到相關(guān)信息,則主機(jī)訪問(wèn)失敗。hosts 文件是主機(jī)的本地文件,優(yōu)點(diǎn)是查找響應(yīng)速度快。它主要用來(lái)存儲(chǔ)一些本地網(wǎng)絡(luò)的主機(jī)名和 IP 地址的對(duì)應(yīng)信息。這樣,主機(jī)在以主機(jī)名訪問(wèn)本地網(wǎng)絡(luò)主機(jī)時(shí),通過(guò) hosts 文件可以迅速獲得相應(yīng)的 IP 地址。hosts文件每臺(tái)主機(jī)的 hosts 文件都需要單獨(dú)手工更新。隨著網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大、接入計(jì)算機(jī)的數(shù)量不斷增加,維護(hù)難度越來(lái)越大,每臺(tái)主機(jī)同步更新,幾乎是一件不可能完成的任務(wù)。hosts維護(hù)難為了解決 hosts 文件維護(hù)困難的問(wèn)題,出現(xiàn)了?DNS 域名系統(tǒng),一個(gè)可以解決主機(jī)名和 IP 地址互相轉(zhuǎn)換的系統(tǒng)。無(wú)論網(wǎng)絡(luò)規(guī)模變得多么龐大,都能在一個(gè)小范圍內(nèi)通過(guò) DNS 進(jìn)行管理。DNS域名系統(tǒng)
DNS 介紹
DNS?,全稱?Domain Name System?。采用?client/server?模式,DNS client?發(fā)出查詢請(qǐng)求,DNS server?響應(yīng)請(qǐng)求。DNS client?通過(guò)查詢?DNS server?獲得主機(jī)的 IP 地址,進(jìn)而完成后續(xù)的 TCP/IP 通信過(guò)程。DNS client/server當(dāng) Windows 系統(tǒng)用戶使用?nslookup hostname/domainname?命令時(shí),DNS 會(huì)自動(dòng)查找注冊(cè)了主機(jī)名和 IP 地址的數(shù)據(jù)庫(kù),并返回對(duì)應(yīng)的 IP 地址。nslookup命令演示
DNS 域名
先了解什么是域名,才能理解 DNS 。域名是為了識(shí)別主機(jī)名或機(jī)構(gòu)的一種分層的名稱。因?yàn)閱为?dú)的一臺(tái)域名服務(wù)器是不可能知道所有域名信息,所以域名系統(tǒng)是一個(gè)分布式數(shù)據(jù)庫(kù)系統(tǒng),域名(主機(jī)名)到 IP 地址的解析可以由若干個(gè)域名服務(wù)器共同完成。每一個(gè)站點(diǎn)維護(hù)自己的信息數(shù)據(jù)庫(kù),并運(yùn)行一個(gè)服務(wù)器程序供互聯(lián)網(wǎng)上的客戶端查詢。DNS 提供了客戶端與服務(wù)器的通信協(xié)議,也提供了服務(wù)器之間交換信息的協(xié)議。由于是分布式系統(tǒng),即使單個(gè)服務(wù)器出現(xiàn)故障,也不會(huì)導(dǎo)致整個(gè)系統(tǒng)失效,消除了單點(diǎn)故障。
DNS 域名組成
DNS 域的本質(zhì)是一種管理范圍的劃分,最大的域是根域,向下可以劃分為頂級(jí)域、二級(jí)域、三級(jí)域、四級(jí)域等。相對(duì)應(yīng)的域名是根域名、頂級(jí)域名、二級(jí)域名、三級(jí)域名等。不同等級(jí)的域名使用點(diǎn)號(hào)分隔,級(jí)別最低的域名寫(xiě)在最左邊,而級(jí)別最高的域名寫(xiě)在最右邊。DNS域舉個(gè)栗子:網(wǎng)站域名?www.tsinghua.edu.cn?中,從右到左開(kāi)始,cn?是頂級(jí)域名,代表中國(guó),edu?是二級(jí)域名,代表教育機(jī)構(gòu),tsinghua?是三級(jí)域名,表示清華大學(xué),www?則表示三級(jí)域名中的主機(jī),并提供了 web 服務(wù)。清華大學(xué)域名除了?www?主機(jī)外,常見(jiàn)的主機(jī)還有?arch?、sem?、mail?,域名如下:清華大學(xué)常見(jiàn)域名每一級(jí)的域名都由英文字母和數(shù)字組成,域名不區(qū)分大小寫(xiě),長(zhǎng)度不能超過(guò) 63 字節(jié),一個(gè)完整的域名不能超過(guò) 255 個(gè)字節(jié)。根域名用 “?.?”(點(diǎn))表示。目前我們看到的域名例子都是完全合格域名( FQDN ),FQDN?的完整格式是以點(diǎn)結(jié)尾的域名。接入互聯(lián)網(wǎng)的主機(jī)、服務(wù)器或其它網(wǎng)絡(luò)設(shè)備都可以擁有一個(gè)唯一的 FQDN 。與 FQDN 對(duì)應(yīng)的,系統(tǒng)中的默認(rèn)域名是非合格域名,會(huì)把當(dāng)前的區(qū)域域名添加到尾部。例如,tsinghua 域內(nèi)的主機(jī)上查找?mail?,本地解析器就會(huì)將這個(gè)名稱轉(zhuǎn)換為 FQDN ,即?mail.tsinghua.edu.cn?,然后解析出 IP 地址。完全合格域名
將域名轉(zhuǎn)換為對(duì)應(yīng)的 IP 地址的過(guò)程叫做域名解析。在域名解析過(guò)程中,DNS client?的主機(jī)調(diào)用解析器( Resolver ),向?DNS server?發(fā)出請(qǐng)求,DNS server?完成域名解析。域名解析域名解析是按照 DNS 分層結(jié)構(gòu)的特點(diǎn),自頂向下進(jìn)行的。但是如果每一個(gè)域名解析都從根域名服務(wù)器開(kāi)始,那么根域名服務(wù)器有可能無(wú)法承載海量的流量。在實(shí)際應(yīng)用中,大多數(shù)域名解析都是在本地域名服務(wù)器完成。通過(guò)合理設(shè)置本地域名服務(wù)器,由本地域名服務(wù)器負(fù)責(zé)大部分的域名解析請(qǐng)求,提高域名解析效率。本地域名服務(wù)器
DNS 解析器
從應(yīng)用程序的角度看,訪問(wèn) DNS 是通過(guò)一個(gè)叫解析器( Resolver )的應(yīng)用程序來(lái)完成的。發(fā)送一個(gè) TCP 或 UDP 數(shù)據(jù)包之前,解析器必須將域名(主機(jī)名)轉(zhuǎn)換為 IP 地址。一個(gè)解析器至少要注冊(cè)一個(gè)域名服務(wù)器的 IP 地址。通常,它至少包括本地域名服務(wù)器的 IP 地址。解析器
DNS 域名服務(wù)器
DNS 域名空間的層次結(jié)構(gòu),允許不同的域名服務(wù)器管理域名空間的不同部分。域名服務(wù)器是指管理域名的主機(jī)及軟件,它可以管理所在分層的域。其所管理的分層叫做區(qū)域( zone )。一個(gè) zone 是 DNS 域名空間的一棵子樹(shù),它可以單獨(dú)管理而不受其它 zone 影響。每層都設(shè)有一個(gè)域名服務(wù)器。域名服務(wù)器根所設(shè)置的 DNS 叫做根域名服務(wù)器,它對(duì) DNS 的檢索數(shù)據(jù)功能起著至關(guān)重要的作用。根域名服務(wù)器中注冊(cè)了頂級(jí)域名服務(wù)器的 IP 地址。如果想要新增一個(gè)一級(jí)域名,或者修改已有的頂級(jí)域名,就要在根域名服務(wù)器中進(jìn)行新增或變更。類似的,頂級(jí)域名服務(wù)器中注冊(cè)了二級(jí)域名服務(wù)器的 IP 地址。如果域名服務(wù)器下面沒(méi)有其它分層,就可以自由地指定主機(jī)名稱。如果想重新設(shè)置域名服務(wù)器的 IP 地址或修改域名,必須在上一層的域名服務(wù)器中進(jìn)行修改。域名和域名服務(wù)器都需要按照分層進(jìn)行設(shè)置。如果域名服務(wù)器出現(xiàn)故障,那么針對(duì)這個(gè)域的 DNS 查詢就無(wú)法正常工作。因此,為了提高可用性,至少設(shè)置兩臺(tái)域名服務(wù)器。一旦第一臺(tái)域名服務(wù)器無(wú)法提供查詢時(shí),就會(huì)自動(dòng)轉(zhuǎn)到第二個(gè)甚至第三個(gè)域名服務(wù)器上進(jìn)行。
DNS 域名服務(wù)器類型
本地域名服務(wù)器互聯(lián)網(wǎng)接入服務(wù)運(yùn)營(yíng)商或者一個(gè)大的網(wǎng)絡(luò)機(jī)構(gòu),像公司、大學(xué)等都有一臺(tái)或多臺(tái)可以自行管理的域名服務(wù)器,這類域名服務(wù)器稱為本地域名服務(wù)器,也稱為默認(rèn)域名服務(wù)器。本地域名服務(wù)器離客戶端較近。當(dāng)一個(gè) DNS客戶端發(fā)出 DNS 查詢時(shí),首先送到本地域名服務(wù)器。如果本地域名服務(wù)器數(shù)據(jù)庫(kù)中有對(duì)應(yīng)的域名信息,會(huì)將查詢的域名轉(zhuǎn)換為 IP 地址返回客戶端。如果沒(méi)有,它會(huì)以 DNS 客戶端的身份向根域名服務(wù)器進(jìn)行查詢。根域名服務(wù)器收到本地域名服務(wù)器的查詢后,會(huì)返回相關(guān)域名服務(wù)器的 IP 地址,本地域名服務(wù)器再向相關(guān)域名服務(wù)器發(fā)送查詢請(qǐng)求。
本地域名服務(wù)器
根域名服務(wù)器通常根域名服務(wù)器用來(lái)管理頂級(jí)域,本身并不對(duì)域名進(jìn)行解析,但它知道相關(guān)域名服務(wù)器的 IP 地址。IPv4 根域名服務(wù)器全球有 13 臺(tái),主機(jī)名分別為 A ~ M 。1 臺(tái)為主根服務(wù)器在美國(guó),其余 12 個(gè)均為輔根服務(wù)器,其中 9 個(gè)在美國(guó),2 個(gè)在歐洲,位于英國(guó)和瑞典,1 臺(tái)在亞洲,位于日本。所有的域名服務(wù)器都必須注冊(cè)根域名服務(wù)器的 IP 地址,因?yàn)?DNS 根據(jù) IP 地址進(jìn)行檢索時(shí),需要按順序從根域名服務(wù)器開(kāi)始。
根域名服務(wù)器
授權(quán)域名服務(wù)器互聯(lián)網(wǎng)上的主機(jī)在域名服務(wù)器上進(jìn)行注冊(cè),這個(gè)域名服務(wù)器就是主機(jī)的授權(quán)域名服務(wù)器。通常,主機(jī)的授權(quán)域名服務(wù)器就是本地域名服務(wù)器。實(shí)際上,主機(jī)會(huì)有兩個(gè)授權(quán)域名服務(wù)器,防止單點(diǎn)故障。授權(quán)域名服務(wù)器上有注冊(cè)主機(jī)域名與 IP 地址的映射信息,當(dāng)查詢注冊(cè)主機(jī)域名時(shí),它會(huì)返回相應(yīng)主機(jī)的 IP 地址。如果主機(jī)域名和 IP 地址需要進(jìn)行變更,只需要在授權(quán)域名服務(wù)器處理即可,不用再向其它域名服務(wù)器進(jìn)行申請(qǐng)或報(bào)告。
根域名服務(wù)器查詢數(shù)據(jù)庫(kù),發(fā)現(xiàn)沒(méi)有這個(gè)主機(jī)域名記錄,但是根域名服務(wù)器知道 cn 域名服務(wù)器可以解析這個(gè)域名,于是將 cn 域名服務(wù)器的 IP 地址返回給本地域名服務(wù)器;
本地域名服務(wù)器向 cn 域名服務(wù)器查詢 www.tsinghua.edu.cn 主機(jī)的 IP 地址;
cn 域名服務(wù)器查詢數(shù)據(jù)庫(kù),也沒(méi)有相關(guān)記錄,但是知道 edu.cn 域名服務(wù)器可以解析這個(gè)域名,于是將 edu.cn 域名服務(wù)器的 IP 地址返回給本地域名服務(wù)器;
本地域名服務(wù)器再向 edu.cn 域名服務(wù)器查詢 www.tsinghua.edu.cn 主機(jī) IP 地址;
edu.cn 域名服務(wù)器查詢數(shù)據(jù)庫(kù),也沒(méi)有相關(guān)記錄,但是知道 tsinghua.edu.cn 域名服務(wù)器可以解析這個(gè)域名,于是將 tsinghua.edu.cn 的域名服務(wù)器 IP 地址返回給本地域名服務(wù)器;
本地域名服務(wù)器向 tsinghua.edu.cn 域名服務(wù)器查詢 www.tsinghua.edu.cn 主機(jī)的 IP 地址;
tsinghua.edu.cn 域名服務(wù)器查詢數(shù)據(jù)庫(kù),發(fā)現(xiàn)有主機(jī)域名記錄,于是給本地域名服務(wù)器返回 www.tsinghua.edu.cn 對(duì)應(yīng)的 IP 地址;
最后本地域名服務(wù)器將 www.tsinghua.edu.cn 的 IP 地址返回給客戶端,整個(gè)解析過(guò)程完成。
DNS 傳輸層協(xié)議
DNS 域名服務(wù)器使用的端口號(hào)是 53?,并且同時(shí)支持 UDP 和 TCP 協(xié)議。為什么同時(shí)使用兩種協(xié)議呢?因?yàn)?DNS 響應(yīng)報(bào)文中有一個(gè)刪減標(biāo)志位,用 TC 表示。當(dāng)響應(yīng)報(bào)文使用?UDP 封裝,且報(bào)文長(zhǎng)度大于?512 字節(jié)時(shí),那么服務(wù)器只返回前 512 字節(jié),同時(shí) TC 標(biāo)志位置位,表示報(bào)文進(jìn)行了刪減。當(dāng)客戶端收到 TC 置位的響應(yīng)報(bào)文后,將采用?TCP 封裝查詢請(qǐng)求。DNS 服務(wù)器返回的響應(yīng)報(bào)文長(zhǎng)度大于 512 字節(jié)。TC標(biāo)志位UDP 報(bào)文的最大長(zhǎng)度是 512 字節(jié),最多可以包含 13 臺(tái)根域名服務(wù)器數(shù)據(jù),因此 ipv4 根域名服務(wù)器只能限制在 13 個(gè),且每個(gè)服務(wù)器使用單個(gè)字母命名,也是 IPv4 根服務(wù)器是從 A ~ M 命名的原因。UDP最長(zhǎng)報(bào)文當(dāng)輔助域名服務(wù)器啟動(dòng)時(shí),將從主域名服務(wù)器執(zhí)行區(qū)域傳送。正常運(yùn)行過(guò)程中,輔助域名服務(wù)器也會(huì)定時(shí)向主域名服務(wù)器進(jìn)行查詢,以便了解主域名服務(wù)器數(shù)據(jù)是否發(fā)送變化。如果有變化,將執(zhí)行一次區(qū)域傳送。因?yàn)閰^(qū)域傳送的數(shù)據(jù)多,所以傳送的數(shù)據(jù)采用?TCP 封裝。TCP封裝因此,UDP 用于 client 和 server 的查詢和響應(yīng),TCP 用于主從 server 之間的傳送。
DNS 查詢方式
DNS 域名解析包括兩種查詢( query )方式,一種是遞歸查詢,另一種是迭代查詢。
遞歸查詢
DNS 服務(wù)器如果不能直接響應(yīng)解析請(qǐng)求,它將繼續(xù)請(qǐng)求其它的 DNS 服務(wù)器,直到查詢域名解析的結(jié)果。查詢的結(jié)果可以是域名主機(jī)的 IP 地址,或者是域名無(wú)法解析。無(wú)論哪種結(jié)果,DNS 服務(wù)器都會(huì)將結(jié)果返回給客戶端。舉個(gè)栗子:當(dāng)本地域名服務(wù)器接收了客戶端的查詢請(qǐng)求,本地域名服務(wù)器將代表客戶端來(lái)找答案,而在本地域名服務(wù)器執(zhí)行工作時(shí),客戶端只是等待,直到本地域名服務(wù)器將最終查詢結(jié)果返回客戶端。遞歸查詢
迭代查詢
如果 DNS 服務(wù)器查不到相應(yīng)記錄,會(huì)向客戶端返回一個(gè)可能知道結(jié)果的域名服務(wù)器 IP 地址,由客戶端繼續(xù)向新的服務(wù)器發(fā)送查詢請(qǐng)求。對(duì)域名服務(wù)器的迭代查詢,只得到一個(gè)提示,則繼續(xù)查詢。舉個(gè)栗子:本地域名服務(wù)器發(fā)送請(qǐng)求到根域名服務(wù)器,根域名服務(wù)器并沒(méi)有相應(yīng)記錄,它只是給本地域名服務(wù)器返回一個(gè)提示,引導(dǎo)本地域名服務(wù)器到另一臺(tái)域名服務(wù)器進(jìn)行查詢。迭代查詢客戶端在查詢 IP 地址時(shí),向本地域名服務(wù)器進(jìn)行遞歸查詢。如果本地域名服務(wù)器的數(shù)據(jù)庫(kù)有相應(yīng)數(shù)據(jù),則直接返回相應(yīng)數(shù)據(jù)。如果沒(méi)有,則本地域名服務(wù)器向根域名服務(wù)器進(jìn)行迭代查詢。從根開(kāi)始對(duì)這棵樹(shù)按照順序進(jìn)行遍歷,直到找到指定的域名服務(wù)器,并由這個(gè)域名服務(wù)器返回相應(yīng)的數(shù)據(jù)。客戶端和本地域名服務(wù)器會(huì)將收到的信息保存在緩存里,這樣可以減少每次查詢時(shí)的性能消耗。
DNS 反向查詢
在 DNS 查詢中,客戶端希望知道域名對(duì)應(yīng)的 IP 地址,這種查詢稱為正向查詢。大部分的 DNS 查詢都是正向查詢。與正向查詢對(duì)應(yīng)的,是反向查詢。它允許 DNS 客戶端通過(guò) IP 地址查找對(duì)應(yīng)的域名。DNS反向查詢為實(shí)現(xiàn)反向查詢,在 DNS 標(biāo)準(zhǔn)中定義了特色域?in-addr.arpa?域,并保留在域名空間中,以便執(zhí)行反向查詢。為創(chuàng)建反向域名空間,in-addr.arpa 域中的子域是按照 IP 地址相反的順序構(gòu)造的。舉個(gè)栗子:www.tsinghua.edu.cn?的 IP 地址是?166.111.4.100?,那么在 in-addr.arpa 域中對(duì)應(yīng)的節(jié)點(diǎn)就是?100.4.111.166?。反向查詢
DNS 應(yīng)用場(chǎng)景
靜態(tài)域名解析
域名解析分為動(dòng)態(tài)域名解析和靜態(tài)域名解析。在解析域名時(shí),首先采用靜態(tài)域名解析,如果靜態(tài)解析不成功,再采用動(dòng)態(tài)域名解析。靜態(tài)域名解析是通過(guò)靜態(tài)域名解析表進(jìn)行的,手動(dòng)建立域名和 IP 地址之間的對(duì)應(yīng)關(guān)系表,該表的作用類似于 Windows 操作系統(tǒng)下的?hosts 文件,可以將一些常用的域名放入表中。當(dāng) DNS client 需要域名所對(duì)應(yīng)的 IP 地址時(shí),即到靜態(tài)域名解析表中去查找指定的域名,從而獲得所對(duì)應(yīng)的 IP 地址,提高域名解析的效率。靜態(tài)域名解析
動(dòng)態(tài)域名解析
動(dòng)態(tài)域名解析需要專用的域名服務(wù)器( DNS server )運(yùn)行域名解析服務(wù)器程序,提供從域名到 IP 地址的映射關(guān)系,負(fù)責(zé)接收客戶端( DNS client)提出的域名解析請(qǐng)求。動(dòng)態(tài)域名解析
DNS 代理
在使用了?DNS 代理( DNS proxy )功能的組網(wǎng)中,DNS client 將 DNS 請(qǐng)求報(bào)文直接發(fā)送給 DNS proxy 。DNS proxy 會(huì)先查找本地域名解析表,如果未查詢到對(duì)應(yīng)的解析表項(xiàng),會(huì)將 DNS 請(qǐng)求報(bào)文轉(zhuǎn)發(fā)給 DNS Server ,并在收到 DNS server 的應(yīng)答報(bào)文后將其返回給 DNS client ,從而實(shí)現(xiàn)域名解析。DNS代理因此,當(dāng) DNS server 的地址發(fā)生變化時(shí),只需改變 DNS proxy 上的配置,無(wú)需逐一改變局域網(wǎng)內(nèi)每個(gè) DNS client 的配置,從而簡(jiǎn)化了網(wǎng)絡(luò)管理。飲水思源:DNS與BIND - Paul AlbitzTCP/IP詳解 卷1:協(xié)議 - Kevin R.Fall圖解TCP/IP - 竹下隆史路由交換技術(shù) - 杭州華三通信技術(shù)有限公司 - EOF -