TCPIP詳解-卷一-協(xié)議-14.3-DNS的報(bào)文格式
14.3DNS 的報(bào)文格式DNS 定義了一個(gè)用于查詢和響應(yīng)的報(bào)文格式。圖14-3顯示這個(gè)報(bào)文的總體格式。標(biāo)識(shí)問題數(shù)授權(quán)資源記錄數(shù) 標(biāo)志 資源記錄數(shù) 額外資源記錄數(shù)查詢問題回答(資 源記錄數(shù)可變 )授權(quán)
14.3DNS 的報(bào)文格式
DNS 定義了一個(gè)用于查詢和響應(yīng)的報(bào)文格式。圖14-3顯示這個(gè)報(bào)文的總體格式。
標(biāo)識(shí)
問題數(shù)
授權(quán)資源記錄數(shù) 標(biāo)志 資源記錄數(shù) 額外資源記錄數(shù)
查詢問題
回答
(資 源記錄數(shù)可變 )
授權(quán)
( ) 資源記錄數(shù)可變
額外信息
( 資源記錄數(shù)可變) 12字 節(jié)
圖14-3DNS 查詢和響應(yīng)的一般格式
這個(gè)報(bào)文由12字節(jié)長的首部和4個(gè)長度可變的字段組成。
標(biāo)識(shí)字段由客戶程序設(shè)置并由服務(wù)器返回結(jié)果。客戶程序通過它來確定響應(yīng)與查詢是否匹配。
16bit 的標(biāo)志字段被劃分為若干子字段,如圖14-4所示。
圖14-4DNS 報(bào)文首部中的標(biāo)志字段
我們從最左位開始依次介紹各子字段:
? QR 是1bit 字段:0表示查詢報(bào)文,1表示響應(yīng)報(bào)文。
? opcode 是一個(gè)4bit 字段:通常值為0(標(biāo)準(zhǔn)查詢),其他值為1(反向查詢)和2(服務(wù)器狀態(tài)請(qǐng)求)。 ? AA 是1bit 標(biāo)志,表示“授權(quán)回答(authoritativeanswer)”。該名字服務(wù)器是授權(quán)于該域的。
? TC 是1bit 字段,表示“可截?cái)嗟?truncated)”。使用UDP 時(shí),它表示當(dāng)應(yīng)答的總長度超過512字節(jié)時(shí),只返回前512個(gè)字節(jié)。
? RD 是1bit 字段表示“期望遞歸(recursiondesired )”。該比特能在一個(gè)查詢中設(shè)置,并在響應(yīng)中返回。這個(gè)標(biāo)志告訴名字服務(wù)器必須處理這個(gè)查詢,也稱為一個(gè)遞歸查詢。如果該位為0,且被請(qǐng)求的名字服務(wù)器沒有一個(gè)授權(quán)回答,它就返回一個(gè)能解答該查詢的其他名字服務(wù)器列表,這稱為迭代查詢。在后面的例子中,我們將看到這兩種類型查詢的例子。
? RA 是1bit 字段,表示“可用遞歸”。如果名字服務(wù)器支持遞歸查詢,則在響應(yīng)中將該比特設(shè)置為1。在后面的例子中可看到大多數(shù)名字服務(wù)器都提供遞歸查詢,除了某些根服務(wù)器。
? 隨后的3bit 字段必須為0。
? rcode 是一個(gè)4bit 的返回碼字段。通常的值為0(沒有差錯(cuò))和3(名字差錯(cuò))。名字差錯(cuò)只有從一個(gè)授權(quán)名字服務(wù)器上返回,它表示在查詢中制定的域名不存在。
隨后的4個(gè)16bit 字段說明最后4個(gè)變長字段中包含的條目數(shù)。對(duì)于查詢報(bào)文,問題
(question)數(shù)通常是1,而其他3項(xiàng)則均為0。類似地,對(duì)于應(yīng)答報(bào)文,回答數(shù)至少是1,剩下的兩項(xiàng)可以是0或非0。
14.3.1DNS 查詢報(bào)文中的問題部分
問題部分中每個(gè)問題的格式如圖14-5所示,通常只有一個(gè)問題。
0 15 16
查詢名
查詢類型 查詢類 31
圖14-5DNS 查詢報(bào)文中問題部分的格式
查詢名是要查找的名字,它是一個(gè)或多個(gè)標(biāo)識(shí)符的序列。每個(gè)標(biāo)識(shí)符以首字節(jié)的計(jì)數(shù)值來說明隨后標(biāo)識(shí)符的字節(jié)長度,每個(gè)名字以最后字節(jié)為0結(jié)束,長度為0的標(biāo)識(shí)符是根標(biāo)識(shí)符。計(jì)數(shù)字節(jié)的值必須是0~63的數(shù),因?yàn)闃?biāo)識(shí)符的最大長度僅為63(在本節(jié)的后面我們將看到計(jì)數(shù)字節(jié)的最高兩比特為1,即值192~255,將用于壓縮格式)。不像我們已經(jīng)看到的許多其他報(bào)文格式,該字段無需以整32bit 邊界結(jié)束,即無需填充字節(jié)。
圖14-6顯示了如何存儲(chǔ)域名gemini.tuc.noao.edu 。
計(jì)數(shù) 計(jì)數(shù) 計(jì)數(shù) 計(jì)數(shù) 計(jì)數(shù)
圖14-6域名gemini.tuc.noao.edu 的表示
每個(gè)問題有一個(gè)查詢類型,而每個(gè)響應(yīng)(也稱一個(gè)資源記錄,我們下面將談到)也有一個(gè)類型。大約有20個(gè)不同的類型值,其中的一些目前已經(jīng)過時(shí)。圖14-7顯示了其中的一些值。
查詢類型是類型的一個(gè)超集(superset):圖中顯示的類型值中只有兩個(gè)能用于查詢類型。
名數(shù)描類型?
IP 地址 名字服務(wù)器 規(guī)范名稱
指針記錄
主機(jī)信息
郵件交換記錄 查詢 類型
或 對(duì)區(qū)域轉(zhuǎn)換的請(qǐng)求
對(duì)所有記錄的請(qǐng)求
圖14-7DNS 問題和響應(yīng)的類型值和查詢類型值
最常用的查詢類型是A 類型,表示期望獲得查詢名的IP 地址。一個(gè)PTR 查詢則請(qǐng)求獲得一個(gè)IP 地址對(duì)應(yīng)的域名。這是一個(gè)指針查詢,我們將在14.5節(jié)介紹。其他的查詢類型將在14.6節(jié)介紹。
查詢類通常是1,指互聯(lián)網(wǎng)地址(某些站點(diǎn)也支持其他非IP 地址)。
14.3.2DNS 響應(yīng)報(bào)文中的資源記錄部分
DNS 報(bào)文中最后的三個(gè)字段,回答字段、授權(quán)字段和附加信息字段,均采用一種稱為資源記錄RR (ResourceRecord )的相同格式。圖14-8顯示了資源記錄的格式。
域名
類型
生存時(shí)間
資源數(shù)據(jù)長度
資源數(shù)據(jù) 類
圖14-8DNS 資源記錄格式
域名是記錄中資源數(shù)據(jù)對(duì)應(yīng)的名字。它的格式和前面介紹的查詢名字段格式(圖14-6)相同。
類型說明RR 的類型碼。它的值和前面介紹的查詢類型值是一樣的。類通常為1,指
Internet 數(shù)據(jù)。
生存時(shí)間字段是客戶程序保留該資源記錄的秒數(shù)。資源記錄通常的生存時(shí)間值為2天。
資源數(shù)據(jù)長度說明資源數(shù)據(jù)的數(shù)量。該數(shù)據(jù)的格式依賴于類型字段的值。對(duì)于類型1(A 記錄)資源數(shù)據(jù)是4字節(jié)的IP 地址。
現(xiàn)在已經(jīng)介紹了DNS 查詢和響應(yīng)的基本格式,我們將使用tcpdump 程序來觀察具體的交換過程。
,