我正在做一个研究项目,需要拆分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?这取决于操作系统或内核设置还是其他什么?有可能控制它吗?谢谢!
答案 0 :(得分:1)
以下内容可以为您提供帮助:TCP Selective Acknowledgements
要回答你的问题(可能控制它),这一切都取决于“你控制了什么”。例如,对于Windows你可以控制它,但是你必须启用它。因此,如果你控制TCP会话的两端,答案是肯定的。显然,如果你不控制另一端,你无能为力。所以想象一下你在你的结尾(可控制)启用它,但目的地(比如说一个网站)不尊重SACK,它最终会浪费时间。
大多数操作系统允许您在关闭和打开时关闭。在FreeBSD(我当前的桌面)上,默认情况下它处于启用状态,在大多数Linux版本中,默认情况下它也处于打开状态。