2013-05-10 70 views
3

我正在做一個研究項目,它需要分割tcp連接。所以我有一些粗俗的問題,這可能會在我的發展中發生。問題是對TCP SACK允許的協商的理解。我閱讀RFC並且無法在那裏找到答案。TCP標頭選項:SACK許可(選擇性確認)協商

對於兩個tcp程序之間的3路tcp握手:A和B.如果A發送一個TCP SYN到B並允許SACK,B肯定會響應一個允許SACK的SYN/ACK數據包?如果B在沒有SACK許可的情況下回復TCP SYN/ACK,是否意味着

1)僅在A上啓用SACK-permmited。A可以選擇性地確認來自A的tcp數據包,但A不能選擇性地確認tcp數據包來自枯草

2)SACK-permmited在兩個甲未啓用和B

如果A發送TCP SYN到B而不允許SACK,可以B響應一個SYN/ACK包允許SACK?

此外,爲什麼允許或不允許SACK許可?它取決於操作系統或內核設置還是別的?有可能控制它嗎?謝謝!

回答

1

以下應該可以幫助您:TCP Selective Acknowledgements

雖則回答你的問題(可以控制它),這一切都取決於「你能控制的。」例如,對於Windows,您可以控制它,但是您必須啓用它。所以如果你控制TCP會話的兩端,答案是肯定的。很顯然,如果你不控制另一端,那你什麼都做不了。所以想象一下,在你的最終(可控制的)上啓用它,但是目的地(比如說一個網站)不遵守SACK,它最終會浪費時間。

大多數操作系統都允許您打開和關閉電源。在FreeBSD上(我當前的桌面版),在默認情況下,它在Linux的大多數變體中默認開啓。