搞懂這 9 步,DNS 訪問原理就明明白白了
又到了招聘季了,前兩天遇到一個面試的小夥伴,他說面試官和他聊得很投機,無意中談到了 DNS 請求的過程。他一時語塞隨便應付了兩句,雖然對方沒有追問的意思,但最後面試結果也並不理想。本着邊面試邊學習的態度,我們來看看 DNS 請求的過程中涉及到的定義和原理。
DNS 的含義和結構
衆所周知,在互聯網中是用 IP 來標識一臺服務器的。IP 地址雖然能夠代表一臺設備,但是由於記憶起來比較困難,所以將其替換成一個能夠理解和識別的名字,這個名字我們稱作爲域名。例如:www.51cto.com 就是一個域名,在域名後面會定義一個 IP 地址用來指向網站服務器。那麼問題來了,誰來做這個從域名到 IP 地址的對應呢?答案是通過 DNS 來實現。
DNS 是域名系統(Domain Name System,縮寫:DNS)是互聯網的一項服務。它將域名和 IP 地址相互映射的一個分佈式數據庫,在數據庫中保存域名與 IP 的對照關係,從而使人更方便地訪問互聯網。
DNS 解析是分佈式存儲的,從結構上來說最頂層是,根域名服務器(ROOT DNS Server),存儲 260 個頂級域名服務器的 IP 地址。對於 Ipv4 來說全球有 13 個根域名服務器,它儲存了每個域(如. com .net .cn)的解析和域名服務器的地址信息。簡單的說,根域名服務器就是存放頂級域名服務器地址的。
在根域名服務器下一級就是,頂級域名服務器。例如. com 的域名服務器,存儲的是一些一級域名的權威 DNS 服務器地址 (如 toutiao.com 的 DNS)。
頂級域名又稱一級域名,頂級域名可以分爲三類,即 gTLD、ccTLD 和 New gTLD:
-
gTLD:國際頂級域名(generic top-level domains,gTLD),例如:.com/.net/.org 等都屬於 gTLD;
-
ccTLD:國家和地區頂級域名(country code top-level domains,簡稱 ccTLD),例如:中國是. cn 域名,日本是. jp 域名;
-
New gTLD:新頂級域名(New gTLD),例如:.xyz/.top/.red/.help 等新頂級域名。
頂級域名服務器就是根據上面三類保存域名 IP 對應數據的。
在頂級域名服務器下面一級就是,本地域名服務器(Local DNS)一般是運營商的 DNS,主要作用就是代理用戶進行域名分析的。
如圖 1 所示,DNS 域名服務器分爲三級,從上到下分別是根域名服務器(Root DNS Server)、頂級域名服務器(gTLD、ccTLD、New gTLD)、本地域名服務器(Local DNS Server)。
DNS 解析原理
說完 DNS 的結構,再來談談其運行原理。通過用戶訪問網頁的過程,來描述 DNS 解析以及獲取 URL 到 IP 映射的整個過程。其中過程比較複雜,會存在信息的來回傳遞。畫圖的過程中我們會簡化信息來回傳遞的線段,重點放在信息傳遞的路徑,通過 9 步來詮釋 DNS 解析過程。
-
1、用戶請求通過瀏覽器輸入要訪問網站的地址,例如:www.51cto.com。瀏覽器會在自己的緩存中查找 URL 對應 IP 地址。如果之前訪問過,保存了這個 URL 對應 IP 地址的緩存,那麼就直接訪問 IP 地址。如果沒有緩存,進入到第 2 步。
-
2、通過計算機本地的 Host 文件配置,可以設置 URL 和 IP 地址的映射關係。比如 windows 下是通過 C:\windwos\system32\driver\etc\hosts 文件來設置的,linux 中則是 / etc/named.confg 文件。這裏查找本地的 Host 文件,看是有 IP 地址的緩存。如果在文件中依舊沒有找到映射關係,進入第 3 步。
-
3、請求 Local DNS Server,通過本地運營商獲取 URL 和 IP 的映射關係。如果在校園網,DNS 服務器就在學校,如果是小區網絡,DNS 服務器是運營商提供的。總之這個服務器在物理位置上離發起請求的計算機比較近。Local DNS Server 緩存了大量的 DNS 解析結果。由於它的性能較好,物理上的距離又比較近,它通常會在很短的時間內返回指定域名的解析結果。80% 的 DNS 解析需求在這一步就滿足了。如果在這一步還是沒有完成 DNS 解析,進入第 4 步
-
4、通過 Root DNS Server 進行解析,ROOT DNS Server 會根據請求的 URL 返回給 Local DNS Server 頂級域名服務器的地址。例如:查詢的是”.com” 的域名,就查詢 gTL 對應的域名服務器的地址。
-
5、返回頂級域名服務器的地址以後,訪問對應的頂級域名服務器(gTLD、ccTLD、New gTLD),並且返回 Name Server 服務器地址。這個 Name Server 就是網站註冊的域名服務器,上面包含了網站 URL 和 IP 的對應信息。例如你在某個域名服務提供商申請的域名,這個域名就由他們的服務器來解析。這個 Name Server 是由域名提供商維護的。
-
6、Name Server 會把指定域名的 A 記錄或者 CNAME 返回給 Local DNS Server,並且設置一個 TTL。
1A (Address) 記錄是用來指定主機名(或域名)對應的IP地址記錄。用戶可以將該域名下的網站服務器指向到自己的web server上。同時也可以設置您域名的二級域名。
2
3CNAME:別名記錄。這種記錄允許您將多個名字映射到另外一個域名。通常用於同時提供WWW和MAIL服務的計算機。例如,有一臺計算機名爲“host.mydomain.com”(A記錄)。它同時提供WWW和MAIL服務,爲了便於用戶訪問服務。服務商從方便維護的角度,一般也建議用戶使用CNAME記錄綁定域名的。如果主機使用了雙線IP,顯然使用CNAME也要方便一些。
4
5TTL(Time To Live):也就是設置這個DNS解析在Local DNS Server上面的過期時間。超過了這個過期時間,URL和IP的映射就會被刪除,需要獲取還要請求Name Server。
6
7
- 7、如果此時獲取的是 A 記錄,那麼就可以直接訪問網站的 IP 了。但是通常來說大型的網站都會返回 CNAME,然後將其傳給 GTM Server。
GTM(Global Traffic Manager 的簡寫)即全局流量管理,基於網宿智能 DNS、分佈式監控體系,實現實時故障切換及全球負載均衡,保障應用服務的持續高可用性。傳給 GTM 的目的就是希望通過 GTM 的負載均衡機制,幫助用戶找到最適合自己的服務器 IP。
也就是離自己最近,性能最好,服務器狀態最健康的。而且大多數的網站會做 CDN 緩存,此時就更需要使用 GTM 幫你找到網絡節點中適合你的 CDN 緩存服務器。
-
8、找到 CDN 緩存服務器以後,可以直接從服務器上面獲取一些靜態資源,例如:HTML、CSS、JS 和圖片。但是一些動態資源,例如商品信息,訂單信息,需要通過第 9 步。
-
9、對於沒有緩存的動態資源需要從應用服務器獲取,在應用服務器與互聯網之間通常有一層負載均衡器負責反向代理。有它路由到應用服務器上。
總結
NS 服務器是用來做 URL 與 IP 地址解析的,幫助用戶找到要訪問服務器的 IP。從 DNS 服務器的結構來說大致分爲三層:根域名服務器,頂級域名服務器,本地域名服務器。
申請域名的供應商會提供 Name Server 作爲 DNS 解析。從用戶訪問一個網站出發,經過瀏覽器,本地 Host 文件、Local DNS Server、Root DNS Server、頂級域名服務器(gTLD、ccTLD、New gTLD)、Name Server、GTM、CDN、Application Server。共經歷了九個步驟。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/dKK438Ibgx0NUwag7ph-pw