Tcp

為什麼預設不啟用net.ipv4.tcp_rfc1337?

  • November 18, 2019

tcp_rfc1337 設置似乎有 TIME-WAIT 暗殺的解決方案。

第一個問題是舊的重複數據可能在新連接中被錯誤地接受,導致發送的數據損壞。

第二個問題是,由於舊的重複數據包進入新的連接,連接可能會變得不同步並進入 ACK 循環,這將變得不同步。

第三個也是最後一個問題是舊的重複數據包可能會錯誤地進入新建立的連接並終止新連接。

根據我閱讀的內容,為了解決問題,該設置所做的是在套接字處於其 TIME-WAIT 狀態時忽略 RST (reset) 數據包

那麼,為什麼預設情況下不啟用此設置?使用這個有什麼缺點?

當我研究阻止 SYN 泛洪攻擊時,我實際上了解了這個變數。您認為此設置有助於阻止它們嗎?

我同意格雷格的評論。RFC 1337只是一個資訊 RFC,而不是 TCP 標準的一部分。為了確保生產網路中沒有任何意外更改,預設情況下禁用此功能並由網路管理員決定是否要啟用它以進行測試是有意義的。

在 TIME-WAIT 中丟棄套接字的 RST 數據包似乎不會產生任何負面影響,但這並不意味著沒有任何負面影響——也許是一個尚未完全探索的奇怪邊緣情況。

有趣的是,tcp_rfc1337 的核心文件似乎不正確:

tcp_rfc1337 - BOOLEAN
   If set, the TCP stack behaves conforming to RFC1337. If unset,
   we are not conforming to RFC, but prevent TCP TIME_WAIT
   assassination.
   Default: 0

如果設置了該選項,我們將遵循 RFC 1337 並丟棄 RST 數據包,從而防止 TIME-WAIT 暗殺。如果該選項未設置(預設),我們不符合 RFC 1337 很容易受到 TIME-WAIT 暗殺。

引用自:https://serverfault.com/questions/787624