1. DNS概述
域名系統DNS(Domain Name System)是因特網使用的命名系統,用來把便於人們使用的機器名字轉換成為IP地址。

2. 因特網的域名結構

由於因特網用户眾多,所以命名時,採用層次樹狀的域名結構,每一個連在因特網上的主機,都會有一個唯一的層次結構名字,即域名。

從語法上講,每一個域名都是有標號(label)序列組成,而各標號之間用點(小數點)隔開。如下例子所示:

DNSJava 指定域名 地址_DNSJava 指定域名 地址


這是中央電視台用於手法電子郵件的計算機的域名,它由三個標號組成,其中標號com是頂級域名,標號cctv是二級域名,標號mail是三級域名。

DNS規定,域名中的標號都有英文和數字組成,每一個標號不超過63個字符(為了記憶方便,一般不會超過12個字符),也不區分大小寫字母。標號中除連字符(-)外不能使用其他的標點符號。級別最低的域名寫在最左邊,而級別最高的字符寫在最右邊。由多個標號組成的完整域名總共不超過255個字符。DNS既不規定一個域名需要包含多少個下級域名,也不規定每一級域名代表什麼意思。各級域名由其上一級的域名管理機構管理,而最高的頂級域名則由ICANN進行管理。用這種方法可使每一個域名在整個互聯網範圍內是唯一的,並且也容易設計出一種查找域名的機制。

現在頂級域名TLD(Top Level Domain)已有265個,分為三大類:

(1)國家頂級域名nTLD:採用ISO3166的規定。如:cn代表中國,us代表美國,uk代表英國,等等。國家域名又常記為ccTLD(cc表示國家代碼contry-code)。

(2)通用頂級域名gTLD:最常見的通用頂級域名有7個,即:com(公司企業),net(網絡服務機構),org(非營利組織),int(國際組織),gov(美國的政府部門),mil(美國的軍事部門)。

(3)基礎結構域名(infrastructure domain):這種頂級域名只有一個,即arpa,用於反向域名解析,因此稱為反向域名。

DNSJava 指定域名 地址_域名服務器_02

3. 域名服務器
域名服務器根據需要劃分為四個層級:

  1. 根域名服務器:最高層次的域名服務器,也是最重要的域名服務器。所有的根域名服務器都知道所有的頂級域名服務器的域名和IP地址。不管是哪一個本地域名服務器,若要對因特網上任何一個域名進行解析,只要自己無法解析,就首先求助根域名服務器。所以根域名服務器是最重要的域名服務器。假定所有的根域名服務器都癱瘓了,那麼整個DNS系統就無法工作。需要注意的是,在很多情況下,根域名服務器並不直接把待查詢的域名直接解析出IP地址,而是告訴本地域名服務器下一步應當找哪一個頂級域名服務器進行查詢。
  2. 頂級域名服務器:負責管理在該頂級域名服務器註冊的二級域名。
  3. 權限域名服務器:負責一個“區”的域名服務器。
  4. 本地域名服務器:本地服務器不屬於下圖的域名服務器的層次結構,但是它對域名系統非常重要。當一個主機發出DNS查詢請求時,這個查詢請求報文就發送給本地域名服務器。

    4. 一套完整的DNS域名解析過程
  • 主機向本地域名服務器的查詢一般都是採用遞歸查詢。所謂遞歸查詢就是:如果主機所詢問的本地域名服務器不知道被查詢的域名的IP地址,那麼本地域名服務器就以DNS客户的身份,向其它根域名服務器繼續發出查詢請求報文(即替主機繼續查詢),而不是讓主機自己進行下一步查詢。因此,遞歸查詢返回的查詢結果或者是所要查詢的IP地址,或者是報錯,表示無法查詢到所需的IP地址。
  • 本地域名服務器向根域名服務器的查詢的迭代查詢。迭代查詢的特點:當根域名服務器收到本地域名服務器發出的迭代查詢請求報文時,要麼給出所要查詢的IP地址,要麼告訴本地服務器:“你下一步應當向哪一個域名服務器進行查詢”。然後讓本地服務器進行後續的查詢。根域名服務器通常是把自己知道的頂級域名服務器的IP地址告訴本地域名服務器,讓本地域名服務器再向頂級域名服務器查詢。頂級域名服務器在收到本地域名服務器的查詢請求後,要麼給出所要查詢的IP地址,要麼告訴本地服務器下一步應當向哪一個權限域名服務器進行查詢。最後,知道了所要解析的IP地址或報錯,然後把這個結果返回給發起查詢的主機。

下圖給出了這兩種查詢的差別:

DNSJava 指定域名 地址_IP_03

下面舉一個例子演示整個查詢過程:

假定域名為m.xyz.com的主機想知道另一個主機y.abc.com的IP地址。例如,主機m.xyz.com打算髮送郵件給y.abc.com。這時就必須知道主機y.abc.com的IP地址。下面是上圖a的幾個查詢步驟:

    1、主機m.abc.com先向本地服務器dns.xyz.com進行遞歸查詢。

    2、本地服務器採用迭代查詢。它先向一個根域名服務器查詢。

    3、根域名服務器告訴本地服務器,下一次應查詢的頂級域名服務器dns.com的IP地址。

    4、本地域名服務器向頂級域名服務器dns.com進行查詢。

    5、頂級域名服務器dns.com告訴本地域名服務器,下一步應查詢的權限服務器dns.abc.com的IP地址。

    6、本地域名服務器向權限域名服務器dns.abc.com進行查詢。

    7、權限域名服務器dns.abc.com告訴本地域名服務器,所查詢的主機的IP地址。

    8、本地域名服務器最後把查詢結果告訴m.xyz.com。

    整個查詢過程共用到了8個UDP報文。

為了提高DNS查詢效率,並減輕服務器的負荷和減少因特網上的DNS查詢報文數量,在域名服務器中廣泛使用了高速緩存,用來存放最近查詢過的域名以及從何處獲得域名映射信息的記錄。

例如,在上面的查詢過程中,如果在m.xyz.com的主機上不久前已經有用户查詢過y.abc.com的IP地址,那麼本地域名服務器就不必向根域名服務器重新查詢y.abc.com的IP地址,而是直接把告訴緩存中存放的上次查詢結果(即y.abc.com的IP地址)告訴用户