域名系統DNS
- 域名系統DNS(Domain Name System)是互聯網使用的命名系統,用來把便於人們使用的機器名轉化為IP地址,域名系統就是名字系統。
很多應用層的軟件經常直接使用DNS。DNS為互聯網的各種網絡提供了核心服務。 - 用戶和主機通信的時候,通常是很難記住IP地址,但應用層為了便於用戶記住各種網絡應用,連接在互聯網上的
主機不僅有IP地址,還有便於記憶的主機名字。域名系統就是把互聯網上的主機名字轉化為IP地址。 - 為什么主機在IP數據報的時候要使用IP地址而不是域名呢?這是因為IP地址的長度是固定的32位(IPV6是固定的128位),
而域名的長度並不是固定的,及其處理起來比較困難。 - 從理論上來講,整個互聯網可以只使用一個域名服務器,使它裝入互聯網上的所有主機名,
並回答所有對IP地址的查詢,但是這種做法簡直太蠢,這樣的域名服務器肯定會因為過負荷工作而無法正常工作,而且一旦這個域名服務器出現故障,
整個互聯網就會癱瘓。因此早在1983年就開始采用層次樹狀結構的命名方法,並使用分布式的域名系統DNS
。DNS互聯網標准是RFC[1034],RFC[1035]。 - 互聯網的DNS被設計為成為一個聯機分布式數據庫系統,並采用客戶服務器方式。DNS使大多數名字都在本地進行解析(resolve)
僅有少量解析在互聯網上通信,因此DNS系統的效率很高,由於DNS是分布式系統,即使是單個計算機出現了故障,也不會妨礙整個DNS系統的正常運行。 - 域名到IP地址的解析過程是由分布式在互聯網上的許多域名服務程序共同完成的。域名服務程序在專設的結點上運行,
人們把運行域名服務器程序的機器稱之為域名服務器。 - 域名到IP地址解析過程的要點如下:
- 當某一個用用進程需要把主機名解析為IP地址時,該用用進程就調用解析程序(resolver),
並成為DNS的一個客戶,把待解析的域名放在DNS請求報文中,以UDP用戶數據包方式發給本地域名服務器
(使用UDP的好處是減少開銷)。 - 本地域名服務器在查找域名后,把對應的IP地址放在回答報文中返回。應用進程獲取到目標主機的IP地址就可以進行通信。
- 當某一個用用進程需要把主機名解析為IP地址時,該用用進程就調用解析程序(resolver),
- 若本地域名服務器不能回答該請求,則該域名服務器就暫時成為DNS中的另一個客戶,並向其他域名服務器發出查詢請求。
這種過程直至找到能夠回答該請求的域名服務器為止。
互聯網的域名結構
- 每一個域名都是由標號(label)序列組成,各標號之間使用.隔離開,例如:
- 一級域名又稱頂級域名。從右往左依次增大。
- DNS規定,域名中的符號,都是由英文字母和數字組成,每一個標識符不能超過63個字符(為了記憶方便,不能超過12個字符)不區分大小寫
標點符號只能使用英文.號。級別最低的域名寫左邊,級別最高的域名寫右邊,由多個標號組成的完整域名不超過255個字符, - 各級域名由上一級的域名管理機構管理,最高級的頂級域名則由ICANN進行管理。
- 域名只是個邏輯概念,並不能代表計算機所在的物理地點,
- 互聯網的名字空間是按照機構的組織來划分的,與物理的網絡無關。
- 域名服務器
- 一個服務器所負責的范圍叫做區(zone)。但在區中的所有節點都必須是能夠聯通的。每一個區設置相應的
權限域名服務器,用來保存該區中的所有主機的域名到IP地址的映射, - 根據域名服務器的作用,可以把域名服務器划分為以下四種不同的類型:
- 根域名服務器(root name server):根域名服務器是最高層次的域名服務器,若要對互聯網上的任何一個域名進行解析(即轉化為IP地址)
只要自己無法解析,就首先要求助於根域名服務器,假如根域名服務器都癱瘓了,那么整個互聯網的DNS就癱瘓了。 - 頂級域名服務器(TLD服務器):這些域名服務器負責管理在該頂級域名服務器注冊的所有二級域名。當收到DNS查詢的請求的時候,就會給出相應的應答
(可能是最后的結果,也可能是下一步應當找的域名服務器的IP地址)。 - 權限域名服務器:負責一個區的域名服務器。
- 本地域名服務器(local name server):當一台主機發出DNS查詢的時候,這個查詢請求報文就發送給本地域名
服務器,本地域名服務器距離用戶比較近,一般不超過幾個路由的距離。當所要查詢的主機也屬於同一個本地ISP時候,
該本地域名服務器立即就能講所查詢的主機名轉化為它的IP地址,而不再需要詢問其他的域名服務器。
- 根域名服務器(root name server):根域名服務器是最高層次的域名服務器,若要對互聯網上的任何一個域名進行解析(即轉化為IP地址)
- 為了提高域名的可靠性,DNS域名服務器把數據復制到幾個域名服務器來保存,其中的一個是主域名服務器(master name server),
其他的是域名域名服務器(secondary name server)。當主域名服務器出現故障的時候,福主域名服務器可以保證DNS查詢工作不會癱瘓。
主域名服務器定期把數據復制到輔助域名服務器中,而更改數據只能在主域名服務器中進行,這樣就保證了數據的一致性。
- 一個服務器所負責的范圍叫做區(zone)。但在區中的所有節點都必須是能夠聯通的。每一個區設置相應的
- 域名的解析過程
- 主機向本地域名服務器的查詢一般采用的是遞歸查詢,所謂遞歸查詢就是:如果主機所詢問的本地域名服務器不知道被域名查詢的IP地址,那么本地域名服務器就以DNS客戶的身份
,向其他根域名服務器繼續發出查詢請求報文(替該主機繼續查詢),而不是讓主機自己進行下一步查詢,遞歸查詢的結果就兩種:- 查詢成功,查詢出IP地址。
- 查詢失敗(報錯),無法查詢到。
- 本地域名服務器向根域名服務器查詢采用的是迭代查詢:當根域名服務器收到本地域名服務器發出的
迭代請求報文時,要么給出要查詢的IP地址,要么告訴本地域名服務器地址:"你下一步應該去哪一個域名服務器查詢",然后讓本地域名服務器進行后續的查詢,接着如何上面的操作,直至找到IP地址。
- 為了提高DNS查詢速率,並減輕根域名服務器的負荷,在域名服務器廣泛使用高速緩存(高速緩存域名服務器),高速緩存用來存放最近查詢過的域名以及從何處獲取到該映射。
- 主機向本地域名服務器的查詢一般采用的是遞歸查詢,所謂遞歸查詢就是:如果主機所詢問的本地域名服務器不知道被域名查詢的IP地址,那么本地域名服務器就以DNS客戶的身份