又到了招聘季了,前兩天遇到一個面試的小夥伴,他說面試官和他聊得很投機,無心中談到了DNS請求的過程。他一時語塞隨便應付了兩句,雖然對方沒有追問的意思,但最後面試結果也並不理想。本着邊面試邊學習的態度,咱們來看看DNS請求的過程當中涉及到的定義和原理。linux
衆所周知,在互聯網中是用IP來標識一臺服務器的。IP地址雖然可以表明一臺設備,可是因爲記憶起來比較困難,因此將其替換成一個可以理解和識別的名字,這個名字咱們稱做爲域名。例如:www.51cto.com 就是一個域名,在域名後面會定義一個IP地址用來指向網站服務器。那麼問題來了,誰來作這個從域名到IP地址的對應呢?答案是經過DNS來實現。web
DNS 是域名系統(Domain Name System,縮寫:DNS)是互聯網的一項服務。它將域名和IP地址相互映射的一個分佈式數據庫,在數據庫中保存域名與IP的對照關係,從而令人更方便地訪問互聯網。面試
DNS解析是分佈式存儲的,從結構上來講最頂層是,根域名服務器(ROOT DNS Server),存儲260個頂級域名服務器的IP地址。對於Ipv4來講全球有13個根域名服務器,它儲存了每一個域(如.com .net .cn)的解析和域名服務器的地址信息。簡單的說,根域名服務器就是存放頂級域名服務器地址的。數據庫
在根域名服務器下一級就是,頂級域名服務器。例如.com的域名服務器,存儲的是一些一級域名的權威DNS服務器地址(如toutiao.com的DNS)。windows
頂級域名又稱一級域名,頂級域名能夠分爲三類,即gTLD、ccTLD和New gTLD:瀏覽器
在頂級域名服務器下面一級就是,本地域名服務器(Local DNS)通常是運營商的DNS,主要做用就是代理用戶進行域名分析的。緩存
如圖1 所示,DNS域名服務器分爲三級,從上到下分別是根域名服務器(Root DNS Server)、頂級域名服務器(gTLD、ccTLD、New gTLD)、本地域名服務器(Local DNS Server)。
圖1 DNS 分層結構服務器
說完DNS的結構,再來談談其運行原理。經過用戶訪問網頁的過程,來描述DNS解析以及獲取URL到IP映射的整個過程。其中過程比較複雜,會存在信息的來回傳遞。畫圖的過程當中咱們會簡化信息來回傳遞的線段,重點放在信息傳遞的路徑,經過9步來詮釋DNS解析過程。網絡
圖2 用戶請求以及DNS解析的全過程負載均衡
①用戶請求經過瀏覽器輸入要訪問網站的地址,例如:www.51cto.com。 瀏覽器會在本身的緩存中查找URL對應IP地址。若是以前訪問過,保存了這個URL對應IP地址的緩存,那麼就直接訪問IP地址。若是沒有緩存,進入到第2步。
②經過計算機本地的Host文件配置,能夠設置URL和IP地址的映射關係。好比windows下是經過C:\windwos\system32\driver\etc\hosts文件來設置的,linux中則是/etc/named.confg文件。這裏查找本地的Host文件,看是有IP地址的緩存。若是在文件中依舊沒有找到映射關係,進入第3步。
③請求Local DNS Server,經過本地運營商獲取URL和IP的映射關係。若是在校園網,DNS服務器就在學校,若是是小區網絡,DNS服務器是運營商提供的。總之這個服務器在物理位置上離發起請求的計算機比較近。Local DNS Server緩存了大量的DNS解析結果。因爲它的性能較好,物理上的距離又比較近,它一般會在很短的時間內返回指定域名的解析結果。80%的DNS解析需求在這一步就知足了。若是在這一步仍是沒有完成DNS解析,進入第4步
④經過Root DNS Server進行解析,ROOT DNS Server會根據請求的URL 返回給Local DNS Server頂級域名服務器的地址。例如:查詢的是」.com」的域名,就查詢 gTL對應的域名服務器的地址。
⑤返回頂級域名服務器的地址之後,訪問對應的頂級域名服務器(gTLD、ccTLD、New gTLD),而且返回Name Server服務器地址。這個Name Server就是網站註冊的域名服務器,上面包含了網站URL和IP的對應信息。例如你在某個域名服務提供商申請的域名,這個域名就由他們的服務器來解析。這個Name Server是由域名提供商維護的。
⑥Name Server會把指定域名的A記錄或者CNAME返回給Local DNS Server,而且設置一個TTL。
GTM(Global Traffic Manager的簡寫)即全局流量管理,基於網宿智能DNS、分佈式監控體系,實現實時故障切換及全球負載均衡,保障應用服務的持續高可用性。傳給GTM的目的就是但願經過GTM的負載均衡機制,幫助用戶找到最適合本身的服務器IP。
也就是離本身最近,性能最好,服務器狀態最健康的。並且大多數的網站會作CDN緩存,此時就更須要使用GTM幫你找到網絡節點中適合你的CDN緩存服務器。
⑧找到CDN緩存服務器之後,能夠直接從服務器上面獲取一些靜態資源,例如:HTML、CSS、JS和圖片。可是一些動態資源,例如商品信息,訂單信息,須要經過第9步。
⑨對於沒有緩存的動態資源須要從應用服務器獲取,在應用服務器與互聯網之間一般有一層負載均衡器負責反向代理。有它路由到應用服務器上。
DNS服務器是用來作URL與IP地址解析的,幫助用戶找到要訪問服務器的IP。從DNS服務器的結構來講大體分爲三層:根域名服務器,頂級域名服務器,本地域名服務器。
申請域名的供應商會提供Name Server做爲DNS解析。從用戶訪問一個網站出發,通過瀏覽器,本地Host文件、Local DNS Server、Root DNS Server、頂級域名服務器(gTLD、ccTLD、New gTLD)、Name Server、GTM、CDN、Application Server。共經歷了九個步驟。