Linux
如何設置 linux 通過像 OS X 一樣減小數據包大小來重新傳輸 TCP 數據包
在 OS XI 上,對於未確認的數據包,系統會以減小的數據包大小重新傳輸它們。這可以在下圖中看到。
是否也可以在 Linux 系統中啟用相同的行為?
這看起來可能是 MTU 探測行為。引用我寫的一篇關於路徑 MTU 發現的文章:
MTU 探測的工作原理是最初發送小數據包,如果它們被成功確認,則逐漸增加數據包大小,直到可以找到正確的路徑 MTU。
在Linux中,我們可以修改
/proc/sys/net/ipv4/tcp_mtu_probing
如下的值:
- 0 - 禁用(預設)
- 1 - 僅在檢測到 PMTU 黑洞時啟用
- 2 - 始終啟用,使用初始 MSS 值
tcp_base_mss
值 1 將使用正常的 PMTUD 過程,**但是如果數據包沒有被確認,MTU 探測將啟動並開始重新傳輸數據包,並將 MSS 設置為
tcp_base_mss
(預設 512 字節)**的值。假設這些數據包被終端主機接收並成功確認,數據包大小將進一步增加並重複該過程。這種探測方法的優點是它僅在您開始發送重傳時發揮作用,因此導致該點的所有其他流量都使用預設 MTU 發送。主要缺點是重傳流量的增加以及等待更高 MTU 的重傳發生可能需要一些時間。值 2 只會強制始終進行 MTU 探測,因此所有數據包最初都會以等於 MSS 的 MSS 發送,
tcp_base_mss
並且如果它們被確認,則其大小會逐漸增加。使用這種方法,您不必在 MTU 探測開始之前等待重新傳輸,但是所有出站數據包最初都會非常小,因此這種探測方法的效率遠低於選項 1。