一、域名的結構
二、DNS解析流程git
在進入正題以前能夠先適當的引入IP概念,以便下面的流暢閱讀。github
一、[什麼是IP地址?](https://segmentfault.com/a/1190000022864573) IP地址至關於網絡中的身份惟一認證ID
DNS:(Domain Name System)域名解析系統
域名解析系統,聽着還挺費解的,咱們知道當咱們瀏覽器輸入網址的時候,輸入的是一串域名,例如:
www.google.com
,可是咱們在委託咱們的操做系統發送消息時,卻不是靠域名來找到對應的服務器,靠的的IP地址(這是TCP/IP協議的要求)。這個時候,所須要作的就是經過域名解析,來拿到咱們的IP地址。
域名能夠經過
.
拆分紅幾個部分,從右到左依次是:頂級域名、二級域名、三級域名...
因此當咱們輸入網址,去請求資源的話,那它又是如何辦到的呢?chrome
簡單來講:DNS解析過程屬於應用層協議(不知道應用層也不影響解析流程),當咱們生成http報文以後,就會在查找瀏覽器/host/本地/網關/本地DNS服務器/IPS/根域名服務器等中是否有DNS緩存,若是有的話,優先取緩存數據,不然,會經過主機上運行的DNS客戶端(咱們的計算機上會有相應的DNS客戶端,又稱DNS解析器)向DNS服務器發送查詢報文,DNS服務器再根據查詢消息返回響應內容。
域名、類型(表示域名對應什麼類型的記錄,類型爲MX時,表示域名對應的是郵件服務器,類型爲A時,對應的IP地址)、以及Class(Class的值用來識別網絡信息,如今互聯網沒有其餘網絡,因此永遠是IN)。DNS服務器會根據查詢消息來查詢對應的消息記錄。
郵件的記錄類型是MX,又稱爲郵件交換記錄。它是經過郵件地址的」@「符號後面的域名,獲得對應的郵件服務器。DNS服務器會返回郵件服務器的域名和優先級。(郵件地址有可能對應多個郵件服務器,須要根據優先級來判斷哪一個服務器優先查詢。數值越小越優先。)由於最終也須要獲得郵件服務器的IP地址,因此拿到郵件的服務器域名後最終又會解析成IP地址返回客戶端。
光說沒用,咱們能夠來演示一波,當咱們查詢www.google.com時:segmentfault
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服務器返回了五個服務器域名以及優先級。網絡
想了解的能夠 => 記錄類型dom
直接上圖吧~說太多都沒有用~
hosts文件地址 Mac:/etc/hosts Windows 7: C:\\**Windows**\\System32\\drivers\\etc 咱們能夠看到,下圖中有域名對應着IP 就至關於告訴計算機,若是我訪問這個域名,那你就去這個ip地址找資源吧~
說到這裏,那咱們停一下,如今是否是有兩個疑問
一、究竟什麼是本地服務器呢?
二、若是本地有緩存又要怎麼辦?
留着最後回答~
咱們先來解釋圖中本地DNS服務器與DNS服務器之間的關係,以及什麼是根服務器。
DNS服務器相互之間的聯繫是:管理下一級域名的服務器會將本身註冊到管理上級域名的DNS服務器上。
因此,當咱們從根域名服務器一層層往下找,就能夠找到當前域名所在的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地址,這個IP地址則是咱們指向的本地DNS服務器地址。
不一樣的操做系統設置方式不同,DNS服務器的地址能夠是提早設置好的也能夠是自動分配的,MacOS的長這樣:
在咱們非手動設置的狀況下:若是咱們的網絡是直連的運營商網絡,通常而言那咱們的本地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協議的須要
參考資料:
《網絡是怎麼鏈接的》