當咱們談網絡時,咱們談些什麼(2)--DNS的工做原理

博客新址,這裏更有趣web

來作個小實驗吧

  • 打開你的終端或者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),中文叫作域名系統。spa

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)

下一篇更新對獲取百度首頁的過程當中從網絡層到鏈路層的一個變化。

相關文章
相關標籤/搜索