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

Posted

技术标签:

【中文标题】TCP 标头选项:允许 SACK(选择性确认)协商【英文标题】:TCP header option: SACK-permitted (Selective Acknowledgments) negotiation 【发布时间】:2013-05-05 03:46:21 【问题描述】:

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

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

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

2) A 和 B 均未启用 SACK-permited

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

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

【问题讨论】:

【参考方案1】:

以下内容应该对您有所帮助:TCP Selective Acknowledgements

但要回答您的问题(可能控制它),这完全取决于“您可以控制什么”。例如,对于Windows,您可以控制它,但是您必须启用它。因此,如果您控制 TCP 会话的两端,答案是肯定的。显然,如果你不控制另一端,你就无能为力。因此,假设您在终端启用它(可控),但目的地(比方说一个网站)不支持 SACK,它最终在一定程度上是浪费时间。

大多数操作系统都允许您关闭和打开。在 FreeBSD(我当前的桌面)上,它默认开启,在大多数 Linux 变体中,它也默认开启。

【讨论】:

以上是关于TCP 标头选项:允许 SACK(选择性确认)协商的主要内容,如果未能解决你的问题,请参考以下文章

互联网协议 — TCP — 重传机制(可靠传输保障)

TCP

TCP Congestion Control

第8章 传输层_TCP连接管理

TCP 的演化史-sack 与 reordering metric

TCP如何确保可靠传输(确认应答,重传机制,滑动窗口,流量控制)