淺析DNS域名解析過程
本文來自轉載,點選檢視原文可檢視原地址,原文地址:
https://blog.csdn.net/Lammonpeter/article/details/81358387
對於每一個HTTP請求發起過程中,都有很重要的一個步驟——DNS解析,本篇文章將跟著DNS解析過程來分析域名是如何解析的。
一、DNS域名解析步驟
下圖是DNS
域名解析的一個示例圖,它涵蓋了基本解析步驟和原理。
下面DNS
解析步驟進行講解,後面將採用命令列的形式來跟蹤DNS
解析過程。當用戶在位址列鍵入www.baidu.com
並敲下回車鍵之後,域名解析就開始了。
第一步:檢查瀏覽器快取中是否快取過該域名對應的IP地址
使用者通過瀏覽器瀏覽過某網站之後,瀏覽器就會自動快取該網站域名對應的IP
地址,當用戶再次訪問的時候,瀏覽器就會從快取中查詢該域名對應的IP地址,因為快取不僅是有大小限制,而且還有時間限制(域名被快取的時間通過TTL
屬性來設定),所以存在域名對應的IP
找不到的情況。當瀏覽器從快取中找到了該網站域名對應的IP
地址,那麼整個DNS
解析過程結束,如果沒有找到,將進行下一步驟。對於IP
的快取時間問題,不宜設定太長的快取時間,時間太長,如果域名對應的IP
發生變化,那麼使用者將在一段時間內無法正常訪問到網站,如果太短,那麼又造成頻繁解析域名。
第二步:如果在瀏覽器快取中沒有找到IP,那麼將繼續查詢本機系統是否快取過IP
如果第一個步驟沒有完成對域名的解析過程,那麼瀏覽器會去系統快取中查詢系統是否快取過這個域名對應的IP
地址,也可以理解為系統自己也具備域名解析的基本能力。在Windows
系統中,可以通過設定hosts
檔案來將域名手動繫結到某IP
上,hosts
檔案位置在C:\Windows\System32\drivers\etc\hosts
。對於普通使用者,並不推薦自己手動繫結域名和IP
,對於開發者來說,通過繫結域名和IP
,可以輕鬆切換環境,可以從測試環境切換到開發環境,方便開發和測試。在XP
系統中,黑客常常修改他的電腦的hosts
檔案,將使用者常常訪問的域名繫結到他指定的IP
上,從而實現了本地DNS
解析,導致這些域名被劫持。在Linux
Mac
系統中,hosts
檔案在/etc/hosts
,修改該檔案也可以實現同樣的目的。
前兩步都是在本機上完成的,所以沒有在上面示例圖上展示出來,從第三步開始,才正在地向遠端DNS伺服器發起解析域名的請求。
第三步:向本地域名解析服務系統發起域名解析的請求
如果在本機上無法完成域名的解析,那麼系統只能請求本地域名解析服務系統進行解析,本地域名系統LDNS
一般都是本地區的域名伺服器,比如你連線的校園網,那麼域名解析系統就在你的校園機房裡,如果你連線的是電信、移動或者聯通的網路,那麼本地域名解析伺服器就在本地區,由各自的運營商來提供服務。對於本地DNS
伺服器地址,Windows
系統使用命令ipconfig
就可以檢視,在Linux
和Mac
系統下,直接使用命令cat /etc/resolv.conf
來檢視LDNS
服務地址。LDNS
一般都快取了大部分的域名解析的結果,當然快取時間也受域名失效時間控制,大部分的解析工作到這裡就差不多已經結束了,LDNS
負責了大部分的解析工作。
第四步:向根域名解析伺服器發起域名解析請求
本地DNS
域名解析器還沒有完成解析的話,那麼本地域名解析伺服器將向根域名伺服器發起解析請求。
第五步:根域名伺服器返回gTLD域名解析伺服器地址
本地DNS
域名解析向根域名伺服器發起解析請求,根域名伺服器返回的是所查域的通用頂級域(Generic top-level domain,gTLD
)地址,常見的通用頂級域有.com
、.cn
、.org
、.edu
等。
第六步:向gTLD伺服器發起解析請求
本地域名解析伺服器向gTLD伺服器發起請求。
第七步:gTLD伺服器接收請求並返回Name Server伺服器
gTLD
伺服器接收本地域名伺服器發起的請求,並根據需要解析的域名,找到該域名對應的Name Server
域名伺服器,通常情況下,這個Name Server
伺服器就是你註冊的域名伺服器,那麼你註冊的域名的服務商的伺服器將承擔起域名解析的任務。
第八步:Name Server伺服器返回IP地址給本地伺服器
Name Server
伺服器查詢域名對應的IP
地址,將IP
地址連同TTL
值返回給本地域名伺服器。
第九步:本地域名伺服器快取解析結果
本地域名伺服器快取解析後的結果,快取時間由TTL
時間來控制。
第十步:返回解析結果給使用者
解析結果將直接返回給使用者,使用者系統將快取該IP
地址,快取時間由TTL
來控制,至此,解析過程結束。
這裡對
DNS
解析的步驟進行了一個簡單的介紹分析,後面將通過命令列的形式來解析一個域名的具體解析過程。
二、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
解析到itlemon.cn
,將csdn.net
解析到itlemon.cn
,那麼itlemon.cn
就是baidu.com
和CSDN.net
的別名。 -
NS記錄
:就是為某個域名指定了特定的DNS
伺服器去解析。 -
TXT記錄
:為某個主機名或者域名設定特定的說明,比如為itlemon.cn
設定的的TXT記錄為“Lemon的技術筆記”
,這個TXT
記錄為itlemon.cn
的說明。
上面概念中的IP
地址都是假定的,幫助理解。下面將通過解析域名baidu.com
為例,進一步說明域名解析流程。
直接檢視域名結果,可以通過命令nslookup
加上域名來檢視:
上圖中Non-authoritative answer
表示解析結果來自非權威伺服器,也就是說這個結果來自快取,並沒有完全經歷全部的解析過程,從某個快取中讀取的結果,這個結果存在一定的隱患,比如域名對應的IP
地址已經更變。
這只是一個快捷的解析結果,如果需要瀏覽全部的解析過程,那麼可以使用dig
命令來檢視解析過程。
分析上圖DNS
解析過程,我們可以看出:
第一步:從本地DNS
域名解析伺服器獲取到13
個根DNS
域名伺服器(.)
對應的主機名。
二步:從13
個根域名伺服器中的其中一個(這裡是h.root-servers.net
)獲取到頂級com.
的伺服器IP
(未顯示)和名稱。
第三步:向com.
域的一臺伺服器192.43.172.30(i.gtld-servers.net)
請求解析,它返回了baidu.com
域的伺服器IP
(未顯示)和名稱,百度有四臺頂級域的伺服器。
第四步:向百度的頂級域伺服器220.181.37.10(ns3.baidu.com)
請求www.baidu.com
,它發現這個www
有個別名,而不是一臺主機,別名是www.a.shifen.com
。
一般情況下,DNS
解析到別名就停止了,返回了具體的IP
地址,如果想看到具體的IP
地址,可以進一步對別名進行解析,解析結果如下:
這時候看到最後的解析結果是180.97.33.107
和180.97.33.108
。在解析別名的過程中,可以發現shifen.com
和baidu.com
都是指定了相同的域名解析伺服器。以上是一個域名的解析過程,最後的解析結果和一開始的使用nslookup
的結果一致。