Networking
MTU 大小是否存在“典型”或“事實上的”預設值?
- 在編寫網路軟體時,我應該知道 MTU 大小的預設、典型或其他事實上的標準嗎?如果是這樣,它是什麼?
- 1500 的 MTU 大小(如此處建議:什麼是 DSL 標準中支持的最大 MTU)是一個好的經驗法則嗎?
- 另外,我是不是在想這個問題?這是人們在編寫網路軟體時認為重要的事情之一,但在實際的現實世界中,由於 TCP 會為您處理細節,所以這並不重要?
我在這裡問,而不是在 StackOverflow 上問,因為當涉及到與 MTU 大小相關的實際支持問題時,我想要係統管理員的觀點。
**更新:**根據一些回饋和初步答案,我正在縮小重點:
- 我正在編寫的應用程序將通過 WAN 連接在桌面/伺服器之間進行通信
- 它是典型的桌面/伺服器(即非移動)軟體,雖然連接的筆記型電腦可能會通過移動網路使用該軟體,但我並不擔心
- 它甚至不會嘗試處理 TCP 堆棧的任何層,除了應用程序層,以進行優化
- 在這個問題的範圍內可以排除 VPN 成本
您不應該關心 MTU,因為網路堆棧會負責必要的優化。如果您使用 TCP,堆棧可能會使用計算最大分段大小 (MSS) 的方法,這反過來又會導致數據包小於路徑中的最低 MTU。其中之一是PMTU 發現。
一般來說,您不應該試圖超越堆棧——TCP/IP 的分層架構使用這些抽像是有充分理由的。除非您有更好的功能,否則您應該將分段和碎片化功能保留在設計的位置。
正如其他人所寫的那樣,除了為 IP 數據包定義的最小 MTU 之外,沒有“安全 MTU”可以假設 -這是 68 字節,因此由於巨大的成本而具有相當低的實用價值。
由於 MTU 限制導致的典型支持問題主要有兩個方面:
- 不必要的碎片,因此更高的協議成本和更高的乒乓協議延遲
- 由於無知的防火牆管理員過濾 ICMP 並因此破壞了沿路徑的 PMTU 發現而導致傳輸中斷
這兩個因素都不是你應該在應用程序中處理的。