1. 程式人生 > >淺析計算機網路(2) -- DNS工作原理

淺析計算機網路(2) -- DNS工作原理

DNS的工作原理

來做個小實驗吧

  • 開啟你的終端或者DOS命令執行視窗,輸入ping www.baidu.com看看發生了什麼
  • 如果你的網路正常連線的話,應該可以看到這樣的結果
    ping結果

  • 把其中的111.13.100.92(你的顯示的可能不一樣,不用擔心,放心複製)複製到瀏覽器,然後訪問後你是不是看到了百度首頁了吶。

域名與IP地址

  • 我們將www.baidu.com這樣的能定位到某個網站的字串叫做域名
  • 111.13.100.92這樣同樣的定位到某個網站(更準確的說是定位到某臺主機)的字串叫做IP地址

通過上面的例子可以看出相對於IP地址,域名對於使用者而言更容易記憶,更加友好。而對於路由器等網路裝置卻不是這樣的。路由器可以根據IP地址更快的定位主機位置。而域名這種長度不定的字串對於路由器來說簡直是無法理解的。

DNS的使命

  • DNS(Domain Name System),中文叫做域名系統。

DNS的就是為了同時保留域名和IP地址的優勢的產物。人們可以通過域名簡單的記住要訪問的web站點,而路由器等網路裝置卻可以使用IP地址快速定位到相關主機。DNS要做的就是當用戶輸入域名後,先到DNS伺服器查詢IP地址,然後再通過IP地址來訪問web站點。

DNS伺服器的層次結構

  • 實現DNS伺服器最簡單的一種方案就是在一臺遠端主機上配置好DNS的對映表,所有的域名轉換都會通過這臺主機。可是這樣的方案簡單卻不可靠。主要的缺點有:
    1. 當這臺主機出現故障時,整個網際網路將會癱瘓。只有那些不依賴DNS服務的軟體才可以正常工作
    2. 單個DNS伺服器不得不處理整個網際網路的所有DNS解析,這樣的對頻寬的要求是很高的
    3. 這種單點非分散式的方案,會造成巨大的延遲。加入這臺伺服器放在美利堅,當你在我大天朝訪問大天朝的百度的時候,你的域名解析的報文不得不先到達地球另一面的伺服器所在地,然後返回。一次請求,報文往返路程就繞地球一圈了。而網際網路的使用者的直觀感受就是:慢
    4. 對映表的維護成本更加昂貴,當你需要新增或者更新DNS記錄的時候,對於這樣大量的資料維護成本極高,效率極低

所以,DNS伺服器應該是分散式的。

  • DNS伺服器的層次結構:
    • 根DNS伺服器 :用來返回TLD伺服器的IP地址
    • 頂級域(TLD)域名伺服器:返回權威伺服器的IP地址
    • 權威DNS伺服器 :返回相應主機的IP地址
  • 還有一種本地DNS伺服器,他並不屬於以上的層次機構,卻很重要,通常我們電腦和路由器自動獲得到的DNS伺服器地址就是本地伺服器。每個ISP都有本地DNS伺服器,當主機發出DNS請求時,請求被髮往本地伺服器,它起著代理作用,將該請求轉發到DNS伺服器層次中。

圖解訪問百度DNS解析過程

DNS伺服器互動

  1. 你在瀏覽器輸入了網址,然後瀏覽器通過UDP協議向本地伺服器的53號埠傳送了DNS解析請求(1號過程)。
  2. 如果本地DNS伺服器快取了百度的DNS記錄(關於DNS快取在下一節會詳細講),如果沒有該記錄就回向根伺服器請求(2號路徑),然後根伺服器收到請求後,會返回給本地伺服器相應的頂級域名DNS伺服器地址。以www.baidu.com為例,就回返回解析com頂級域名的伺服器(3號路徑)。
  3. 然後本地伺服器知道TLD DNS伺服器的地址後就會向該伺服器傳送解析請求(4號請求),然後TLD伺服器返回給本地DNS伺服器百度的權威伺服器的IP地址(5號路徑)。
  4. 同上,本地DNS伺服器向百度的權威DNS伺服器發起查詢請求(6號路徑)。就回得到百度權威DNS伺服器返回給本地伺服器的百度伺服器的IP地址(7號路徑)。
  5. 最後,本地DNS伺服器會把百度伺服器的IP地址返回給你的電腦(8號路徑),同時將這條記錄快取在本地DNS伺服器。

    • 注意:以上這種方式稱為“先遞迴,再輪詢”的查詢方式,計算機網路中還存在其他的查詢方式如僅僅的”遞迴“,可是上面這種查詢方式時最常用的。

DNS快取

  • 如果每次DNS解析都要走完上一節整個的流程,那樣對於網路頻寬的消耗和延時對於使用者和DNS解析系統都是不友好的。所以當本地DNS伺服器在一次查詢後快取到本地。從而加快DNS的解析速度。實際上,你的訪問的解析大多數都是在本地伺服器上完成的。

DNS的額外服務

  • 之所以稱這節為DNS的額外服務是指出了主機名到IP地址轉換的其他的一些服務

    1. 主機別名(host aliasing):有著複雜主機名的主機能同時擁有一個或者多個別名。例如:relay1.hangzhou.enterprise.com可能有一個別名叫做enterpries.com 我們稱前者為規範主機名。主機別名更容易記憶。DNS可以根據主機別名來返回主機名的規範主機名,和主機的IP地址
    2. 郵件伺服器別名(mail server aliasing):與第一項類似,只不過是針對郵件伺服器提供別名服務
    3. 負載分配(load distribution):並不是每個域名對應一個IP地址,可能對應多臺。這是DNS以輪流的方式來返回主機IP地址。

DNS資源記錄(DNS存了什麼?)

RR

DNS資源記錄(resource record,RR)就是上圖描述的四種類型的紀錄(其實還有其他型別,這裡我們不再說明)。其中生存時間TTL決定了該條記錄在快取中刪除的時間。(單位為秒)
下面分別舉個例子幫助理解

  1. (relay1.bar.foo.com, 145.37.93.126, A)
  2. (foo.com, dns.foo.com, NS)
  3. (foo.com, relay.bar.foo.com, CNAME)
  4. (foo.com, mail.bar.foo.com, MX)