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