TCP窗口缩放有多大价值?

在我的一个繁忙的Debian Lenny服务器上,我正在考虑禁用TCP Window Scaling 。 为什么?

  • 我想启用syn cookie ,它禁用TCP窗口缩放。 这台服务器是本地防火墙,并防止syn洪水攻击可能是一件好事,对吧?
  • 内核日志有许多“ TCP:Treason uncloaked! ”消息。 它似乎不是一个攻击,经常发生了很多年,但它仍然关注我。 据我所知,这个消息是客户端和服务器之间关于TCP窗口大小的分歧的结果,通常不是什么大不了的事情。

所以我问自己: “盒子真的需要TCP窗口缩放吗? 在我尝试做基准testing之前,查询ServerFault的boffins似乎是谨慎的。

一些相关的细节:

  • 许多(10-30%)的请求是针对5-50MB的文件
  • 大文件以稳定的比特率(〜2Mbps)发送,
  • 客户在互联网上,在250公里内90%

TCP窗口缩放有多大价值?

  • CPU是否有很大的影响? 如果是这样,多less?
  • networking性能是否降低? 延迟不会打扰我,但吞吐量低于最低阈值。
  • 还有什么我可能会失踪?

†= 3Gbps的LACP网卡+数以亿计的HTTP请求+每月数十TB的stream量

“盒子是否真的需要TCP Window Scaling?”

那么,你没有真正说出这个盒子什么,所以这真的很难说。 但一般来说, TCP Window Scaling对于在现代WAN / Internet连接上获得良好的最终用户性能至关重要 。 局域网不太需要。

networking性能是否降低? 延迟不会打扰我,但吞吐量会。

这取决于你的用户的networking连接。 但是,如果你的一些用户是

  • 身体远离你(即有很高的延迟),和
  • 有快速的networking连接(即良好的DSL,光纤等)

…然后,如果没有Window Scaling,这些用户将只能从您下载时使用其连接速度的一小部分。 这里有一个带宽延迟产品和窗口大小的好教程 – 完成与漂亮的animation漫画。

“ 启用高性能数据传输 ”是关于TCP窗口缩放的经典文档。 它正确地提到,如果您使用的是2.6系列中的最新Linux内核,那么通常不需要调整TCP设置,因为现在Linux已经对这些设置进行了自动调整。 它没有提到Windows 2008+也使用Compound TCP自动调整TCP设置 。

更新:

大文件按照规定比特率(〜2Mbps)发送,客户端在互联网上,在距离250km内为90%

有了这个更新的信息,它变得更棘手。 既然你正在限制最高速度,也许TCP窗口不是在你的情况下的限制。 看看你的最终用户使用什么样的连接,并做math。 您不需要运行基准,可以计算所需的窗口大小,并将其与服务器实际的默认传输窗口大小进行比较。

在很多情况下,TCP自动限制意味着给定的传输限于:

 BW = windowsize / RTT 

由于旧的TCP标准将最大窗口大小限制为64K,如果该数字低于物理带宽,则可以轻松地获得“长发networking”(LFN或“elephan”)。 窗口缩放到救援!

为了检查是否需要它,做一些数据包捕获和分析RTT(不要过多地依赖ping时间,WireShark有一个工具可以对真实stream量进行testing)。 用户看到的平均吞吐量是64KB/RTT (以字节/秒为单位)。

networking性能是否降低?

是 – 但仅用于传输大于RTTxBW的文件。 但是,当你开始在一个长胖的networking上播放大文件时,性能会迅速下降。

所以这是否影响到你将取决于你所服务的(你没有说)。