National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 18

DNS 深入

遞迴與反覆查詢、記錄類型、TTL 與快取
Interaction 25 minute(s)

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 年)。

互動練習:看解析器一路問下去

上方的時序圖從左到右是五個角色。藍色是查詢、黃色是轉介、綠色是答案、紫色是在本機(快取、hosts 檔)就解決。 用「從第 1 步看」「下一步」一步一步看,下方的說明會跟著出現。右下角是權威伺服器上真正的記錄,左下角是解析器的快取。

TTL 與快取

每一筆 DNS 記錄都帶一個 TTL(Time To Live,存活時間,單位是秒),意思是「這個答案可以被快取多久」。 它和 IP 標頭裡的 TTL(每經過一台路由器減 1)名稱相同,意義不同。

情況 解析器做什麼 等待時間
快取裡有,而且還沒過期 直接回答 很短(只有用戶端到解析器這一段)
快取裡知道權威伺服器是誰 跳過根與 TLD,直接問權威伺服器 中等
什麼都沒有 從根伺服器問起 最長

快取有好幾層:瀏覽器、作業系統、遞迴解析器都會依 TTL 保留答案。TTL 的取捨:

  • TTL 長(例如一天):查詢少、速度快,但修改記錄之後,舊答案可能還要一天才會從各地的快取消失。
  • TTL 短(例如五分鐘):改了很快生效,但解析器要更常回去問權威伺服器。

所以網站要換主機之前,管理者常常先把 TTL 調短,等舊的長 TTL 過期之後再改位址。 「查無此名稱」的結果也會被快取一段時間,稱為否定快取;剛新增的名稱查不到,有可能是之前查無的結果還沒過期。

小測驗:階層、查詢與快取

1.

名稱 mail.lab.example.com 裡,哪一段是頂級網域(TLD)?

2.

你的電腦把「www.club.tw 的位址是什麼」交給學校的 DNS 伺服器,然後就等最後答案。這是哪一種查詢?

3.

根伺服器收到「www.club.tw 的 A 記錄是什麼?」時,通常怎麼回答?

4.

某網站把 A 記錄從舊主機改到新主機,原本的 TTL 是 86400。有些使用者隔天才連到新主機,最可能的原因是?

第 1 次作答

記錄類型

一個名稱底下可以有好幾種資源記錄(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 檔裡另外寫了一台印表機的位址。

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。

互動練習:用名稱上網

PC1 要用名稱連 www.club.tw,可是它還沒有設定 DNS 伺服器。DNS 伺服器在 203.0.113.53,網頁伺服器 WEB 在 203.0.113.80。 點拓撲圖上的設備切換命令列,輸入 help 看指令。這裡的 DNS 伺服器同時是權威伺服器,只示範一問一答;遞迴的過程請看上面的練習。 nslookup <名稱> <類型> 可以指定記錄類型,例如 nslookup club.tw mx;不寫類型就是查 A 記錄。

小測驗:記錄類型與排錯

1.

要讓 www.club.tw 同時有 IPv4 和 IPv6 位址,該設哪兩種記錄?

2.

club.tw 有兩筆 MX:20 mx2.club.tw 和 10 mx1.club.tw。寄件的伺服器會先把信交給誰?

3.

nslookup www.club.tw 有正確的答案,但你的電腦連 www.club.tw 一直連到另一個位址;同學的電腦都正常。最該先檢查什麼?

第 1 次作答

重點整理

  • DNS 是分散式、有階層的資料庫:根 → 頂級網域(TLD)→ 第二層網域,每一層用 NS 記錄把底下委派給權威伺服器。
  • 用戶端對遞迴解析器做遞迴查詢;解析器對根、TLD、權威伺服器做反覆查詢,前兩者回轉介,權威伺服器給答案。
  • 每筆記錄有 TTL,解析器依 TTL 快取答案與轉介;查無此名稱也會被快取(否定快取)。TTL 越長查詢越少,修改後生效也越慢。
  • 記錄類型:A(IPv4)、AAAA(IPv6)、CNAME(別名)、MX(收信伺服器,數字小的優先)、NS(委派)、TXT(文字)。
  • 作業系統先看 hosts 檔。排錯時先用 IP 位址確認網路通,再用 nslookup 查名稱。

下一課看名稱查到位址之後的事:瀏覽器怎麼用 HTTP 要網頁,以及 HTTPS 怎麼用 TLS 加密並確認對方的身分。

這一課完成了!
Next lesson:HTTP 與 TLS
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。