TCP标头选项:允许SACK(选择性确认)协商

时间:2013-05-10 12:45:12

标签: networking tcp network-protocols

我正在做一个研究项目,需要拆分tcp连接。所以我有一些问题,这可能发生在我的发展中。问题是理解TCP SACK允许的协商。我读了RFC,但在那里找不到答案。

对于两个tcp程序之间的3路tcp握手:A和B.如果A在允许SACK的情况下向B发送TCP SYN,B肯定会响应允许SACK的SYN / ACK数据包吗?如果B在没有允许SACK的情况下回复TCP SYN / ACK,是否意味着

1)仅在A上启用SACK-permmited .A可以选择性地确认来自A的tcp数据包,但是A不能选择性地确认来自B的tcp数据包。

2)A和B都没有启用SACK-permmited

如果A在没有SACK允许的情况下向B发送TCP SYN,B可以响应允许SACK的SYN / ACK数据包吗?

此外,为什么允许或禁止允许SACK?这取决于操作系统或内核设置还是其他什么?有可能控制它吗?谢谢!

1 个答案:

答案 0 :(得分:1)

以下内容可以为您提供帮助:TCP Selective Acknowledgements

要回答你的问题(可能控制它),这一切都取决于“你控制了什么”。例如,对于Windows你可以控制它,但是你必须启用它。因此,如果你控制TCP会话的两端,答案是肯定的。显然,如果你不控制另一端,你无能为力。所以想象一下你在你的结尾(可控制)启用它,但目的地(比如说一个网站)不尊重SACK,它最终会浪费时间。

大多数操作系统允许您在关闭和打开时关闭。在FreeBSD(我当前的桌面)上,默认情况下它处于启用状态,在大多数Linux版本中,默认情况下它也处于打开状态。