各位先進,小弟最近在準備DNS的報告,對於DNS運作方式有點小疑惑,就是為什麼
在PC Client查詢Local DNS的時候,是會選擇用Recursive的方式,為什麼不用Iterative的方式,接著DNS Server之間互相查詢的時候,卻又選擇Iterative,難道DNS Server互相查詢的時候,用Recursive不好嗎?
我記得的原因是: 1. 效率 2. 管理.
效率的部份是:
a. Server 通常有 Cache 功能, 查詢後會暫存查過的記錄, 而且可以透過設定合適的 Forwarder , 提高查詢效率.
b. Client 百百種, 既然 Server 已經有的功能, Client 只要向指定的主機查詢.
例如: 如果在網路很慢的環境, 在網路比較快的 Internet 上有一台 DNS Server (假如叫 168.95.x.x :p ) ; Client 使用 Recursive 方式向 DNS Server 發出查詢要求, 就只需要一次查詢的連線, 等 DNS Server 回應即可, 而 DNS Server 再去查到真正的資料並快取下來.
管理:
因為 Domain Name 是授權的架構, 所以各主機只能處理自己有授權的部份, 所以要在美國查 xxx.com.tw , 由於 .tw 屬於 TWNIC 管理, 所以美國的 DNS Server , 就需要先問 ROOT Servers (幾台在授權最高層的主機), ROOT Servers 才回應是 TWNIC Servers , 美國的 DNS Server 再問 TWNIC Servers , 這樣分層授權管理, 才能在 DNS 更新頻繁的特性下, 能正確查到記錄.
如果 DNS Server 間, 用 Recursive 方式, 只適合 Forwarder , 常規的 DNS Server , 必須是依授權順序來查詢, 所以不適合用 Recursive .
用搞笑一點的講法:
在PC Client查詢Local DNS的時候...用戶端是很懶的,丟出問題後就只想得到結果,所以選用Recursive的方式
在DNS Server之間互相查詢的時候...伺服器是認命的,受人之託只好拚命找答案,所以選用Iterative的方式
用戶端為什麼不能勤勞點,使用Iterative的方式呢?如果真的這樣做,那就像民眾看病通通都先跑到醫學中心,再轉到地區醫院,才到診所...會造成(頻寬)浪費
DNS Server幹嘛那麼認命,就找個替死鬼幫忙跑腿(Recursive)就好...那被找上的DNS Server就該死呀,就沒人要架DNS Server了
舉例有點不倫不類,輕鬆一下咩 XD