22.TCP协议-观察慢启动的发包过程(拥塞控制算法)

本文通过一个实验展示了慢启动算法如何逐步增加数据发送量来预防网络拥塞。实验使用Linux服务器与Windows客户端进行1MB数据传输,揭示了慢启动算法在实际应用中的工作原理。

在上一节,我们已经介绍了什么是网络拥塞以及常用的拥塞控制算法;

另外,我们还简单的讲述了如何试探性的去探测网络有没有拥塞;实际上,慢启动算法也是这样做的,只是比这个稍稍复杂一点;

在讲慢启动算法之前, 我们先做一个实验,观察一下;

实验环境

  • 服务器 unp/protocol/tools/tcpserver/psh_serv.c,部署在 Linux 上。
  • 客户端 unp/protocol/tools/winclient/psh_client.cpp,部署在 Windows 上。

为了能够有效的观察到现象,客户端一次发送了 1MB 的数据给服务器。

实验步骤

  • Linux 上启动服务器
$ ./psh_serv 192.168.80.129 8000
  • 1
  • Windows 上启动 OmniPeek 抓包,然后再启动 psh_client.exe
psh_client.exe 192.168.80.129 8000 1 1048576
  • 1

psh_client.exe 最后两个参数表示发送一次数据,大小为 1MB

实验结果

这里写图片描述
图1 客户端发送的数据 

由于数据比较多,我只截了一部分图放在这里,但是足以说明问题。

注意到图 1 中 Note 那一栏的备注,数字表明客户端连续发送了多少个 TCP 分组。

从图中我们可以观察到,客户端最开始发送了 2 个分组,接下来是 4 个,然后是 8 个,12 个,16 个,20 个;

为什么客户端不一开始就连续发送 20 个呢?而是由少到多的增加呢?

实际上,这样做的目的就是为了防止一下子数据发多了,导致网络拥塞;图 1 中的这个过程,实际上就是慢启动算法所做的事情。不过,现在的慢启动算法相比最原始的慢启动算法要复杂的多,它综合考虑了太多的因素。

有关慢启动算法以及拥塞避免的相关细节,下一篇文章再详述。

<think>首先,用户的问题是:“我想查找将LinuxTCP拥塞控制算法修改为BBR的方法 请问将LinuxTCP拥塞控制算法修改为BBR的方法”。我需要基于用户提供的引用来回答这个问题。用户提供了四个引用,这些引用都涉及如何启用TCP BBR拥塞控制算法。 关键点: - 用户要求“将LinuxTCP拥塞控制算法修改为BBR的方法”。 - 我需要使用提供的引用,并在回答中引用它们。 - 引用末尾要自然地添加引用标识,如[^1]、[^2]等。 - 回答必须结构化清晰,帮助用户逐步解决问题。 回顾引用: - [^1]: 启用谷歌的TCP拥塞控制算法以及Linux内核升级。执行sysctl命令检查BBR是否开启。 - [^2]: Centos开启BBR拥塞控制算法,解释BBR的好处。 - [^3]: 如何配置TCP BBR作为默认的拥塞控制算法,使用sysctl命令。 - [^4]: 开启TCP BBR,通过echo命令写入sysctl.conf文件以持久化。 用户的问题具体是“修改为BBR的方法”,所以我要提供步骤。 步骤总结: 1. **内核要求**:BBR需要较新的Linux内核(4.9+)。用户可能已经满足,但如果不满足,需要升级内核。 2. **启用BBR**:通过sysctl命令临时设置或持久化设置。 - 临时方法:`sysctl -w net.ipv4.tcp_congestion_control=bbr` - 持久化:编辑`/etc/sysctl.conf`文件,添加两行: ```bash net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr ``` 然后运行`sysctl -p`应用更改。 3. **验证**:检查BBR是否启用: - `sysctl net.ipv4.tcp_available_congestion_control` 应该显示bbr - `sysctl net.ipv4.tcp_congestion_control` 应该显示bbr 从引用中: - [^1] 提到检查命令。 - [^3] 提到临时设置和持久化。 - [^4] 提到写入sysctl.conf并持久化。 - [^2] 解释BBR的好处,但用户需要方法,所以我可以简要提到。 回答结构: - 先介绍BBR是什么(简短)。 - 然后提供逐步方法。 - 结束时生成相关问题。 - 确保使用正确的LaTeX格式:行内用$...$,独立用$$...$$,但这里可能不需要复杂公式。 - 命令是文本,不需要LaTeX,除非有数学表达式。例如,没有数学表达式,所以直接使用代码块。 - 使用中文回答。 最终回答结构: 1. **简介**:BBR的好处(基于引用)。 2. **前提条件**:内核要求。 3. **修改方法**:详细步骤。 4. **验证**:如何检查。 5. **相关问题**:生成一些相关问题。 相关问题生成(基于用户指令): - 类似于示例,生成2-3个相关问题。 - 可能如:如何升级内核?BBR与其他算法的区别?如何优化BBR设置? 引用标识: - 在回答中引用相关部分时添加[^number]。 完整回答: - 开头:直接回答问题。 - 步骤:清晰、逐步。 - 结尾:相关问题。 </think>以下是将LinuxTCP拥塞控制算法修改为BBR(Bottleneck Bandwidth and Round-trip Propagation Time)的详细方法。BBR是谷歌开发的拥塞控制算法,可优化网络掉包导致的卡顿问题,通过动态调整发包速率提升吞吐量和延迟性能[^2]。修改方法依赖于Linux内核版本(需4.9或更高),如果内核较旧,需先升级。以下是逐步操作指南,基于官方推荐流程。 ### 前提条件 - **内核检查**:确保内核版本≥4.9。运行命令检查: ```bash uname -r ``` 如果版本低于4.9,需先升级内核(例如在CentOS/Ubuntu使用包管理器升级)。 - **BBR可用性确认**:运行以下命令,确保内核支持BBR: ```bash sysctl net.ipv4.tcp_available_congestion_control ``` 输出应包含`bbr`,例如:`net.ipv4.tcp_available_congestion_control = reno cubic bbr`[^1]。若无,需安装支持BBR的内核模块。 ### 启用BBR的逐步方法 #### 1. **临时启用(重启后失效)** 适用于测试或临时优化: ```bash sysctl -w net.ipv4.tcp_congestion_control=bbr ``` 此命令直接修改内核参数,无需重启[^3]。 #### 2. **持久化启用(永久生效)** 确保BBR在系统重启后自动生效: - **步骤1**: 编辑系统配置文件: ```bash echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf # 设置公平队列调度器,优化BBR性能 echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf # 设置BBR为默认拥塞算法 ``` - **步骤2**: 应用配置更改: ```bash sysctl -p ``` 这将加载新配置,确保BBR生效[^4]。 #### 3. **验证BBR是否生效** 运行以下命令检查: ```bash sysctl net.ipv4.tcp_congestion_control ``` 输出应为:`net.ipv4.tcp_congestion_control = bbr`[^1]。 同时确认可用算法: ```bash sysctl net.ipv4.tcp_available_congestion_control ``` 输出应包含`bbr`(如:`bbr reno cubic`)[^1]。 ### 注意事项 - **兼容性**:BBR在大多数现代Linux发行版(如CentOS、Ubuntu)上工作良好,但需内核支持。 - **优化效果**:BBR能显著减少网络掉包导致的卡顿,尤其在高延迟或拥塞链路中[^2],但需测试实际网络环境。 - **回滚方法**:如果需要恢复默认算法(如cubic),删除`/etc/sysctl.conf`中添加的行,并运行`sysctl -p`[^3]。 通过以上步骤,您已成功将TCP拥塞控制算法修改为BBR。BBR在云服务器或高延迟网络中表现优异,能提升数据传输效率[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值