1. 程式人生 > >DNS(域名解析協議)詳解

DNS(域名解析協議)詳解

DNS協議

我們之前已經瞭解過ARP協議。
如果說ARP協議是用來將IP地址轉換為MAC地址,那麼DNS協議則是用來將域名轉換為IP地址(也可以將IP地址轉換為相應的域名地址)。
我們都知道,TCP/IP中使用的是IP地址和埠號來確定網路上某一臺主機上的某一個程式,不免有人有疑問,為什麼不用域名來直接進行通訊呢?
1. 因為IP地址是固定長度的,IPv4是32位,IPv6是128位,而域名是變長的,不便於計算機處理。
2. IP地址對於使用者來說不方便記憶,但域名便於使用者使用,例如www.baidu.com這是百度的域名。
總結一點就是IP地址是面向主機的,而域名則是面向使用者的。


hosts檔案
域名和IP的對應關係儲存在一個叫hosts檔案中。
最初,通過網際網路資訊中心來管理這個檔案,如果有一個新的計算機想接入網路,或者某個計算IP變更都需要到資訊中心申請變更hosts檔案。其他計算機也需要定期更新,才能上網。
但是這樣太麻煩了,就出現了DNS系統。

DNS系統

  1. 一個組織的系統管理機構, 維護系統內的每個主機的IP和主機名的對應關係
  2. 如果新計算機接入網路,將這個資訊註冊到資料庫中
  3. 使用者輸入域名的時候,會自動查詢DNS伺服器,由DNS伺服器檢索資料庫,得到對應的IP地址
    我們可以通過命令檢視自己的hosts檔案:
    這裡寫圖片描述
    在域名解析的過程中仍然會優先查詢hosts檔案的內容。

DNS理論知識

一、DNS域名結構

1、域名的層次結構

域名系統必須要保持唯一性。
為了達到唯一性的目的,因特網在命名的時候採用了層次結構的命名方法:
1. 每一個域名(本文只討論英文域名)都是一個標號序列(labels),用字母(A-Z,a-z,大小寫等價)、數字(0-9)和連線符(-)組成
2. 標號序列總長度不能超過255個字元,它由點號分割成一個個的標號(label)
3. 每個標號應該在63個字元之內,每個標號都可以看成一個層次的域名。
4. 級別最低的域名寫在左邊,級別最高的域名寫在右邊。
域名服務主要是基於UDP實現的,伺服器的埠號為53。
關於域名的層次結構,如下圖所示:
這裡寫圖片描述


eg :我們熟悉的,www.baidu.com
1. com: 一級域名. 表示這是一個企業域名。同級的還有 “net”(網路提供商), “org”(⾮非盈利組織) 等。
2. baidu: 二級域名,指公司名。
3. www: 只是一種習慣用法。

2、域名的分級

域名可以劃分為各個子域,子域還可以繼續劃分為子域的子域,這樣就形成了頂級域、二級域、三級域等。
如下圖所示:
這裡寫圖片描述
其中頂級域名分為:國家頂級域名、通用頂級域名、反向域名。

國家頂級域名 中國:cn, 美國:us,英國uk…
通用頂級域名 com公司企業,edu教育機構,gov政府部門,int國際組織,mil軍事部門 ,net網路,org非盈利組織…
反向域名 arpa,用於PTR查詢(IP地址轉換為域名)

二、域名伺服器

域名是分層結構,域名伺服器也是對應的層級結構。
有了域名結構,還需要有一個東西去解析域名,域名需要由遍及全世界的域名伺服器去解析,域名伺服器實際上就是裝有域名系統的主機。

由高向低進行層次劃分,可分為以下幾大類:

分類 作用
根域名伺服器 最高層次的域名伺服器,本地域名伺服器解析不了的域名就會向其求助
頂級域名伺服器 負責管理在該頂級域名伺服器下注冊的二級域名
許可權域名伺服器 負責一個區的域名解析工作
本地域名伺服器 當一個主機發出DNS查詢請求時,這個查詢請求首先發給本地域名伺服器

注:一個域名伺服器所負責的範圍,或者說有管理許可權的範圍,就稱為區
我們需要注意的是:
1. 每個層的域名上都有自己的域名伺服器,最頂層的是根域名伺服器
2. 每一級域名伺服器都知道下級域名伺服器的IP地址
3. 為了容災, 每一級至少設定兩個或以上的域名伺服器

三、域名解析過程

域名解析總體可分為一下過程:
(1) 輸入域名後, 先查詢自己主機對應的域名伺服器,域名伺服器先查詢自己的資料庫中的資料.
(2) 如果沒有, 就向上級域名伺服器進行查詢, 依次類推
(3) 最多回溯到根域名伺服器, 肯定能找到這個域名的IP地址
(4) 域名伺服器自身也會進行一些快取, 把曾經訪問過的域名和對應的IP地址快取起來, 可以加速查詢過程
具體可描述如下:
1. 主機先向本地域名伺服器進行遞迴查詢
2. 本地域名伺服器採用迭代查詢,向一個根域名伺服器進行查詢
3. 根域名伺服器告訴本地域名伺服器,下一次應該查詢的頂級域名伺服器的IP地址
4. 本地域名伺服器向頂級域名伺服器進行查詢
5. 頂級域名伺服器告訴本地域名伺服器,下一步查詢許可權伺服器的IP地址
6. 本地域名伺服器向許可權伺服器進行查詢
7. 許可權伺服器告訴本地域名伺服器所查詢的主機的IP地址
8. 本地域名伺服器最後把查詢結果告訴主機
如圖所示:
這裡寫圖片描述
上文我們提出了兩個概念:遞迴查詢和迭代查詢
(1)遞迴查詢:本機向本地域名伺服器發出一次查詢請求,就靜待最終的結果。如果本地域名伺服器無法解析,自己會以DNS客戶機的身份向其它域名伺服器查詢,直到得到最終的IP地址告訴本機
(2)迭代查詢:本地域名伺服器向根域名伺服器查詢,根域名伺服器告訴它下一步到哪裡去查詢,然後它再去查,每次它都是以客戶機的身份去各個伺服器查詢。

通俗地說,遞迴就是把一件事情交給別人,如果事情沒有辦完,哪怕已經辦了很多,都不要把結果告訴我,我要的是你的最終結果,而不是中間結果;如果你沒辦完,請你找別人辦完。
迭代則是我交給你一件事,你能辦多少就告訴我你辦了多少,然後剩下的事情就由我來辦。