调整TCP参数, 优化网络性能

在Linux系统中,调整TCP参数可以显著优化网络性能,特别是在面对特定网络条件(如高带宽延迟、频繁的数据包丢失或高延迟网络)时。

1. 调整TCP窗口大小

a. 发送和接收缓冲区大小

参数:

  • net.core.rmem_max:单个套接字接收缓冲区的最大值。
  • net.core.wmem_max:单个套接字发送缓冲区的最大值。
  • net.ipv4.tcp_rmem:TCP接收缓冲区的最小值、默认值和最大值。
  • net.ipv4.tcp_wmem:TCP发送缓冲区的最小值、默认值和最大值。

调整原因:
增加TCP窗口大小可以提高高带宽-延迟产品(BDP)网络的吞吐量。例如,在高带宽延迟网络(如跨洲连接)中,较大的缓冲区允许更多的数据在传输过程中被“挂起”,从而提高整体数据传输效率。

调整方法:

编辑/etc/sysctl.conf文件,添加或修改以下参数:

# 增大核心缓冲区大小
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216# 增大TCP接收缓冲区
net.ipv4.tcp_rmem = 4096 87380 16777216# 增大TCP发送缓冲区
net.ipv4.tcp_wmem = 4096 65536 16777216

应用更改:

sudo sysctl -p

2. 启用和优化窗口缩放

参数:

  • net.ipv4.tcp_window_scaling

调整原因:
TCP窗口缩放允许TCP窗口大小超过65,535字节,这是传统TCP窗口大小的上限。启用窗口缩放对于高带宽-延迟网络至关重要,因为它使得TCP可以利用更大的窗口,从而提高吞吐量。

调整方法:

确保窗口缩放已启用:

sudo sysctl -w net.ipv4.tcp_window_scaling=1

编辑/etc/sysctl.conf以永久启用:

net.ipv4.tcp_window_scaling = 1

然后应用更改:

sudo sysctl -p

3. 优化拥塞控制算法

参数:

  • net.ipv4.tcp_congestion_control

常见算法:

  • cubic:默认的拥塞控制算法,适用于高带宽和高延迟网络。
  • reno:较旧的算法,适用于一般网络条件。
  • bbr:基于带宽-延迟产品的先进算法,能够在高带宽和高延迟网络中提供更高的吞吐量和更低的延迟。

调整原因:
不同的拥塞控制算法在不同的网络条件下表现不同。例如,cubicbbr在高带宽-延迟网络中表现优异,而reno适用于较低带宽和延迟的环境。

调整方法:

查看当前拥塞控制算法:

sysctl net.ipv4.tcp_congestion_control

列出可用的算法:

sysctl net.ipv4.tcp_available_congestion_control

设置拥塞控制算法(例如设置为bbr):

sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

编辑/etc/sysctl.conf以永久设置:

net.ipv4.tcp_congestion_control = bbr

然后应用更改:

sudo sysctl -p

启用BBR:

除了设置拥塞控制算法,还需要启用BBR模块:

sudo modprobe tcp_bbr

并确保在启动时加载:

编辑/etc/modules-load.d/modules.conf,添加:

tcp_bbr

4. 调整重传超时(Retransmission Timeout)

参数:

  • net.ipv4.tcp_retries1:决定TCP在发送了多少个重传包后放弃。
  • net.ipv4.tcp_retries2:决定在放弃前最多允许的数据包重传次数。
  • net.ipv4.tcp_syn_retries:决定发送SYN包尝试建立连接的次数。

调整原因:
在高延迟或不稳定的网络中,适当增加重传次数和超时可以避免过早地放弃连接尝试。然而,过多的重传可能会导致资源消耗和连接延迟增加。

调整方法:

编辑/etc/sysctl.conf,根据需要调整以下参数:

# 增加TCP重传的次数和时间
net.ipv4.tcp_retries1 = 6
net.ipv4.tcp_retries2 = 15# 增加SYN重试次数
net.ipv4.tcp_syn_retries = 5

然后应用更改:

sudo sysctl -p

5. 调整FIN超时和保持活动设置

参数:

  • net.ipv4.tcp_fin_timeout:决定FIN-WAIT-2状态的超时时间。
  • net.ipv4.tcp_keepalive_time:决定开始发送keepalive探测的空闲时间。

调整原因:
减少FIN超时可以帮助更快地回收TIME-WAIT状态的连接,释放系统资源。调整keepalive设置可以帮助及时检测和清理挂起的连接。

调整方法:

编辑/etc/sysctl.conf,添加或修改以下参数:

# 减少FIN-WAIT-2状态超时
net.ipv4.tcp_fin_timeout = 30# 调整TCP keepalive参数
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

然后应用更改:

sudo sysctl -p

6. 启用TCP快速打开(TCP Fast Open)

参数:

  • net.ipv4.tcp_fastopen

调整原因:
TCP快速打开可以减少TCP握手延迟,加快数据传输的启动速度,特别适用于需要频繁建立短连接的应用场景。

调整方法:

启用TCP快速打开:

sudo sysctl -w net.ipv4.tcp_fastopen=3

永久启用:

编辑/etc/sysctl.conf,添加:

net.ipv4.tcp_fastopen = 3

然后应用更改:

sudo sysctl -p

注意: 应用TCP快速打开需要应用程序支持该功能。

7. 其他有用的TCP参数

a. 增加最大端口号范围

参数:

  • net.ipv4.ip_local_port_range

调整原因:
在高并发连接的服务器上,增大可用的端口范围可以减少端口耗尽的问题。

调整方法:

编辑/etc/sysctl.conf,添加或修改:

net.ipv4.ip_local_port_range = 1024 65535

然后应用更改:

sudo sysctl -p

b. 启用TCP时间戳

参数:

  • net.ipv4.tcp_timestamps

调整原因:
TCP时间戳可以帮助更准确地计算往返时间(RTT),从而优化重传超时和拥塞控制。

调整方法:

确保TCP时间戳已启用:

sudo sysctl -w net.ipv4.tcp_timestamps=1

永久启用:

编辑/etc/sysctl.conf,添加:

net.ipv4.tcp_timestamps = 1

然后应用更改:

sudo sysctl -p

调整参数的具体原因总结

  1. 增加缓冲区大小(rmem_maxwmem_max

    • 原因:适应高带宽-延迟产品网络,提高数据传输的吞吐量。
  2. 启用窗口缩放(tcp_window_scaling

    • 原因:允许更大的TCP窗口,从而支持更高的吞吐量,特别是在高BDP网络中。
  3. 选择合适的拥塞控制算法(tcp_congestion_control

    • 原因:不同的算法在不同网络条件下表现不同,选择适合当前网络状况的算法以优化性能。
  4. 调整重传超时(tcp_retries1tcp_retries2

    • 原因:在不稳定或高延迟网络中,适当增加重传次数和延迟,以避免过早放弃连接。
  5. 优化连接关闭和保持活动设置

    • 原因:加快连接资源的回收,及时检测和清理挂起的连接,释放系统资源。
  6. 启用TCP快速打开(tcp_fastopen

    • 原因:减少TCP握手延迟,提升短连接的建立速度。
  7. 扩展本地端口范围(ip_local_port_range

    • 原因:在高并发环境下,防止端口耗尽,支持更多的并发连接。
  8. 启用TCP时间戳(tcp_timestamps

    • 原因:提高RTT测量的精确度,优化重传和拥塞控制算法的表现。

调整参数的注意事项

  1. 谨慎调整:不当的参数调整可能导致网络性能下降或系统不稳定。在修改之前,建议在测试环境中进行验证。

  2. 逐步调整:一次只调整一个或少数几个参数,以便准确评估每个调整的影响。

  3. 监控系统:在调整参数后,持续监控网络性能和系统资源使用情况,确保调整带来了预期的效果。

  4. 了解应用需求:不同的应用有不同的网络需求,根据具体应用场景进行优化。例如,数据库服务器可能需要不同的优化策略与Web服务器。

通过合理调整上述TCP参数,可以显著提升Linux系统在特定网络条件下的TCP性能,满足高效稳定的数据传输需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/469067.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Latex使用花体符号\mathbb{R}报错解决办法

一、背景 latex的优势是可以进行自动排版,以及复杂公式的编辑。然而,编辑花体符号R时,使用命令\mathbb{R}报错,编译不通过,这里记录一下解决办法。 二、Latex使用花体符号\mathbb{R}报错解决办法 在LaTeX中&#xf…

当当网创始人李国庆邀您:共襄创客匠人5000人“全球创始人IP领袖高峰论坛”

创客匠人正式官宣!当当网原CEO、联合创始人和首席大股东、CRYSTO董事长、CEO李国庆,受邀参加创客匠人5000人“全球创始人IP领袖高峰论坛”,将与我们携手共赴这场巅峰盛宴。 由创客匠人打造的“全球创始人IP领袖高峰论坛”将在2024年12月26日-…

docker安装zookeeper,以及zk可视化界面介绍

1. zookeeper 1.1. zookeeper简单介绍 ZooKeeper 是一个分布式的开源协调服务,最初由 Apache Hadoop 项目开发,用于构建分布式应用程序。它提供了一个简单的接口,允许开发人员实现诸如配置维护、域名服务、分布式同步、组服务等常见任务。Z…

SIwave:释放 SIwizard 求解器的强大功能

SIwave 是一种电源完整性和信号完整性工具。SIwizard 是 SIwave 中 SI 分析的主要工具,也是本博客的主题。 SIwizard 用于研究 RF、clock 和 control traces 的信号完整性。该工具允许用户进行瞬态分析、眼图分析和 BER 计算。用户可以将 IBIS 和 IBIS-AMI 模型添加…

Mac中禁用系统更新

Mac中禁用系统更新 文章目录 Mac中禁用系统更新1. 修改hosts,屏蔽系统更新检测联网1. 去除系统偏好设置--系统更新已有的小红点标记 1. 修改hosts,屏蔽系统更新检测联网 打开终端,执行命令: sudo vim /etc/hosts127.0.0.1 swdis…

macOS 下的 ARM 裸机嵌入式开发入门- 第二部分:实现第一个裸机应用并且调试

1、准备二进制运行程序镜像 利用 QEMU 仿真一个完整的系统,并创建最简单的“Hello world!”示例。 QEMU 模拟器支持 VersatilePB 平台,该平台包含一个 ARM926EJ-S 核心,以及其他外设,四个 UART 串行端口;特别是第一个…

分享三个python爬虫案例

一、爬取豆瓣电影排行榜Top250存储到Excel文件 近年来,Python在数据爬取和处理方面的应用越来越广泛。本文将介绍一个基于Python的爬虫程序,用于抓取豆瓣电影Top250的相关信息,并将其保存为Excel文件。 获取网页数据的函数,包括以…

怎么禁止Ubuntu自动更新升级

怎么禁止Ubuntu自动更新升级 笔者在做MIT 6.S081的时候发现他给我的qemu自动更新了又卡住了,故关闭了自动更新 文章目录 怎么禁止Ubuntu自动更新升级一、图形化修改二、基于命令行修改配置文件的方法 一、图形化修改 1.打开设置->软件和更新->更新 2.选择自…

论文1—《基于卷积神经网络的手术机器人控制系统设计》文献阅读分析报告

论文报告:基于卷积神经网络的手术机器人控制系统设计 摘要 本研究针对传统手术机器人控制系统精准度不足的问题,提出了一种基于卷积神经网络的手术机器人控制系统设计。研究设计了控制系统的总体结构,并选用PCI插槽上直接内插CAN适配卡作为上…

水库大坝安全监测预警方法

一、监测目标 为了确保水库大坝的结构安全性和运行稳定性,我们需要采取一系列措施来预防和减少因自然灾害或其他潜在因素所引发的灾害损失。这不仅有助于保障广大人民群众的生命财产安全,还能确保水资源的合理利用和可持续发展。通过加强大坝的监测和维护…

赖茅:“酱香酒+羽毛球”营销理念的先驱者与领航者

前言:贵州赖茅酒业有限公司成立于2014年,由贵州茅台酒股份有限公司与中石化易捷销售有限公司强强联合,引入民营资本组建。2018年签约成为世界羽联首家内地官方合作伙伴,突破白酒企业传统模式,创新打造“酱香酒&#xf…

二叉搜索树的应用(了解补充)

前言 前面我们对二叉搜索树进行了讲解,本节内容我们将对该树的应用进行讲解,对二叉搜素树进行进一步的了解。 二叉搜索树key和key/value使用场景 key搜索场景 只有key作为关键码,结构中只需要存储key即可,关键码即为需要搜索到的值…

Python 爬虫运行状态监控:进度、错误与完成情况

Python 爬虫运行状态监控:进度、错误与完成情况 在进行大规模数据爬取时,监控爬虫的运行状态至关重要。通过实时监控,可以了解爬虫的工作进度、出现的错误以及任务完成情况。这样可以及时发现并解决问题,确保数据抓取任务顺利进行…

Marin说PCB之1000-BASE-T1的PCB设计总结--01

上周末小编我从耶路撒冷出差回来,从浦东机场回来的路上和司机师傅聊了一会天,司机师傅说小伙子喜欢看脱口秀不?我说挺喜欢的,之前还看过上海这边的周立波的海派脱口秀呢,我记得还有一个综艺节目叫做一周立波秀&#xf…

[大模型]视频生成-Sora简析

参考资料: Sora技术报告https://openai.com/index/video-generation-models-as-world-simulators/4分钟详细揭密!Sora视频生成模型原理https://www.bilibili.com/video/BV1AW421K7Ut 一、概述 相较于Gen-2、Stable Diffusion、Pika等生成模型的前辈&am…

Prompt Engineering 提示工程

一、什么是提示工程(Prompt Engineering) Prompt 就是发给大模型的指令,比如讲个笑话、用 Python 编个贪吃蛇游戏等;大模型只接受一种输入,那就是 prompt。本质上,所有大模型相关的工程工作,都是…

python爬虫指南——初学者避坑篇

目录 Python爬虫初学者学习指南一、学习方向二、Python爬虫知识点总结三、具体知识点详解和实现步骤1. HTTP请求和HTML解析2. 正则表达式提取数据3. 动态内容爬取4. 数据存储5. 反爬虫应对措施 四、完整案例:爬取京东商品信息1. 导入库和设置基本信息2. 获取网页内容…

微搭低代码入门01变量

目录 1 变量的定义2 变量的赋值3 变量的类型4 算术运算符5 字符串的连接6 模板字符串7 检查变量的类型8 解构赋值8.1 数组的解构赋值8.2 对象的解构赋值 9 类型转换9.1 转换为字符串9.2 转换为数字9.3 转换为布尔值 总结 好些零基础的同学,在使用低代码的时候&#…

FPGA学习笔记#5 Vitis HLS For循环的优化(1)

本笔记使用的Vitis HLS版本为2022.2,在windows11下运行,仿真part为xcku15p_CIV-ffva1156-2LV-e,主要根据教程:跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 从这一篇开始正式进入HLS对C代码的优化笔记 学习笔记:《…

每日OJ题_牛客_JZ38字符串的排列_DFS_C++_Java

目录 牛客_JZ38字符串的排列_DFS 题目解析 C代码 Java代码 牛客_JZ38字符串的排列_DFS 字符串的排列_牛客题霸_牛客网 描述: 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。 例如输入…