DoH 與 DoT 技術對比分析
Categories:
DNS over HTTPS (DoH) 和 DNS over TLS (DoT) 是兩種常見的加密 DNS 傳輸方式,它們透過不同的協定堆疊來實現 DNS 查詢的安全傳輸。DoT 的標準由 RFC 7858 定義,而 DoH 則由 DNS Queries over HTTPS (DoH) 標準化。理解這兩種技術的本質區別,需要從網路協定層次結構入手分析。
網路協定層次結構
現代網路協定堆疊採用分層設計,每一層提供不同的功能。DNS 作為應用層協定,本身並不綁定特定的傳輸方式,可以執行在多種承載協定之上。
應用層 (L7) 包含 HTTP/1.1, HTTP/2, HTTP/3, FTP 和 DNS 等協定。值得注意的是,HTTP/3 的語意仍然在應用層,只是 QUIC 作為傳輸承載。安全層位於應用層和傳輸層之間,主要包括 TLS 及其變體。TLS 通常執行在 TCP 上,比如 HTTPS 和 DoT。DTLS 是 TLS 的資料報版本,可以執行在 UDP 上。QUIC 協定比較特殊,它將 TLS 1.3 的交握與金鑰衍生直接整合在協定內部。
QUIC 可以被視作 L4.5 層協定,它基於 UDP 擴展,提供了傳統傳輸層的能力。傳輸層 (L4) 包含 TCP, UDP 和 QUIC。雖然從工程實作角度 QUIC 基於 UDP,但它自帶可靠性、擁塞控制、多工和加密交握等功能,因此在工程上被當作獨立的傳輸層協定。網路層 (L3) 使用 IP 協定 (IPv4/IPv6) 負責封包的路由與轉送。資料連結層 (L2) 包括乙太網路和 Wi-Fi (802.11) 等技術。
TLS 作為加密手段,工作在應用層與傳輸層之間。如果將 TLS 加密從 DoT 中剝離,DoT 本質上就變成了 DNS over TCP。這種分層設計讓加密成為可選項,而不是協定本身的強制性限制。
Plain DNS 的特點
最普通的 DNS 稱為 Plain DNS,它可以執行在 UDP 或 TCP 上。UDP 是最常見的承載方式,因為連線建立簡單,首次查詢速度快。但 UDP 的弱點是不可靠,封包容易在網路中遺失。TCP 雖然交握次數多,首次連線速度比 UDP 慢約 30%,但它在建立長連線後,回應速度與 UDP 相同。
網路業者會在網路繁忙時選擇丟棄 UDP 封包以緩解裝置壓力。對於某些網路業者 UDP 封包遺失嚴重的地區,指定使用 TCP 進行 DNS 查詢可能更有利。TCP 具有重傳機制,即使封包遺失也能保證資料可靠到達,而丟棄 UDP 封包並不會減少小型網路業者裝置的負載壓力,反而會因為重試引入更多不確定性。
應用層巢狀結構
DNS 和 HTTP 都屬於應用層協定,DoH 本質上是一個應用層協定巢狀了另一個應用層協定。DoH 不必然是 DNS over HTTPS,使用普通的 HTTP 也是可行的,只是未加密的 DoH 是明文請求,相比 Plain DNS 沒有任何優勢,只有極少數特殊需求場景才會使用。
理論上可以在任何應用層協定上承載 DNS,比如 DNS over FTP 也可以實現,只需要開發相應的伺服器端和用戶端。這種靈活性體現了應用層協定組合的可能性。
flowchart TD
subgraph L7["應用層"]
A[DNS]
B[HTTP]
C[FTP]
end
subgraph Security["安全層"]
D[TLS]
E[DTLS]
end
subgraph Transport["傳輸層"]
F[TCP]
G[UDP]
H[QUIC]
end
subgraph L3["網路層"]
I[IP]
end
subgraph L2["資料連結層"]
J[乙太網路]
K[WiFi]
end
A --> D
B --> D
C --> D
D --> F
E --> G
H --> G
F --> I
G --> I
H --> I
I --> J
I --> K
style A fill:#e1f5ff
style B fill:#e1f5ff
style C fill:#e1f5ff
style D fill:#fff4e1
style E fill:#fff4e1
style F fill:#ffe1e1
style G fill:#ffe1e1
style H fill:#e1ffe1傳輸層巢狀結構
QUIC 協定基於 UDP,同時在傳輸層提供了連線導向的服務。QUIC 實作了 TCP 既有的連線導向、擁塞控制、重傳、流量控制、分段和組裝等傳輸層能力。相比 TCP,QUIC 延遲更低。相比 UDP,QUIC 更先進且可靠。
協定組合關係
應用層和傳輸層之間沒有必然的限制關係,加密可以添加也可以不添加。HTTP 可以執行在 TCP 上,也可以執行在 QUIC 上。DNS 可以執行在 TCP 上,可以執行在 UDP 上,也可以執行在 QUIC 上。
基於這些可能性,可以總結出以下組合關係。Plain DNS 等於 UDP 或 TCP 加上 DNS 協定。HTTP/2 等於 TCP 加上 TLS 1.2 或 TLS 1.3 再加上 HTTP 協定。HTTP/3 等於 QUIC 加上 TLS 1.3 再加上 HTTP 協定。
DoH (DNS over HTTPS) 等於 HTTP/2 或 HTTP/3 再加上 DNS 協定。DoT (DNS over TLS) 等於 TCP 加上 TLS 1.2 或 TLS 1.3 再加上 DNS 協定。DoQ (DNS over QUIC) 等於 QUIC 加上 TLS 1.3 再加上 DNS 協定。
flowchart LR
subgraph DoT["DoT DNS over TLS"]
direction LR
T1[TCP] --> T2[TLS]
T2 --> T3[DNS]
end
subgraph DoH2["DoH over HTTP/2"]
direction LR
H1[TCP] --> H2[TLS]
H2 --> H3[HTTP/2]
H3 --> H4[DNS]
end
subgraph DoH3["DoH over HTTP/3"]
direction LR
Q1[QUIC] --> Q2[TLS 1.3]
Q2 --> Q3[HTTP/3]
Q3 --> Q4[DNS]
end
subgraph DoQ["DoQ DNS over QUIC"]
direction LR
D1[QUIC] --> D2[TLS 1.3]
D2 --> D3[DNS]
end
style T1 fill:#e3f2fd
style T2 fill:#fff3e0
style H1 fill:#e3f2fd
style H2 fill:#fff3e0
style Q1 fill:#e8f5e9
style Q2 fill:#fff3e0
style D1 fill:#e8f5e9
style D2 fill:#fff3e0效能與相容性分析
理解了協定層次結構之後,可以分析 DoH 和 DoT 的優缺點。
TCP 和 QUIC 的對比需要結合網路業者的實際網路環境來討論。QUIC 是較新的協定,解決了一些老舊網路問題,但它畢竟基於 UDP。從網路延遲角度看,基於 QUIC 的協定延遲比 TCP 低約 35%,因此 DNS over HTTP/3 和 DoQ (DNS over QUIC) 理論上會比 DNS over HTTP/2 和 DoT 效能更好。
但是實際網路環境中存在封包遺失導致的重傳延遲問題。網路業者會在網路繁忙時選擇丟棄 UDP 封包,QUIC 會被識別為 UDP 而進行丟棄。雖然 QUIC 支援重傳,但重傳引入的延遲會導致 QUIC 的實際延遲可能比 TCP 更高。
隱私和安全方面,DoH 和 DoT 都是加密流量,不會被竊取和竄改。關於 DoT 被識別後封鎖的問題,主要是由於 Android 系統的加密 DNS 設定預設使用 853 連接埠,導致 853 連接埠成為敏感連接埠。DoT 本身是常見的普通加密流量,不會被識別為 DNS 專用流量。實際上任意連接埠都可以提供 DoT 服務,這在 Android 上需要第三方應用程式來實現,iOS 上則原生支援使用任意連接埠的 DoT。
擴充性是 DoH 的一個重要優勢。相比 HTTP 封裝的 DNS 和 Plain DNS,HTTP 具有明顯更優的擴充性。服務商可以在 443 連接埠上提供無數服務,包括 DoH,並且可以方便地擴展功能。DoT 和 DoQ 一般需要獨佔連接埠,擴展能力完全基於 Plain DNS。這是服務商視角的區別,對於普通用戶來說暫時沒有明顯感知。
DNS 請求的處理速度上,HTTP 的處理速度確實可能比 Plain DNS 慢幾個 CPU 時脈週期,但這種差異在實際使用中可以忽略不計。相容性方面,DoH 可能會更主流,因為對服務商來說 DoH 擴充性好。
當前主流平台對加密 DNS 的支援情況各有不同。 Chromium 核心的瀏覽器支援 DoH。Windows 11 系統原生支援 DoH。Android 8 及以上版本系統原生支援 DoT。Android 11 及以上版本系統原生支援 DoT 和 DoH。macOS 系統原生支援 DoT 和 DoH。iOS 系統原生支援 DoT 和 DoH。
實際選擇建議
對普通用戶來說,使用 DoH 會比 DoT 省事。DoH 相較 DoT,多數時間提供更優的延遲,少數時間提供相似的延遲。DoH 相較 DoQ,多數時間有相似的延遲,少數時間提供更優的延遲。
這個結論的前提是服務商提供 DNS over HTTP/3 服務。如果服務商不提供 HTTP/3,DoH 和 DoT 沒有明顯區別。DoH 會在網路品質好時,自動使用 DoH/3 獲得較低延遲,在網路品質差時,自動降級為 HTTP/2。這種自適應能力需要服務商實作,不過主流服務商一般都實作了。
推薦嘗試 寧屏,它支援 DoT 和 DoH/3,原生帶廣告阻擋和 DNS 分流功能。如果需要自行部署,可以使用它的 開源庫。
網路協定的選擇需要綜合考慮多個因素,包括網路業者網路品質、服務商支援情況、裝置相容性等。對於大多數用戶而言,DoH 是一個平衡了效能、相容性和隱私保護的優秀選擇。