TCP/IP 與 Internet 網路:第十三章 網域名稱系統  上一頁           下一頁

 

翻轉工作室:粘添壽

 

13-5 DNS 協定運作

DNS 伺服器收到某一筆查詢要求卻無法提供服務時,或者客戶端向伺服器查詢卻得不到正確回應時,應該如何向其它伺服器查詢呢?這就是 DNS 系統的協定運作。記得我們談過,DNS 是一種分散處理系統,所有 DNS 系統上的資料是由全球的 DNS 伺服器共同所構成,每一網域區域(Domain Zone)(如 cu.edu.tw)都有一部專屬伺服器(如 linux-2.cu.edu.tw),來負責紀錄該區域內的名稱資料(反向或正向查詢資料),同時負責被查詢的工作(但也可能一部專屬伺服器負責多個網域區域)。由此可見,除非查詢到該資料所登錄的伺服器,否則將會得不到正確的答案(這也不一定)。因此,DNS 系統的查詢動作就顯得非常困難與複雜,但首先我們來看兩個基本的查詢動作,再來看伺服器之間如何運作。

13-4-1 遞迴查詢與反覆查詢

『遞迴查詢』(Recursive Query是當某一 DNS 伺服器收到查詢訊息後,而該筆資料並未登錄在伺服器上,這表示該伺服器必須向其它伺服器查詢。DNS 伺服器經由其它伺服器得知另一查詢地方,該伺服器再向另一部伺服器查詢,如此反覆而得到查詢資料的動作,稱之為遞迴查詢。另一方面,被此伺服器查詢到,而回應它到另一伺服器查詢的動作,稱之為『反覆查詢』(Iterative Query。簡單的說,反覆查詢的動作就是伺服器回應:『資料不在我這裡,請到另一地方查詢吧!』,如果經過多個伺服器都是同樣的回應,就如同一來一往的反覆動作一樣。

13-5-2 搜尋順序

瞭解遞迴查詢和反覆查詢動作之後,我們用圖 13-6 來探討當一伺服器接收到客戶端 Resolver 的查詢要求時,它如何來搜尋出應該到哪一個伺服器上查詢(資料所登錄位置)的動作。譬如 DNS 客戶端要求查詢 FQDN 名稱為 www.cu.edu.tw. IP 位址,而將該查詢要求傳送到特定的 DNS 伺服器上(DNS_A),所搜尋的次序如圖中的編號順序。首先,DNS_A 搜尋本身紀錄是否有該筆資料(包含 Cache Server),如果沒有便直接向根(.)伺服器查詢,根伺服器回應網域為 tw. 的伺服器位址(IP 位址)給 DNS_A,然後 DNS_A 再向 tw. 網域伺服器查詢,而得到網域為 edu.tw. 的伺服器位址。如此以下類推,DNS_A 得到 cu.edu.tw. 網域的專屬伺服器位址,便向它查詢而得到 www.cu.edu.tw 網域名稱的 IP 位址,再回應給 DNS 客戶端。

13-6 查詢順序

由這個搜尋次序我們可以看出,所指定的 DNS 伺服器(DNS_A)每發送一個查詢後,得到下一個網域的伺服器位址,再往下一個網域伺服器查詢,直到得到答案為止,因此,DNS_A 正扮演著『遞迴查詢』的動作。另外,其它伺服器只回應:『資料不在我這裡,請到另一地方查詢吧!』,而是共同扮演著『反覆查詢』的動作。

13-5-3 快取查詢

如果每一查詢都如同圖 13-6 的查詢順序,這將是一種耗時又耗力的動作,而 DNS 系統幾乎無法應用,還好每個 DNS 伺服器上都有快取伺服器,可以解決大部份的問題。我們可以發現原伺服器發出查詢的訊號都是『查詢 www.cu.edu.tw.,在查詢當中,如果有某部伺服器的快取伺服器上有登錄該筆資料,便可直接回應,而不用再搜尋下去。甚至在搜尋當中也有可能是跳躍的。譬如,詢問到 tw. 伺服器時,就可以得到 cu.edu.tw. 伺服器的位址,便可直接向 cu.edu.tw. 伺服器查詢,而不必再經由 edu.tw. 伺服器查詢。另一方面,DNS_A tw. 伺服器中得到 edu.tw. 伺服器位址後,便會記錄到快取伺服器上,下一次其它主機需要查詢 www.nsysu.edu.tw. IP 位址時,便直接向 edu.tw. 伺服器查詢即可,而不用到根伺服器查詢。

由此可見,快取伺服器扮演極重要的角色,我們絕大部份的查詢資料都是經由它得到的。當然,快取伺服器上的資料是經過查詢後所紀錄的,因此,當客戶查詢一個名不經傳的名稱,或者是第一次查詢該名稱,那可能真的要像圖 13-6 所示的搜尋順序了。但話又說回來,如果有一個 DNS 伺服器被許多客戶端指定,它的查詢機會非常的多,而它的快取伺服器上的紀錄也非常多,相對應的回應速度也非常快。當然這部名稱伺服器主機必須承擔非常重的工作負荷,因此,一般 ISP 公司都會指定一些特殊伺服器讓客戶使用,而 Internet 網路上也常會出現一些較有名氣的名稱伺服器,上面標明其查詢動作最快,任何客戶都可以指定它。

13-5-4 轉送服務

除了快取伺服器可以解決大部份的查詢問題,有一些名稱伺服系統也提供『轉送服務』『Forwarder功能(如 Microsoft 系統)。在有轉送服務的系統下,當資料不在原伺服器(指定伺服器)時,它並不直接向根伺服器查詢,而是向所指定轉送的伺服器查詢,如果在指定時間內沒有得到適當的回應時,再到根伺服器查詢。另外在 Unix/Linux 系統下,主機都可指定多部名稱伺服器(如 /etc/resolv.conf 設定)(Windows 系列也可以),當一部名稱伺服器無法提供資料時,便會轉向其它伺服器查詢,並按照優先次序搜尋,說實在的,要能真的查詢到根網域也是不簡單。

 

 

<GOTOP>