話說DNS及域名&ip

以下內容首發於我的個人博客網站:
http://riun.xyz


本篇主要解決兩個問題:
1、DNS究竟是什麼?
2、查詢一個域名的ip會經過幾次DNS服務器?

閱讀本篇的前置知識是大致知道訪問一個url會先去DNS服務器根據域名解析出ip地址,然後才能正確的訪問到對應的服務器。

DNS究竟是什麼?

DNS (Domain Name System 的縮寫)域名系統服務。
他們是一臺臺服務器(你可以將其想成電腦),作用是根據域名查詢出ip地址(這個過程我們叫做DNS解析),以及控制因特網的電子郵件的發送。我們就稱之爲DNS服務器。你可以將其想象做一個電話本。
用專業的話說,DNS是一種分佈式網絡目錄服務。

查詢一個域名的ip會經過幾次DNS服務器?

1、首先,我們要明確什麼是域名。

www.baidu.com , oldj.net , riun.xyz , 這樣的叫做域名。
域名是有層級的,所有域名的尾部,都有一個根域名.root。因爲所有域名都有,所以平時就將其省略了。

比如:www.baidu.com 其實是 www.baidu.com.root
oldj.net 其實是 oldj.net.root。平時用的只是簡寫(不過你如果輸入 www.baidu.com.root 是無法訪問的,因爲會在其尾部默認加上一個.root,那麼就變成了 www.baidu.com.root.root)

而域名的層級,是從後往前的。即位置靠“後面的”屬於“上層”。

域名的層級爲:主機名.次級域名.頂級域名.根域名。
比如:www.baidu.com
根域名爲.root ,頂級域名爲.com ,次級域名爲.baidu ,主機名爲www(又稱三級域名)

2、其次,我們要做出一個假設

【查詢一個域名的ip會經過幾次DNS服務器?】這個問題並不等同於【在瀏覽器輸入域名後敲回車經過了幾次DNS服務器才找到對應ip】
由於我並不知道查一個域名的ip是否需要先去所謂的提供“根據域名查詢ip”服務的網絡應用,如果是,就要多加一次,因爲去這個網絡應用所在的服務器還需要一次DNS解析。
所以我現在假設不存在這個【網絡應用】,而是直接通過命令(dig,nslookup等),查詢一個域名對應的ip。

比如要查詢oldj.net對應的ip。

查詢域名對應的ip先從最近的DNS服務器去查找,如果找到就是1次;沒有找到,就要從當前DNS服務器上找到內置的根域名服務器地址(第1次); 從根域名服務器上尋找頂級域名服務器(net)所在的DNS的ip地址(第2次),假設最好的情況下僅查詢了一臺根域名服務器就查詢到了net這個頂級域名服務器對應的ip,那麼就找到了net這個頂級域名存在的DNS服務器; 接着需要從net所在的這個DNS服務器上查找次級域名(oldj)的DNS服務器的ip(第3次),假設最好情況下當前頂級域名服務器(net)上就能夠找到oldj對應的ip,就找到了。如果沒有,就從其他DNS服務器上找(存有net這個頂級域名的DNS服務器有很多,在第一臺上沒有找到oldj對應的ip,就換下一臺找)

所以我的答案是:≥1 次。

不僅跟域名有關(oldj.net這樣沒有主機的域名天然比 www.baidu.com 這樣有主機的域名要查詢DNS的次數少),也跟所查詢的DNS服務器有關(當前服務器上是否有所需的ip或者NS信息,如果沒有就要接着下一臺DNS服務器查詢),還與最近的DNS服務器上是否存在當前域名的ip有關。

下圖手畫,可以配合文字觀看。
在這裏插入圖片描述

大圖(存在github上,訪問可能較慢):https://raw.githubusercontent.com/hanhanhanxu/pic/master/2020-3/DNS%E6%A0%B9%E6%8D%AE%E5%9F%9F%E5%90%8D%E6%9F%A5%E8%AF%A2ip.jpg


本期參考資料:

  • 阮一峯,DNS原理入門:https://www.ruanyifeng.com/blog/2016/06/dns.html

  • 戶根勤《網絡是怎樣連接的》【微信讀書可閱】

  • 百度百科-DNS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章