2014-10-20 95 views
1

我正在學習有關DNS的知識,我試圖瞭解非遞歸解析器/服務器如何響應空響應。瞭解DNS響應標頭信息

我的DNS的理解基本上是:

如果服務器返回一個非權威性響應時,它通常會提供域名服務器(該NSCOUNT),你可以協商,找到權威的響應列表。

但是,如果DNS服務器什麼都不返回會發生什麼?如在 - 只是與ANCOUNT = 0NSCOUNT = 0ARCOUNT = 0響應標題?

例如,如果我查詢谷歌的免費DNS服務器(8.8.8.8),我問它來解決「google.com」,以及遞歸位沒有設置,這是我得到的迴應:

+---------------------------------------------------------------------------+ 
| 25550 | QR: 1 | OP: 00 | AA: 0 | TC: 0 | RD: 0 | RA: 1 | Z: 0 | RCODE: 00 | 
+---------------------------------------------------------------------------+ 
| QDCOUNT:  1, ANCOUNT:  0, NSCOUNT:  0, ARCOUNT:  0  | 
+---------------------------------------------------------------------------+ 

所以基本上,它除了我的原始查詢外沒有任何回報,它告訴我遞歸是可用的。

在這種情況下,查詢應該如何繼續(假設我們不只是使用請求服務器來使用遞歸)。唯一的辦法就是聯繫其中一臺頂級服務器嗎?或者,以另一種方式提出我的問題,Google的DNS服務器怎麼沒有給我返回一個我可以諮詢的域名服務器列表(爲什麼NSCOUNT 0?)?

回答

2

當你說「不行」時,那麼谷歌的NS沒有遞歸。由於它們不是google.com的權威名稱服務器,因此它們沒有提供任何響應。這是正常的,可接受的行爲。

您只能使用「recurse」位設置請求來計算google.com的A記錄。其他方法是:

  1. 從根服務器中查找NS for com。。
  2. 從com NS的其中一個找到google的google.com。
  3. 從gooogle.com NS找到google.com的A記錄。

基本上,你要做遞歸域名服務器應該爲你做的事情。 注意:遞歸NS可以使用它的緩存來獲得一個沒有實際查詢的響應,基於記錄的TTL(當然如果你設置了遞歸位( - :

1

只有權威服務器應該在響應的權限部分包含NS記錄。

Google 8.8.8.8服務器是而不是權威的google.com,你問他們不要遞解,所以他們沒有。

這是一個真正的DNS客戶端不會發送給他們的異常查詢,因此他們對「無數據/無錯誤」(RCODE == 0, ANCOUNT == 0)的響應是可以接受的。