14.4 TCP/IP 协议栈

传输控制协议(Transmission Control Protocol,TCP)是互联网协议套件(Internet Protocol Suite)中的核心传输层协议之一,其软件实现体系被称为 TCP 堆栈(因采用层次化结构组织,故称为“栈”)。TCP 堆栈负责端到端的可靠数据传输、拥塞控制、流量控制等关键功能。

不同于其他主流操作系统,FreeBSD 创新性地实现了多 TCP 栈共存架构,当前主要开发与维护工作集中于 RACK 栈(由 Netflix 公司开发)和基础栈(基于 4.4BSD 经典实现演化而来)。这种设计为不同网络场景提供了灵活的性能优化选择。

使用 RACK 栈

RACK(Recent ACKnowledgment)是 Netflix 开发的一种 TCP 栈,旨在改善网络传输性能。

# echo "net.inet.tcp.functions_default=rack" >> /etc/sysctl.conf   # 将 TCP 默认拥塞控制算法设置为 RACK 并写入 sysctl 配置,实现开机启用
# sysrc kld_list+="tcp_rack"                                         # 将 tcp_rack 模块添加到系统启动加载列表,实现开机启用
# kldload tcp_rack                                                    # 立即加载 tcp_rack 模块
# sysctl net.inet.tcp.functions_default=rack                           # 立即应用 TCP RACK 拥塞控制算法

重启或加载内核模块后,可通过如下命令显示系统中可用的 TCP 拥塞控制算法列表:

# sysctl net.inet.tcp.functions_available
net.inet.tcp.functions_available:
Stack                           D Alias                            PCB count
freebsd                           freebsd                          3
rack                            * rack                             0

BBR 拥塞控制算法原理

TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是 Google 公司开发的一种基于模型的拥塞控制算法。该算法通过估计网络路径的瓶颈带宽和往返传播时间来构建网络性能模型,其核心优化目标包括:

  • 充分利用可用网络带宽;

  • 最小化网络传输延迟。

BBR 在 FreeBSD 中的实现与应用

从实践经验来看,在使用代理软件等场景下,启用 TCP BBR 功能通常能够显著提升网络传输速度和连接稳定性。值得注意的是,FreeBSD 平台上的 TCP BBR 实现由 Netflix 技术团队完成。


无需编译内核,可直接将 tcp_racktcp_bbr 模块添加到系统启动加载列表,实现开机启用:

将 TCP 默认拥塞控制算法设置为 BBR 并写入 sysctl 配置,实现开机启用:

重启系统:

重启后,查看当前系统使用的 TCP 默认拥塞控制算法:

若输出结果为 net.inet.tcp.functions_default: bbr,则 TCP BBR 启用成功。

参考文献

故障排除与未竟事宜

性能差异分析与说明

在使用 RACK 或 BBR 堆栈的过程中,可能会遇到一些需要注意的问题,以下是相关说明。

局域网速度良好但互联网速度不佳

根据实际测试观察,RACK 和 BBR 堆栈在局域网环境中的性能表现良好,均优于默认 TCP 堆栈;但在互联网环境中的性能表现存在一定局限性:测试数据显示,RACK 堆栈的互联网传输速度约为默认堆栈的三分之一,BBR 堆栈则约为默认堆栈的六分之一。

该性能差异可能通过调整相关参数得到优化,具体的参数调优方法有待进一步研究与验证。

最后更新于