DNS 分為 Client 和 Server,Client 扮演發問的角色,也就是問 Server 一個 DomainName,而 Server 必須要回答此 DomainName 的真正 IP 地址,DNS 是怎麼來作名稱解析的?
DNS 的工作原理
DNS 分為 Client 和 Server,Client 扮演發問的角色,也就是問 Server 一個 DomainName,而 Server 必須要回答此 DomainName 的真正 IP 地址。而當地的 DNS 先會查自己的資料庫。如果自己的資料庫沒有,則會往該 DNS 上所設的的 DNS 詢問,依此得到答案之 後,將收到的答案存起來,並回答客户。
DNS 服務器會根據不同的授權區 (Zone),記錄所屬該網域下的各名稱資料,這個資料包括網域下的次網域名稱及主機名稱。
在每一個名稱服務器中都有一個快取緩存區 (Cache),這個快取緩存區的主要目的是將該名稱服務器所查詢出來的名稱及相對的 IP 地址記錄快取緩存區 中,這樣當下一次還有另外一個客户端到次服務器上去查詢相同的名稱時,服務器就不用在到別台主機上去尋找,而直接可以從緩存區中找到該筆名稱記錄資料,傳 回給客户端,加速客户端對名稱查詢的速度。例如:
當 DNS 客户端向指定的 DNS 服務器查詢網際網路上的某一台主機名稱 DNS 服務器會在該資料庫中找尋用户所指定的名稱如果沒有,該服務器會先在自己的 快取緩存區中查詢有無該筆紀錄,如果找到該筆名稱記錄後,會從 DNS 服務器直接將所對應到的 IP 地址傳回給客户端,如果名稱服務器在資料記錄查不到且快取 緩存區中也沒有時,服務器首先會才會向別的名稱服務器查詢所要的名稱。例如:
DNS 客户端向指定的 DNS 服務器查詢網際網路上某台主機名稱,當 DNS 服務器在該資料記錄找不到用户所指定的名稱時,會轉向該服務器的快取緩存區找 尋是否有該資料,當快取緩存區也找不到時,會向最接近的名稱服務器去要求幫忙找尋該名稱的 IP 地址,在另一台服務器上也有相同的動作的查詢,當查詢到後會 回覆原本要求查詢的服務器,該 DNS 服務器在接收到另一台 DNS 服務器查詢的結果後,先將所查詢到的主機名稱及對應 IP 地址記錄到快取緩存區中,最後在將 所查詢到的結果回覆給客户端。
範例
我們舉例説明,假設我們要查詢網際網路上的一個名稱為 www.test.com.cn,從此名稱我們知道此部主機在中國 CN,而且要找的組織名稱 test.com.cn 此網域下的 www 主機,以下為名稱解析過程的每一步驟。
《 Step1 》在 DNS 的客户端 (Reslover) 鍵入查詢主機的指令,如:
c:\pingwww.test.com.cn
pingingwww.test.com.cn 【 192.72.80.36 】 with32bytesofdata
replyfrom192.72.80.36bytestime<10msttl253 《 Step2 》而被指定的 DNS 服務器先行查詢是否屬於該網域下的主機名稱,如果查出改主機名稱並不屬於該網域範圍,之後會再查詢快取緩存區的紀錄資料,查是否有此機名稱。 《 Step3 》查詢後發現緩存區中沒有此紀錄資料,會取得一台根網域的其中一台服務器,發出説要找 www.test.com.cn 的 Request 。 《 Step4 》在根網域中,向 RootNameServer 詢問,RootNameServer 記錄了各 TopDomain 分別是由哪些 DNSServer 負責,所以他會響應最接近的 NameServer 為控制 CN 網域的 DNS 伺服主機。 《 Step5 》 RootNameServer 已告訴 LocalDNSServer 哪部 NameServer 負責.cn 這個 Domain,然後 LocalDNS 再向負責發出找尋 www.test.com.cn 的名稱 Request 。 《 Step6 》在.cn 這個網域中,被指定的 DNS 服務器在本機上沒有找到此名稱的的紀錄,所以會響應原本發出查詢要求的 DNS 服務器説最近的服務器在哪裏? 他會回應最近的主機為控制 com.cn 網域的 DNS 伺服主機。 《 Step7 》原本被查詢的 DNS 服務器主機,收到繼續查詢的 IP 位置後,會再向 com.cn 的網域的 DNSServer 發出尋找 www.test.com.cn 名稱搜尋的要求。 《 Step8 》 com.cn 的網域中,被指定的 DNSServer 在本機上沒有找到此名稱的記錄,所以會回覆查詢要求的 DNSServer 告訴他最接近的服務器在哪裏? 他就回應最接近為控制 test.com.cn 的網域的 DNS 主機。 《 Step9 》原本被查詢的 DNSServer,在接收到應繼續查詢的位置,在向 test.com.cn 網域的 DNSServer 發出尋找 www.test.com.cn 的要求,最後會在 test.com.cn 的網域的 DNSServer 找到 www.test.com.cn 此主機的 IP 。 《 Step10 》所以原本發出查詢要求的 DNS 服務器,再接收到查詢結果的 IP 位置後,響應回給原查詢名稱的 DNS 客户端。 兩種真正 DNS 的查詢模式 有兩種詢問原理,分為 Recursive 和 Interactive 兩種。前者是由 DNS 代理去問,問的方法是用 Interactive 方式,後者是由 本機直接做 Interactive 式的詢問。由上例可以看出,我們一般查詢名稱的過程中,實際上這兩種查詢模式都是交互存在着的。 遞歸式 (Recursive):DNS 客户端向 DNSServer 的查詢模式,這種方式是將要查詢的封包送出去問,就等待正確名稱的正確響應,這種方式只處理響應回來的封包是否是正確響應或是説是找不到該名稱的錯誤訊息。 交談式 (Interactive):DNSServer 間的查詢模式,由 Client 端或是 DNSServer 上所發出去問,這種方式送封包出去問, 所響應回來的資料不一定是最後正確的名稱位置,但也不是如上所説的響應回來是錯誤訊息,他響應回來告訴你最接近的 IP 位置,然後再到此最接近的 IP 上去尋 找所要解析的名稱,反覆動作直到找到正確位置。