前一陣子給一個局做網路的培訓,有關於DNS的內容,linux下的bind與windows 2003 server的dns我都配置過,不過還真沒認真地總結過,於是查了點資料,結合平時的理解,寫了一個DNS的總結,相信對那些經常遇到DNS問題而困惑的人有所協助吧。 如果某個使用者結點希望獲得對應"DPT1.SEU.EDU.CN"的IP地址,該結點的處理動作如下: 1) 向本地DNS伺服器發送"解答"請求,為了提高工作效率,採用面向不需連線的資料報服務。如果本地DNS伺服器知道對應DPT1.SEU.EDU.CN的IP地址,則直接返回IP地址;否則,如果本地DNS伺服器知道對應SEU.EDU.CN的DNS的IP地址,則訪問SEU.EDU.CN的DNS,獲得DPT1.SEU.EDU.CN的DNS系統的IP地址;否則,如果本地DNS伺服器知道對應EDU.CN的DNS的IP地址,則訪問EDU.CN的DNS,獲得SEU.EDU.CN的DNS系統的IP地址;否則,如果本地DNS伺服器知道對應CN的DNS的IP地址,則訪問CN的DNS,獲得EDU.CN的DNS系統的IP地址;否則 2) 本地DNS系統向根DNS系統發送"解答"請求,根DNS系統返回"CN"的DNS系統的IP地址;
3) 本地DNS系統訪問CN的DNS,獲得EDU.CN的DNS系統的IP地址;
4) 本地DNS系統訪問EDU.CN的DNS,獲得SEU.EDU.CN的DNS系統的IP地址;
5) 本地DNS系統訪問SEU.EDU.CN的DNS,獲得DPT1.SEU.EDU.CN的DNS系統的IP地址;
6) 本地DNS系統向使用者結點返回對應DPT1.SEU.EDU.CN的IP地址。
細心的讀者也許會發現,整個地址的解答過程看起來非常繁瑣,為了得到一個IP地址,必須尋找多個網域名稱伺服器,除了效率之外,還可能存在其它的問題。
首先是根結點DNS伺服器可能會成為系統的瓶頸,因為,當本機伺服器無法解答IP地址時,總是訪問根結點伺服器。網際網路是那樣的大,具有無數的主機和使用者,每一時刻將會產生難以計數的地址查詢請求。為瞭解決這一問題,網際網路上設定許多互為備份的根結點DNS伺服器,使用者查詢本著就近訪問的原則。由於根結點伺服器維護的資訊是相對穩定的,這一措施是可行的,也在現實中被使用。實際使用中,為了避免每次對自己無法查到的請求轉寄到根伺服器和利用上級伺服器的緩衝,DNS伺服器還可以設定轉寄站。如果該DNS本身沒有對應記錄,就向轉寄站標記的那個DNS查詢,用得到
其次本地DNS伺服器的可靠性也是系統得以正常工作的關鍵,如果某個伺服器故障,上述的遞迴檢索將無法實現。為瞭解決這一問題,在每個域內設定了一個、甚至多個DNS伺服器,並將其中之一設定為主伺服器,其它的為次級伺服器。一旦主伺服器出現故障,使用者結點自動查詢次級伺服器。
同時,作為效能改進的一個措施是每個DNS伺服器和主機都維護一個緩衝裝置,暫時儲存檢索到的網域名稱/IP地址映射資訊,從而減少間接訪問DNS的次數。帶來的問題是緩衝資訊和原始資訊的一致性。因此在實用中,DNS返回的資訊內還包含了地址映射的生存期(Time_to_live)。該生存期以秒為單位計數,例如:一天為86400秒。生存期內的地址映射資訊被儲存,並在必要是被引用。