Learning Objectives
- 說明網域名稱的階層(根、TLD、第二層)與「區域由權威伺服器負責」的分工
- 分辨遞迴查詢與反覆查詢,說明遞迴解析器如何從根伺服器一路問到權威伺服器
- 說明 TTL 與快取怎麼減少查詢,以及修改記錄後為什麼要等一段時間才生效
- 分辨 A、AAAA、CNAME、MX、NS、TXT 記錄的用途
- 說明 hosts 檔的作用,並用 nslookup、ping 位址與 ping 名稱判斷問題是不是出在 DNS
名稱和位址之間的那一步
你在瀏覽器輸入 www.club.tw,但封包上要寫的是 IP 位址。把名稱換成位址的服務就是 DNS(Domain Name System)。
計算機概論軌第 31 課〈網域名稱與 DNS〉介紹過它的用途;這一課往下看一層:問題實際上被誰、依什麼順序回答。
DNS 解決的問題很大:網際網路上有數億個名稱,每天都有新增、修改和刪除,不可能放在同一台伺服器上。 所以 DNS 做成一個分散式、有階層的資料庫:
| 層級 | 例子 | 由誰負責 |
|---|---|---|
| 根(root) | 名稱最後面那個看不見的點 . |
根伺服器,只知道每個頂級網域交給誰 |
| 頂級網域(TLD) | tw、com、org |
TLD 伺服器,只知道每個第二層網域交給誰 |
| 第二層網域 | club.tw、example.com |
網域擁有者指定的權威伺服器(authoritative server) |
| 子網域與主機名稱 | www.club.tw、mail.club.tw |
通常也由同一台權威伺服器回答 |
名稱從右往左讀,越往右層級越高。完整的寫法其實最後有一個點:www.club.tw.,那個點就是根。
每一層只負責自己那一段,把底下的部分委派(delegate)給別人,委派的方式就是 NS 記錄:「club.tw 請去問 ns1.club.tw」。
一段由同一個權威伺服器管理的名稱範圍叫做一個區域(zone)。
根伺服器一共有 13 組名稱(a.root-servers.net 到 m.root-servers.net),由 12 個組織營運; 每一組名稱背後都是分散在世界各地的許多台主機,不是真的只有 13 台機器。
遞迴查詢與反覆查詢
查一個名稱,會牽涉到四種角色:
| 角色 | 在哪裡 | 做什麼 |
|---|---|---|
| 用戶端的解析程式(stub resolver) | 你的電腦、手機 | 把問題交給遞迴解析器,等最後答案 |
| 遞迴解析器(recursive resolver) | 學校、ISP,或公共 DNS 服務 | 替用戶端一路問到答案,並把結果放進快取 |
| 根伺服器、TLD 伺服器 | 網際網路上 | 不直接回答,只告訴你「下一步去問誰」(轉介,referral) |
| 權威伺服器 | 網域擁有者指定 | 真正擁有這筆記錄,給出權威答案 |
兩種查詢方式:
- 遞迴查詢(recursive query):用戶端對解析器說「請幫我查到最後的答案」。用戶端只問一次,所有工作都交給解析器。
- 反覆查詢(iterative query):解析器對根、TLD、權威伺服器一個一個問;每一個都只回答自己知道的部分,或轉介給下一個。
所以第一次查 www.club.tw 時,解析器大約要往外問三次:根 → tw 的 TLD 伺服器 → club.tw 的權威伺服器。
DNS 查詢通常用 UDP 的 53 埠,一問一答各一個封包;回應太大時改用 TCP 的 53 埠。DNS 的基本規格是 RFC 1034 與 RFC 1035(1987 年)。
TTL 與快取
每一筆 DNS 記錄都帶一個 TTL(Time To Live,存活時間,單位是秒),意思是「這個答案可以被快取多久」。 它和 IP 標頭裡的 TTL(每經過一台路由器減 1)名稱相同,意義不同。
| 情況 | 解析器做什麼 | 等待時間 |
|---|---|---|
| 快取裡有,而且還沒過期 | 直接回答 | 很短(只有用戶端到解析器這一段) |
| 快取裡知道權威伺服器是誰 | 跳過根與 TLD,直接問權威伺服器 | 中等 |
| 什麼都沒有 | 從根伺服器問起 | 最長 |
快取有好幾層:瀏覽器、作業系統、遞迴解析器都會依 TTL 保留答案。TTL 的取捨:
- TTL 長(例如一天):查詢少、速度快,但修改記錄之後,舊答案可能還要一天才會從各地的快取消失。
- TTL 短(例如五分鐘):改了很快生效,但解析器要更常回去問權威伺服器。
所以網站要換主機之前,管理者常常先把 TTL 調短,等舊的長 TTL 過期之後再改位址。 「查無此名稱」的結果也會被快取一段時間,稱為否定快取;剛新增的名稱查不到,有可能是之前查無的結果還沒過期。
小測驗:階層、查詢與快取
名稱 mail.lab.example.com 裡,哪一段是頂級網域(TLD)?
你的電腦把「www.club.tw 的位址是什麼」交給學校的 DNS 伺服器,然後就等最後答案。這是哪一種查詢?
根伺服器收到「www.club.tw 的 A 記錄是什麼?」時,通常怎麼回答?
某網站把 A 記錄從舊主機改到新主機,原本的 TTL 是 86400。有些使用者隔天才連到新主機,最可能的原因是?
記錄類型
一個名稱底下可以有好幾種資源記錄(resource record),查詢時要指定型別:
| 型別 | 內容 | 例子 |
|---|---|---|
| A | IPv4 位址 | www.club.tw A 203.0.113.80 |
| AAAA | IPv6 位址(RFC 3596) | www.club.tw AAAA 2001:db8:10::80 |
| CNAME | 別名:這個名稱其實是另一個名稱 | shop.club.tw CNAME www.club.tw |
| MX | 收信的郵件伺服器,前面的數字是優先順序,越小越優先 | club.tw MX 10 mail.club.tw |
| NS | 這個區域由哪台權威伺服器負責(委派) | club.tw NS ns1.club.tw |
| TXT | 任意文字,常用來證明網域所有權、設定寄信政策 | club.tw TXT "v=spf1 mx -all" |
幾個要注意的地方:
- CNAME 指向的是名稱,不是位址;解析器拿到 CNAME 之後還要再查一次目標名稱。一個名稱有了 CNAME,就不應該再有其他記錄,所以網域本身(
club.tw)通常不能設成 CNAME。 - MX 指向的也是名稱(
mail.club.tw),寄件的伺服器還要再查它的 A 或 AAAA 記錄。 - 同一個名稱可以同時有 A 和 AAAA;支援 IPv6 的電腦通常兩種都查。
除了這六種,還有 SOA(區域的基本資料)、PTR(反向查詢:從位址查名稱)等型別。
hosts 檔,以及 DNS 出問題時的症狀
在問 DNS 之前,作業系統會先看本機的 hosts 檔:一個「位址 名稱」的文字檔,寫在裡面的名稱直接使用,不送出查詢。
位置在 Windows 是 C:\Windows\System32\drivers\etc\hosts,Linux 與 macOS 是 /etc/hosts。
它適合開發測試時把名稱暫時指到自己的機器;但寫錯或忘了刪,就會出現「只有這台電腦連錯地方」的怪現象。
DNS 有問題時,常見的症狀和判斷方法:
| 症狀 | 可能的原因 | 怎麼確認 |
|---|---|---|
| 用 IP 位址連得到,用名稱連不到 | 沒有設定 DNS 伺服器、DNS 伺服器連不到 | ping 位址 成功、ping 名稱 失敗;nslookup 名稱 逾時 |
| 顯示「找不到伺服器」「查無此名稱」 | 名稱打錯、網域到期、記錄被刪除 | nslookup 名稱 回答查無此名稱 |
| 名稱查得到,但連到舊的主機 | 快取裡還是舊答案、hosts 檔寫了舊位址 | 看 hosts 檔;nslookup 比對權威伺服器的答案;清除快取(Windows 是 ipconfig /flushdns) |
| 只有某一台電腦連錯 | 那台的 hosts 檔或 DNS 設定和別人不同 | 比對兩台的 DNS 伺服器設定與 hosts 檔 |
排錯的順序和第 14 課相同,由下往上:先用 IP 位址確認網路是通的,再查名稱。nslookup 在 Windows、macOS、Linux 都有;Linux 與 macOS 也常用 dig。
小測驗:記錄類型與排錯
要讓 www.club.tw 同時有 IPv4 和 IPv6 位址,該設哪兩種記錄?
club.tw 有兩筆 MX:20 mx2.club.tw 和 10 mx1.club.tw。寄件的伺服器會先把信交給誰?
nslookup www.club.tw 有正確的答案,但你的電腦連 www.club.tw 一直連到另一個位址;同學的電腦都正常。最該先檢查什麼?
重點整理
- DNS 是分散式、有階層的資料庫:根 → 頂級網域(TLD)→ 第二層網域,每一層用 NS 記錄把底下委派給權威伺服器。
- 用戶端對遞迴解析器做遞迴查詢;解析器對根、TLD、權威伺服器做反覆查詢,前兩者回轉介,權威伺服器給答案。
- 每筆記錄有 TTL,解析器依 TTL 快取答案與轉介;查無此名稱也會被快取(否定快取)。TTL 越長查詢越少,修改後生效也越慢。
- 記錄類型:A(IPv4)、AAAA(IPv6)、CNAME(別名)、MX(收信伺服器,數字小的優先)、NS(委派)、TXT(文字)。
- 作業系統先看 hosts 檔。排錯時先用 IP 位址確認網路通,再用
nslookup查名稱。
下一課看名稱查到位址之後的事:瀏覽器怎麼用 HTTP 要網頁,以及 HTTPS 怎麼用 TLS 加密並確認對方的身分。