DNS服務器原理
阿新 • • 發佈:2017-07-28
規劃 一般來說 區分 通訊協議 階層 from ... ima ace 19.1 什麽是DNS
主機名自動解析為 IP 就很重要!那就是 DNS。 19.1.1 用網絡主機名取得IP的歷史淵源 單一檔案處理上網的年代: /etc/hosts 利用某些特定的檔案將主機名與 IP 作一個對應, 如此一來,我們就可以透過主機名來取得該主機的 IP。 就是/etc/hosts 這個檔案的用途了 缺憾: 的 domain name 與 hostname 又該怎麽分?
例子:www.ksu.edu.tw;
19.1.2 DNS的主機名對應IP的查詢流程
簡單了解 FQDN 的 domain name 與 hostname 之後,接下來我們要談一談這個DNS 的:
(1)階層架構是怎樣?
(2)查詢原理是怎樣?
總是要先知道架構才能知道如何查詢主機名的!所以底下我們先來介紹一下整體的 DNS 階層架構。
DNS 的階層架構與 TLD
上面列子:將最上層到昆山科大 (ksu) 時,之間的各層繪制如下圖:
在整個 DNS 系統的最上方一定是 . (小數點) 這個 DNS 服務器 (稱為 root),最早以前它底下管理的就只有:
(1)com, edu, gov, mil, org, .net 這種特殊領域
(2)以國家為分類的第二層的主機名了
這兩者稱為 Top Level Domains (TLDs),頂級域名;
授權與分層負責
向上層ISP申請域名的授權例如:
臺灣地區最上層的領域名是以 .tw 為開頭,管理這個領域名的機器 IP 是在臺灣,但是 .tw 這部服務器必須向 root (.) 註冊領域名查詢授權才行
那麽每個國家之下記錄的主要下層有哪些領域呢?基本上就是原先 root 管理的那六大類。 不過,由於各層 DNS 都能管理自己轄下的主機名或子領域,
因此,我們的 .tw 可以自行規劃自己的子領域名喔! 例如目前臺灣 ISP 常提供的 .idv.tw 的個人網站就是一例。
每個上一層的 DNS 服務器所記錄的信息,其實只有其下一層的主機名而已! 至於再下一層,則直接『授權』給下層的某部主機來管理;
這樣設計的好處就是:
每部機器管理的只有下一層的 hostname 對應 IP 而已,所以減少了管理上的困擾!而下層 Client 端如果有問題,只要詢問上一層的 DNS server;
通過DNS查詢主機名IP的流程
DNS類似樹狀的主機名管理:
主機名自動解析為 IP 就很重要!那就是 DNS。 19.1.1 用網絡主機名取得IP的歷史淵源 單一檔案處理上網的年代: /etc/hosts 利用某些特定的檔案將主機名與 IP 作一個對應, 如此一來,我們就可以透過主機名來取得該主機的 IP。 就是/etc/hosts 這個檔案的用途了 缺憾:
- ip數量太多時,該檔案會大到不像
- 主機名與IP的對應無法自動於所有計算機內更新
分布式,階層式主機名管理架構:DNS系統 DNS(Domain Name System), 我們不需要知道主機的IP,只要知道該主機的名稱,就能夠輕易的連上該主機了。
- DNS 利用類似樹狀目錄的架構,將主機名的管理分配在不同層級的 DNS 服務器當中,經由分層管理, 所以每一部 DNS 服務器記憶的信息就不會很多
- 若有 IP 異動時也相當容易修改!因為你如果已經申請到主機名解析的授權, 那麽在你自己的 DNS服務器中,就能夠修改全世界都可以查詢到的主機名了!而不用透過上層 ISP 的維護呢! 自己動手當然是最快的
在上面的例子當中,由上向下數的第二層裏面,那個 .tw 是 domain name ,而 com,edu, gov 則是主機的名稱,而在這個主機的名稱之管理下,還有其他更小網域的主機,所以在第三層的時候,基本上,那個 edu.tw 就變成了 domain name 了!而昆山科大與成大的 ksu, ncku 則成為了 hostname . 以此類推,最後得到我們的主機那個 www 是主機名,而 domain name 是由ksu.edu.tw 那個名字所決定的!自然,我們的主機就是讓管理 ksu.edu.tw 這個domain name 的 DNS 服務器所管理的啰! 註意: 並不是以小數點 (.) 區分 domain name 與 hostname !某些時刻 domain name 所管理的 hostname 會含有小數點。
首先,當你在瀏覽器的網址列輸入 http://www.ksu.edu.tw 時,你的計算機就會依據相關設定 (在 Linux 底下就是利用 /etc/resolv.conf 這個檔案) 所提供的 DNS的 IP 去進行聯機查詢了。由於目前最常見的 DNS 服務器就屬 Hinet 的 168.95.1.1這個 DNS,所以我們就拿他來做例子 hinet 的這部服務器會這樣工作: 1. 收到用戶的查詢要求,先查看本身有沒有紀錄,若無則向 . 查詢:由於 DNS 是階層式的架構,每部主機都會管理自己轄下的主機名解譯而已。因為 hinet 並沒有管理臺灣學術網絡的權力, 因此就無法直接回報給客戶端。此時 168.95.1.1 就會向最頂層,也就是 . (root) 的服務器查詢相關 IP 信息。 2. 向最頂層的 . (root) 查詢:168.95.1.1 會主動的向 . 詢問 www.ksu.edu.tw 在哪裏呢?但是由於 . 只記錄了 .tw 的信息 (因為臺灣只有 .tw 向 . 註冊而已),此時 . 會告知『我是不知道這部主機的 IP 啦,不過,你應該向 .tw 去詢問才對,我這裏不管! 我跟你說 .tw 在哪裏吧!』 3. 向第二層的 .tw 服務器查詢:168.95.1.1 接著又到 .tw 去查詢,而該部機器管理的又僅有 .edu.tw, .com.tw, gov.tw... 那幾部主機,經過比對後發現我們要的是 .edu.tw 的網域,所以這個時候 .tw 又告訴 168.95.1.1 說:『你要去管理 .edu.tw 這個網域的主機那裏查詢,我有他的 IP !』 4. 向第三層的 .edu.tw 服務器查詢:同理可證, .edu.tw 只會告訴 168.95.1.1 ,應該要去 .ksu.edu.tw 進行查詢,這裏只能告知 .ksu.edu.tw 的 IP 而已。 5. 向第四層的 .ksu.edu.tw 服務器查詢:等到 168.95.1.1 找到 .ksu.edu.tw 之後, .ksu.edu.tw 說:『沒錯!這部主機名是我管理的~ 我跟你說他的 IP 是...所以此時 168.95.1.1 就能夠查到 www.ksu.edu.tw 的 IP 啰! 6. 記錄暫存內存並回報用戶: 查到了正確的 IP 後, 168.95.1.1 的 DNS 機器總不會在下次有人查詢www.ksu.edu.tw 的時候再跑一次這樣的流程吧! 很遠很累的!而且也很耗系統的資源與網絡的帶寬,所以呢, 168.95.1.1 這個 DNS 會很聰明的先記錄一份查詢的結果在自己的暫存內存當中,以方便響應下一次的相同要求啊! 最後則將結果回報給 client 端!當然啦,那個記憶在 cache 當中的數據,其實是有時間性的,當過了 DNS 設定記憶的時間 (通常可能是 24 小時),那麽該記錄就會被釋放喔! 整個分寸查詢的流程就是這樣,總是得要先經過 . 根來向下一層進行查詢,最終總是能得到答案的。 分層的好處是:
- 主機名修改的僅需要自己的DNS更動即可,不需要通知其他人。
- 只要主機名經過上層合法的DNS服務器設定,就可以在Internet上面被查詢到,這樣維護簡單,機動性也很高
- DNS服務器對主機名解析結果的快取時間
- 每次查詢到的結果都會儲存在 DNS 服務器的高速緩存中,以方便若下次有 相同需求的解析時,能夠快速的響應。通常是10分鐘到三天之內。
- 可持續向下授權(子領域名授權)
- 沒層只管當前層的子層地址在哪。
[[email protected] ~]# dig +trace www.ksu.edu.tw ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>>+trace www.ksu.edu.tw ;; global options: printcmd . 486278 IN NS a.root-servers.net. . 486278 IN NS b.root-servers.net. ....(底下省略).... # 上面的部分在追蹤 . 的服務器,可從 a ~ m.root-servers.net. ;; Received 500 bytes from 168.95.1.1#53(168.95.1.1) in 22 ms tw. 172800 IN NS ns.twnic.net. tw. 172800 IN NS a.dns.tw. tw. 172800 IN NS b.dns.tw. ....(底下省略).... # 上面的部分在追蹤 .tw. 的服務器,可從 a ~ h.dns.tw. 包括 ns.twnic.net. ;; Received 474 bytes from 192.33.4.12#53(c.root-servers.net) in 168 ms edu.tw. 86400 IN NS a.twnic.net.tw. edu.tw. 86400 IN NS b.twnic.net.tw. # 追蹤 .edu.tw. 的則有 7 部服務器 ;; Received 395 bytes from 192.83.166.11#53(ns.twnic.net) in 22 ms ksu.edu.tw. 86400 IN NS dns2.ksu.edu.tw. ksu.edu.tw. 86400 IN NS dns3.twaren.net. ksu.edu.tw. 86400 IN NS dns1.ksu.edu.tw. ;; Received 131 bytes from 192.83.166.9#53(a.twnic.net.tw) in 22 ms www.ksu.edu.tw. 3600 IN A 120.114.100.101 ksu.edu.tw. 3600 IN NS dns2.ksu.edu.tw. ksu.edu.tw. 3600 IN NS dns1.ksu.edu.tw. ksu.edu.tw. 3600 IN NS dns3.twaren.net. ;; Received 147 bytes from 120.114.150.1#53(dns2.ksu.edu.tw) in 14 ms
DNS 端口號:53; 這裏,DNS開始以udp傳輸,若未查到完整信息,則重新以TCP傳輸; 所以DNS,daemon,會同時啟動tcp,udp的port 53,; 19.1.3 合法DNS的關鍵:申請領域查詢授權 與其他服務器不同,DNS服務器的架設有合法與不合法之說。 向上層領域註冊取得合法的領域查詢授權 如果需要架設DNS,而且是可以連上Internet上面的DNS時,就必須要透過上層DNS服務器的授權。 所以, 要讓你的主機名對應 IP 且讓其他計算機都可以查詢的到,你有 兩種方式: 1. 上層 DNS 授權領域查詢權,讓你自己設定 DNS 服務器; 2. 直接請上層 DNS 服務器來幫你設定主機名對應! 擁有領域查詢權後,所有的主機名信息都以自己為準,與上層無關。 DNS,記錄的信息非常的多,重點有兩個:
- 記錄服務器所在的NS(NameServer)標誌
- 記錄主機名對應的A(Address)標誌
註冊的.vbird.org 記錄在ISP的DNS服務器名為dns.vbird.org,該筆記錄其實是NS,並非A。 雖然在 godaddy 服務器內有記錄一筆『要查詢 .vbird.org 時,請到dns.vbird.org (NS) 去查,這個管理者的 IP 是 140.116...』, 但是這筆記錄只是告訴我們要去下一個服務器找, 並不是最終的 A (IP Address) 的答案,所以還得要繼續往下找 (隨時記得圖 19.1-4 的查詢流程)。 此時,有幾種結果會導致dns.vbird.org的IP找不到,或最終IP與godaddy記錄的不同結果:
- dns.vbird.org 服務器掛點時
- 如果 dns.vbird.org 這部主機宕機,那麽在上圖顯示『查詢』箭頭的步驟會被中斷,因此就會出現『聯機不到dns.vbird.org 的 IP』的結果。
- dns.vbird.org 服務器內的數據庫忘記補上數據時
- 在自己的服務器數據庫中,忘記加上 dns.vbird.org 的記錄時,最終的結果還是會顯示『找不到該服務器的 IP』
- dns.vbird.org 服務器內的數據庫數據編寫不一致時
- 如果是在鳥哥自己服務器的數據庫內的 dns.vbird.org 所記錄的 IP 與godaddy 的不同,最終的結果會以鳥哥記錄的為準。
- 主機數量龐大
- 需要經常修改server名稱。
- 從主機名查詢到 IP 的流程稱為:正解
- 從 IP 反解析到主機名的流程稱為:反解
- 不管是正解還是反解,每個領域的記錄就是一個區域 (zone)
- SOA:就是開始驗證 (Start of Authority) 的縮寫,相關資料本章後續小節說明;
- NS:就是名稱服務器 (NameServer) 的縮寫,後面記錄的數據是 DNS 服務器的意思;
- A:就是地址 (Address) 的縮寫,後面記錄的是 IP 的對應 (最重要);
- SOA:就是開始驗證 (Start of Authority) 的縮寫,相關資料本章後續小節說明;
- NS:就是名稱服務器 (NameServer) 的縮寫,後面記錄的數據是 DNS 服務器的意思;
- PTR:就是指向 (PoinTeR) 的縮寫,後面記錄的數據就是反解到主機名啰
- 要管理員自己手動去修改與設定;並且重啟後才生效;
- 一般來說,我們說的DNS設定,就是指設定這種數據庫的類型
- 給slave的DNS提供數據庫內容
- 必須與master相互搭配
- 只支持一主多從
- 更改master之後,slave自動更新
- master主動告知
- Master 在修改了數據庫內容,並且加大數據庫序號後, 重新啟動 DNS 服務,那 master 會主動告知 slave 來更新數據庫,
- slave主動提出
- Slave 會定時的向 Master 察看數據庫的序號, 當發現 Master 數據庫的序號比 Slave 自己的序號還要大 (代表比較新),那麽 Slave 就會開始更新
DNS服務器原理