DNS原理和解析過程 (2)

DNS服務器所提供的服務是完成將主機名和域名轉換爲IP地址的工作。爲什麼需要將主機名和域名轉換爲IP地址的工作呢?這是因爲,當網絡上的 一臺客戶機訪問某一服務器上的資源時,用戶在瀏覽器地址欄中輸入的是便於識記的主機名和域名。而網絡上的計算機之間實現連接卻是通過每臺計算機在網絡中擁 有的惟一的IP地址來完成的,這樣就需要在用戶容易記憶的地址和計算機能夠識別的地址之間有一個解析,DNS服務器便充當了地址解析的重要角色。接下來我 就帶您走入DNS的世界,詳細瞭解DNS服務器的工作原理及其過程,希望能夠給各位朋友帶來一些幫助。
  瞭解DNS服務
  DNS是域名系統(Domain Name System)的縮寫,是一種組織域層次結構的計算機和網絡服務命名系統。當用戶在應用程序中輸入DNS名稱時,DNS服務可以將此名稱解析爲與此名稱相關的IP 地址信息。
  用戶在使用網絡服務時喜歡在瀏覽器的地址欄中輸入使用主機名和域名組成的名稱,如computer.bookshop.com,因爲,這樣的名 稱更容易被用戶記住。但是,計算機在網絡上是使用IP地址來通信的。爲了能夠實現網絡計算機之間通信,DNS服務器所提供的服務就是將用戶所使用的計算機 或服務名稱映射爲IP地址。
  DNS服務的工作過程
  當 DNS 客戶機需要查詢程序中使用的名稱時,它會查詢 DNS 服務器來解析該名稱。客戶機發送的每條查詢消息都包括3條信息,以指定服務器應回答的問題。
  ● 指定的 DNS 域名,表示爲完全合格的域名 (FQDN) 。
  ● 指定的查詢類型,它可根據類型指定資源記錄,或作爲查詢操作的專門類型。
  ● DNS域名的指定類別。
  對於DNS 服務器,它始終應指定爲 Internet 類別。例如,指定的名稱可以是計算機的完全合格的域名,如hosta.hello.company.com,並且指定的查詢類型用於通過該名稱搜索地址資 源記錄。系統將把DNS 查詢當作客戶機向服務器提出的兩部分問題,如“對於名爲 hostname.hello.company.com 的計算機,你有沒有地址資源記錄?”當客戶機從服務器接收應答時,它讀取並解釋應答的地址資源記錄,以瞭解它通過名稱提問的計算機的 IP 地址。
  DNS 查詢以各種不同的方式進行解析。客戶機有時也可通過使用從以前查詢獲得的緩存信息就地應答查詢。DNS 服務器可使用其自身的資源記錄信息緩存來應答查詢,也可代表請求客戶機來查詢或聯繫其他 DNS 服務器,以完全解析該名稱,並隨後將應答返回至客戶機。這個過程稱爲遞歸。
  另外,客戶機自己也可嘗試聯繫其他的 DNS 服務器來解析名稱。如果客戶機這麼做,它會使用基於服務器應答的獨立和附加的查詢,該過程稱作迭代。
  總之,DNS 的查詢過程按兩部分進行:首選,名稱查詢從客戶機開始並傳送至解析程序(DNS客戶服務)進行解析;其次,不能就地解析查詢時,可根據需要查詢DNS服務器來解析名稱。DNS 查詢的過程如下圖所示。

圖 DNS的查詢過程
  如查詢過程的初始步驟所示,DNS 域名由本機的程序使用。該請求隨後傳送至 DNS 客戶服務,以通過使用就地緩存的信息進行解析。如果可以解析查詢的名稱,則查詢將被應答,並且此過程完成。其中,本地
  解析程序的緩存可從以下2個可能的來源獲取名稱信息:
  ● 如果主機文件就地配置,則來自該文件的任何主機名稱到地址的映射都將在DNS 客戶服務啓動時預先加載到緩存中。
  ● 從以前DNS查詢應答的響應中獲取的資源記錄將被添加至緩存並保留一段時間。
  如果此查詢不匹配緩存中的項目,則解析過程繼續進行,客戶機查詢 DNS 服務器來解析名稱。
  接下來查詢 DNS 服務器,當本地的DNS不能就地解析查詢時,可根據需要查詢 DNS 服務器來解析名稱。如圖4-1所示,客戶機將查詢首選 DNS 服務器。在此過程中使用的實際服務器是從全局列表中選擇的。當 DNS 服務器接收到查詢時,首先檢查它能否根據在服務器的就地配置區域中獲取的資源記錄信息作出權威性的應答。如果查詢的名稱與本地區域信息中的相應資源記錄匹 配,則服務器作出權威性的應答,並且使用該信息來解析查詢的名稱。
  如果查詢的名稱沒有區域信息,則服務器檢查它能否通過本地緩存的先前查詢信息來解析名稱。如果從中發現匹配的信息,則服務器使用它應答查詢。接着,如果首選服務器可使用來自其緩存的肯定匹配響應來應答發出請求的客戶機,則此次查詢完成。
  如果查詢名稱在首選服務器中未發現來自緩存或區域信息的匹配應答,則查詢過程可繼續進行,使用遞歸來完全解析名稱,包括來自其他 DNS 服務器的支持,以幫助解析名稱。在默認情況下,DNS 客戶服務要求服務器在返回應答前使用遞歸過程來代表客戶機完全解析名稱。在大多數情況下,DNS 服務器的默認配置支持遞歸過程,如下圖所示。

圖4-2 遞歸解析過程
  爲了使 DNS 服務器正確執行,首先需要在DNS 域名空間內存放其他DNS服務器的一些有用的聯繫信息。該信息以根線索的形式提供,它是記錄初步資源的一個列表,可用來定位一些 DNS 服務器,這些服務器對 DNS 域名空間樹的根具有絕對控制權。根服務器對 DNS 域名空間樹中的根域和頂級域具有絕對控制權。DNS 服務器可通過使用根線索搜索根服務器來完成遞歸過程。
  例如,當客戶機查詢單個DNS服務器時,考慮使用遞歸過程來定位名稱 host.example.microsoft.com。此過程在 DNS 服務器和客戶機首次啓動,並且沒有可幫助解析名稱查詢的當地緩存信息時進行。
  首先,首選服務器分析全名並確定對於頂級域com具有絕對控制權的服務器的位置。隨後,對com DNS 服務器使用迭代查詢,以獲取microsoft.com服務器的參考信息。然後參考性應答從microsoft.com服務器傳送到 example.microsoft.com的 DNS 服務器。最後,與服務器 example.microsoft.com 聯繫上。因爲該服務器包括作爲其配置區域一部分的查詢名稱,所以,它向啓動遞歸的源服務器作出權威性的應答。當源服務器接收到表明已獲得對請求查詢的權威 性應答的響應時,它將此應答轉發給發出請求的客戶機,這樣,遞歸查詢過程就完成了。

在實際應用過程中可能會遇到DNS解析錯誤的問題,就是說當我們訪問一個域名時無法完成將其解析到IP地址的工作,而直接輸入網站IP卻可以正常訪問,這就是因爲DNS解析出現故障造成的。這個現象發生的機率比較大,所以本文將從零起步教給各位讀者一些基本的排除DNS解析故障的方法。

一、什麼是DNS解析故障?

一般來說像我們訪問的www.163.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.softer.com,假如不能訪問的話,那麼DNS解析應該是不能夠正常進行的。我們會收到DNS request timed out,timeout was 2 seconds的提示信息。這說明我們的計算機確實出現了DNS解析故障。

小提示:如果DNS解析正常的話,會反饋回正確的IP地址,例如筆者用www.sohu.com這個地址進行查詢解析,會得到name:sohu.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.1 www.ftedu.gov.cn”與“10.82.0.1 www.ftedu.gov.cn”兩個條目。

第六步:設置完畢後我們訪問www.ftedu.gov.cn時就會自動根據是在內網還是外網來解析了。

三、總結:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章