DNS學習筆記


一、DNS的作用

  在網絡世界中,不同的機器之前互相通訊,使用的IP地址和MAC地址。但是IP地址和MAC地址對人來說,並不友好,一串數字難以記憶,並且很多IP地址是動態變化的。因此需要給一些固定的服務器不會變化的域名(例如:www.baidu.com,www.taobao.com)。想要訪問該網絡的用戶只需要記住域名,通過域名系統(DNS: Domain Name System,一種基礎UDP實現的應用層協議)就能獲取到域名對應的IP地址,對於用戶而言,使用的是便於記憶的域名地址,對於機器而言,使用的依然是IP地址進行互相通信。

  我們可以在命令窗口里用nslookup命令查詢DNS的解析結果。如下圖1

 (圖1)

  nslookup www.baidu.com 之后的結果,其中service和address的地址是192.168.3.2,這個地址是局域網內無線路由的IP。Non-authoritative answer表示本地解析不是通過權威服務器返回的,來源本地域名服務器緩存。解析結果里面 www.baidu.com被CNAME到www.a.shifen.com(真實域名),最后解析出www.a.shifen.com的地址的兩個IP。

二、DNS解析過程

  假設現在往電腦的瀏覽器上輸入www.baidu.com時,DNS要將當前域名解析為IP地址時,大致需要進行以步驟,如圖2。

(圖2)

  1、查詢瀏覽器緩存,每種瀏覽器對DNS的緩存時間各不相同,有的幾十秒,有的幾分鍾,有的幾十分鍾

      2、查詢本機緩存(),緩存為空時也會查詢/etc/hosts文件,本地緩存可通過命令清除,比如windows 的(ipconfig/flushdns),mac的 sudo killall -HUP mDNSResponder

  3、如果緩存中查詢不到,則到本地域名服務器上進行查詢(),一般來說,本地域名服務器可以簡單理解為ISP(Internet Service Provider)的DNS服務器,ISP即常見的如移動/聯通/電信。所以一般對應的本地域名服務器,正常情況下,都是在用戶所屬運營商的機房里。

      4、當本地域名服務器中的DNS緩存中查詢不到該域名和IP地址的映射信息,本地域名服務器則遞歸地查詢域名服務器。首先會先向根域名服務器查詢.com的頂級域名服務器的地址(),跟域名服務器會返回一批頂級域名(.com)服務器所對應的地址(),讓本地服務器去咨詢去頂級域名服務器。根域名服務器全球一共有十三套(a.root-services.net -  m.roolt-service.net),分布在全球不同的地方,由不同的機構進行維護。

  5、本地域名服務器會從獲取到頂級域名服務器中選擇一個進行詢問:.baidu.com的權威服務器地址在哪里?(),頂級域名服務器一樣將.baidu.com所對應的權威域名服務器的地址返回給本地域名服務器(),一般也是多個。

  6、一般情況,權威域名服務器是域名注冊商的DNS服務器,本地域名服務器選擇一個權威域名服務器發送請求(),權威域名服務器返回最終的地址或者CNAME將域名指向負載均衡器()。常見的如CDN,就是通過DNS的權威域名服務器將域名CNAME到CDN的域名上。

  7、本地域名服務器會訪問全局負載均衡器()。全局負載均衡器會根據訪問方的運營商和地理位置,挑選最合適的一個或者多個地址返回給本地域名服務器(),最后由本地域名服務器返回給應用方()。

  

  通過在命令窗口輸入dig www.baidu.com +trace 命令可以大概看到這個流程

(圖3) 

    1、首先本地域名服務器獲取十三個根域名服務器

        2、選擇一個根域名服務器(j.root-servers.net)查詢獲取到.com的頂級域名服務器

        3、再選擇一個頂級域名服務器(d.gtld-servers.net)查詢獲取到.baidu.com的權威域名服務器

        4、再選擇一個權威域名服務器(ns7.baidu.com) 查詢到www.baidu.com對應的信息,因為第一條記錄為www.baidu.com 通過CNAME 指向到www.a.shifen.com,因此本地DNS服務器會再對www.a.shifen.com進行一次域名解析

        5、再次對www.a.shifen.com進行域名解析,最終得到對應的IP地址如(圖4),一般情況CNAME不宜過長,CNAME次數過多,會導致域名的解析時間變長。

 (圖4)

 

三、HTTPDNS

  傳統的DNS大部分情況下可以滿足要求,但是也存在一些弊端。比如:

  • DNS劫持問題:黑客通過攻擊用戶路由器或者DNS服務器,將用戶引導向釣魚網站,竊取用戶信息,如銀行卡等。
  • 域名緩存無法定制的問題:本地域名服務器的緩存,無法精細將用戶引導到最適合的地方,並且緩存過長也可能導致用戶訪問到的不是最新的數據
  • 有些小運營商轉發域名解析給大運營商,導致用戶訪問服務跨運營商,網絡傳輸效率低,影響體驗
  • 長鏈路的域名遞歸解析可能導致的高耗時

 

  為了解決DNS可能存在的問題,就有了HTTPDNS。HTTPDNS通過自建基於HTTP協議的DNS服務器集群,部署在不同的運營商和網點上,可以自己定制緩存、負載均衡等規則,讓用戶的DNS解析獲取到最合適的訪問地址。

 

  HTTPDNS一般流程

  1. 查詢客戶端本地DNS緩存,如果緩存存在並且未過期,則不進行查詢,使用緩存數據直接訪問
  2. 如果緩存不存在或者過期,則查詢HTTPDNS服務器,HTTPDNS服務器返回域名對應的IP地址,客戶端將結果保存到緩存中
  3. 通過IP地址訪問域名指向的服務器

   因為客戶端可以直接獲取到用戶所在地址、運營商信息等信息,因此將用戶的網絡信息提交到HTTPDNS服務器是時,HTTPDNS服務器可以根據用戶的網絡情況,綜合用戶與服務器距離、網絡運營商、服務器的近一段時間的表現等情況,返回最合適的服務器集合,實現負載均衡和智能調度。而客戶端可以自定義緩存策略,緩存不再依賴於域名商的本地域名服務器,DNS緩存策略可以根據具體情況定制,更加靈活。

  上面的第二步,客戶端需要去查詢HTTPDNS服務器,客戶端是怎么知道HTTPDNS服務器對應的地址?一種方式是將HTTPDNS服務器的IP地址寫死,保證HTTPDNS服務器的IP地址不會變化。 二是第一次訪問HTTPDNS服務器的時候使用的是DNS協議,通過DNS獲取到HTTPDNS服務器之后,后續的再查詢不再使用DNS,改用HTTPDNS協議。當然,HTTPDNS服務器除了需要做集群來保證可用性以外,如果客戶端訪問HTTPDNS失敗之后需要自行降級使用DNS協議,防止因為HTTPDNS服務器可不用,導致整個項目出現問題。

  目前HTTPDNS只適用於客戶端,瀏覽器上無法使用HTTPDNS協議。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM