域名系統

網域名稱系統（，縮寫：DNS）是網際網路的一項服務。它作為將域名和 IP 地址相互對映的一個分散式資料庫，能夠使人更方便地訪問網際網路。DNS 使用 TCP 和 UDP 埠 53。當前，對於每一級域名長度的限制是 63 個字元，域名總長度則不能超過 253 個字元。

開始時，域名的字元僅限於 ASCII 字元的一個子集。2008 年，ICANN 透過一項決議，允許使用其它語言作為網際網路頂級域名的字元。使用基於 Punycode 碼的 IDNA 系統，可以將 Unicode 字串對映為有效的 DNS 字元集。因此，諸如 “XXX. 中國”、“XXX. 臺灣” 的域名可以在位址列直接輸入並訪問，而不需要安裝外掛。但是，由於英語的廣泛使用，使用其他語言字元作為域名會產生多種問題，例如難以輸入、難以在國際推廣等。

歷史

DNS 最早於 1983 年由保羅・莫卡派喬斯（Paul Mockapetris）發明；原始的技術規範在 882 號因特網標準草案（RFC 882）中釋出。1987 年釋出的第 1034 和 1035 號草案修正了 DNS 技術規範，並廢除了之前的第 882 和 883 號草案。在此之後對因特網標準草案的修改基本上沒有涉及到 DNS 技術規範部分的改動。

早期的域名必須以英文句號。結尾。例如，當用戶訪問維基百科的 HTTP 服務時必須在位址列中輸入：，這樣 DNS 才能夠進行域名解析。如今 DNS 伺服器已經可以自動補上結尾的句號。

記錄型別

DNS 系統中，常見的資源記錄型別有：

主機記錄（A 記錄）：RFC 1035 定義，A 記錄是用於名稱解析的重要記錄，它將特定的主機名對映到對應主機的 IP 地址上。
別名記錄（CNAME 記錄）: RFC 1035 定義，CNAME 記錄用於將某個別名指向到某個 A 記錄上，這樣就不需要再為某個新名字另外建立一條新的 A 記錄。
IPv6 主機記錄（AAAA 記錄）: RFC 3596 定義，與 A 記錄對應，用於將特定的主機名對映到一個主機的 IPv6 地址。
服務位置記錄（SRV 記錄）: RFC 2782 定義，用於定義提供特定服務的伺服器的位置，如主機（hostname），埠（port number）等。
域名伺服器記錄（NS 記錄） ：用來指定該域名由哪個 DNS 伺服器來進行解析。 您註冊域名時，總有預設的 DNS 伺服器，每個註冊的域名都是由一個 DNS 域名伺服器來進行解析的，DNS 伺服器 NS 記錄地址一般以以下的形式出現： ns1.domain.com、ns2.domain.com 等。 簡單的說，NS 記錄是指定由哪個 DNS 伺服器解析你的域名。
NAPTR 記錄：RFC 3403 定義，它提供了正則表示式方式去對映一個域名。NAPTR 記錄非常著名的一個應用是用於 ENUM 查詢。

傳輸協議

3.1 DNS over UDP/TCP/53 （Do53）

從 1983 年起源到最近，DNS 主要回答 UDP 埠 53 上的查詢。此類查詢包括從客戶端以單個 UDP 資料包傳送的明文請求，響應為 從伺服器以單個 UDP 資料包傳送的明文回覆。 當應答的長度超過 512 位元組並且客戶端和伺服器都支援 DNS 擴充套件機制 (EDNS) 時，可能會使用更大的 UDP 資料包。 DNS-over-UDP 的使用受到限制，其中包括缺乏傳輸層加密、身份驗證、可靠傳遞和訊息長度。

1989 年，RFC 1123 為 DNS 查詢、回覆，特別是區域傳輸指定了可選的 TCP 傳輸。 透過長響應的分段，TCP 允許更長的響應、可靠的傳遞和重用客戶端和伺服器之間的長期連線。

3.2 DNS over TLS （DoT）

加密 DNS 的 IETF 標準於 2016 年出現，利用傳輸層安全（TLS）來保護整個連線，而不僅僅是 DNS 有效負載。DoT 伺服器偵聽 TCP 埠 853。 指定可以支援機會加密和認證加密，但沒有強制伺服器或客戶端認證。

3.3 DNS over QUIC （DoQ）

網際網路工程任務組的 描述了 DNS over QUIC。

3.4 DNS over HTTPS （DoH）

2018 年引入了 DNS 查詢傳輸的競爭標準，透過 HTTPS 隧道傳輸 DNS 查詢資料（進而透過 TLS 傳輸 HTTP）。DoH 被推廣為對網路更友好的 DNS 替代方案，因為與 DNSCrypt 一樣，它在 TCP 埠 443 上傳輸，因此看起來類似於網路流量，儘管它們在實踐中很容易區分。 DoH 因相對於 DoT 降低使用者匿名性而受到廣泛批評。

3.5 Oblivious DNS 和 Oblivious DoH

Oblivious DNS （ODNS） 是由普林斯頓大學和芝加哥大學的研究人員發明和實施的，作為未加密 DNS 的擴充套件，在 DoH 本身被標準化和廣泛部署之前。Apple 和 Cloudflare 隨後將該技術部署在 DoH 環境中，稱為 Oblivious DoH （ODoH）。ODoH 將入口 / 出口分離（在 ODNS 中發明）與 DoH 的 HTTPS 隧道和 TLS 傳輸層加密結合在一個協議中。

3.6 DNS over Tor

與其他 Internet 協議一樣，DNS 可以透過 VPN 和隧道執行。 DNS-over-Tor 自 2019 年以來已經變得足夠普遍以保證其自己經常使用的首字母縮略詞的一種用途。Oblivious DNS 的隱私效果可以透過使用預先存在的入口和出口節點的 Tor 網路以及 TLS 提供的傳輸層加密來獲得。

3.7 DNSCrypt

DNSCrypt 協議於 2011 年在 IETF 標準框架之外開發，在遞迴解析器的下游側引入了 DNS 加密，其中客戶端使用伺服器的公鑰加密查詢有效負載，這些公鑰在 DNS 中釋出（而不是依賴於第三方方證書頒發機構），進而可能受到 DNSSEC 簽名的保護。DNSCrypt 使用 TCP 或 UDP 埠 443，與 HTTPS 加密的網路流量相同的埠。這不僅引入了關於查詢內容的隱私，而且還引入了防火牆穿越能力的重要衡量標準。在 2019 年，DNSCrypt 進一步擴充套件以支援 “匿名” 模式，類似於提議的 “Oblivious DNS”，其中入口節點接收已使用不同伺服器的公鑰加密的查詢，並將其轉發給該伺服器伺服器充當出口節點，執行遞迴解析。建立使用者 / 查詢對的隱私，因為入口節點不知道查詢的內容，而出口節點不知道客戶端的身份。 DNSCrypt 於 2011 年 12 月由 OpenDNS 首次在生產環境中實現。有幾個免費和開源軟體實現額外集成了 ODoH。它適用於各種作業系統，包括 Unix、Apple iOS、Linux、Android 和 MS Windows。

技術實現

4.1 概述

DNS 透過允許一個名稱伺服器把它的一部分名稱服務（眾所周知的 zone）“委託” 給子伺服器而實現了一種層次結構的名稱空間。此外，DNS 還提供了一些額外的資訊，例如系統別名、聯絡資訊以及哪一個主機正在充當系統組或域的郵件樞紐。

任何一個使用 IP 的計算機網路可以使用 DNS 來實現它自己的私有名稱系統。儘管如此，當提到在公共的 Internet DNS 系統上實現的域名時，術語 “域名” 是最常使用的。

這是基於 984 個全球範圍的 “根域名伺服器”（分成 13 組，分別編號為 A 至 M）。從這 984 個根伺服器開始，餘下的 Internet DNS 名稱空間被委託給其他的 DNS 伺服器，這些伺服器提供 DNS 名稱空間中的特定部分。

4.2 軟體

DNS 系統是由各式各樣的 DNS 軟體所驅動的，例如：

BIND（Berkeley Internet Name Domain），使用最廣的 DNS 軟體
（Dan J Bernstein's DNS implementation）
（Name Server Daemon）
PowerDNS
Dnsmasq

4.3 國際化域名

Punycode 是一個根據 RFC 3492 標準而製定的編碼系統，主要用於把域名從地方語言所採用的 Unicode 編碼轉換成為可用於 DNS 系統的編碼。而該編碼是根據 域名相異字表 （由 IANA 制定），Punycode 可以防止所謂的 IDN 欺騙。

4.4 域名解析

舉一個例子，zh.wikipedia.org 作為一個域名就和 IP 地址 198.35.26.96 相對應。DNS 就像是一個自動的電話號碼簿，我們可以直接撥打 198.35.26.96 的名字 zh.wikipedia.org 來代替電話號碼（IP 地址）。DNS 在我們直接呼叫網站的名字以後就會將像 zh.wikipedia.org 一樣便於人類使用的名字轉化成像 198.35.26.96 一樣便於機器識別的 IP 地址。

DNS 查詢有兩種方式：遞迴和迭代。DNS 客戶端設定使用的 DNS 伺服器一般都是遞迴伺服器，它負責全權處理客戶端的 DNS 查詢請求，直到返回最終結果。而 DNS 伺服器之間一般採用迭代查詢方式。

以查詢 zh.wikipedia.org 為例：

客戶端傳送查詢報文 "query zh.wikipedia.org" 至 DNS 伺服器，DNS 伺服器首先檢查自身快取，如果存在記錄則直接返回結果。
如果記錄老化或不存在，則：
# DNS 伺服器向根域名伺服器傳送查詢報文 "query zh.wikipedia.org"，根域名伺服器返回頂級域 .org 的頂級域名伺服器地址。
# DNS 伺服器向 .org 域的頂級域名伺服器傳送查詢報文 "query zh.wikipedia.org"，得到二級域 .wikipedia.org 的權威域名伺服器地址。
# DNS 伺服器向 .wikipedia.org 域的權威域名伺服器傳送查詢報文 "query zh.wikipedia.org"，得到主機 zh 的 A 記錄，存入自身快取並返回給客戶端。

4.5 WHOIS（域名資料庫查詢）

一個域名的所有者可以透過查詢 WHOIS 資料庫而被找到；對於大多數根域名伺服器，基本的 WHOIS 由 ICANN 維護，而 WHOIS 的細節則由控制那個域的域註冊機構維護。

對於 240 多個國家程式碼頂級域名（ccTLDs），通常由該域名權威註冊機構負責維護 WHOIS。例如中國網際網路絡資訊中心（China Internet Network Information Center）負責.CN 域名的 WHOIS 維護，香港網際網路註冊管理有限公司（Hong Kong Internet Registration Corporation Limited）負責.HK 域名的 WHOIS 維護，臺灣網路資訊中心（Taiwan Network Information Center）負責.TW 域名的 WHOIS 維護。