DNS域名詳細解析過程

語言: CN / TW / HK

最近需要搭建一個網站,需要域名解析和備案了,租了一個很便宜的伺服器,而且服務超級好,有興趣私聊我。

什麼是DNS域名解析

我們首先要了解域名和IP地址的區別。IP地址是網際網路上計算機唯一的邏輯地址,通過IP地址實現不同計算機之間的相互通訊,每臺聯網計算機都需要通過IP地址來互相聯絡和分別。

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

域名雖然更易被使用者所接受和使用,但計算機只能識別純數字構成的IP地址,不能直接讀取域名。因此要想達到訪問效果,就需要將域名翻譯成IP地址。而DNS域名解析承擔的就是這種翻譯效果。

DNS域名解析過程

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

image.png

整個過程大體描述如下,其中前兩個步驟是在本地電腦內完成的,後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地址。

image.png

image.png

Linux在這設定:/etc/resolv.conf

image.png

image.png

第四步、

如果本地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的部落格"這樣的說明