1. 程式人生 > >【計算機網絡】 一個小白的DNS學習筆記 (>﹏<)

【計算機網絡】 一個小白的DNS學習筆記 (>﹏<)

網絡 relay 自己的 使用 source media top img rdquo

參考書籍

《計算機網絡-自頂向下》 作者 James F. Kurose

DNS的作用

DNS是因特網的目錄服務

DNS是因特網的目錄服務,它提供了主機名到IP地址映射的查詢服務。這種服務的起源之一是人和路由器的需求之間的矛盾,主機可以用主機名或IP地址標識,對我們人來說,我們很喜歡像taobao.com或者是baidu.com之類的由便於記憶的單詞組成的主機名, 但對於路由器來說,它難以處理這種字母數字組成的主機名,而更能接受IP地址。所以DNS就是根據主機名查詢對應的IP地址的服務。 當然,DNS的作用不止於此,下面是DNS的提供具體服務列表:

DNS提供的具體服務列表

  • 提供了主機名到IP地址映射的查詢服務
  • 提供主機別名(host aliasing)服務,有著復雜主機名的主機可以有一個或者多個別名,例如aaa.xxx.com的主機可能還會有aaa.com和www.aaa.com兩個別名,在這種情況下,aaa.xxx.com叫做規範主機名(canonical hostname)。主機別名的特征是比規範主機名更容易記憶,DNS可以提供根據主機別名獲取規範主機名的服務
  • 提供負載分配服務(load distribution) 一般來說,被繁忙訪問的大型站點是分布在多臺服務器上的, 這個時候,主機名和IP地址就不是一一對應的關系,而是一個主機名對應一個IP地址的集合。 在大量的,連續的多次訪問中,DNS通過旋轉IP地址達到負載均衡的目的:在向這個主機名發出DNS請求的時候,服務器會用包含全部這些IP地址的報文進行回答, 但在每個不同的回答中會旋轉這些IP地址的擺放順序,而客戶機總向報文中排在最前的IP地址發出請求

DNS的性質

我們可以從兩個層面上來理解DNS: 第一,從協議的層面看,它是一種應用層協議 第二,從實體的層面看,它是一個由分層的DNS服務器實現的分布式數據庫

DNS的的工作過程

當我們在一臺客戶端上通過瀏覽器訪問www.someschool.edu/index.html的時候,DNS的工作過程是這樣的: 1. 在這臺用戶主機上運行有DNS的客戶機 2. 該瀏覽器從上述URL中抽取www.someschool.edu,發給本主機的DNS客戶機 3. DNS客戶機向DNS服務器發送一個包含主機名www.someschool.edu的請求 4. 返回的響應報文裏包含有目的IP地址,由瀏覽器獲取並對該IP地址對應的HTTP服務器發起一個TCP連接。

DNS服務器的層次和類別

DNS服務器是有層次的,它可以分為三種類型:根DNS服務器, 頂級域(Top-Level Domain, TLD )DNS服務器和權威DNS服務器,分別對應下面三個層次(從上至下) 技術分享

技術分享

根DNS服務器

因特網上有13個根DNS服務器, 其中大部分分布在北美洲,下面顯示的是2012年的根DNS服務器分布圖 技術分享 技術分享

頂級域DNS服務器

頂級域服務器負責頂級域名,如com,org,net,edu和gov和所有國家的頂級域名如cn,uk,jp (edu 教育機構域名, gov 政府部門域名 , org 非盈利性的組織 ,com 企業域名 )

權威DNS服務器

在因特網上具有公共可訪問的主機的每個組織機構必須提供公共可訪問的DNS記錄,這些記錄將這些主機的名字映射為IP地址。 由組織機構的權威DNS服務器保存這些DNS記錄,組織機構可以選擇實現它自己的權威DNS服務器來保持這些記錄,或者通過支付費用將這些記錄存儲在某個服務提供商的DNS服務器中。多數大學和大公司實現和維護它們自己基本的權威DNS服務器 本地DNS服務器 (不在上面的三層DNS結構中) 還有一類比較重要的DNS服務器,叫做本地DNS服務器(local DNS server),它並不在我們上面所說的DNS層次結構中。 本地DNS服務器的作用 1.主機和本地DNS服務器一般是相鄰的,當主機發出DNS請求的時候,該請求會被發往本地DNS服務器,它起著代理的作用,並將該請求轉發到DNS服務器層次結構中 2.本地DNS服務器可以通過緩存主機名/IP地址,減少對相同主機名的查詢而消耗的時間,改善時延和性能

DNS的工作機理

我們上面說到,DNS從實體的角度上看,就是一個分布式的數據庫,那麽它是如何實現關鍵數據的查詢和插入的呢?

在DNS中查詢記錄

實際上,在DNS服務中, 並不能通過對某個DNS服務器,通過僅僅一次的“請求/響應”就取得主機名/IP地址的查詢結果。相反,需要多個不同的DNS服務器之間進行多次交互才能獲取最終的查詢結果 如下圖所示: 技術分享

技術分享 例如上圖所示的例子中,主機cis.poly.edu想知道主機gaia.cs.umass.edu的IP地址,並且 主機gaia.cs.umass.edu的權威DNS服務器為dns.umass.edu。 則DNS查詢過程如下: 1. 主機cis.poly.edu首先向它的本地DNS服務器dns.poly.edu發送一個DNS查詢報文,該查詢報文包含有要求轉換的主機名gaia.cs.umass.edu 2. 本地DNS服務器dns.poly.edu將該報文轉發至根DNS服務器。 3. 該根DNS服務器註意到DNS服務器的edu前綴並向本地DNS服務器dns.poly.edu返回負責edu的頂級域DNS服務器的IP地址列表 4. 本地DNS服務器接收到了返回的報文,根據報文中的IP地址,向該頂級域DNS服務器發送查詢報文 5. 頂級域DNS服務器註意到了umass.edu前綴,用包含權威DNS服務器的IP地址進行響應,該權威DNS服務器是負責馬薩諸塞大學的dns.umass.edu 6. 本地DNS服務器直接向主機dns.umass.edu重發查詢報文 7. 主機dns.umass.edu使用gaia.cs.umass.edu的IP地址作為響應,傳回給本地DNS服務器 8. 最終,本地DNS服務器將包含最終結果的查詢報文轉發給請求主機cis.poly.edu 總共8份報文 可以看到,這8份報文由以下兩部分組成:
  • 請求主機和本地DNS服務器的請求/響應,共兩份報文
  • 本地DNS服務器和根DNS服務器,頂級域DNS服務器,權威DNS服務器的請求響應,共6份報文
DNS記錄的格式 DNS服務器上存儲著資源記錄(Resource Record, RR), 資源記錄是一個包含了下列字段的四元組: (Name, Value, Type, TTL) TTL是該記錄的生存時間,它決定了該記錄應當從緩存中刪除的時間 忽略TTL,Name和Value的的具體含義取決於Type:
  • Type = A,則Name是主機名,Value是該主機名對應的IP地址。 例如: (relay1.bar.foo.com, 145.37.93.126, A)
  • Type = NS,則Name是域(如foo.com),而Value是知道如何獲取該域中主機IP地址的權威DNS服務器的主機名,如(foo.com, dns.foo.com, NS)
  • Type = CNAME, 則Value是別名為Name的主機對應的規範主機名,如(foo.com, relay1.bar.foo.com)
以上面那幅DNS請求的圖示為例 1.如果一臺DNS服務器是某個特定主機名的權威DNS服務器, 那麽該DNS服務器一定會有一條包含該主機名的類型A記錄,因為主機dns.umass.edu是主機gaia.cs.umass.edu的權威DNS服務器,所以dns.umass.edu中可能包含這樣一條記錄: (gaia.cs.umass.edu, 145.33.76.751, A) 2. 如果一臺DNS服務器是某個特定主機名的權威DNS服務器,那麽該服務器將包含一條A記錄和一條類型NS記錄,例如edu頂級域DNS服務器並不是機gaia.cs.umass.edu的權威DNS服務器,那麽它將包含
  • 一條指向權威DNS服務器主機名的NS記錄(umass.edu,dns.umass.edu,NS)
  • 一條解釋該權威DNS服務器IP地址的A記錄(dns.umass.edu, 128.119.40.111, A)

在DNS中插入記錄

我們上面介紹了DNS中查詢記錄的過程,那麽這些記錄是如何被插入的呢? 假設你剛剛創建了一個網絡烏托邦(Network Utopia)公司, 要做的第一件事情就是到註冊登記機構註冊域名(networkutopia.com), 註冊的時候,需要向該機構提供你的權威DNS服務器的名字和IP地址,該註冊機構將確保將一個NS記錄和A記錄被插入com頂級域DNS服務器中。 例如,假設我們的網絡烏托邦(Network Utopia)公司的權威服務器的主機名和IP地址為dns1.networkutopia.com 和 128.119.40.111,則該註冊機構將以下記錄插入com頂級域DNS服務器
  • (networkutopia.com, dns1.networkutopia.com,NS)
  • (dns1.networkutopia.com, 128.119.40.111,A)

DNS報文

DNS報文格式如下: 技術分享 技術分享 技術分享

【計算機網絡】 一個小白的DNS學習筆記 (>﹏<)