通俗來將,就是尋找哪臺服務器上有你想要請求的資源。好比當你在瀏覽器中輸入 www.google.com 時,這其實不是真正意義上谷歌的地址。互聯網上每一臺機器的惟一標識是它的IP 地址,可是 IP 地址不方便記憶,因此用戶更喜歡使用上面提到的網址來和互聯網中其餘計算機進行信息交互,那麼將網址轉化爲實際 IP 地址的過程就是 DNS 解析。實際上充當一個翻譯的角色,實現網址到 IP 地址的轉換面試
解析過程
DNS 解析是一個遞歸查詢的過程,經過下圖來直觀理解:數據庫
這就是一個查找 www.google.com 的 IP 地址的過程。首先在本地域名中查找 IP 地址,若是沒有找到,本地域名會向根域名發送一個請求,若是根域名服務器也不存在該域名時,本地域名會向 com 頂級域名服務器發送一個請求,依次類推下去。直到最後本地域名服務器獲得 google 的 IP 地址並把它緩存到本地,供下次使用。從上述過程當中能夠看出網址解析的過程是一個從左到右的過程:com-google.com-www.google.com,可是這樣的話根域名服務器的解析呢?實際上真正的網址是 www.google.com.,這裏並非多打了個 . 而是這表明根域名服務器,實際上全部的網址後面都會有這個,由於都有,因此就默認爲了方便將這個省去,可是瀏覽器在請求 DNS 時候會自動加上segmentfault
DNS 優化
圖中在 DNS 的請求過程當中大概經歷了 8 個步驟,這個過程當中存在多個請求,若是每次請求都是經歷這麼多步驟,是否太耗時間,計算機經過 DNS 緩存來減小該過程的步驟瀏覽器
DNS 存在多級緩存,從離瀏覽器的距離來講,有如下幾種:瀏覽器緩存、系統緩存、路由器緩存、IPS 服務器緩存、根域名緩存、頂級域名服務器緩存、主域名服務器緩存緩存
DNS 負載均衡
實際上 DNS 每次返回的 IP 地址不是固定的,DNS 會返回一個合適機器的 IP 給用戶,例如能夠根據每臺機器的負載量、該機器離用戶地理位置的距離等等,這就涉及到 DNS 的負載均衡,又叫 DNS 重定向。服務器
該報文段則被放入一個具備廣播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 數據報中,由於這個時候主機還不具備一個 IP 地址
該請求報文的 IP 數據報會被放置在以太網幀中,該以太網幀具備目的 MAC 地址 FF:FF:FF:FF:FF:FF,該幀將廣播到與交換機鏈接的全部設備
鏈接在交換機的 DHCP 服務器收到廣播幀以後,不斷地向上分解獲得 IP 數據報、UDP 報文段、DHCP 請求報文,以後生成 DHCP ACK 報文,該報文包含如下信息:IP 地址、DNS 服務器的 IP 地址、默認網關路由器的 IP 地址和子網掩碼。該報文被放入 UDP 報文段中,UDP 報文段有被放入 IP 數據報中,最後放入 MAC 幀中
該幀的目的地址是請求主機的 MAC 地址,由於交換機具備自學習能力,以前主機發送了廣播幀以後就記錄了 MAC 地址到其轉發接口的交換表項,所以如今交換機就能夠直接知道應該向哪一個接口發送該幀
主機收到該幀後,不斷分解獲得 DHCP 報文。以後就配置它的 IP 地址、子網掩碼和 DNS 服務器的 IP 地址,並在其 IP 轉發表中安裝默認網關
2. ARP 解析 MAC 地址
主機經過瀏覽器生成一個 TCP 套接字,套接字向 HTTP 服務器發送 HTTP 請求。爲了生成該套接字,主機須要知道網站的域名對應的 IP 地址。
主機生成一個 DNS 查詢報文,該報文具備 53 號端口,由於 DNS 服務器的端口號是 53。
該 DNS 查詢報文被放入目的地址爲 DNS 服務器 IP 地址的 IP 數據報中。
該 IP 數據報被放入一個以太網幀中,該幀將發送到網關路由器。
DHCP 過程只知道網關路由器的 IP 地址,爲了獲取網關路由器的 MAC 地址,須要使用 ARP 協議。
主機生成一個包含目的地址爲網關路由器 IP 地址的 ARP 查詢報文,將該 ARP 查詢報文放入一個具備廣播目的地址(FF:FF:FF:FF:FF:FF)的以太網幀中,並向交換機發送該以太網幀,交換機將該幀轉發給全部的鏈接設備,包括網關路由器。
網關路由器接收到該幀後,不斷向上分解獲得 ARP 報文,發現其中的 IP 地址與其接口的 IP 地址匹配,所以就發送一個 ARP 回答報文,包含了它的 MAC 地址,發回給主機
3. DNS 解析域名
知道了網關路由器的 MAC 地址以後,就能夠繼續 DNS 的解析過程了。
網關路由器接收到包含 DNS 查詢報文的以太網幀後,抽取出 IP 數據報,並根據轉發表決定該 IP 數據報應該轉發的路由器。
由於路由器具備內部網關協議(RIP、OSPF)和外部網關協議(BGP)這兩種路由選擇協議,所以路由表中已經配置了網關路由器到達 DNS 服務器的路由表項。
到達 DNS 服務器以後,DNS 服務器抽取出 DNS 查詢報文,並在 DNS 數據庫中查找待解析的域名。
找到 DNS 記錄以後,發送 DNS 回答報文,將該回答報文放入 UDP 報文段中,而後放入 IP 數據報中,經過路由器反向轉發回網關路由器,並通過以太網交換機到達主機。
4. HTTP 請求頁面
有了 HTTP 服務器的 IP 地址以後,主機就可以生成 TCP 套接字,該套接字將用於向 Web 服務器發送 HTTP GET 報文。