淺析計算機網路(2) -- DNS工作原理
阿新 • • 發佈:2019-01-05
DNS的工作原理
來做個小實驗吧
- 開啟你的終端或者DOS命令執行視窗,輸入
ping www.baidu.com
看看發生了什麼 如果你的網路正常連線的話,應該可以看到這樣的結果
把其中的
111.13.100.92
(你的顯示的可能不一樣,不用擔心,放心複製)複製到瀏覽器,然後訪問後你是不是看到了百度首頁了吶。
域名與IP地址
- 我們將
www.baidu.com
這樣的能定位到某個網站的字串叫做域名 - 將
111.13.100.92
這樣同樣的定位到某個網站(更準確的說是定位到某臺主機)的字串叫做IP地址
通過上面的例子可以看出相對於IP地址,域名對於使用者而言更容易記憶,更加友好。而對於路由器等網路裝置卻不是這樣的。路由器可以根據IP地址更快的定位主機位置。而域名這種長度不定的字串對於路由器來說簡直是無法理解的。
DNS的使命
- DNS(Domain Name System),中文叫做域名系統。
DNS的就是為了同時保留域名和IP地址的優勢的產物。人們可以通過域名簡單的記住要訪問的web站點,而路由器等網路裝置卻可以使用IP地址快速定位到相關主機。DNS要做的就是當用戶輸入域名後,先到DNS伺服器查詢IP地址,然後再通過IP地址來訪問web站點。
DNS伺服器的層次結構
- 實現DNS伺服器最簡單的一種方案就是在一臺遠端主機上配置好DNS的對映表,所有的域名轉換都會通過這臺主機。可是這樣的方案簡單卻不可靠。主要的缺點有:
- 當這臺主機出現故障時,整個網際網路將會癱瘓。只有那些不依賴DNS服務的軟體才可以正常工作
- 單個DNS伺服器不得不處理整個網際網路的所有DNS解析,這樣的對頻寬的要求是很高的
- 這種單點非分散式的方案,會造成巨大的延遲。加入這臺伺服器放在美利堅,當你在我大天朝訪問大天朝的百度的時候,你的域名解析的報文不得不先到達地球另一面的伺服器所在地,然後返回。一次請求,報文往返路程就繞地球一圈了。而網際網路的使用者的直觀感受就是:慢
- 對映表的維護成本更加昂貴,當你需要新增或者更新DNS記錄的時候,對於這樣大量的資料維護成本極高,效率極低
所以,DNS伺服器應該是分散式的。
- DNS伺服器的層次結構:
- 根DNS伺服器 :用來返回TLD伺服器的IP地址
- 頂級域(TLD)域名伺服器:返回權威伺服器的IP地址
- 權威DNS伺服器 :返回相應主機的IP地址
- 還有一種本地DNS伺服器,他並不屬於以上的層次機構,卻很重要,通常我們電腦和路由器自動獲得到的DNS伺服器地址就是本地伺服器。每個ISP都有本地DNS伺服器,當主機發出DNS請求時,請求被髮往本地伺服器,它起著代理作用,將該請求轉發到DNS伺服器層次中。
圖解訪問百度DNS解析過程
- 你在瀏覽器輸入了網址,然後瀏覽器通過UDP協議向本地伺服器的53號埠傳送了DNS解析請求(1號過程)。
- 如果本地DNS伺服器快取了百度的DNS記錄(關於DNS快取在下一節會詳細講),如果沒有該記錄就回向根伺服器請求(2號路徑),然後根伺服器收到請求後,會返回給本地伺服器相應的頂級域名DNS伺服器地址。以
www.baidu.com
為例,就回返回解析com
頂級域名的伺服器(3號路徑)。 - 然後本地伺服器知道TLD DNS伺服器的地址後就會向該伺服器傳送解析請求(4號請求),然後TLD伺服器返回給本地DNS伺服器百度的權威伺服器的IP地址(5號路徑)。
- 同上,本地DNS伺服器向百度的權威DNS伺服器發起查詢請求(6號路徑)。就回得到百度權威DNS伺服器返回給本地伺服器的百度伺服器的IP地址(7號路徑)。
最後,本地DNS伺服器會把百度伺服器的IP地址返回給你的電腦(8號路徑),同時將這條記錄快取在本地DNS伺服器。
- 注意:以上這種方式稱為“先遞迴,再輪詢”的查詢方式,計算機網路中還存在其他的查詢方式如僅僅的”遞迴“,可是上面這種查詢方式時最常用的。
DNS快取
- 如果每次DNS解析都要走完上一節整個的流程,那樣對於網路頻寬的消耗和延時對於使用者和DNS解析系統都是不友好的。所以當本地DNS伺服器在一次查詢後快取到本地。從而加快DNS的解析速度。實際上,你的訪問的解析大多數都是在本地伺服器上完成的。
DNS的額外服務
之所以稱這節為DNS的額外服務是指出了主機名到IP地址轉換的其他的一些服務
- 主機別名(host aliasing):有著複雜主機名的主機能同時擁有一個或者多個別名。例如:relay1.hangzhou.enterprise.com可能有一個別名叫做enterpries.com 我們稱前者為規範主機名。主機別名更容易記憶。DNS可以根據主機別名來返回主機名的規範主機名,和主機的IP地址
- 郵件伺服器別名(mail server aliasing):與第一項類似,只不過是針對郵件伺服器提供別名服務
- 負載分配(load distribution):並不是每個域名對應一個IP地址,可能對應多臺。這是DNS以輪流的方式來返回主機IP地址。
DNS資源記錄(DNS存了什麼?)
DNS資源記錄(resource record,RR)就是上圖描述的四種類型的紀錄(其實還有其他型別,這裡我們不再說明)。其中生存時間TTL決定了該條記錄在快取中刪除的時間。(單位為秒)
下面分別舉個例子幫助理解
(relay1.bar.foo.com, 145.37.93.126, A)
(foo.com, dns.foo.com, NS)
(foo.com, relay.bar.foo.com, CNAME)
(foo.com, mail.bar.foo.com, MX)