前面的文章中有介紹過 打開一個網頁背後都發生了什麼? 其中第一步就是域名解析,今天咱們就一塊兒來看看域名解析的過程。nginx
在開始以前,有必要把域名及 dns 的相關概念解釋一下。數據庫
域名是什麼瀏覽器
舉個例子,https://www.baidu.com,這個其實並非域名,其中 https 是指協議,去掉 https 後,www.baidu.com.(注意最後面有一個點號) 纔是真正的域名。緩存
每一個域名的最後面都有一個點號 "." 表示根域名,爲了方便在實際使用的時候被省略了。bash
根域名的下一級就是頂級域名了,.com 也就是頂級域名,常見的頂級域名後綴有 .com、.cn、.net、.org 等,這些都是固定的,用戶不能本身修改,只能選擇。服務器
頂級域名的下一級又是權威域名,如 baidu.com 中的 .baidu ,這個權威域名就是咱們本身可註冊的域名。網絡
頂級域名下就是主機名了,www 是指主機名,這個是咱們能夠本身定義的,一般在 http 服務器如 nginx 中能夠修改。dom
DNS概念分佈式
dns 便是 domain name system 域名系統的縮寫,將域名和 ip 的映射關係保存在一個分佈式數據庫中。網站
域名解析過程分析
下面就還以 www.baidu,com 這個網址來分析一下 dns 的解析過程。
當瀏覽器拿到輸入的 www.baidu.com 後,首先會去瀏覽器的 dns 緩存中去查詢是否有對應記錄,若是查詢到記錄就能夠直接返回 ip 地址,完成解析。
若是瀏覽器沒有緩存,那就再去查詢操做系統的緩存,一樣的,若是查詢到記錄就能夠直接返回 ip 地址,完成解析。
若是操做系統也沒有緩存,那就再去查看本地 host 文件,Windows 下 host 文件通常位於 "C:\Windows\System32\drivers\etc"。
近幾年網上流傳的經過修改本地 host 文件來避免雙 11 女朋友剁手的段子,其實就是將淘寶的支付接口解析到錯誤的 ip 地址,從而致使支付不成功。
若是本地 host 文件也沒有相應記錄,那就須要求助於本地 dns 服務器了,因此應該要知道本地 dns 的 ip 地址。
本地 dns 服務器 ip 地址通常是由本地網絡服務商如移動、電信提供,通常是經過 DHCP 自動分配,固然你也能夠本身手動配置。目前用的比較多的是谷歌提供的公用 dns 8.8.8.8 和國內的公用 dns 114.114.114.114 。
你以前可能有遇到過電腦能夠正常上 QQ 可是就是不能打開網頁的怪現象,這種狀況大多數可能就是 dns 域名解析出問題了,你能夠嘗試手動把 dns 設置爲公用 dns,以下圖:
找到本地 dns 後,它也會先去查詢一遍它本身的緩存,若是有記錄就返回,若是沒有記錄,它將開始要去咱們前面提到的根域名服務器查詢了。注意因爲根域名服務器 ip 地址通常都是固定的,因此本地 dns 服務器通常都內置了根域名服務器 ip 地址。
目前全球一共有 13 組根域名服務器(這裏並非指 13 臺服務器,是指 13 個 ip 地址,按字母 a-m 編號),爲了能更高效完成全球全部域名的解析請求,根域名服務器自己並不會直接去解析域名,而是會把不一樣的解析請求分配給下面的其餘服務器去完成,下面是 dns 域名系統的樹狀結構圖。
注意,dns 域名服務器通常分三種,分別是根域名服務器 (.)、頂級域名服務器 (.com)、權威域名服務器 (baidu.com) 。
當根域名接收到本地 dns 的解析請求後,發現是後綴是 .com,因而就把負責 .com 的頂級域名服務器 ip 地址返給本地 dns。
本地 dns 拿着返回的 ip 地址再去找到對應的頂級域名服務器,頂級域名又把負責該域名的權威服務器 ip 返回去。
本地 dns 又拿着 ip 去找對應的權威服務器,權威服務器最終把對應的主機 ip 返回給本地 dns,至此就完成了域名解析的全過程。
下面用一張圖來展現上面迭代查詢的過程。
域名解析實例
接下來咱們再用一個實際的例子來還原一遍上面的解析過程,我使用我本身的博客網站來作演示,域名爲 www.weatherfood.com。咱們可使用命令 dig 來顯示整個查詢過程,爲了方便起見,我將在 Linux 上進行演示,Windows下須要自定安裝 dig 命令,你們可自行了解下。
先來看一個簡化版的總體查詢過程,執行命令 dig www.weatherfood.com
[root@iZm5eiqn00z9x3zuxajldvZ ~]# dig www.weatherfood.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> www.weatherfood.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42276
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.weatherfood.com. IN A
;; ANSWER SECTION:
www.weatherfood.com. 600 IN A 115.29.141.125
;; Query time: 15 msec
;; SERVER: 10.202.72.116#53(10.202.72.116)
;; WHEN: Sat Mar 2 10:02:12 2019
;; MSG SIZE rcvd: 53
複製代碼
QUESTION SECTION 表示要查詢的請求,該請求是要查詢 www.weathrfood.com 域名的 ip 地址,IN表示 Internet,A 表示 ipv4 地址 address,有的是 AAAA 即表示 ipv6 地址。
ANSWER SECTION 返回的是查詢結果,600 是指緩存時間,這個通常是在域名解析的時候 TTL (time to live)設置的時間,單位爲秒, 我這裏設置的是 10 分鐘,A 就是咱們要的的 ip 地址。
最下面那一段表示這次解析請求耗時 15 毫秒,本地 dns 服務器地址爲 10.202.72.116 且端口號爲 53,接收到數據大小爲 53 字節。
咱們還能夠再去驗證一下本地 dns 服務器 ip 地址是否和上面結果中顯示的同樣,在 Linux 中本地 dns 服務器 ip 保存在 /etc/resolv.conf 文件中,執行命令 cat /etc/resolv.conf 看一下。
[root@iZm5eiqn00z9x3zuxajldvZ ~]# cat /etc/resolv.conf
nameserver 10.202.72.116
nameserver 10.202.72.118
複製代碼
固然,咱們還能夠再來看下詳細的過程,使用命令 dig +trace www.weatherfood.com
[root@iZm5eiqn00z9x3zuxajldvZ ~]# dig +trace www.weatherfood.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> +trace www.weatherfood.com
;; global options: +cmd
. 455141 IN NS h.root-servers.net.
. 455141 IN NS c.root-servers.net.
. 455141 IN NS b.root-servers.net.
. 455141 IN NS f.root-servers.net.
. 455141 IN NS j.root-servers.net.
. 455141 IN NS g.root-servers.net.
. 455141 IN NS i.root-servers.net.
. 455141 IN NS m.root-servers.net.
. 455141 IN NS e.root-servers.net.
. 455141 IN NS d.root-servers.net.
. 455141 IN NS a.root-servers.net.
. 455141 IN NS k.root-servers.net.
. 455141 IN NS l.root-servers.net.
. 455141 IN RRSIG NS 8 0 518400 20190314050000 20190301040000 16749 . sGpl0QBD/E3PaZ/tyjNmt4L1g415w5r6E0gbXTazmU1PNkQbYYrwyAx8 +vSoSLXaXcNsLgUfpJQThidOk5JSL8IUC+lHljxIvr6xIqx1kPvsl+Jq 8JdEWv4zZJtejehhxCyU74pK4gONO7fTgX3j2sXJUzQBtlYpZTfnYYeL JdF+WwGR1RxuBWJm68tQkrhIJ3mLdGmIlZkUk1WpxpU2jORGdcDgaCVl QgNxWI7+RBNmDNpqZD5848kHpJ6bWUwxyNM/rbVeXBgaqZvZz/6LbfiC QWxyfqDh4CK8HvxnTrp8Gl7i/IgHcLoIZf/YI9PopYmf49b4lqfjNBai 06Dy1w==
;; Received 525 bytes from 10.202.72.116#53(10.202.72.116) in 0 ms
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
;; Received 497 bytes from 192.203.230.10#53(192.203.230.10) in 176 ms
weatherfood.com. 172800 IN NS dns9.hichina.com.
weatherfood.com. 172800 IN NS dns10.hichina.com.
;; Received 396 bytes from 192.35.51.30#53(192.35.51.30) in 268 ms
www.weatherfood.com. 600 IN A 115.29.141.125
;; Received 53 bytes from 140.205.41.25#53(140.205.41.25) in 14 ms
複製代碼
能夠看到,第一次從本地 dns 服務器 10.202.72.116 查詢根服務器 . 地址,結果獲得從字母 a-m 13 個 ns (name server),即返回 13 個根服務器地址。
其中 192.203.230.10 這臺根服務器又返回 13個 .com 頂級域名服務器,能夠查一下 192.203.230.10 這臺服務器是位於美國的。
接下來又從 192.35.51.30 這臺頂級域名服務器返回兩個 weatherfood.com 權威域名服務器。
最後再向上面兩個權威服務器查詢到主機名 www,並返回域名的最終 ip 115.29.141.125。
好了,這就是域名解析的全過程了,寫下這篇文章查閱了很多資料,總耗時達十幾個小時,文中可能還會存在不穩當的地方,歡迎各位指正。若是文章對你有幫助,但願能給文章點個贊哈,歡迎關注,有問題也歡迎留言交流。