2013-05-10 84 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的大多数变体中默认开启。