【計算機網路筆記】2.4 DNS—The Internet’s Directory Service
【計算機網路筆記】2.4 DNS—The Internet’s Directory Service
Hello Guys, I’m LukeTseng. 歡迎你也感謝你點入本篇文章,本系列主要讀本為《Computer Networking: A Top-Down Approach, 8th Edition》,就是計算機網路的聖經,會製作該系列也主要因為修課上會用到。若你喜歡本系列或本文,不妨動動你的手指,為這篇文章按下一顆愛心吧,或是追蹤我的個人公開頁也 Ok。
2.4.1 Services Provided by DNS(由 DNS 提供的服務)
什麼是 DNS?
DNS(Domain Name System,網域名稱系統)就像是網際網路的「電話簿」,負責將人類好記的網址翻譯成電腦能理解的 IP 位址。
當在瀏覽器輸入 google.com 這種人類好記的網址時,電腦其實看不懂。
電腦需要透過 DNS 把網址翻譯成一串數字構成的 IP 位址(例如 142.250.190.46),才能正確連接到該網站的伺服器。
DNS 也是一個建立在應用層上的協定,它主要由兩部分組成:
- 分散式資料庫(Distributed Database):實作在階層式的 DNS 伺服器群上。
- 應用層協定(Application Protocol):允許主機(Host)查詢該資料庫的通訊規則。
運作層級
注意:
- DNS 協定是運作在 UDP 之上,使用 Port 53。
- 它雖然是網際網路的核心功能,但在架構上是作為應用層(Application Layer)協定來實作的,也體現了網際網路將複雜性放在網路邊緣(Network Edge)的設計哲學。
術語解析
- 主機名稱(Hostname):人類可讀的網址標識,例如
www.google.com。它對人類有意義,但對路由器來說只是無意義的字串。 - IP 位址(IP Address):32-bit 的數值(IPv4),具有階層結構,就像現實世界的門牌地址,讓路由器知道該把封包送往哪個網路。
- 正規主機名稱(Canonical Hostname):一台主機真正的、正式的名字,通常比較複雜且難記(例如
relay1.west-coast.enterprise.com)。 - 別名主機名稱(Alias Hostname):為了方便人類記憶而取的別名(例如
www.enterprise.com),通常比規範名稱簡短好記。
DNS 的主要服務:主機名稱到 IP 位址的轉換
這是 DNS 最基本的功能。
當瀏覽器想要存取 www.someschool.edu 時,會發生以下步驟:
- 使用者主機執行 DNS 的客戶端程式。
- 瀏覽器從 URL 中提取主機名稱
www.someschool.edu並傳給 DNS 客戶端。 - DNS 客戶端向 DNS 伺服器發送一個查詢訊息(Query message)。
- DNS 客戶端最後收到一份回覆,裡面包含該主機名稱對應的 IP 位址。
- 瀏覽器拿到 IP 後,才正式向該 IP 發起 TCP 連線,連線到位於該 IP 位址 Port 80 上的 HTTP 行程。
DNS 的三大進階服務
除了轉址,DNS 還利用其資料庫特性提供了以下服務:
- 主機別名(Host Aliasing):
- 說明:允許一台主機擁有多個名字。DNS 可以找出別名背後的「正規主機名稱」以及對應的 IP。
- 範例說明:一台名為
relay1.west-coast.enterprise.com的複雜主機,可以擁有www.enterprise.com這樣好記的別名。
- 郵件伺服器別名(Mail Server Aliasing):
- 說明:讓電子郵件地址也能使用簡單好記的別名,而不必使用複雜的郵件伺服器名稱。
- 範例說明:
- Bob 的信箱是
bob@yahoo.com,但 Yahoo 的郵件伺服器本名可能叫relay1.west-coast.yahoo.com。 - DNS 透過 MX 記錄 來處理這種轉換。
- Bob 的信箱是
- 負載分配(Load Distribution):
- 說明:
- 對於高流量的網站(如 CNN),背後其實是多台重複的伺服器在運作,它們有不同的 IP,因此 DNS 也可用在重複的伺服器上。
- DNS 資料庫會將一個域名對應到一組 IP 位址集合。
- 範例說明:
- 當有人查詢
cnn.com時,DNS 伺服器會回傳整組 IP,但會輪替(Rotate)這些 IP 的順序。 - 因為客戶端通常只選第一個 IP 連線,流量就會被平均分配到不同伺服器上。
- 當有人查詢
- 說明:
關於「負載分配」,這是一個非常聰明的設計。
DNS 伺服器不需要知道哪台機器現在比較忙,只需要在每次回覆時洗掉 IP 列表的順序,就能達到基本的流量分流效果。
2.4.2 Overview of How DNS Works(綜觀 DNS 如何運作)
該節展示了電腦科學中一個核心的設計哲學:如何透過「階層化」與「分散式」設計來解決規模擴展(Scalability)的問題。
為什麼不能只有一台 DNS 伺服器?
若設計一個單一的、集中式的(Centralized)DNS 伺服器來服務全網際網路,會發生什麼事?
書中列舉四項可能導致的災難(這也是為什麼我們需要分散式系統的原因):
- 單點失效(Single point of failure):這台伺服器掛了,全求網路就癱瘓了。
- 流量過載(Traffic volume):一台機器無法處理全球數十億的查詢請求。
- 遠距離集中式資料庫(Distant centralized database):如果伺服器在紐約,澳洲的用戶查詢就要跨越半個地球,延遲(Delay)會非常高。
- 維護困難(Maintenance):要將全球所有的新增主機都記錄在同一個資料庫中,更新會極度頻繁且困難。
結論:DNS 必須設計成分散式(Distributed)且階層式(Hierarchical)的資料庫系統。
DNS 的階層結構(The DNS Hierarchy)
為了不讓單一伺服器崩潰,DNS 將全球的伺服器分成了三個主要的層級。
把它想像成是一棵倒過來的樹:
- 根 DNS 伺服器(Root DNS Servers)
- 地位:最高等級的伺服器。
- 數量:全球有 13 個邏輯上的根 IP 位址(由 12 個不同的組織管理),但在物理上這 13 個 IP 對應著分佈在全球的 1000 多台伺服器實體。
- 功能:它不直接知道使用者要找的網站 IP(例如
google.com),但它知道誰負責管理.com、.edu這些高階網域,會指引使用者去問下一層。
- 高階網域伺服器(Top-Level Domain, TLD Servers)
- 地位:負責高階網域(如
.com,.org,.net,.edu,.gov)以及國家代碼(如.tw,.jp,.uk)。 - 功能:
- 如果使用者要找
google.com,根伺服器會叫使用者去找負責.com的 TLD 伺服器。 - TLD 伺服器知道負責
google.com這個域名的官方伺服器在哪裡。
- 如果使用者要找
- 地位:負責高階網域(如
- 官方 DNS 伺服器(Authoritative DNS Servers)
- 地位:最終知道答案(知道該網域(例如
google.com)的 IP 位址)的伺服器。 - 功能:每個擁有公開主機(如 Web 伺服器或 Mail 伺服器)的組織(例如大學、Amazon、Google),都必須提供官方 DNS 伺服器。這裡儲存了該組織內部主機名稱與 IP 的實際對應記錄。
- 地位:最終知道答案(知道該網域(例如
- 特殊角色:本地 DNS 伺服器(Local DNS Server)
- 地位:嚴格來說它不屬於上述的層級結構,但它是我們一般使用者的代理人(Proxy)。
- 功能:通常由 ISP(如中華電信或學校)提供。當電腦發出 DNS 查詢時,其實是先發給本地 DNS 伺服器,由它代替你去上述的層級結構中跑腿、問路。
DNS 查詢流程
情境:假設你是一個在紐約大學(NYU)的學生,你的電腦(cse.nyu.edu)想要訪問麻薩諸塞大學(UMass)的伺服器(gaia.cs.umass.edu)。
這是一個 8 個步驟的過程(假設沒有快取的情況下):
- 使用者(Requesting host) -> 本地 DNS:使用者的電腦向 NYU 的本地 DNS 伺服器(
dns.nyu.edu)詢問:「gaia.cs.umass.edu的 IP 是什麼?」 - 本地 DNS -> 根伺服器:本地 DNS 不知道答案,於是它去問根 DNS 伺服器。
- 根伺服器 -> 本地 DNS:
- 根伺服器注意到
.edu尾碼並說:「我不知道具體 IP,但這裡有負責.edu的 TLD 伺服器的 IP 列表,你去問它。」 - (根伺服器回傳 TLD 伺服器的 IP 列表給本地 DNS)
- 根伺服器注意到
- 本地 DNS -> TLD 伺服器:本地 DNS 轉頭去問負責
.edu的 TLD 伺服器。 - TLD 伺服器 -> 本地 DNS:
- TLD 伺服器注意到
umass.edu的尾碼並說:「我不知道gaia主機的 IP,但我知道umass.edu這個網域是由官方 DNS 伺服器dns.umass.edu管理的,這是它的 IP,你去問它。」 - (TLD 伺服器回傳
dns.umass.edu的 IP 位址給本地 DNS,讓它去找官方 DNS 伺服器)
- TLD 伺服器注意到
- 本地 DNS -> 官方 DNS 伺服器:本地 DNS 最後跑去問
dns.umass.edu。 - 官方 DNS 伺服器 -> 本地 DNS:官方 DNS 伺服器查了一下自己的資料庫,回答:「有的,
gaia.cs.umass.edu的 IP 是128.119.40.111。」 - 本地 DNS -> 使用者:本地 DNS 拿到 IP 後,回傳給使用者的電腦。
整體的運作流程如下圖所示:

Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 159, Figure 2.19)
遞迴式查詢 vs. 迭代式查詢
在 DNS 查詢過程,主要有兩種查詢模式:
- 遞迴式查詢(Recursive Query):
- 就像 Figure 2.19 的步驟 1。
- 會讓本地 DNS 伺服器承擔所有搜尋工作,它會代替用戶端去詢問各級 DNS 伺服器,直到拿到 IP 位址。
- 迭代式查詢(Iterative Query):
- 就像步驟 2~7。
- 當 DNS 伺服器(如根伺服器、TLD 伺服器)收到請求但沒有該域名的資料時,它不會主動去查,而會回傳一個參考(Referral),告訴本地 DNS 誰可能有 IP 位址。
- 根伺服器和 TLD 伺服器通常只支援迭代式查詢,以減輕自身負載。
兩者比較表:
| 比較項目 | 遞迴式查詢(Recursive Query) | 迭代式查詢(Iterative Query) |
|---|---|---|
| 查詢對象 | 通常是電腦對本地 DNS 伺服器(ISP) | 通常是 DNS 伺服器之間互查 |
| 回應內容 | 最終 IP 位址或錯誤訊息 | 目前能提供的最佳資訊(如指引) |
| 查詢者負擔 | 小(只需問一次) | 大(需重複詢問不同伺服器) |
DNS 快取(DNS Caching)
如果每次上網都要跑完上面 8 個步驟,網路會慢到無法忍受,且根伺服器會被塞爆,因此需要 DNS 快取。
- 運作方式:當本地 DNS 伺服器在查詢過程中得到任何資訊(例如
.eduTLD 的地址,或是google.com的 IP),它會把這些資訊存在記憶體中。 - 效果:如果這時另一個人也要去
umass.edu,本地 DNS 已經記得 TLD 的位置(甚至記得 UMass 官方伺服器的 IP),就可以跳過根伺服器,直接去問目標,大幅減少延遲。
2.4.3 DNS Records and Messages(DNS 紀錄與訊息)
DNS 的基本資料單元:資源紀錄(Resource Record, RR)
DNS 是一個分散式資料庫,資料庫中儲存的最基本條目,稱為資源紀錄(Resource Records),簡稱 RR。
RR 的結構
不管是什麼類型的紀錄,一個 RR 都包含四個欄位:(Name, Value, Type, TTL)
TTL(Time to Live):RR 的存活時間,決定了這筆紀錄可以在快取(Cache)中存活多久。雖然它很重要,但在接下來的例子,為簡化會忽略它。Type:最重要的欄位,因為它決定了Name和Value代表什麼意義。
四種紀錄類型(Type)
| 類型(Type) | Name(名字)的意義 | Value(值)的意義 | 功能解釋 | 範例(Name, Value, Type) |
|---|---|---|---|---|
| A | 主機名稱(Hostname) | IP 位址 | 最標準的查詢,把網址(Name)轉成 IP(Value)。 | (relay1.bar.foo.com, 145.37.93.126, A) |
| NS(Name Server) | 網域(Domain) | 官方 DNS 伺服器的主機名 | 告訴你如果要查這個網域的細節,該去問哪台伺服器,用於繞送(route)DNS 查詢鏈。 | (foo.com, dns.foo.com, NS) |
| CNAME(Canonical Name) | 別名(Alias Hostname) | 正規主機名(Canonical Name) | 用來做別名對應,Value 是該主機真正的名字。 | (foo.com, relay1.bar.foo.com, CNAME) |
| MX(Mail Exchanger) | 郵件網域 | 郵件伺服器的主機名 | 專門用於電子郵件,允許郵件伺服器和 Web 伺服器使用相同的公司別名。 | (foo.com, mail.bar.foo.com, MX) |
伺服器如何儲存這些記錄?
如果一台 DNS 伺服器是某個主機的官方 DNS 伺服器,則該台 DNS 伺服器會有一條該主機的 Type A 記錄,會直接告訴你該主機的 IP。
如果一台 DNS 伺服器「不是」官方 DNS 伺服器(例如 TLD 伺服器):它會包含兩條記錄來做指引:
- 一條 Type NS 記錄:告訴該台 DNS 伺服器去問那台官方 DNS 伺服器。
- 一條 Type A 記錄:提供那台官方 DNS 伺服器的 IP 位址(否則只知道名字,還是找不到它)。
DNS 訊息格式
了解了資料庫存什麼,接下來看電腦之間如何溝通。
DNS 只有兩種訊息:
- 查詢(Query)
- 回覆(Reply)
它們的格式是完全一樣的。
一個 DNS 訊息由五個部分組成(如下圖 Figure 2.21),可分成兩大部分,而在第二部分資料區段中又可細分成四個部分:
- 標頭區段(Header Section)- 12 Bytes:這是訊息的控制中心,包含以下欄位:
- 識別碼(Identification):
- 16-bit 的數字,用於識別查詢訊息。
- 當發出查詢時會隨機生成一個 ID,回覆時會帶上同一個 ID。
- 這樣電腦才能知道該回覆是對應剛才發出的那個查詢。
- 旗標(Flags):
- 查詢/回覆旗標(Query/Reply flag):0 代表查詢,1 代表回覆。
- 官方旗標(Authoritative flag):如果是回覆,這個 bit 告訴 DNS 伺服器發送者是否為官方 DNS 伺服器。
- 遞迴需求旗標(Recursion-desired flag):客戶端(主機或 DNS 伺服器)要求 DNS 伺服器進行「遞迴查詢」(幫我問到底的意思)。
- 遞迴可用旗標(Recursion-available flag):DNS 伺服器告訴你它是否支援遞迴查詢。
- 數量欄位(Number fields):有四個欄位,分別指出在標頭之後四種資料區段各有多少條記錄。
- 識別碼(Identification):
- 資料區段(Data Sections):接在 Header 後面有四個區段:
- 詢問區段(Question Section):
- 放的是目前正在進行查詢的相關資訊。
- 包含兩個欄位:
- 名稱欄位(Name field):存放正在查詢的名稱。
- 類型欄位(Type field):例如針對該名稱詢問的問題類型,是想查 A 還是 MX。
- 答覆區段(Answer Section):
- 放的是一開始查詢名稱時的資源記錄(RRs)。
- 注意,一個查詢可能會回傳多條 RR(例如一個網站有多個 IP 用於負載平衡)。
- 官方區段(Authority Section):包含其他官方 DNS 伺服器的記錄。如果現在這台 DNS 伺服器不知道答案,它會在這裡放上要去問哪台伺服器的 NS 記錄。
- 附加區段(Additional Section):
- 包含其他有用的紀錄。
- 例如,若答覆區段(Answer Section)回傳了一個 CNAME 或 MX 記錄(給的是另一個名字),這裡可能會順便附上那個名字對應的 Type A 記錄(IP 位址),省得 DNS 伺服器再查一次。
- 詢問區段(Question Section):

Image Source:Computer Networking: A Top-Down Approach (8th ed., p. 163, Figure 2.21)
註:在此可以嘗試使用 nslookup 指令工具發送 DNS 查詢,它會顯示接收到的 RR 內容。
如何將記錄插入 DNS 資料庫?
如果你開了一家公司叫做 “Network Utopia”,要怎麼讓全世界都能解析 networkutopia.com?
這需要跟註冊商(Registrar)打交道:
- 註冊網域:付費給註冊商(如 GoDaddy, Namecheap 等)來取得網域名稱。
- 提供官方 DNS 伺服器資訊:必須提供主要的和次要的官方 DNS 伺服器的名字和 IP。
- 例如:
dns1.networkutopia.com(IP:212.2.212.1)
- 例如:
- 註冊商的動作:註冊商會將兩條關鍵記錄插入到
.com的 TLD 伺服器中:- 一條 NS 記錄:
(networkutopia.com, dns1.networkutopia.com, NS) - 一條 A 記錄:
(dns1.networkutopia.com, 212.2.212.1, A) - 這就是為什麼前面說非官方 DNS 伺服器通常會同時存 NS 和 A 記錄,因為這樣查詢鏈才不會斷掉。
- 一條 NS 記錄:
- 設定你的官方 DNS 伺服器:最後只要在自己的官方 DNS 伺服器裡,設定好網站(www)的 Type A 記錄,以及郵件伺服器的 Type MX 記錄。
DNS 的弱點(DNS Vulnerabilities)
DNS 設計之初(1980 年代),網際網路是一個相對封閉、互信的環境。
當時的設計重點是:
- 可用性(Availability)
- 擴展性(Scalability)
而非安全性(Security)。因此導致 DNS 天生較為脆弱,容易成為攻擊目標。
如果 DNS 倒了,瀏覽器再也找不到 google.com 或 facebook.com。
對使用者來說跟網路斷了沒兩樣,因此攻擊 DNS 是癱瘓網際網路最有效的方法之一。
術語解析
- DDoS 頻寬滿載攻擊(DDoS Bandwidth-flooding Attack):利用大量的殭屍網路(Botnet)向目標發送海量垃圾封包,塞爆目標的頻寬或處理能力,讓正常使用者無法存取服務。
- ICMP Ping 滿載攻擊(ICMP Ping Flood):一種 DDoS 手法,發送大量的 ICMP Echo Request(Ping)封包給伺服器,消耗其資源。
- DNS 汙染攻擊(DNS Poisoning Attack):駭客發送偽造的 DNS 回覆給 DNS 伺服器,誘騙它把錯誤的 IP 位址(例如釣魚網站的 IP)存入快取中。
- DNS 安全擴充(DNS Security Extensions,DNSSEC):DNS 的安全擴充協定,透過密碼學簽章來確保 DNS 紀錄的真實性與完整性,用於防止上述可能的攻擊。
針對根伺服器的攻擊
此為最直觀的攻擊思路,將根伺服器砍掉,網路就全體癱瘓了。
歷史案例:2002 年 10 月 21 日,駭客發動了一次大規模 DDoS 攻擊,利用殭屍網路向全球 13 個根伺服器 IP 發送海量的 ICMP Ping 訊息。
結果:攻擊失敗,對一般使用者的上網體驗幾乎沒有影響。
為什麼失敗?(防禦機制):
- 封包過濾(Packet Filtering):許多根伺服器配置了防火牆,直接阻擋或過濾掉 ICMP Ping 封包,保護了伺服器本身。
- 快取(Caching):本地 DNS 伺服器(Local DNS Servers)會快取高階網域(TLD)的 IP 位址,大多數的查詢根本不需要去問根伺服器,直接問 TLD 伺服器就好了。
針對高階網域(TLD)伺服器的攻擊
既然打根伺服器沒用,駭客就將目標轉向下一層:TLD 伺服器(如負責 .com 的伺服器)。
為什麼這裡比較脆弱?
- 不像根伺服器那麼容易被快取繞過(如果要查一個新的
.com網域,最終還是得問 TLD)。 - 封包過濾比較困難,因為查詢流量看起來很像合法的 DNS 請求。
歷史案例:2016 年 10 月 21 日,針對 DNS 服務商 Dyn 的攻擊。
攻擊手法:利用感染了 Mirai 惡意軟體的物聯網裝置(IoT devices)(如印表機、網路攝影機、嬰兒監視器)組成龐大殭屍網路,發送海量 DNS 查詢。
結果:攻擊成功,Twitter, Netflix, Amazon, Spotify 等依賴 Dyn 解析的大型服務在當天受到嚴重影響。
欺騙式攻擊
除了癱瘓伺服器(讓大家都連不上),更陰險的是讓使用者連到錯的地方。
| 攻擊類型 | 運作原理 | 後果 |
|---|---|---|
| 中間人攻擊(Man-in-the-middle attack,MITM) | 攻擊者攔截使用者的 DNS 查詢,並回傳偽造的 IP。 | 使用者以為連上了銀行網站,其實是連到了駭客的伺服器。 |
| DNS 汙染(DNS Poisoning) | 攻擊者發送偽造的回覆給 DNS 伺服器,讓伺服器「誤信」並將錯誤紀錄存入快取。 | 所有使用這台 DNS 伺服器的使用者,在快取過期前都會被導向錯誤網站。 |
防禦解方:DNSSEC。
- DNSSEC 透過數位簽章(Digital Signatures)來驗證來源。
- 能確保使用者收到的 DNS 回覆真的是由官方 DNS 伺服器發出的,而且途中沒有被竄改,目前 DNSSEC 正在逐漸普及中。
總整理
DNS 的定位與基本功能
DNS(Domain Name System),網際網路中的域名解析系統,負責將人類可讀的主機名稱(Hostname)轉換為 IP 位址(IP Address)。
例如輸入 google.com,必須先透過 DNS 取得對應 IP,瀏覽器才能發起 TCP 連線與 HTTP 通訊。
架構特性:
- 屬於應用層協定。
- 建立於 UDP Port 53。
- 由兩部分組成:
- 分散式階層資料庫
- 查詢通訊協定
體現網際網路將複雜性放在邊緣的設計哲學。
DNS 提供的服務
除了「將名稱解析成 IP」轉換,DNS 還提供三項重要進階功能:
- 主機別名(Host Aliasing):使用 CNAME 紀錄,讓複雜正式名稱可對應簡短別名。
- 郵件伺服器別名(Mail Server Aliasing):透過 MX 紀錄,讓電子郵件地址可對應實際郵件伺服器。
- 負載分配(Load Distribution):同一網域可對應多個 IP,DNS 透過「輪替回傳順序」實現基礎流量分散。
為什麼 DNS 必須是分散式?
若採集中式架構,會產生四大問題:
- 單點失效
- 無法承受全球流量
- 高延遲
- 維護困難
因此 DNS 採用「分散式 + 階層式」架構。
DNS 階層架構
DNS 採倒樹狀結構,共三層核心節點 + 一個代理角色:
- 根 DNS 伺服器(Root DNS Servers)
- 全球 13 個邏輯根 IP。
- 指引使用者、DNS 伺服器到正確的 TLD。
- 不直接知道最終 IP。
- 高階網域伺服器(TLD Servers)
- 負責
.com、.edu、.tw等網域。 - 知道各網域的官方 DNS 位置。
- 負責
- 官方 DNS 伺服器(Authoritative DNS Servers)
- 儲存最終主機名稱與 IP 的對應。
- 由各組織自行管理。
- 本地 DNS(Local DNS)
- 由 ISP 提供。
- 扮演使用者代理人。
- 負責查詢與快取。
註:本地 DNS 嚴格上來說不算 DNS 階層架構的一部分。
DNS 查詢模式
DNS 查詢分兩種:
| 模式 | 說明 |
|---|---|
| 遞迴式(Recursive) | 本地 DNS 負責查到底。 |
| 迭代式(Iterative) | 每層只回傳一個參考(Referral),告訴本地 DNS 誰可能有 IP 位址。 |
實際上的運作流程是這樣的:
- 使用者與本地 DNS 之間是遞迴式查詢。
- 本地 DNS 伺服器與其他三台伺服器之間是迭代式查詢。
DNS 快取(Caching)
為避免每次查詢都從根伺服器開始:
- 本地 DNS 會暫存結果。
- 設定 TTL 控制有效時間。
- 可大幅降低延遲與根伺服器負載。
快取是 DNS 能全球運作的關鍵。
DNS 資料單元:Resource Record(RR)
DNS 的基本資料格式為:(Name, Value, Type, TTL)
四種重要的紀錄類型(Type):
| 類型(Type) | Name(名字)的意義 | Value(值)的意義 | 功能解釋 | 範例(Name, Value, Type) |
|---|---|---|---|---|
| A | 主機名稱(Hostname) | IP 位址 | 最標準的查詢,把網址(Name)轉成 IP(Value)。 | (relay1.bar.foo.com, 145.37.93.126, A) |
| NS(Name Server) | 網域(Domain) | 官方 DNS 伺服器的主機名 | 告訴你如果要查這個網域的細節,該去問哪台伺服器,用於繞送(route)DNS 查詢鏈。 | (foo.com, dns.foo.com, NS) |
| CNAME(Canonical Name) | 別名(Alias Hostname) | 正規主機名(Canonical Name) | 用來做別名對應,Value 是該主機真正的名字。 | (foo.com, relay1.bar.foo.com, CNAME) |
| MX(Mail Exchanger) | 郵件網域 | 郵件伺服器的主機名 | 專門用於電子郵件,允許郵件伺服器和 Web 伺服器使用相同的公司別名。 | (foo.com, mail.bar.foo.com, MX) |
伺服器如何儲存這些記錄?
如果一台 DNS 伺服器是某個主機的官方 DNS 伺服器,則該台 DNS 伺服器會有一條該主機的 Type A 記錄,會直接告訴你該主機的 IP。
如果一台 DNS 伺服器「不是」官方 DNS 伺服器(例如 TLD 伺服器):它會包含兩條記錄來做指引:
- 一條 Type NS 記錄:告訴該台 DNS 伺服器去問那台官方 DNS 伺服器。
- 一條 Type A 記錄:提供那台官方 DNS 伺服器的 IP 位址(否則只知道名字,還是找不到它)。
DNS 訊息結構
DNS 訊息包含:
- 標頭區段(12 Bytes)
- 識別碼(Identification):
- 16-bit 的數字,用於識別查詢訊息。
- 旗標(Flags):
- 查詢/回覆旗標(Query/Reply flag)
- 官方旗標(Authoritative flag)
- 遞迴需求旗標(Recursion-desired flag)
- 遞迴可用旗標(Recursion-available flag)
- 數量欄位(Number fields):有四個欄位,分別指出在標頭之後四種資料區段各有多少條記錄。
- 識別碼(Identification):
- 四個資料區段
- 詢問區段(Question Section):
- 放的是目前正在進行查詢的相關資訊。
- 包含兩個欄位:
- 名稱欄位(Name field)
- 類型欄位(Type field)
- 答覆區段(Answer Section):
- 放的是一開始查詢名稱時的資源記錄(RRs)。
- 一個查詢可能會回傳多條 RR。
- 官方區段(Authority Section):包含其他官方 DNS 伺服器的記錄。如果現在這台 DNS 伺服器不知道答案,它會在這裡放上要去問哪台伺服器的 NS 記錄。
- 附加區段(Additional Section):
- 包含其他有用的紀錄。
- 詢問區段(Question Section):
網域註冊流程
若要讓新網域生效:
- 向註冊商購買網域。
- 提供官方 DNS 伺服器資訊。
- 註冊商將 NS + A 記錄加入 TLD。
- 在官方 DNS 設定 A / MX 紀錄。
這樣 DNS 查詢鏈才能完整運作。
DNS 的安全弱點
DNS 設計初期重視:
- 可用性(Availability)
- 擴展性(Scalability)
而非安全性,因此存在漏洞。
主要攻擊類型:
DDoS 攻擊(Distributed Denial-of-Service Attack)
- 利用殭屍網路發送大量封包塞爆 DNS。
- 案例:
- 2002 年攻擊根伺服器(失敗)。
- 2016 年攻擊 Dyn(成功)。
DNS 汙染(DNS Poisoning)
- 偽造回覆污染快取。
中間人攻擊(Man-in-the-Middle,MITM)
- 攔截查詢並回傳假 IP。
防禦機制:DNSSEC
DNSSEC(DNS Security Extensions)透過數位簽章驗證:
- 確保資料未被竄改。
- 驗證回覆來源為官方伺服器。
