1. 程式人生 > >DNS解析全過程分析

DNS解析全過程分析

DNS解析過程

1.檢查瀏覽器快取中是否快取過該域名對應的IP地址

使用者通過瀏覽器瀏覽過某網站之後,瀏覽器就會自動快取該網站域名對應的IP地址,
當用戶再次訪問的時候,瀏覽器就會從快取中查詢該域名對應的IP地址,
因為快取不僅是有大小限制,而且還有時間限制(域名被快取的時間通過TTL屬性來設定),
所以存在域名對應的IP找不到的情況。
當瀏覽器從快取中找到了該網站域名對應的IP地址,那麼整個DNS解析過程結束,
如果沒有找到,將進行下一步驟。
對於IP的快取時間問題,不宜設定太長的快取時間,
時間太長,如果域名對應的IP發生變化,那麼使用者將在一段時間內無法正常訪問到網站,
如果太短,那麼又造成頻繁解析域名。

2.如果在瀏覽器快取中沒有找到IP,那麼將繼續查詢本機系統是否快取過IP

如果第一個步驟沒有完成對域名的解析過程,
那麼瀏覽器會去系統快取中查詢系統是否快取過這個域名對應的IP地址,
也可以理解為系統自己也具備域名解析的基本能力。
在Windows系統中,可以通過設定hosts檔案來將域名手動繫結到某IP上,
hosts檔案位置在C:/Windows/System32/drivers/etc/hosts。
對於普通使用者,並不推薦自己手動繫結域名和IP,
對於開發者來說,通過繫結域名和IP,可以輕鬆切換環境,可以從測試環境切換到開發環境,方便開發和測試。
在XP系統中,黑客常常修改他的電腦的hosts檔案,將使用者常常訪問的域名繫結到他指定的IP上,
從而實現了本地DNS解析,導致這些域名被劫持。
在Linux或者Mac系統中,hosts檔案在/etc/hosts,修改該檔案也可以實現同樣的目的。

3.向本地域名解析服務系統發起域名解析的請求

如果在本機上無法完成域名的解析,那麼系統只能請求本地域名解析服務系統進行解析,
本地域名系統LDNS一般都是本地區的域名伺服器,
比如你連線的校園網,那麼域名解析系統就在你的校園機房裡,
如果你連線的是電信、移動或者聯通的網路,那麼本地域名解析伺服器就在本地區,由各自的運營商來提供服務。
對於本地DNS伺服器地址,Windows系統使用命令ipconfig就可以檢視,
在Linux和Mac系統下,直接使用命令cat /etc/resolv.conf來檢視LDNS服務地址。
LDNS一般都快取了大部分的域名解析的結果,當然快取時間也受域名失效時間控制,
大部分的解析工作到這裡就差不多已經結束了,LDNS負責了大部分的解析工作。

4.向根域名解析伺服器發起域名解析請求

本地DNS域名解析器還沒有完成解析的話,那麼本地域名解析伺服器將向根域名伺服器發起解析請求。

5.根域名伺服器返回gTLD域名解析伺服器地址

本地DNS域名解析向根域名伺服器發起解析請求,
根域名伺服器返回的是所查域的通用頂級域(Generic top-level domain,gTLD)地址,
常見的通用頂級域有.com、.cn、.org、.edu等。

6.向gTLD伺服器發起解析請求

本地域名解析伺服器向gTLD伺服器發起請求。

7.gTLD伺服器接收請求並返回Name Server伺服器

gTLD伺服器接收本地域名伺服器發起的請求,並根據需要解析的域名,找到該域名對應的Name Server域名伺服器,
通常情況下,這個Name Server伺服器就是你註冊的域名伺服器,
那麼你註冊的域名的服務商的伺服器將承擔起域名解析的任務。

8.Name Server伺服器返回IP地址給本地伺服器

Name Server伺服器查詢域名對應的IP地址,將IP地址連同TTL值返回給本地域名伺服器。

9.本地域名伺服器快取解析結果

本地域名伺服器快取解析後的結果,快取時間由TTL時間來控制。

10.返回解析結果給使用者

解析結果將直接返回給使用者,使用者系統將快取該IP地址,快取時間由TTL來控制,至此,解析過程結束。

DNS解析過程分析

基本概念

域名解析記錄主要分為A記錄、MX記錄、CNAME記錄、NS記錄以及TXT記錄。

  • A記錄:A代表的是Address,用來指定域名對應的IP地址,
    比如將map.baidu.com指定到180.97.34.157,
    將zhidao.baidu.com指定到180.149.131.245,
    A記錄允許將多個域名解析到一個IP地址,但不允許將一個域名解析到多個IP地址上。
  • MX記錄:MX代表的是Mail Exchage,就是可以將某個域名下的郵件伺服器指向自己的Mail Server,
    如baidu.com域名的A記錄IP地址是180.97.34.157,
    如果將MX記錄設定為180.97.34.154,即[email protected]的郵件路由,
    那麼DNS會將郵件傳送到180.97.34.154所在的伺服器,
    而正常web請求仍然會解析到A記錄的IP地址180.97.34.157。
  • CNAME記錄:CNAME指的就是Canonical Name,也就是別名解析,
    可以將指定的域名解析到其他域名上,而其他域名就是指定域名的別名,整個解析過程稱為別名解析。
    比如將baidu.com解析到shifen.com,shifen.com就是baidu.com的別名。
  • NS記錄:就是為某個域名指定了特定的DNS伺服器去解析。
  • TXT記錄:為某個主機名或者域名設定特定的說明,
    比如為baidu.com設定的的TXT記錄為“baidu desc”,這個TXT記錄為baidu.com的說明

命令檢視

nslookup

上圖中Non-authoritative answer表示解析結果來自非權威伺服器,
也就是說這個結果來自快取,並沒有完全經歷全部的解析過程,
從某個快取中讀取的結果,這個結果存在一定的隱患,比如域名對應的IP地址已經更變。
這只是一個快捷的解析結果,如果需要瀏覽全部的解析過程,那麼可以使用dig命令來檢視解析過程。

dig

分析上圖DNS解析過程,我們可以看出:

1.從本地DNS域名解析伺服器獲取到13個根DNS域名伺服器(.)對應的主機名

2.從13個根域名伺服器中的其中一個(這裡是g.root-servers.net)獲取到頂級com.的伺服器IP(未顯示)和名稱

3.向com.域的一臺伺服器192.52.178.30(k.gtld-servers.net)請求解析,
它返回了baidu.com域的伺服器IP(未顯示)和名稱,百度有四臺頂級域的伺服器

4.向百度的頂級域伺服器112.80.248.64(ns3.baidu.com)請求www.baidu.com,
它發現這個www有個別名,而不是一臺主機,別名是www.a.shifen.com

一般情況下,DNS解析到別名就停止了,返回了具體的IP地址,
如果想看到具體的IP地址,可以進一步對別名進行解析,
解析結果如下:

上圖是直接對www.wshifen.com的解析結果,
因為發現對 www.a.shifen.com解析後,發現別名是 www.wshifen.com
這時候看到最後的解析結果是103.235.46.39
在解析別名的過程中,可以發現shifen.com和baidu.com都是指定了相同的域名解析伺服器。
以上是一個域名的解析過程,最後的解析結果和一開始的使用nslookup的結果一致。

參考資料

DNS淺談