DNS(域名解析協議)介紹

什麼是域名

域名是什麼,域名就是 IP 地址,IP 地址是一個很大的數字,通常使用點分十進制來書寫,例如:127.0.0.1,但是這並不方便人們記憶,你想要用百度搜索就要訪問百度的服務器,可是讓你記住這樣一串魔幻數字,真的很困難,因此域名就誕生了

域名和IP地址對應,這樣我們就不用記住那一串魔幻數字,只需要記住 www.baidu.com,它同樣能夠唯一的標識一臺主機

hosts 文件

爲了維護域名和IP地址的映射關係,早期使用的方法是:每臺主機上都有一個hosts文件,這個文件裏面記錄了映射關係,我們在瀏覽器輸入域名,瀏覽器就會去hosts文件找到對應IP地址,從而進行訪問
在這裏插入圖片描述
但是隨着域名的增多,一個hosts文件似乎搞不定了,而且一旦有了新的域名出現,必須要所有主機都更新hosts文件纔可以保證正常訪問,這未免也太麻煩了,而且怎麼能要求所有用戶都會更新hosts文件呢!

DNS 服務器

DNS 服務器也就是域名服務器,如果你需要通過某個域名訪問服務器,那麼只需要先訪問下DNS服務器(DNS服務器維護一個主機名和IP地址之間對應關係的數據庫),DNS服務器就會將域名對應的IP返回給你,就可以通過IP地址正常訪問了

理論上來講這樣的DNS服務器,一臺就夠了,在一臺機器上存儲所有的域名和IP的對應關係,所有的主機訪問時都先訪問這臺機器

但是這樣做並不夠高明,因爲一旦這一臺DNS服務器掛了,整個因特網不就癱瘓了

因此,因特網採用的是層次樹狀的命名方法,並使用分佈式的域名系統DNS,即使某臺DNS服務器出現問題,依舊保證域名解析不會受到影響

域名到 IP 地址的解析過程

當一個應用進程需要把主機名解析爲IP地址時,該進程就會調用解析程序,併成爲DNS的一個客戶,把待解析的域名放入DNS請求報文中,通過UDP用戶數據報的方式發送給本地域名服務器。本地域名服務器在查找報文後,把對應的IP地址放入回答報文中返回。應用進程獲取到目的主機的IP地址後就可以進行通信

若本地域名服務器不能回答該請求,則次域名服務器就暫時成爲一個DNS客戶,並向其他域名服務器發送查詢請求,直到找到能夠回答該請求的域名服務器爲止。

因特網的域名結構

因特網採用的是層次樹狀的命名方法,任何一個連接在因特網上的主機或路由器都有一個唯一的層次結構的名字,即域名,這裏的域是名字空間中可被管理的劃分,域還可以劃分爲子域,而子域還可以劃分爲子域的子域,這樣就形成了頂級域,二級域,三級域等等…

每一個域名都是由標號序列組成,各個標號之間用隔開
在這裏插入圖片描述
上圖中的這個域名由三個標號組成,其中標號com是頂級域名、標號cctv是二級域名、標號mail是三級域名

域名中的標號由英文字母和數字組成,不區分大小寫

  • 頂級域名分爲三大類:
    1)國家頂級域名:cn代表中國、us代表美國、uk代表英國
    2)通用頂級域名:com公司企業、net網絡服務機構、org非營利性組織
    3)基礎機構域名:arpa反向域名

  • 我國把二級域名劃分爲類別域名行政區域名
    1)類別域名:com工商金融等企業、gov政府機構、org非營利性組織
    2)行政區域名:bj北京市、js江蘇省

用域名樹表示因特網的域名系統:
在這裏插入圖片描述

域名服務器

我們不可能爲每一級域名都配備一個相對應的域名服務器,這樣的話域名服務器數量太多,效率會很低

實際上一個DNS服務器的管轄範圍並不是以域爲單位,而是以爲單位,區是DNS服務器的實際管轄範圍,區可能小於域,但一定不可能大於域。

舉例下圖:
一個公司abc,下屬部門x和y,部門x下又有u和v,y下又有t
圖a中:abc公司只設定了一個區abc.com,區abc.com和域abc.com指的是同一件事
圖b中:公司設定了兩個區abc.com區y.abc.com,這兩個區都隸屬於域abc.com,兩個區都設置相應的權限域名服務器,可以看出區是域的子集
在這裏插入圖片描述
因特網上的DNS域名服務器同樣是按照層次安排的,每一個域名服務器都只對域名體系中的一部分進行管轄

根據域名服務器所起的作用,可以將域名服務器劃分爲以下四種類型

1)根域名服務器: 所有的根域名服務器都知道所有的頂級域名服務器的域名和IP地址。根域名服務器是最重要的域名服務器,因爲任何的本地域名服務器當不能解析域名的時候,必須要向根域名服務器進行求助,假設所有的根域名服務器都出現問題,那麼整個因特網也就癱瘓了。

2)頂級域名服務器: 頂級域名服務器負責管理,在自己下面註冊的所有二級域名服務器,當收到DNS請求時會做出相應應答

3)權限域名服務器: 權限域名服務器就是負責一個區的域名服務器,當權限域名服務器還不能給出查詢結果時,會告訴發出查詢請求的DNS用戶,下一步去找哪個權限域名服務器

4)本地域名服務器: 當一個主機發出DNS請求時,這個查詢請求報文就是發送給了本地域名服務器,

在這裏插入圖片描述

域名解析過程(更詳細)

首先注意兩點:
第一: 主機向本地域名服務器的查詢一般都是採用遞歸查詢。遞歸是指如果本地域名服務器不知道被查詢域名的IP地址,本地域名服務器就成爲了一個新的DNS客戶,代替主機進行查詢,最後返回查詢結果
第二: 本地域名服務器向根域名服務器的查詢通常採用的是迭代查詢。迭代查詢是指當根據域服務器接收到本地域名服務器發送的迭代查詢請求報文後時,要麼給出所查詢的IP地址,要麼告訴服務器 “你下一步應該到哪個頂級域名服務器進行查詢”,然後本地域名服務器親自去頂級域名服務器查詢;同樣,頂級域名服務器接收到查詢請求後,要麼給出所查詢的IP地址,要麼告訴本地域名服務器 “你下一步應該到哪個權限域名服務器查詢”,最後本地域名服務器得到IP地址,返回給主機。同樣:本地域名服務器也可以採用遞歸查詢。
在這裏插入圖片描述
如上圖a:假設域名爲m.xyz.com的主機想要知道域名爲y.abc.com的IP地址,步驟如下
1) 主機m.xyz.com先向本地域名服務器dns.xyz.com進行遞歸查詢
2) 本地域名服務器採用迭代查詢,首先向根域名服務器查詢
3) 根域名服務器告訴本地域名服務器,下一次應該到頂級域名服務器dns.com查詢
4) 本地域名服務器向頂級域名服務器dns.com查詢
5) 頂級域名服務器dns.com告訴本地域名服務器,下一次應該到權限域名服務器dns.abc.com進行查詢
6) 本地域名服務器向權限域名服務器dns.abc.com查詢
7) 權限域名服務器dns.abc.com告訴本地域名服務器所查詢的IP地址
8) 本地域名服務器將IP地址告訴主機m.xyz.com

爲提高效率的高速緩存

爲了提高DNS的查詢效率,減輕根域名服務器的負荷,並減少因特網上DNS查詢數據報的數量,在域名服務器中使用了高速緩存高速緩存是用來存放最近查詢過的域名以及從何處獲取域名映射信息的記錄

例如:在上述查詢過程中,假設不久前已經有其他用戶查詢過域名爲y.abc.com的IP地址,那麼當我查詢的時候,本地域名服務器就不必要向根域名服務器重新查詢,只需要將高速緩衝中上次的查詢結果告訴我。

或者:本地域名服務器中並沒有y.abc.com的IP地址,但是存放着頂級域名服務器dns.com的IP地址,那麼同樣不需要向根域名服務器查詢,只需要直接向頂級域名服務器進行查詢

高速緩存存在着一定的聲明週期,一旦超過了聲明週期,就需要向根域名服務器重新請求

主要參考書籍 《計算機網絡第五版》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章