天天看點

DNS域名伺服器詳解

一、DNS

DNS(Domain Name System)是域名系統的英文縮寫,是一種組織成域層次結構的計算機和網絡服務命名系統,用于 TCP/IP 網絡。

二、域名系統DNS的作用

通常我們有兩種方式識别主機:通過主機名或者 IP 位址。人們喜歡便于記憶的主機名表示,而路由器則喜歡定長的、有着層次結構的 IP 位址。為了滿足這些不同的偏好,我們就需要一種能夠進行主機名到IP 位址轉換的目錄服務,域名系統作為将域名和 IP 位址互相映射的一個分布式資料庫,能夠使人更友善地通路網際網路。

是以,即使不使用域名也可以通過IP位址來尋址目的主機,但域名與IP位址相比,便于人們記憶。是以對于大多數網絡應用,我們一般使用域名來通路目的主機,而不是直接使用IP位址來通路。

DNS域名伺服器詳解

對于本例,簡單來說,當我們在浏覽器位址欄中輸入某個Web伺服器的域名時。使用者主機首先使用者主機會首先在自己的DNS高速緩存中查找該域名所應的IP位址。

如果沒有找到,則會向網絡中的某台DNS伺服器查詢,DNS伺服器中有域名和IP地映射關系的資料庫。當DNS伺服器收到DNS查詢封包後,在其資料庫中查詢,之後将查詢結果發送給使用者主機。

現在,使用者主機中的浏覽器可以通過Web伺服器的IP位址對其進行通路了。

DNS域名伺服器詳解
DNS域名伺服器詳解

三、域名的層級關系

層級關系特點

網際網路采用層次樹狀結構的域名結構

域名的結構由若幹個分量組成,各分量之間用“點”隔開,分别代表不同級别的域名。

每一級的域名都由英文字母和數字組成,不超過63個字元,不區分大小寫字母。

  • 級别最低的域名寫在最左邊,而級别最高的頂級域名寫在最右邊。
  • 完整的域名不超過255個字元。

    域名系統既不規定一個域名需要包含多少個下級域名,也不規定每一級的域名代表什麼意思。

    各級域名由其上一級的域名管理機構管理,而最高的頂級域名則由網際網路名稱與數字位址配置設定機構ICANN進行管理。

    網際網路的域名空間

DNS域名伺服器詳解

上圖展示了 DNS 伺服器的部分層次結構,從上到下依次為根域名伺服器、頂級域名伺服器和權威域名伺服器。域名和IP位址的映射關系必須儲存在域名伺服器中,供所有其他應用查詢。顯然不能将所有資訊都儲存在一台域名伺服器中。DNS使用分布在各地的域名伺服器來實作域名到IP位址的轉換。

域名伺服器可以劃分為以下四種不同的類型:

根域名伺服器 根域名伺服器是最高層次的域名伺服器。每個根域名伺服器都知道所有的頂級域名伺服器的域名及其IP位址。網際網路上共有13個不同IP位址的根域名伺服器。當本地域名伺服器向根域名伺服器發出查詢請求時,路由器就把查詢請求封包轉發到離這個DNS客戶最近的一個根域名伺服器。這就加快了DNS的查詢過程,同時也更合理地利用了網際網路的資源。

頂級域名伺服器 這些域名伺服器負責管理在該頂級域名伺服器注冊的所有二級域名。當收到DNS查詢請求時就給出相應的回答(可能是最後的結果,也可能是下一級權限域名伺服器的IP位址)。

權限域名伺服器 這些域名伺服器負責管理某個區的域名。每一個主機的域名都必須在某個權限域名伺服器處注冊登記。是以權限域名伺服器知道其管轄的域名與IP位址的映射關系。另外,權限域名伺服器還知道其下級域名伺服器的位址。

本地域名伺服器 本地域名伺服器不屬于上述的域名伺服器的等級結構。當一個主機發出DNS請求封包時,這個封包就首先被送往該主機的本地域名伺服器。本地域名伺服器起着代理的作用,會将該封包轉發到上述的域名伺服器的等級結構中。本地域名伺服器離使用者較近,一般不超過幾個路由器的距離,也有可能就在同一個區域網路中。本地域名伺服器的IP位址需要直接配置在需要域名解析的主機中。

四、DNS域名解析過程

域名解析包含兩種查詢方式,分别是遞歸查詢和疊代查詢。

遞歸查詢

如果主機所詢問的本地域名伺服器不知道被查詢域名的 IP 位址,那麼本地域名伺服器就以 DNS 用戶端的身份,向其他根域名伺服器繼續發出查詢請求封包,即替主機繼續查詢,而不是讓主機自己進行下一步查詢。

我們以一個例子來了解DNS遞歸查詢的工作原理,假設圖中的主機 (IP位址為m.xyz.com) 想知道域名y.abc.com的IP位址。

1、主機首先向其本地域名伺服器進行遞歸查詢。

2、本地域名伺服器收到遞歸查詢的委托後,也采用遞歸查詢的方式向某個根域名伺服器查詢。

3、根域名伺服器收到遞歸查詢的委托後,也采用遞歸查詢的方式向某個頂級域名伺服器查詢。

4、頂級域名伺服器收到遞歸查詢的委托後,也采用遞歸查詢的方式向某個權限域名伺服器查詢。

過程如圖所示:

DNS域名伺服器詳解

當查詢到域名對應的IP位址後,查詢結果會在之前受委托的各域名伺服器之間傳遞,最終傳回給使用者主機。

過程如圖所示:

疊代查詢

當根域名伺服器收到本地域名伺服器發出的疊代查詢請求封包時,要麼給出所要查詢的IP 位址,要麼告訴本地伺服器下一步應該找哪個域名伺服器進行查詢,然後讓本地伺服器進行後續的查詢。

疊代查詢過程如下:

1、主機首先向其本地域名伺服器進行遞歸查詢。

2、本地域名伺服器采用疊代查詢,它先向某個根域名伺服器查詢。

3、根域名伺服器告訴本地域名伺服器,下一次應查詢的頂級域名伺服器的IP位址。

4、本地域名伺服器向頂級域名伺服器進行疊代查詢。

5、頂級域名伺服器告訴本地域名伺服器,下一次應查詢的權限域名伺服器的IP位址。

6、本地域名伺服器向權限域名伺服器進行疊代查詢。

7、權限域名伺服器告訴本地域名伺服器所查詢的域名的IP位址。

8、本地域名伺服器最後把查詢的結果告訴主機。

過程如圖所示:

DNS域名伺服器詳解

由于遞歸查詢對于被查詢的域名伺服器負擔太大,通常采用以下模式:從請求主機到本地域名伺服器的查詢是遞歸查詢,而其餘的查詢是疊代查詢。

五、高速緩存

為了提高DNS的查詢效率,并減輕根域名伺服器的負荷和減少網際網路上的DNS查詢封包數量,在域名伺服器中廣泛地使用了高速緩存。高速緩存用來存放最近查詢過的域名以及從何處獲得域名映射資訊的記錄。

由于域名到IP位址的映射關系并不是永久不變,為保持高速緩存中的内容正确,域名伺服器應為每項内容設定計時器并删除超過合理時間的項(例如,每個項目隻存放兩天)。

不但在本地域名伺服器中需要高速緩存,在使用者主機中也很需要。許多使用者主機在啟動時從本地域名伺服器下載下傳域名和IP位址的全部資料庫,維護存放自己最近使用的域名的高速緩存,并且隻在從緩存中找不到域名時才向域名伺服器查詢。同理,主機也需要保持高速緩存中内容的正确性。

如圖所示:

DNS域名伺服器詳解

如果本地域名伺服器不久前已經有使用者查詢過域名為y.abc.com的IP位址,則本地域名伺服器的高速緩存中應該存有該域名對應的IP位址。是以,直接把高速緩存中存放的上次查詢結果(即y.abc.com的IP位址)告訴使用者。

六、DNS相關面試問題

1、DNS為什麼用UDP?

更正确的答案是 DNS 既使用 TCP 又使用 UDP。當進行區域傳送(主域名伺服器向輔助域名伺服器傳送變化的那部分資料)時會使用 TCP,因為資料同步傳送的資料量比一個請求和應答的資料量要多,而 TCP 允許的封包長度更長,是以為了保證資料的正确性,會使用基于可靠連接配接的 TCP。

當用戶端向 DNS 伺服器查詢域名 ( 域名解析) 的時候,一般傳回的内容不會超過 UDP 封包的最大長度,即 512 位元組。用 UDP 傳輸時,不需要經過 TCP 三次握手的過程,進而大大提高了響應速度,但這要求域名解析器和域名伺服器都必須自己處理逾時和重傳進而保證可靠性。

2、遞歸查詢和遞歸查詢差別?

遞歸查詢: 如果主機所詢問的本地域名伺服器不知道被查詢域名的 IP 位址,那麼本地域名伺服器就以 DNS 用戶端的身份,向其他根域名伺服器繼續發出查詢請求封包,即替主機繼續查詢,而不是讓主機自己進行下一步查詢。

疊代查詢: 當根域名伺服器收到本地域名伺服器發出的疊代查詢請求封包時,要麼給出所要查詢的IP 位址,要麼告訴本地伺服器下一步應該找哪個域名伺服器進行查詢,然後讓本地伺服器進行後續的查詢。

3、使用域名通路web伺服器過程

具體請看本專欄的這篇文章:面試官問我:從位址欄輸入URL到顯示頁面都發生了什麼?

4、講講DNS解析過程?

詳細解析過程請看上文DNS域名解析過程,這裡我們做一個總結:

浏覽器緩存——》系統hosts檔案——》本地DNS解析器緩存——》本地域名伺服器(本地配置區域資源、本地域名伺服器緩存)——》根域名伺服器——》主域名伺服器——》下一級域名域名伺服器 用戶端——》本地域名伺服器(遞歸查詢) 本地域名伺服器—》DNS伺服器的互動查詢是疊代查詢

為了表示對于引用部落客的尊重,附上原文連結:https://blog.csdn.net/fanfangyu/article/details/126159056

繼續閱讀