|
Name Resolution (名稱解析, 名稱查詢)
接下來我們介紹名稱查詢運作時一些重要名詞或觀念
1. Resolver
相當於是 DNS server 的 client 端, 通常是以函式庫的方式被放在整套作業系統中, 各類的應用程式經由呼叫這個 resolver 函式庫可以很容易地向 DNS server 進行查詢, 得到所要的資料.
2. Root Name Server
在查詢資料時, 總是要有一個起點, 當一個 local DNS server 收到來自 client 端關於一個 domain name 的查詢, 這個 local DNS server 怎麼知道這個 domain name 的相關資料是記錄在 INTERNET 中的哪一個 DNS 上呢?
答案是向 root name server 尋問. root name server 記錄了各 top domain 分別是由哪些 DNS server 負責. 比如說要找 www.yohoo.com 時, root name server 會告訴 local DNS server 哪部 name server 負責 .com 這個 domain, 然後 local dns 再向負責 .com 的 name server 詢問關於 yohoo.com 是哪部 name server 在負責. 最後 local DNS 就可以向負責 yohoo.com 的 name server 問到有關 www.yohoo.com 的資料.
註: 考量 root name server 會被全世界的 DNS sever 詢問, 負擔很大, 在世界各地共有十多個root name server. 而每個 name server 軟體都附有一個文字檔, 其中記錄了這十多個世界知名的 root name server 的 IP 位址
3.Recursive Query
在上面介紹的過程中, DNS client 端只丟出一個詢問給 local DNS server, 然後 local DNS 就會不斷地查到答案出來為止, 最後把結果傳回來給 client, 這種查詢稱為 recursive query
上圖中 DNS client 端(resolver) 向 local DNS server 進行 recursive query, 查 girigri.gbrmpa.gov.au 的 IP. local DNS server 會由 root name server 開始問起, 依序找到負責 .au domain 的 DNS server, 負責 .gov.au domain 的 DNS server, 負責 gbrmpa.gov.au domain 的 DNS server, 最後在負責 gbrmpa.gov.au 的 DNS server 問到 girigri.gbrmpa.gov.au 的資料, 然後傳回給 DNS client (resolver).
4. Iterative Query
前面的介紹中, local DNS 對其它 DNS 發出的詢問, 都只是知道一個更進一步的線索, 然後發問者(local DNS)根據線索再去進一步找答案, 這種詢問方式稱為 iterative query
ps:
a.一般說來, resolver 對 local DNS server 都是 recursive query, 而 DNS server 之間的 query 多是iterative.
b.大部份的 DNS server 都可以接受 recursive 和 iterative 兩種 query 方式, 但是考量負載問題, root name server 只接受 iterative query.
5. DNS Caching
由前面的敘述我們可以了解由 resolver 發出一個 query 給 local DNS, 到最後 local DNS 把答案傳回來, 中間需要許多次的查詢, 為了節省這些反覆查尋的時間, DNS server 會把查到的結果偷偷暫存一陣子, 這麼一來當有其它機器發出相同詢問時, 就可以省下不少的時間.
舉例而言, 在一次詢問 www.ncku.edu.tw 的過程中, local DNS 上可以得知
a. 負責 .tw 的 name server IP
b. 負責 .edu.tw 的 name server IP
c. 負責 .ncku.edu.tw 的 name server IP
d. www.ncku.edu.tw 的 IP
除了有機器再次查詢 www.ncku.edu.tw 會變快外, 查詢和 a, b, c 相關 domain 的資料也會變快, 因為 local DNS 不必再從 root name server 一層層問下來.
ps: 當 local DNS 偷偷記下一些資料以便加速時, 萬一真正的資料有修改時怎麼辦呢? DNS server 針對它負責的 domain 資料有一個 TTL(time to leave)參數, 用來告訴其它 DNS 在 cache 其資料時, 資料只應該 cache 多久. 超過 TTL, 那個 cache 就要視為過期無效. |
|