為什麼透過 UDP 的 DNS 有 512 位元組的限制?

為什麼透過 UDP 的 DNS 有 512 位元組的限制?

我一直在尋找這個問題(標題中的問題)的答案,我發現的最好的事情是:

在 DNS 協定設計中,UDP 傳輸區塊大小(有效負載大小)已限制為 512 位元組,以優化效能,同時產生最小的網路流量。

我的問題是:這究竟如何提高效能?

答案1

512 位元組有效負載保證 DNS 封包在傳輸過程中出現碎片時可以重新組裝。另外,一般來說,較小的資料包被隨機丟棄的可能性較小。

IPv4標準指定每個主機必須能夠重組 576 位元組或更少的封包。使用 IPv4 標頭(20 位元組,但可以高達 60 位元組(帶選項))和 8 位元組 UDP 標頭,具有 512 位元組有效負載的 DNS 封包將小於 576 位元組。

正如 @RyanRies 所說:DNS 可以使用 TCP 來實現更大的有效負載以及區域傳輸和 DNSSEC。當 TCP 發揮作用時,會有更多的延遲,因為與 UDP 不同,在任何資料開始流動之前,客戶端和伺服器之間需要進行握手。

答案2

現代 DNS 實際上不再限制 UDP 的 512 位元組有效負載。

電子域名系統0在使用中可以指定更大的有效負載大小,這對於支援 DNSSEC 的用戶端也是常見的情況。

透過 UDP 對更大有效負載的支援是一把雙刃劍,但這也是為什麼使用名稱伺服器的部分原因放大攻擊它變得越來越流行,因為如果攻擊者使用獲得大量回應的查詢,您可以實現更好的放大。

RFC2671了解 EDNS0 的具體細節

答案3

DNS 操作(例如查詢和區域維護操作)預設使用連接埠 53。 TCP 可以選擇性地在逐個事務的基礎上協商查詢操作,但由於 TCP 產生的效能開銷,這本質上是一種理論能力。從歷史上看,通常會不惜一切代價避免超過 512 位元組回應大小限制,實際上 13 個 IPv4 根伺服器的限制是單一 512 位元組 UDP 事務中可以傳回的最大值。

Ron Aitchison - Pro DNS 和 BIND 10 - 2011

答案4

這是一個 QOS 的事。

由於 UDP 是無狀態的,因此無法對資料包進行錯誤處理。

因此,透過將資料包保持在最大大小,它們到達目的地的變化會更大,從而減少了缺少錯誤處理的影響。

相關內容