DNS學習筆記

小鞅發表於2016-03-16

DNS學習筆記


DNS簡單介紹:

1.DNS:是一個由分層的dns伺服器實現的分散式資料庫,是一個允許主機查詢分散式資料庫的應用層協議

2. DNS伺服器:就相當於一個軟體程式(其實一個重要DNS伺服器是一個叢集),他一般部署在unix或者linux系統上,DNS協議是執行在UDP協議之上,使用的是53號埠

3. 獲取ip地址的過程:客戶端瀏覽器一般都整合了一個DNS客戶機,當使用者從瀏覽器的url位址列輸入地址的時候,dns客戶端主機就會獲取到該主機名,並將主機名傳送的DNS伺服器,DNS伺服器收到請求處理以後就會回答一個相應的回答,該回答中包含有傳送的主機名對應的IP地址,當瀏覽器拿到這個IP地址以後,就可以找到對應的web伺服器

4. DNS的缺點:增加了額外的延遲,增加了網路的負擔

5.DNS負載均衡機制:比如一個web伺服器的訪問量很大,就會將相同的Web伺服器部署在多個主機上,由於每一個主機的ip地址不一樣,那怎麼讓web客戶端(瀏覽器)知道該訪問哪一臺主機上的伺服器,這時就完全要靠DNS伺服器的負載均衡機制來解決。DNS伺服器中,一個主機名可能會對映到能訪問到web伺服器的很多ip地址(每個地址對應一個相同的web服務端,不是一個臺伺服器),當客戶端訪DNS伺服器的時候,DNS會將與請求的主機名的多個ip地址同時發給DNS客戶端,但是DNS雖然收到了很多ip都能訪問同一個網站,但是他一般會將排在第一的ip地址給瀏覽器使用;所以DNS通過控制返回的ip地址就可以實現負載均衡的目的;(郵件伺服器也是有很多的,也可採用這種機制的)

6.DNS伺服器種類:重要的DNS伺服器種類有4種:根DNS伺服器(全球有13個,每一個DNS伺服器都是重複的叢集,供安全使用),頂級域名DNS伺服器(有com,org,net,edu種類的DNS伺服器),權威DNS伺服器,本地伺服器

7.一個網址解析為IP的過程(忽略web快取):假設獲取www.map.baidu.com這個主機名的ip地址,DNS客戶端會將該url傳送到本地DNS伺服器,然後本地伺服器會向根DNS伺服器傳送請求,根DNS伺服器通過com字尾判斷該請求是要獲取com的頂級DNS伺服器,然後把com的頂級DNS伺服器ip發給本地DNS伺服器,本地DNS服務獲取到com的DNS伺服器ip地址之後,去訪問com的DNS伺服器,com的DNS伺服器發現了欄位baidu(其實是baidu.com欄位),然後com的DNS伺服器會將baidu.com的DNS伺服器(假設baidu.com是一個權威的DNS伺服器)的ip地址傳送給本地DNS伺服器(假設百度公司下面的很多應用都採用這個權威的DNS伺服器,因此百度權威DNS伺服器會儲存很多的本地的DNS伺服器的ip地址),客戶端本地伺服器去訪問baidu的權威DNS伺服器,百度的權威DNS伺服器向客戶端返回本地DNS伺服器的IP地址,最後本地本地DNS伺服器去訪問百度的本地DNS伺服器,本地伺服器返回一個www.map.baidu.com的ip地址,客戶端本地伺服器獲得www.map.baidu.com的ip地址以後,將給瀏覽器傳送回一個應答,應答中包含請求的主機名的ip地址,這樣瀏覽器就可以通過ip地址直接訪問對應的web伺服器。

8.權威DNS服務只是相對的,如果一個本地DNS伺服器存放了其他本地DNS伺服器的ip地址,他也可以說是其他本地DNS伺服器的權威伺服器

9.web快取:為了減少在網路中的傳輸,一般本地DNS伺服器都是有快取功能的,他會將之前訪問過的主機名與ip的對映儲存起來;以後就可以不用再去繞那麼多彎子了,同時本地DNS服務也是可以儲存com的DNS伺服器的ip,這樣就可以繞過根DNS伺服器了。

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

相關文章