5.4. TCP 窗口扩展
在 Red Hat Enterprise Linux 中默认启用的 TCP 窗口扩展功能是 TCP 协议的扩展,它显著提高了吞吐量。
例如,在具有 1.5 ms Round Trip Time (RTT)的 1 Gbps 连接上:
- 启用 TCP 窗口扩展后,大约 630 Mbps 是可行的。
- 禁用 TCP 窗口扩展后,吞吐量会下降到 380 Mbps。
TCP 提供的一个功能是流控制。通过流控制,发送方可以发送接收方可以接收的尽可能多的数据,但不能发送太多。为此,接收方通告一个 window 值,这是发送方可以发送的数据量。
TCP 最初支持最多 64 KiB 的窗口大小,但对于高 Bandwidth Delay Products(BDP),这个值变为一个限制,因为发送方一次不能发送超过 64 KiB 的数据。高速连接可以在给定时间内传输超过 64 KiB 的数据。例如:一个在系统之间有 1 毫秒延迟的 10 Gbps 链接,在给定时间内可以传输超过 1 MiB 的数据。如果主机只发送 64 KiB,然后暂停,直到其他主机收到这 64 KiB,则这将是低效的。
要删除这个瓶颈,TCP 窗口扩展扩展允许 TCP 窗口值算术左移,来将窗口大小增加到 64 KiB 以上。例如,最大窗口值 65535 向左移 7 个位置,会产生几乎 8 MiB 的窗口大小。这可在给定时间内传输更多的数据。
TCP 窗口扩展在打开每个 TCP 连接的三向 TCP 握手中进行协商。发件方和接收方都必须支持 TCP 窗口扩展,才能使其正常工作。如果两个参与者没有在握手中通告窗口扩展功能,则连接恢复为使用最初的 16 位 TCP 窗口大小。
默认情况下,TCP 窗口扩展在 Red Hat Enterprise Linux 中被启用:
sysctl net.ipv4.tcp_window_scaling
# sysctl net.ipv4.tcp_window_scaling
net.ipv4.tcp_window_scaling = 1
如果在服务器上禁用了 TCP 窗口扩展(0),则以与您设置它的相同方式恢复设置。