我們都知道,在記憶的角色上,人腦總是不如計算機,而人們對文字的印象又比數字高。是以,想要使用純粹的TCP/IP來上網,用IP位址來記憶很麻煩,為了适應人類的使用習慣,DNS伺服器誕生了。
1.用網絡主機名取得IP的曆史淵源
目前的網際網路世界中使用的是所謂的TCP/IP協定,當我們利用網際網路傳送資料時,就需要使用IP位址。目前IP位址的主流版本IPv4是由32位所組成,為了使用人類的使用習慣已經轉換為四組十進制的數字格式,然而
人腦對于IP這種數字的格式,記憶力實在不怎麼樣,但是要上網際網路就一定需要使用IP那該怎麼辦呢?
單一檔案處理上網:/etc/hosts
早期人們想到的就是利用某些特定檔案将主機名與IP位址一一對應,如此一來,我們就可以通過主機名來取得改主機的IP了,于是在Linux作業系統中就有了/etc/hosts這個檔案的存在了。
/etc/hosts這個檔案的用法基本上為
IP 主機名 主機名稱1 主機名稱2 主機名稱3
備注:本地主機名是定義在/etc/sysconfig/network中的HOSTNAME="主機名"這一條記錄中的
可惜這個方法還是有缺陷的,那就是主機名與IP的對應無法自動在所有計算機中内更新,且要将主機名加入到該檔案僅能向國際網際網路絡資訊中心注冊,若IP量太多時,該檔案會過大,也就跟不利于其它主機同步化了。

2.分布式、階層是主機名管理架構:DNS系統
為了解決單一檔案/etc/hosts的聯網問題伯克利大學發展出另外一套階層式管理主機名對應IP的系統,我們稱之為BIND。這也是目前全世界使用最廣泛的域名系統。
DNS利用類似于樹形目錄的架構,将主機名的管理配置設定在不同層級的DNS伺服器當中,并進行分層管理,是以每一台DNS伺服器記憶的資訊就不會很多,而且若有IP變動時也
相當容易修改。因為你如果已經申請到主機名解析的授權,那麼在你自己的DNS伺服器中,就能夠修改自己管理主機的主機名,而不用通過上層ISP的維護。
第一個與DNS有關的主機名概念就是“主機名與域名”的概念,以及這兩者組成的完整主機名FQDN。
*以區域來區分同名同姓者的差異:網際網路世界中其實有很多相同的名字,譬如“張三”,那麼怎樣來區分這些相同的名稱呢?這個時候可以使用所在地來區分,
華北 張三
華南 張三
西北 張三
…………
在這裡地區就是“區域”
* 已區域号碼來區分相同的電話号碼:例如北京有個1234的電話号碼,上海也有一個1234的電話号碼,我們在北京本地撥打1234時可直接撥打,但是想要從北京撥打上海的1234則需要加上區号012才行,
此時區号012就是域名稱,而電話号碼就是“主機名”。
在網際網路那世界中,我們常常發現主機名都是www的網站,例如:www.baidu.com,www.google.com,www.360.com等等,這些擁有相同主機名的主機則需要用不同的域來區分,也就是baidu.com,google.com,360.com.是以即使你的主機名相同,隻要你不是在同一個域内,就可以被分辨出不同的位置。
大家知道目錄的最頂層為/目錄,那麼DNS既然也是分布式架構的,也應該存在一個最頂層,我們以www.baidu.com為例進行講解:
在上面的例子中位于最頂層的時.com這台主機,即第二層級的域名稱,第二層裡面.com為域的名稱,而360,baidu,google為主機名稱,而在baidu這個主機名稱的管理下還有其它更小的網域的主機,所有第三層中域名就變成了baidu.com,而pan,www,ftp,則為這一層級的主機名。
3.DNS的主機名對應的IP的查詢流程
大概了解DNS域名域主機名之間的關系中後我們來看一下用戶端如何使用DNS伺服器來查詢所要通路的主機的。
假設我們現在有一台PC即機想要通路www.baidu.com這個網站,那麼我們首先需要将DNS位址配置到我們的用戶端主機上,這裡使用谷歌為全球免費提供的8.8.8.8緩存伺服器。為什幺使用這種緩存伺服器後續會講解。
首先第1步PC機将查詢請求發送到緩存DNS伺服器中,第二部DNS伺服器回向根伺服器發送請求,這裡要注意了,因為DNS是采用層級的模式架構的,所有上一層隻負責管理自己的下一層。第3步根伺服器從自己的本地資料庫中将.com注冊的資訊與對應的IP位址取出來并将資訊傳回給DNS緩存伺服器。第4步緩存伺服器根據根伺服器提供的位址查找到頂級域名.com所在的伺服器,并發送查詢請求,第5步.com域所有的伺服器通過查找自己本地資料庫中baidu.com所注冊的域名資訊與對應IP位址,并将資訊傳回個DNS伺服器,第6步,DNS緩存伺服器通過.com域所傳回的資訊查找的baidu.com域所在的伺服器……,以此類推DNS伺服器通過這種疊代查找的方式找到www.baidu.com這台主機所在的位置并将結果傳回給PC用戶端。這裡還要注意了,DNS緩存伺服器沒向一個層級發期查詢請求并得到結果後,都會将傳回的結果儲存到自己的本地緩存中,當有另一台主機查詢相同的位址是,隻需要從本地緩存中調取即可,不必從新遞歸查找。
假設此時這裡有一台www.360.com的主機需要與mail.baidu.con這台主機通信,那麼通信機制又是怎樣的呢?首先www.360.com這台主機将通路請求發送到自己的DNS伺服器,即360.com這個域所在的主機。對于360.com來時說它是将自己所申請到的域範圍部署在一組伺服器上面,稱為下級的DNS伺服器進而對自己的下級提供域管理功能。然後360.com這個域所在的伺服器将請求發送給根伺服器,然後依次遞歸查詢,因為每台DNS伺服器隻能識别根伺服器的位置而不能識别其它伺服器的位置,這也是為什麼DNS伺服器在配置式需要将關于自己域的正向解析配置,還需要将根伺服器域的正向解析配置進去。
那我們的PC客戶即能不能将DNS配置成360或者是百度的DNS伺服器中呢?理論上是可以的,但是一般公司自己假設DNS伺服器是為自己公司内部主機提供DNS解析功能,将自己公司的主機接入到網際網路中的,大多都會設定權限進讓自己公司内部使用,所有我們平常使用的DNS解析伺服器一般都是網際網路上公共的DNS緩存伺服器或者是你使用的寬帶營運商所提供的DNS伺服器。