
我一直在尋找這個問題(標題中的問題)的答案,我發現的最好的事情是:
在 DNS 協定設計中,UDP 傳輸區塊大小(有效負載大小)已限制為 512 位元組,以優化效能,同時產生最小的網路流量。
我的問題是:這究竟如何提高效能?
答案1
512 位元組有效負載保證 DNS 封包在傳輸過程中出現碎片時可以重新組裝。另外,一般來說,較小的資料包被隨機丟棄的可能性較小。
這IPv4標準指定每個主機必須能夠重組 576 位元組或更少的封包。使用 IPv4 標頭(20 位元組,但可以高達 60 位元組(帶選項))和 8 位元組 UDP 標頭,具有 512 位元組有效負載的 DNS 封包將小於 576 位元組。
正如 @RyanRies 所說:DNS 可以使用 TCP 來實現更大的有效負載以及區域傳輸和 DNSSEC。當 TCP 發揮作用時,會有更多的延遲,因為與 UDP 不同,在任何資料開始流動之前,客戶端和伺服器之間需要進行握手。
答案2
答案3
DNS 操作(例如查詢和區域維護操作)預設使用連接埠 53。 TCP 可以選擇性地在逐個事務的基礎上協商查詢操作,但由於 TCP 產生的效能開銷,這本質上是一種理論能力。從歷史上看,通常會不惜一切代價避免超過 512 位元組回應大小限制,實際上 13 個 IPv4 根伺服器的限制是單一 512 位元組 UDP 事務中可以傳回的最大值。
Ron Aitchison - Pro DNS 和 BIND 10 - 2011
答案4
這是一個 QOS 的事。
由於 UDP 是無狀態的,因此無法對資料包進行錯誤處理。
因此,透過將資料包保持在最大大小,它們到達目的地的變化會更大,從而減少了缺少錯誤處理的影響。