金三銀四網絡面經之 DNS 詳解

金三銀四網絡面經之 DNS 詳解

作者 | Cooper Song

DNS全稱Domain Name System,也就是域名系統。用戶要訪問一個網站,需要知道它的IP地址。而DNS系統主要提供的服務就是主機名與IP地址的映射,即輸入一個域名,比如www.baidu.com,可以得到www.baidu.com的服務器IP地址39.156.66.18。

之所以需要域名系統,是IP地址太難記了,這就好比人與人之間使用姓名或乳名更好記,而不是認識一個人就背過人家的身份證號。互聯網的用戶也是人,所以網上衝浪者們也更容易也更喜歡記住一些網站的域名,比如百度www.baidu.com、淘寶www.taobao.com、京東www.jd.com;而路由器則顯然更容易識別IP地址。因此從主機名到IP地址這個映射就顯得尤為重要。

金三银四网络面经之 DNS 详解

在我看來,這種服務的提供更像是一種數據庫查詢:

SELECT IP FROM DNS WHERE NAME='www.baidu.com';

我好像沒猜錯,DNS就是一個由分層的DNS服務器(通常是運行BIND軟件的UNIX機器)實現的分佈式數據庫,也是一個使得主機能夠查詢分佈式數據庫的應用層協議(運行在UDP之上,使用53號端口)。

雖說是數據庫,但不是一個普通的數據庫,而是一個分佈式數據庫,分佈式數據庫由大量的DNS服務器實現。當然,DNS也可以只用一個服務器來實現,這樣做的好處是簡單,但也有大大的壞處,特別是互聯網用戶越來越多,一個DNS服務器是遠遠不夠的,會出現很多問題,主要問題如下:

  • 單點故障。如果唯一的一臺DNS服務器崩了,整個因特網都不能使用DNS服務了,所有用戶都不能通過www.baidu.com這樣的域名訪問網站了,整個因特網隨之癱瘓。

  • 通信容量。唯一的一臺DNS服務器不得不處理所有的DNS查詢,必須為所有請求訪問的主機產生HTTP請求報文。

  • 近距離的集中式數據庫。如果唯一的一臺DNS服務器在美國紐約,那麼中國用戶、澳大利亞用戶的查詢都得先傳播到地球的另一邊,在傳播過程中還有可能遇到網絡擁塞,會導致嚴重的時延。

  • 維護。唯一的一臺DNS服務器需要為所有因特網的主機保留記錄,數據規模是非常龐大的,隨著聯網的主機數增多,還要不斷地更新(插入insert、刪除delete、修改update)。

正是由於上面那些問題,網絡專家們提出了分佈式、分層次數據庫這一解決方案。

DNS服務器主要分為三種,一種是頂端的根DNS服務器,一種是位於中間的頂級域(Top-Level Domain,簡稱TLD)DNS服務器,一種是位於下層的權威DNS服務器。

根服務器全世界共有400多個,它提供用戶訪問域名所屬的頂級域服務器的IP地址。

頂級域服務器管理著一類網站權威服務器的IP地址,後綴名為.com、.gov、.edu、.org的URL分屬於comDNS服務器、govDNS服務器、eduDNS服務器、orgDNS服務器。此外,每個國家都有自己的頂級域服務器,比如.cn屬於中國、.jp屬於日本、.uk屬於英國、.fr屬於法國、.th屬於泰國。

在因特網上具有公共可訪問主機的每個組織機構必須提供公共可訪問的DNS記錄,這些記錄將這些主機的名字映射為IP地址,一個組織機構的權威DNS服務器會收藏這些DNS記錄,或者讓這些記錄存儲在服務提供商的一個權威DNS服務器中。一般大學和大廠都會實現和維護自己的權威DNS服務器,比如麻省理工自己實現的mit.eduDNS服務器、亞馬遜自己實現的amazon.comDNS服務器、百度自己實現的baidu.comDNS服務器,baidu.com就會提供百度網址大全site.baidu.com的IP地址。

金三银四网络面经之 DNS 详解

用戶主機向根DNS服務器發出查詢請求,根服務器返回給用戶主機相應的頂級域DNS服務器的IP地址,用戶主機再根據頂級域DNS服務器的IP地址向相應的頂級域服務器發出查詢請求,頂級域DNS服務器返回給主機相應的權威DNS服務器的IP地址,用戶主機再根據權威DNS服務器的IP地址向相應的權威DNS服務器發出查詢請求,該權威DNS服務器最終向用戶主機發送查詢主機名的IP地址發送給用戶主機。

舉個例子,我的電腦要訪問百度網址大全site.baidu.com,向根DNS服務器發送查詢請求,根DNS服務器識別到後綴.com,返回給用戶主機comDNS服務器的IP地址,用戶主機根據comDNS服務器的IP地址向comDNS服務器發送查詢請求,comDNS服務器返回給用戶主機百度權威DNS服務器baidu.com的IP地址,用戶再向百度的權威服務器baidu.comDNS服務器發送查詢請求,百度的權威服務器當然熟悉自家網站,就把百度網址大全site.baidu.com的IP地址返回給了用戶主機。

更多的,用戶主機請求域名對應的IP地址會藉助一個本地DNS服務器,這個DNS服務器一般是一個小區或者一個機構的ISP(Internet Service Provider,可以理解為運行商)提供的,本地DNS服務器獲取到最終的IP地址後,再返回給用戶主機。訪問示意圖如下:

金三银四网络面经之 DNS 详解

圓圈表達了請求的時序關係。根DNS服務器和頂級域服務器更像是中間的領路人,這兩種服務器指引著主機找到最終要訪問的IP地址。

DNS系統是設有緩存機制的,如果某個DNS服務器收到了一條主機名到IP地址的映射記錄,就把這個記錄存到本地緩存裡,下次收到某域名的請求時,如果該域名在本DNS服務器緩存中,就可以直接返回該域名的IP地址。這將大大減少時延,如果沒有緩存機制,上圖中的8個步驟缺一不可;而有了緩存機制,用戶主機甚至都可以直接從本地DNS服務器那裡得到自己想要的IP地址,示意圖如下:

金三银四网络面经之 DNS 详解

參考文獻:

[1]James F Kurose,Keith W Ross.Computer Networking A Top-Down Approach Seventh Edition[M].Beijing:China Machine Press,2018:83.

作者簡介:Cooper Song,大學計算機專業在校生,本科在讀,學生開發者。


分享到:


相關文章: