關於DNS解析

這篇文章在說什麼

一、域名的結構
二、DNS解析流程git

前奏

在進入正題以前能夠先適當的引入IP概念,以便下面的流暢閱讀。github

一、[什麼是IP地址?](https://segmentfault.com/a/1190000022864573)
IP地址至關於網絡中的身份惟一認證ID

正題

 DNS:(Domain Name System)域名解析系統
域名解析系統,聽着還挺費解的,咱們知道當咱們瀏覽器輸入網址的時候,輸入的是一串域名,例如: www.google.com,可是咱們在委託咱們的操做系統發送消息時,卻不是靠域名來找到對應的服務器,靠的的IP地址(這是TCP/IP協議的要求)。這個時候,所須要作的就是經過域名解析,來拿到咱們的IP地址。

域名的結構

域名能夠經過 .拆分紅幾個部分,從右到左依次是:頂級域名、二級域名、三級域名...

域名.png

DNS解析流程

因此當咱們輸入網址,去請求資源的話,那它又是如何辦到的呢?chrome

簡單來講:DNS解析過程屬於應用層協議(不知道應用層也不影響解析流程),當咱們生成http報文以後,就會在查找瀏覽器/host/本地/網關/本地DNS服務器/IPS/根域名服務器等中是否有DNS緩存,若是有的話,優先取緩存數據,不然,會經過主機上運行的DNS客戶端(咱們的計算機上會有相應的DNS客戶端,又稱DNS解析器)向DNS服務器發送查詢報文,DNS服務器再根據查詢消息返回響應內容。

image.png

查詢報文
域名、類型(表示域名對應什麼類型的記錄,類型爲MX時,表示域名對應的是郵件服務器,類型爲A時,對應的IP地址)、以及Class(Class的值用來識別網絡信息,如今互聯網沒有其餘網絡,因此永遠是IN)。DNS服務器會根據查詢消息來查詢對應的消息記錄。
郵件查詢
郵件的記錄類型是MX,又稱爲郵件交換記錄。它是經過郵件地址的」@「符號後面的域名,獲得對應的郵件服務器。DNS服務器會返回郵件服務器的域名和優先級。(郵件地址有可能對應多個郵件服務器,須要根據優先級來判斷哪一個服務器優先查詢。數值越小越優先。)由於最終也須要獲得郵件服務器的IP地址,因此拿到郵件的服務器域名後最終又會解析成IP地址返回客戶端。

image.png


演示

光說沒用,咱們能夠來演示一波,當咱們查詢www.google.com時:
image.pngsegmentfault

DNS客戶端的請求報文數組

;; QUESTION SECTION:
;www.google.com.            IN    A

DNS服務器返回的查詢結果
只有1個A記錄表明,只有一個IP地址。221是緩存時間,表明221s內不用從新查詢。瀏覽器

;; ANSWER SECTION:
www.google.com.        221    IN    A    8.7.198.45

NS記錄
即域名服務器記錄(Name Server),用來指定該域名由那個DNS域名服務器解析。緩存

;; AUTHORITY SECTION:
google.com.        51    IN    NS    ns4.google.com.
google.com.        51    IN    NS    ns3.google.com.
google.com.        51    IN    NS    ns1.google.com.
google.com.        51    IN    NS    ns2.google.com.

DNS域名服務器的IP地址服務器

;; ADDITIONAL SECTION:
ns1.google.com.        266    IN    A    216.239.32.10
ns1.google.com.        197    IN    AAAA    2001:4860:4802:32::a
ns2.google.com.        280    IN    A    216.239.34.10
ns2.google.com.        197    IN    AAAA    2001:4860:4802:34::a
ns3.google.com.        55    IN    A    216.239.36.10
ns3.google.com.        104    IN    AAAA    2001:4860:4802:36::a
ns4.google.com.        299    IN    A    216.239.38.10
ns4.google.com.        92    IN    AAAA    2001:4860:4802:38::a

郵件的DNS查詢
能夠看到DNS服務器返回了五個服務器域名以及優先級。
image.png網絡

記錄類型還有不少種

想了解的能夠 => 記錄類型
來自維基百科部分截圖dom


當瀏覽器發起請求

直接上圖吧~說太多都沒有用~
DNS域名解析流程.png

  • 當咱們的瀏覽器發起http請求時,首先會先查詢瀏覽器是否有DNS緩存
  • 瀏覽器沒有緩存,則會找到計算機的本地hosts文件,是否存在映射關係。
hosts文件地址
Mac:/etc/hosts
Windows 7: C:\\**Windows**\\System32\\drivers\\etc

咱們能夠看到,下圖中有域名對應着IP
就至關於告訴計算機,若是我訪問這個域名,那你就去這個ip地址找資源吧~

image.png

  • 若是hosts文件不存在映射關係,那麼會去找DNS的本地緩存。
  • 本地沒有緩存的話,則會經過咱們本地設置的DNS服務器地址,去找本地DNS服務器要資源。通常來講本地DNS服務器都會有一份緩存,若是有的話,就直接將緩存的內容傳回去,沒有的話,那麼它就會去找根服務器。
說到這裏,那咱們停一下,如今是否是有兩個疑問
一、究竟什麼是本地服務器呢?
二、若是本地有緩存又要怎麼辦?
留着最後回答~
咱們先來解釋圖中本地DNS服務器與DNS服務器之間的關係,以及什麼是根服務器。

DNS服務器之間的聯繫
DNS服務器相互之間的聯繫是:管理下一級域名的服務器會將本身註冊到管理上級域名的DNS服務器上。

image.png
因此,當咱們從根域名服務器一層層往下找,就能夠找到當前域名所在的DNS服務器了。

什麼是根域名服務器
前面說了域名的結構,可是在咱們的互聯網中,還有一個鮮爲人知的地方,叫作根域。它處於一級域名(頂級域名)的上方,根域沒有本身的名字(不配有姓名),咱們在輸入域名時常常省略了它。它是一個點,是的,就是一點」.」,若是要代表根域,那麼域名就會寫成這樣:」www.youzan.com.」沒在域名的最後加一個句號。通常都不會寫句號。根域名服務器管理的不是全部的域名,而是管理一級域名的服務器所在地址,好比管理着com域名服務器的地址。
不少資料上說,全世界IPv4根域名服務器只有13臺。
13臺根域名服務器的名字是從A-M。
1個主根服務器在美國,其他爲12個輔根服務器,美國(9),英國(1),瑞典(1),日本(1)。
有人是否是想問爲何中國沒有?嗯,就是沒有。
(由於互聯網起源於美國,一開始只有美國有互聯網,大部分在美國無可厚非。)
可是中國有IPv4鏡像根服務器。
編號相同的鏡像根服務器使用同一個IP。
因此,其實上面的說法是不精準的,根域名服務器其實有不少臺,可是服務器的IP地址只有13個。

題外話:IPv6根服務器中國有4個,一個主根,三個輔根。

主根和輔根的區別:主根和輔根的數據是一致的,當有新的域名出現時,會先更新到主根服務器,再複製到輔根服務器。

鏡像服務器:至關於鏡子裏的你,除了不是真正的你,也具備你的特徵。就像你的桌面圖標生成一個快捷方式的圖標同樣。


如今咱們瞭解了DNS服務器之間的聯繫,那麼咱們回到流程圖中:

  • 本地DNS服務器先是去根服務器找域名的ip,根域名服務器沒有,給了他com域名服務器的ip。
  • 可是com域名服務器也不知道www.test.com的ip,可是知道test.com在哪臺域名服務器上。
  • 最終,找到了www.test.com

QA環節

一、究竟什麼是本地服務器呢?
當咱們打開網絡配置的時候,會看到有一個DNS IP地址,這個IP地址則是咱們指向的本地DNS服務器地址。
不一樣的操做系統設置方式不同,DNS服務器的地址能夠是提早設置好的也能夠是自動分配的,MacOS的長這樣:image.png

在咱們非手動設置的狀況下:若是咱們的網絡是直連的運營商網絡,通常而言那咱們的本地DNS則是ISP運營商IP地址。
若是咱們設置了轉發(使用了路由器),那咱們的地址極有多是192.168.1.1(如上圖),路由器自己,咱們的路由器會將請求轉發到上層DNS,也就是ISP運營商DNS服務器。

二、若是本地有緩存又要怎麼辦?
因此之後若是頁面打不開了,能夠先清除瀏覽器或者電腦的DNS緩存試試,看是不是由於本地的緩存致使域名解析錯誤。

清除DNS緩存:
Mac(10.13.6): sudo dscacheutil -flushcache
Window: ipconfig /flushdns
谷歌瀏覽器:chrome://net-internals/#events.

三、爲何服務器的IP地址只有13個?

由於DNS查詢用的是UDP,而不是TCP。
UDP 實現中能保證正常工做的最大包是 512 字節,因此只能13個根服務器地址。
想要了解更多,請進入[傳送門](https://jaminzhang.github.io/dns/The-Reason-of-There-Is-Only-13-DNS-Root-Servers/)

四、IPv4與IPv6的區別

IPv4:由32位二進制數組成
IPv6:可由128位二進制組成
[詳文可閱讀](https://zhuanlan.zhihu.com/p/50747832)

五、爲何須要域名解析,而不直接是IP?

一、域名好記,給你ip,你能夠記幾個ip地址哇
二、不一樣域名能夠對應同一個IP
三、服務器IP變了咋辦
四、TCP/IP協議的須要
參考資料:
《網絡是怎麼鏈接的》
相關文章
相關標籤/搜索