TCP/IP詳解卷1:第十四章 DNS 域名系統

引言

域名系統( D N S)是一種用於 T C P/ I P應用程序的分佈式數據庫,它提供主機名字和 I P地址之間的轉換及有關電子郵件的選路信息。

域名系統內兩部分組成:名字服務器和解析器。其中,名字服務器是指DNS服務器,緩存域名和IP地址的映射關係;名字解析器,指的是DNS服務所提供的一組API,可供其他應用程序調用,通過這些調用來實現域名和IP地址的相互轉換。

DNS協議是應用層協議,其實現並未在系統內核中。

 

DNS基礎


右邊實現由域名到IP地址的轉換。

左邊實現由IP地址到域名的轉換。

 

即域名服務器有兩臺,主備。主服務器從本地文件讀入域名配置信息,而備份服務器定期向主服務器讀取域名配置信息。這也是爲什麼配置DNS服務器時需要配置兩個IP地址(cmd下ipconfig /all命令可查看)。

 

每個名字服務器必須知道如何同根的名字服務器聯繫。 1 9 9 3年4月時有8個根名字服務器,所有的主名字服務器都必須知道根服務器的 I P地址(這些 I P地址在主名字服務器的配置文件中,主服務器必須知道根服務器的 I P地址,而不是它們的域名)。根服務器則知道所有二級域中的每個授權名字服務器的名字和位置。

 

DNS的報文格式


這個報文由1 2字節長的首部和4個長度可變的字段組成。

標識字段由客戶程序設置並由服務器返回結果。客戶程序通過它來確定響應與查詢是否

匹配。

16 bit的標誌字段被劃分爲若干子字段,如下:


從最左位開始依次介紹各子字段:

• QR 是1 bit字段: 0表示查詢報文, 1表示響應報文。

• o p c o d e是一個4 bit字段:通常值爲0(標準查詢),其他值爲1(反向查詢)和2(服務器狀態請求)。

• A A是1 bit標誌,表示“授權回答(authoritative answer)”。該名字服務器是授權於該域

的。

• T C是1 bit字段,表示“可截斷的 (t r u n c a t e d )”。使用U D P時,它表示當應答的總長度超過5 1 2字節時,只返回前5 1 2個字節。

• R D是1 bit字段表示“期望遞歸(recursiondesired)”。該比特能在一個查詢中設置,並

在響應中返回。這個標誌告訴名字服務器必須處理這個查詢,也稱爲一個遞歸查詢。如

果該位爲 0,且被請求的名字服務器沒有一個授權回答,它就返回一個能解答該查詢的

其他名字服務器列表,這稱爲迭代查詢。在後面的例子中,我們將看到這兩種類型查詢

的例子。

• R A是1 bit字段,表示“可用遞歸”。如果名字服務器支持遞歸查詢,則在響應中將該比

特設置爲 1。在後面的例子中可看到大多數名字服務器都提供遞歸查詢,除了某些根服

務器。

• 隨後的3 bit字段必須爲0。

• r c o d e是一個4 bit的返回碼字段。通常的值爲0(沒有差錯)和 3(名字差錯)。名字差錯只有從一個授權名字服務器上返回,它表示在查詢中制定的域名不存在。

隨後的 4個16 bit 字段說明最後 4個變長字段中包含的條目數。對於查詢報文,問題( q u e s t i o n )數通常是 1,而其他3項則均爲0。類似地,對於應答報文,回答數至少是 1,剩下的兩項可以是0或非0。

 

DNS查詢報文中的問題部分


查詢名是要查找的名字,它是一個或多個標識符的序列。每個標識符以首字節的計數值

來說明隨後標識符的字節長度,每個名字以最後字節爲 0結束,長度爲0的標識符是根標識符。

計數字節的值必須是 0 ~6 3的數,因爲標識符的最大長度僅爲 6 3。

查詢名(即域名)取值方法如下:


每個問題有一個查詢類型,而每個響應(也稱一個資源記錄,我們下面將談到)也有一個類型。大約有 2 0個不同的類型值,下面僅列出幾個:


最常用的查詢類型是 A類型,表示期望獲得查詢名的I P地址。一個P T R查詢則請求獲得一個I P地址對應的域名。這是一個指針查詢,我們將在 1 4 . 5節介紹。其他的查詢類型將在 1 4 . 6節介紹。

查詢類通常是1,指互聯網地址(某些站點也支持其他非 I P地址)。

 

DNS響應報文中的資源記錄部分


D N S報文中最後的三個字段,回答字段、授權字段和附加信息字段,均採用一種稱爲資源記錄R R( Resource Record)的相同格式。

域名是記錄中資源數據對應的名字。它的格式和前面介紹的查詢名字段格式(圖 1 4 - 6)相同。

類型說明 R R的類型碼。它的值和前面介紹的查詢類型值是一樣的。類通常爲 1,指I n t e r n e t數據。

生存時間字段是客戶程序保留該資源記錄的秒數。資源記錄通常的生存時間值爲 2天。

資源數據長度說明資源數據的數量。該數據的格式依賴於類型字段的值。對於類型 1( A記錄)資源數據是4字節的I P地址。

 

注意:針對以上查詢問題報文格式和資源記錄報文格式中的域名部分,當存在重複值時,人使用壓縮方式,即使用引用指向一個域名。

壓縮方法很簡單,當一個域名中的標識符是壓縮的,它的單計數字節(範圍由 0~6 3)中
的最高兩位將被設置爲 11。這表示它是一個 16 bit指針而不再是8 bit的計數字節。即當單計數字節的高兩位爲11時,即被設置爲壓縮。這時,域名將通過指針值來確定。wireshark抓包結果中,有很多是經過壓縮的域名,可以將結果調整爲二進整顯示進行查看。

 

查詢報文格式和資源記錄報文格式中的類型取值


A 一個A記錄定義了一個I P地址,它存儲32 bit的二進制數。 

P T R 指針記錄用於指針查詢。 I P地址被看作是 i n -a d d r . a r p a域下的一個域名(標識符串)。 

C N A M E 這表示“規範名字 (canonicalname)”。它用來表示一個域名(標識符串),而有規範名字的域名通常被稱爲別名 ( a l i a s )。某些F T P服務器使用它向其他的系統提供一個易於記憶的別名。

例如, g a t e d服務器( 1 0 . 3節提到)可通過匿名F T P從g a t e d . c o r n e l l . e d u獲得,但這裏並沒有叫做g a t e d的系統,這僅是爲其他系統提供的別名。其他系統的規範名爲g a t e d . c o r n e l l . e d u。

sun % host -t cname gated.cornell.edu

gated.cornell.edu CNAMCOMET.CIT.CORNELL.EDU

這裏使用的-t選項來指明它是特定的查詢類型。

 

H I N F O 表示主機信息:包括說明主機 C P U和操作系統的兩個字符串。並非所有的站點均提供它們系統的 H I N F O記錄,並且提供的信息也可能不是最新的。

sun % host -t hinfo sun

sun.tuc.noao.edu HINFO Sun-4/25 Sun4.1.3

 

抓包分析

以下是telnet中請求www.baidu.com,DNS請求過程。

請求:


應答:


注意,這裏採用從telnet中訪問www.baidu.com,而沒有使用瀏覽器,這是因爲使用瀏覽器會在下載完www.baidu.com的首頁源碼後,發出更多的請求,會干擾這裏的學習和分析。

 

發佈了43 篇原創文章 · 獲贊 24 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章