DNS 到底怎么工作的? (How does dns work?)


其實這個問題每次看的時候都覺得很明白,但是很久之后就忘記了,所以這次准備記錄下來。深入到這個過程的各個細節之中,以后多看看。

 

Step 1 請求緩存信息:

當你在開始訪問一個 www.baidu.com 開始,第一件事情就是去訪問本地緩存查詢是否有緩存了這個地址的 ip 地址。如果能獲取到直接返回,然后訪問。這個緩存來自於你之前訪問之后存下來的,這里還涉及到另外一個概念就是緩存的 TTL。那什么是 TTL (Time To Live)?

TTL (Time to Live)是每個DNS記錄的設置,它指定解析器在查詢過期之前應該緩存(或記住)DNS查詢的時間,還有一個新產生的 DNS 查詢記錄什么時候過期。

那么當我們之前 retrieve 了一個地址之后,我們會緩存 TTL 這么久的時間,當我們現在再發起一個新請求的時候,查詢到有這個緩存就可以直接拿來使用了。

 

讓我們來看下 chrome 再訪問過網址之后的 DNS 緩存情況直觀的了解一下:

在 chrome 打開地址 chrome://net-internals/#dns

這是在我清理過一次 cache 之后重新訪問 google 的解析數據。可以看到這里可以顯示  DNS 查詢到的 ip 地址和 hostname 的映射,其中還包括過期時間之類的東西。可以很明確看到 TTL 就是經過多少 s 之后過期。 TTL 的單位是毫秒。

 

Step1 + 查看本地 hosts:

如果瀏覽器 cache 上沒有還活着的記錄,會去查詢本地操作系統的 hosts 文件。hosts 文件上面存放着對應的 ip 地址和 ns 的關系。如果找到對應的指向就會返回。 

 

Step2 遞歸查詢 ISP server:

如果本地沒有查詢到緩存,那么這個查詢將會以遞歸的方式去詢問 ISP 服務。 ISP 的遞歸查詢服務也有自己的緩存,所以你的查詢通常到這里就結束了。

 

Step3 詢問根域名服務器:

如果 ISP 服務器並不知道你查詢的域名地址在哪兒,那么就需要去查詢根域名服務器。全球 13 個 DNS 服務器根扮演者一個類似於基於 DNS 電話簿一樣的角色。他們雖然不知道你查詢的地址的 ip 地址是多少,但是他們可以定向你到知道這個地址。

 

Step4 詢問 TDL 服務器:

當根域名服務器在接收到查詢請求之后,會將你查詢的域名拆開看你的頂級域部分。比如查詢 www.baidu.com 。那么會從右往左拿到 .com 並且定向查詢到 TDL (頂級域名查詢)。不同的頂級域都有不同的查詢服務器例如 .tv .cn .org 等等等。這些頂級域查詢服務器其實也沒有我們需要的直接的答案,也就是我們需要的 ip 地址。但是他們同樣可以將我們定向到有這些信息的服務器那里去,根域名服務器如果發現是 .com 之后就會返回 .com 的 ns(name server) 地址。

 

Step5 詢問權威服務器:

頂級域名服務器 TDL 會 review 這個我們的請求並且拿到 baidu.com 這部分,將這個查詢定向指定的權威域名服務器上去(同樣是通過返回 ns 地址的方法)。這些權威域名服務器負責了解有關特定領域的所有信息通過存儲 DNS 記錄。這里存儲了各種各樣的類型的記錄,以包含不同類型的信息。打個比方說就是上面我們想要知道的 www.baidu.com 這個地址,那么我們就是在詢問權威域名服務器了解 A 地址。

 

Step6 取回這個查詢到的記錄:

現在我們查詢到這個記錄了 ISP 服務器將取回這個記錄並且將它記錄下來(存進自己的緩存基於 TTL)。如果后面有人再問誰知道 www.baidu.com 這個地址的時候就不再需要去詢問根服務器,因為他已經自己緩存得有答案了。當然在 TTL 過期之后,就會重新進行一次 look up process 以保證自己的緩存盡量具有實時性以應對互聯網上的改動。

 

Step7 從 ISP 取回這個記錄:

ISP 獲得記錄之后會返回給發起這個查詢的我們的電腦。我們的瀏覽器也同樣會將這個記錄緩存起來。然后我們就根據返回的這個地址訪問這個 ip 地址並且建立連接(tcp/ip協議)。然后我們就愉快的在瀏覽器上看到內容了!

 

這里其實再提一嘴域名的划分問題,這個也是比較容易混淆的地方。

例如 baidu.com 這就是一個頂級域名,

 www.baidu.com 不是一個頂級域名,只是頂級域名 baidu.com 上的一個 www 主機。也可以稱為是一個二級域名。

a.www.baidu.com 可以稱為 一個三級域名。

其實在 頂級域名上面和二級域名上面還有一些爭議或者不同的說法。 例如 .com. 其實這才是頂級域名這樣的說法似乎也被認可。只需要了解即可,通常的說法就是我前面例舉的那種不要搞混淆咯。

 

Reference:

https://dyn.com/blog/dns-why-its-important-how-it-works/  dns-why-its-important-how-it-works

https://www.verisign.com/en_US/website-presence/online/how-dns-works/index.xhtml  How the Domain Name System (DNS) Works

https://dyn.com/blog/dyn-tech-everything-you-ever-wanted-to-know-about-ttls/  Everything You Ever Wanted To Know About TTLs

http://blog.csdn.net/hanghangaidoudou/article/details/51753695  DNS 的幾個基本概念

https://serversforhackers.com/c/hosts-file-and-dns  hosts-file-and-dns


免責聲明!

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



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