天天看點

DNS域名詳細解析過程(最全面,看這一篇就夠)

作者:外太空的金山

一、什麼是DNS域名解析

我們首先要了解域名和IP位址的差別。IP位址是網際網路上計算機唯一的邏輯位址,通過IP位址實作不同計算機之間的互相通信,每台聯網計算機都需要通過IP位址來互相聯系和分别。

但由于IP位址是由一串容易混淆的數字串構成,人們很難記憶所有計算機的IP位址,這樣對于我們日常工作生活通路不同網站是很困難的。基于這種背景,人們在IP位址的基礎上又發展出了一種更易識别的符号化辨別,這種辨別由人們自行選擇的字母和數字構成,相比IP位址更易被識别和記憶,逐漸代替IP位址成為網際網路使用者進行通路互聯的主要入口。這種符号化辨別就是域名。

域名雖然更易被使用者所接受和使用,但計算機隻能識别純數字構成的IP位址,不能直接讀取域名。是以要想達到通路效果,就需要将域名翻譯成IP位址。而DNS域名解析承擔的就是這種翻譯效果。

二、DNS域名解析過程

當我們在浏覽器位址欄中輸入www.baidu.com時,DNS解析将會有将近10個步驟,這個過程大體大體由一張圖可以表示:

DNS域名詳細解析過程(最全面,看這一篇就夠)

整個過程大體描述如下,其中前兩個步驟是在本地電腦内完成的,後8個步驟涉及到真正的域名解析伺服器:

第一步、本地電腦會檢查浏覽器緩存中有沒有這個域名對應的解析過的IP位址,如果緩存中有,這個解析過程就結束。浏覽器緩存域名也是有限制的,不僅浏覽器緩存大小有限制,而且緩存的時間也有限制,通常情況下為幾分鐘到幾小時不等,域名被緩存的時間限制可以通過TTL屬性來設定。這個緩存時間太長和太短都不太好,如果時間太長,一旦域名被解析到的IP有變化,會導緻被用戶端緩存的域名無法解析到變化後的IP位址,以緻該域名不能正常解析,這段時間内有一部分使用者無法通路網站。如果設定時間太短,會導緻使用者每次通路網站都要重新解析一次域名。

第二步、如果浏覽器緩存中沒有資料,浏覽器會查找作業系統緩存中是否有這個域名對應的DNS解析結果。其實作業系統也有一個域名解析的過程,在Linux中可以通過/etc/hosts檔案來設定,而在windows中可以通過配置C:\Windows\System32\drivers\etc\hosts檔案來設定,使用者可以将任何域名解析到任何能夠通路的IP位址。例如,我們在測試時可以将一個域名解析到一台測試伺服器上,這樣不用修改任何代碼就能測試到單獨伺服器上的代碼的業務邏輯是否正确。正是因為有這種本地DNS解析的規程,是以有黑客就可能通過修改使用者的域名來把特定的域名解析到他指定的IP位址上,導緻這些域名被劫持。

第三步、前兩個過程無法解析時,就要用到我們網絡配置中的"DNS伺服器位址"了。作業系統會把這個域名發送給這個本地DNS伺服器。每個完整的内網通常都會配置本地DNS伺服器,例如使用者是在學校或工作機關接入網際網路,那麼使用者的本地DNS伺服器肯定在學校或工作機關裡面。它們一般都會緩存域名解析結果,當然緩存時間是受到域名的失效時間控制的。大約80%的域名解析到這裡就結束了,後續的DNS疊代和遞歸也是由本地DNS伺服器負責。

windows在這配置:控制台-》網絡和共享中心-》更改擴充卡設定-》選中目标擴充卡右鍵選擇屬性-》Internet協定版本4(TCP/IPv4)-》配置DNS位址。

DNS域名詳細解析過程(最全面,看這一篇就夠)

第四步、如果本地DNS伺服器仍然沒有命中,就直接到根DNS伺服器請求解析。

第五步、根DNS伺服器傳回給本地DNS域名伺服器一個頂級DNS伺服器位址,它是國際頂級域名伺服器,如.com、.cn、.org等,全球隻有13台左右。

第六步、本地DNS伺服器再向上一步獲得的頂級DNS伺服器發送解析請求。

第七步、接受請求的頂級DNS伺服器查找并傳回此域名對應的Name Server域名伺服器的位址,這個Name Server伺服器就是我要通路的網站域名提供商的伺服器,其實該域名的解析任務就是由域名提供商的伺服器來完成。 比如我要通路www.baidu.com,而這個域名是從A公司注冊獲得的,那麼A公司上的伺服器就會有www.baidu.com的相關資訊。

第八步、Name Server伺服器會查詢存儲的域名和IP的映射關系表,再把查詢出來的域名和IP位址等等資訊,連同一個TTL值傳回給本地DNS伺服器。

第九步、傳回該域名對應的IP和TTL值,本地DNS伺服器會緩存這個域名和IP的對應關系,緩存時間由TTL值控制。

第十步、把解析的結果傳回給本地電腦,本地電腦根據TTL值緩存在本地系統緩存中,域名解析過程結束在實際的DNS解析過程中,可能還不止這10步,如Name Server可能有很多級,或者有一個GTM來負載均衡控制,這都有可能會影響域名解析過程。

三、遞歸查詢和疊代查詢的差別

DNS用戶端和本地名稱伺服器是遞歸,而本地名稱伺服器和其他名稱伺服器之間是疊代。

DNS遞歸名稱解析: 在DNS遞歸名稱解析中,當所配置的本地名稱伺服器解析不了時,後面的查詢工作是由本地名稱伺服器替代DNS用戶端進行的(以“本地名稱伺服器”為中心),隻需要本地名稱伺服器向DNS用戶端傳回最終的查詢結果即可。

DNS疊代名稱解析:(或者叫“疊代查詢”)的所有查詢工作全部是DNS用戶端自己進行(以“DNS用戶端”自己為中心)。在條件之一滿足時就會采用疊代名稱解析方式:

在查詢本地名稱伺服器時,如果用戶端的請求封包中沒有申請使用遞歸查詢,即在DNS請求報頭部的RD字段沒有置1。相當于說“你都沒有主動要求我為你進行遞歸查詢,我當然不會為你工作了”。

用戶端在DNS請求封包中申請使用的是遞歸查詢(也就是RD字段置1了),但在所配置的本地名稱伺服器上是禁用遞歸查詢(DNS伺服器一般預設支援遞歸查詢的),即在應答DNS封包頭部的RA字段置0。

四、域名解析記錄

主要分為A記錄、MX記錄、CNAME記錄、NS記錄和TXT記錄:

1、A記錄

A代表Address,用來指定域名對應的IP位址,如将item.taobao.com指定到115.238.23.xxx,将switch.taobao.com指定到121.14.24.xxx。A記錄可以将多個域名解析到一個IP位址,但是不能将一個域名解析到多個IP位址

2、MX記錄

Mail Exchange,就是可以将某個域名下的郵件伺服器指向自己的Mail Server,如taobao.com域名的A記錄IP位址是115.238.25.xxx,如果将MX記錄設定為115.238.25.xxx,即[email protected]的郵件路由,DNS會将郵件發送到115.238.25.xxx所在的伺服器,而正常通過Web請求的話仍然解析到A記錄的IP位址

3、CNAME記錄

Canonical Name,即别名解析。所謂别名解析就是可以為一個域名設定一個或者多個别名,如将aaa.com解析到bbb.net、将ccc.com也解析到bbb.net,其中bbb.net分别是aaa.com和ccc.com的别名

4、NS記錄

為某個域名指定DNS解析伺服器,也就是這個域名由指定的IP位址的DNS伺服器取解析

5、TXT記錄

為某個主機名或域名設定說明,如可以為ddd.net設定TXT記錄為"這是XXX的知乎"這樣的說明