1. 程式人生 > >DNS域名系統分析

DNS域名系統分析

簡介

        DNS(Domain Name System)即域名系統也常叫做域名解析協議,是全球資訊網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串。通過域名,最終得到該域名對應的IP地址的過程叫做域名解析。DNS協議常執行在UDP協議之上,使用埠號53。

封包格式及各欄位分析

封包格式


欄位分析

事務ID:佔16位、由客戶端設定,由伺服器返回。客戶端使用它來匹配響應和查詢。
標誌,佔16位:
    查詢/響應:佔1位、0表示查詢訊息; 1表示響應訊息。
    操作碼:

佔4位、查詢和響應中的正常值是0(標準查詢)。4(通知), 5 (更新)。其他值(1-3)是棄用的,在運作過程中不會出現。
    授權回答:佔1位、與快取回答相對。
    截斷回答:佔1位、使用UDP時,它表示當應答的總長度超過512位元組時,只返回前512個位元組。
    期望遞迴:佔1位、該欄位可以在一個查詢中設定, 並在響應中返回。它告訴伺服器執行遞迴查詢。如果該欄位沒有設定,且被請求的名稱伺服器沒有授權回答,則被請求的名稱伺服器就返回一個可以聯絡獲取回答的其他名稱伺服器的列表。此時,全部的查詢可能通過聯絡其他名稱伺服器來繼續。這被稱為迭代查詢。
    遞迴可用:
佔1位、如果伺服器支援遞迴查詢, 則在響應中設定該欄位。根伺服器一般不支援遞迴,因此強制客戶端執行迭代查詢來完成名稱解析。
    保留位:佔1位、目前z位欄位必須是0,但是為將來使用而保留。 
    真實資料:佔1位、如果包含的資訊是已授權的,則該欄位設定為真。
    禁止校驗:佔1位、如果禁用安全檢查,則該欄位設定為真。
    操作碼:佔4位、在下表中給出了前面11個錯誤程式碼(11-15的值未定義)。


查詢數:佔16位、查詢區段中條目的數目。
回答數:佔16位、回答區段中條目的數目。
授權記錄數:

佔16位、授權區段中條目的數目。
額外資訊數:佔16位、額外資訊區段中條目的數目。
資料:問題區段,回答區段,授權區段,額外資訊區段。用於DNSUPDATE:區域,先決條件,更新,額外資訊。所有的其他區段都包含零個或多個RR。RR包含名字、型別和類資訊,也包含控制資料快取時間的TTL值。

資料包分析

請求:

響應:

其他相關

網際網路域名結構

        早期的網際網路使用了非等級的名字空間,其優點是名字簡短。但當網際網路上的使用者數急劇增加時,用非等級的名字空間來管理一個很大的而且是經常變化的名字集合是非常困難的。因此,網際網路後來就採用了層次樹狀結構的命名方法,就像全球郵政系統和電話系統那樣。採用這種命名方法,任何一個連線在網際網路上的主機或路由器,都有一個唯一的層次結構的名字,即域名。這裡,“域”是名字空間中一個可被管理的劃分。域還可以劃分為子域,而子域還可繼續劃分為子域的子域,這樣就形成了頂級域、二級域、三級域,等等。
        域名都由標號序列組成,而各標號之間用點隔開,在最後面的串是頂級域名,倒數第二個是二級域名,以此類推。

通用頂級域名

域名伺服器

        網際網路上的DNS域名伺服器也是按照層次安排的。每一個域名伺服器都只對域名體系中的一部分進行管轄。根據域名伺服器所起的作用,可以把域名伺服器劃分為以下四種不同的型別:
(1)根域名伺服器:根域名伺服器是最高層次的域名伺服器,也是最重要的域名伺服器。所有的根域名伺服器都知道所有的頂級域名伺服器的域名和IP地址。根域名伺服器是最重要的域名伺服器,因為不管是哪一個本地域名伺服器,若要對網際網路上任何一個域名進行解析,只要自己無法解析,就首先要求助於根域名伺服器。假定所有的根域名伺服器都癱瘓了,那麼整個網際網路中的DNS系統就無法工作。據統計,到2016年2月,全世界已經在588個地點(地點數值還在不斷增加)安裝了根域名伺服器,但這麼多的根域名伺服器卻只使用13個不同P地址的域名,即 a.rootservers.net,b.rootservers.net ,…, m.rootservers.net。每個域名下的根域名伺服器由專門的公司或美國政府的某個部門負責運營。但請注意,雖然網際網路的根域名伺服器總共只有13個域名,但這不表明根域名伺服器是由13臺機器所組成(如果僅僅依靠這13臺機器,根本不可能為全世界的網際網路使用者提供令人滿意的服務)。實際上,在網際網路中是由13套裝置(13 installations 構成這13組根域名伺服器[ W-ROOT ]。每一套裝置在很多地點安裝根域名伺服器(也可稱為映象根伺服器),但都使用同一個域名。負責運營根域名伺服器的公司大多在美國,但所有的根域名伺服器卻分佈在全世界。為了提供更可靠的服務,在每一個地點的根域名伺服器往往由多臺機器組成(為了安全起見,有些根域名伺服器的具體地點還是保密的)。現在世界上大部分DNS域名伺服器,都能就近找到一個根域名伺服器查詢IP地址(現在這些根域名伺服器都已增加了IPv6地址)。為了方便,人們常用從A到M的前13個英文字母中的一個,來表示某組根域名伺服器。
(2)頂級域名伺服器:這些域名伺服器負責管理在該頂級域名伺服器 註冊的所有二級域名。當收到DNS查詢請求時,就給出相應的回答(可能是最後的結果,也可能是下一步應當找的域名伺服器的IP地址)
(3)許可權域名伺服器:負責一個區的域名伺服器。當一個許可權域名伺服器還不能給出最後的查詢回答時,就會告訴發出查詢請求的DNS客戶,下一步應當找哪一個許可權域名伺服器。
(4)本地域名伺服器:當一臺主機發出DNS查詢請求時,這個查詢請求報文就傳送給本地域名伺服器。由此可看出本地域名伺服器的重要性。每一個網際網路服務提供者ISP,或一個大學,甚至一個大學裡的系,都可以擁有一個本地域名伺服器,這種域名伺服器有時也稱為預設域名伺服器。本地域名伺服器離使用者較近,一般不超過幾個路由器的距離。當所要查詢的主機也屬於同一個本地ISP時,該本地域名伺服器立即就能將所查詢的主機名轉換為它的P地址,而不需要再去詢問其他的域名伺服器。為了提高域名伺服器的可靠性,DNS域名伺服器都把資料複製到幾個域名伺服器來儲存,其中的一個是主域名伺服器,其他的是輔助域名伺服器。當主域名伺服器出故障時,輔助域名伺服器可以保證DNS的查詢工作不會中斷。主域名伺服器定期把資料複製到輔助域名伺服器中,而更改資料只能在主域名伺服器中進行。這樣就保證了資料的一致性。

DNS查詢流程


本地域名伺服器採用迭代查詢的步驟:
1.主機 m.xyz.com 先向其本地域名伺服器 dns.xyz.com進行遞迴查詢
2.本地域名伺服器採用迭代查詢。它先向一個根域名伺服器查詢
3.根域名伺服器告訴本地域名伺服器,下一次應查詢的頂級域名伺服器dns.com的IP地址。
4.本地域名伺服器向頂級域名伺服器dns.com進行查詢。
5.頂級域名伺服器dns.com告訴本地域名伺服器,下一次應查詢的許可權域名伺服器dns.abc.con的IP地址
6.本地域名伺服器向許可權域名伺服器dns.abc.com 進行查詢。
7.許可權域名伺服器dns.abc.com告訴本地域名伺服器,所查詢的主機的IP地址。
8.本地域名伺服器最後把查詢結果告訴主機m.xyz.com
本地域名伺服器採用遞迴查詢的步驟:
1.主機 m.xyz.com 先向其本地域名伺服器 dns.xyz.com進行遞迴查詢。
2.本地域名伺服器採用遞迴查詢。向一個根域名伺服器查詢。
3.根域名伺服器。向頂級域名伺服器查詢。
4.頂級域名伺服器查詢向許可權域名伺服器查詢。
5.許可權域名伺服器將結果返回給頂級域名伺服器。
6.頂級域名伺服器將結果返回給根域名伺服器。
7.根域名伺服器將結果返回給本地域名伺服器。
8.本地域名伺服器將結果返回主機m.xyz.com。
        為了提高DNS查詢效率,並減輕根域名伺服器的負荷和減少網際網路上的DNS查詢報文數量,在域名伺服器中廣泛的使用快取記憶體(有時也稱為快取記憶體域名伺服器)。快取記憶體用來存放最近查詢過的域名以及從何處獲得得域名對映資訊記錄。

名稱和標籤 

        DNS訊息末尾的可變長度區段包含問題、回答、授權資訊(包含某些資料授權資訊的名稱伺服器的名稱)和可能減少必要查詢次數的額外資訊。每一個問題和RR以它所涉及的名稱開始。每個名稱由一系列的標籤組成。標籤型別有兩種:資料標籤和壓縮標籤。資料標籤包含構成一個標籤的字元;壓縮標籤充當指向其他標籤的指標。當相同字串的多個副本在多個標籤中出現時, 壓縮標籤有助於節省DNS資訊的空間。
資料標籤 
        每個資料標籤以1位元組的計數開始,該計數指定了緊隨其後的位元組數目。名稱以值為0的位元組結束, 0也是一個標籤,其長度值為0,例如,名稱為www.sdut.edu.cn的編碼:{3www4abcd2cn0}
壓縮標籤 
        在許多情況下, DNS響應訊息在回答、授權以及與相同域名相關的額外資訊區段中攜帶資訊。如果使用了資料標籤,當涉及相同的名稱時, DNS訊息中的相同字元就會重複。為了避免這種冗餘和節省空間,使用了一種壓縮機制。DNS訊息中,在域名的標籤部分能出現的任意位置,前面的單一計數字節(通常在0和63之間)的2個高位置1,剩餘的位與隨 後的位元組中的位組合形成一個14位的指標(偏移量)。偏移量給出了距離DNS訊息開始處的位元組數,在那裡可以我到一個用於替代壓縮標籤的資料標籤(稱為壓縮目標)。因此壓縮標籤能夠指向距離開始處多達16 383個位元組的位置。使用壓縮標籤編碼域名usc.edu和ucla.edu: