1. 程式人生 > >排除DNS解析故障方法 Windows系統名稱解析過程

排除DNS解析故障方法 Windows系統名稱解析過程

Windows系統名稱解析過程

在Windows系統中,名稱解析有兩種型別
一種是基於主機名稱的名稱解析,另一種是基於NetBios名稱的名稱解析。
這兩種型別的名稱解析順序是不一樣的,在具體說明兩種型別的名稱解析順序之前,先要理清主機名稱和NetBios名稱的概念。 那麼,主機名稱和NetBios名稱分別是什麼概念,兩者之間又有什麼異同!下面就這個問題做出解釋:
  我們知道,在Windows系統中,有兩種名稱解析服務,分別是DNS和WINS名稱解析服務,其中DNS中使用的是主機名稱,WINS中使用的是NetBios名稱。兩種名稱最直觀的區別是:NetBios名稱沒有層次結構,是一種平坦名稱(flat Name),NetBios名稱最大長度為16個字元,可以包含空格,但不能包括以下字元://[]":;|<>+=,?*,不包含".",形如:Alligator,而主機名稱是具有層次結構的名稱,最大長度為255個字元,形如:Alligator.51Cto.com。
預設情況下,Windows系統中用Hosts檔案來儲存由IP地址和主機名稱組成的靜態查詢表,用Lmhosts檔案來儲存由IP地址和NetBios名稱組成的靜態查詢表。兩個檔案均儲存在%SystemRoot%/System32/drivers/etc目錄下,分別用於DNS和Wins名稱解析。
   明確了主機名稱和NetBios名稱後,接下來一個問題是,在一次名稱解析過程中,計算機是如何選擇以哪一種方式進行解析呢?
   答案是依據應用程式所使用的網路協議。如果應用層使用是基於微軟內部使用的SMB協議,那麼就會對要解析的名稱進行分析。如果要解析的名稱是平坦名稱,就使用NetBios名稱解析,如果名稱中包括".",或者長度超過16個字元,就會使用DNS名稱解析。一句話,就是先分析名稱,然後再決定按哪種方式解析。而對於通用的基於Windows Socket的應用程式,會並行發起基於DNS的名稱解析和基於NetBios的名稱解析,但以DNS名稱解析為主。
   同時,對於DNS名稱解析和Wins名稱解析,兩者的解析順序也是不同的。
DNS名稱解析過程是:
    步驟1:使用者輸入一個名稱地址
    步驟2:PC首先查詢這個名稱是不是就是本機
    步驟3:讀本機的Hosts檔案
    步驟4:查詢DNS伺服器
    步驟5:查詢NetBios名稱快取
    步驟6:查詢Wins伺服器
    步驟7:廣播
    步驟8:查詢LMHosts檔案

NetBios名稱解析過程:
    步驟1:使用者輸入一個名稱地址
    步驟2:查詢NetBios名稱快取
    步驟3:查詢Wins伺服器 
    步驟4:三次廣播 
    步驟5:查詢LMHosts檔案 
    步驟6:讀本機的Hosts檔案
    步驟7:查詢DNS伺服器
    注意:對於上述步驟,如果中間某一步查詢成功,解析過程立即結束,否則進入下一步。
           另外,對於NetBios名稱解析過程的最後一步,平坦名稱是不能直接提交給DNS伺服器。在提交給DNS伺服器之前,要將平坦名稱轉換為DNS結構的名稱。
    具體動作如下:
           如果名稱中沒有一個包含“.",且名稱長度少於16個字元,客戶端會將計算機的DNS字尾附加到名稱上,再將其傳送給DNS伺服器解析。
  
對於域使用者來說,具體附加的DNS字尾是可以在”我的電腦“屬性中看到,

對於工作組使用者來說,可以手動在”網路連線“TCP/IP屬性的高階DNS設定中新增要附加的DNS字尾

如果名稱中包含“.",但沒有最未尾的".",解析器會追加未尾的”.",並將其傳送給DNS伺服器,如果查詢失敗,解析器會追加完整的域名字尾,再將傳送給DNS伺服器。如果第一個DNS字尾無法獲得主機記錄,解析器會依次將事先配置好的所有備用的DNS字尾追加後傳送給DNS伺服器進行查詢。
          如果所有的備用字尾查詢都失敗,解析器就會停止查詢,返回提示資訊!

一、什麼是DNS解析故障?
  一般來說像我們訪問的www.ccidnet.com,這些地址都叫做域名,而眾所周知網路中的任何一個主機都是IP地址來標識的,也就是說只有知道了這個站點的IP地址才能夠成功實現訪問操作。
  不過由於IP地址資訊不太好記憶,所以網路中出現了域名這個名字,在訪問時我們這需要輸入這個好記憶的域名即可,網路中會存在著自動將相應的域名解析成IP地址的伺服器,這就是DNS伺服器。能夠實現DNS解析功能的機器可以是自己的計算機也可以是網路中的一臺計算機,不過當DNS解析出現錯誤,例如把一個域名解析成一個錯誤的IP地址,或者根本不知道某個域名對應的IP地址是什麼時,我們就無法通過域名訪問相應的站點了,這就是DNS解析故障。
  出現DNS解析故障最大的症狀就是訪問站點對應的IP地址沒有問題,然而訪問他的域名就會出現錯誤。

  二、如何解決DNS解析故障:
  當我們的計算機出現了DNS解析故障後不要著急,解決的方法也很簡單。
  (1)用nslookup來判斷是否真的是DNS解析故障:
  要想百分之百判斷是否為DNS解析故障就需要通過系統自帶的NSLOOKUP來解決了。
  第一步:確認自己的系統是windows 2000和windows xp以上作業系統,然後通過“開始->執行->輸入CMD”後回車進入命令列模式。
  第二步:輸入nslookup命令後回車,將進入DNS解析查詢介面。
  第三步:命令列視窗中會顯示出當前系統所使用的DNS伺服器地址,例如筆者的DNS伺服器IP為202.106.0.20。
  第四步:接下來輸入你無法訪問的站點對應的域名。例如筆者輸入www.ccidnet.com,假如不能訪問的話,那麼DNS解析應該是不能夠正常進行的。我們會收到DNS request timed out,timeout was 2 seconds的提示資訊。這說明我們的計算機確實出現了DNS解析故障。
  小提示:如果DNS解析正常的話,會反饋回正確的IP地址,例如筆者用www.ccidnet.com這個地址進行查詢解析,會得到name:ciidnet.com,addresses:61.135.133.103,61.135.133.104的資訊。
  (2)查詢DNS伺服器工作是否正常:
  這時候我們就要看看自己計算機使用的DNS地址是多少了,並且查詢他的執行情況。
  第一步:確認自己的系統是windows 2000和windows xp以上作業系統,然後通過“開始->執行->輸入CMD”後回車進入命令列模式。
  第二步:輸入ipconfig /all命令來查詢網路引數。
  第三步:在ipconfig /all顯示資訊中我們能夠看到一個地方寫著DNS SERVERS,這個就是我們的DNS伺服器地址。例如筆者的是202.106.0.20和202.106.46.151。從這個地址可以看出是個外網地址,如果使用外網DNS出現解析錯誤時,我們可以更換一個其他的DNS伺服器地址即可解決問題。
  第四步:如果在DNS伺服器處顯示的是自己公司的內部網路地址,那麼說明你們公司的DNS解析工作是交給公司內部的DNS伺服器來完成的,這時我們需要檢查這個DNS伺服器,在DNS伺服器上進行nslookup操作看是否可以正常解析。解決DNS伺服器上的DNS服務故障,一般來說問題也能夠解決。
  (3)清除DNS快取資訊法:
  當計算機對域名訪問時並不是每次訪問都需要向DNS伺服器尋求幫助的,一般來說當解析工作完成一次後,該解析條目會儲存在計算機的DNS快取列表中,如果這時DNS解析出現更改變動的話,由於DNS快取列表資訊沒有改變,在計算機對該域名訪問時仍然不會連線DNS伺服器獲取最新解析資訊,會根據自己計算機上儲存的快取對應關係來解析,這樣就會出現DNS解析故障。這時我們應該通過清除DNS快取的命令來解決故障。
  第一步:通過“開始->執行->輸入CMD”進入命令列模式。
  第二步:在命令列模式中我們可以看到在ipconfig /?中有一個名為/flushdns的引數,這個就是清除DNS快取資訊的命令。
  第三步:執行ipconfig /flushdns命令,當出現“successfully flushed the dns resolver cache”的提示時就說明當前計算機的快取資訊已經被成功清除。
  第四步:接下來我們再訪問域名時,就會到DNS伺服器上獲取最新解析地址,再也不會出現因為以前的快取造成解析錯誤故障了。
  (4)修改HOSTS檔案法:
  修改HOSTS法就是把HOSTS檔案中的DNS解析對應關係進行修改,從而實現正確解析的目的。因為在本地計算機訪問某域名時會首先檢視本地系統中的HOSTS檔案,HOSTS檔案中的解析關係優先順序大於DNS伺服器上的解析關係。
  這樣當我們希望把某個域名與某IP地址繫結的話,就可以通過在HOSTS檔案中新增解析條目來實現。
  第一步:通過“開始->搜尋”,然後查詢名叫hosts的檔案。
  第二步:當然對於已經知道他的路徑的讀者可以直接進入c:/windows/system32/drivers/etc目錄中找到HOSTS檔案。如果你的系統是windows 2000,那麼應該到c:/winnt/system32/drivers/etc目錄中尋找。
  第三步:雙擊HOSTS檔案,然後選擇用“記事本”程式將其開啟。
  第四步:之後我們就會看到HOSTS檔案的所有內容了,預設情況下只有一行內容“127.0.0.1 localhost”。(其他前面帶有#的行都不是真正的內容,只是幫助資訊而已)
  第五步:將你希望進行DNS解析的條目新增到HOSTS檔案中,具體格式是先寫該域名對應的IP地址,然後空格接域名資訊。例如筆者添加了“211.153.80.1www.ccidnet.com”與“10.82.0.1 www.ccidnet.com”兩個條目。
  第六步:設定完畢後我們訪問www.ccidnet.com時就會自動根據是在內網還是外網來解析了。

  三、總結:
  通過上面介紹的四個步驟,我們就可以解決大部分DNS解析問題了,這幾個方法中前三個是循序漸進的一步步解決DNS解析故障,而最後一個修改HOSTS檔案則是在實在沒有辦法的時候,一種權宜之計。當然不管是通過哪種方法,我們都可以解決因為DNS解析錯誤帶來的網路故障。