【DevOps】Linux 内核网络子系统全面指南与性能调优
目录
一、Linux 内核网络子系统
1. Netfilter
主要特性
工作流程
2. Traffic Control (TC)
主要特性
工作流程
3. Socket
主要特性
工作流程
二、内核参数优化
1. net.ipv4.tcp_window_scaling
2. net.core.netdev_max_backlog
3. net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem
4. net.ipv4.tcp_fin_timeout
5. net.core.rmem_default 和 net.core.wmem_default
一、Linux 内核网络子系统
Linux 内核的网络子系统是其架构中非常复杂和强大的部分,负责处理所有网络相关的操作。这些操作包括数据包过滤、地址转换、流量控制、服务质量保证,以及为应用程序提供网络通信的接口。下面我们详细介绍几个关键的网络子系统:Netfilter、Traffic Control 和 Socket。
1. Netfilter
Netfilter 是 Linux 内核中一个非常重要的网络子系统,主要用于在内核中实现包过滤、网络地址转换 (NAT) 和其他网络相关的钩子功能。Netfilter 提供了一系列的钩子(hook),这些钩子位于网络协议栈的不同位置,可以捕获网络协议栈中的数据包,进行处理或决定数据包的去向。
主要特性
-
数据包过滤:Netfilter 通过与 iptables(在较新的内核中是 nftables)的配合,可以实现包括但不限于 IP 地址、端口号、协议类型等条件的数据包过滤。
-
网络地址转换 (NAT):Netfilter 支持源 NAT (SNAT)、目的 NAT (DNAT) 和端口映射,这对于路由器和防火墙的功能是非常关键的。
-
状态跟踪:Netfilter 可以跟踪每个网络连接的状态,这使得它可以识别和处理每个连接的数据包,如区分新连接、已建立的连接和结束的连接。
-
用户空间通信:Netfilter 可以通过
nfnetlink与用户空间程序通信,允许用户空间程序动态地更改过滤规则或收集网络状态信息。
工作流程
Netfilter 提供了五个主要的钩子点,它们位于网络协议栈的不同层次:
NF_IP_PRE_ROUTING:在路由决策之前,对进入的数据包进行处理。NF_IP_LOCAL_IN:在确定数据包目的地为本机后进行处理。NF_IP_FORWARD:在进行路由转发决策后,对需要转发的数据包进行处理。NF_IP_LOCAL_OUT:在本机产生的数据包即将发送出去前进行处理。NF_IP_POST_ROUTING:在数据包即将离开网卡前进行处理。
2. Traffic Control (TC)
Traffic Control (TC) 是 Linux 内核的另一个网络子系统,用于实现网络流量控制和服务质量(QoS)。TC 允许 Linux 内核对网络接口的数据包发送队列进行控制,包括带宽限制、延迟管理和数据包排队策略。
主要特性
-
带宽管理:通过诸如令牌桶过滤器 (TBF)、随机早期检测 (RED) 等机制,控制数据流的速率。
-
排队策略:包括 FIFO、Stochastic Fairness Queueing (SFQ)、Hierarchical Token Bucket (HTB) 等,用于控制数据包的发送顺序和方式。
-
分类:TC 使用分类器将数据包分流到不同的类和队列,允许对不同类型的流量实施不同的控制策略。
-
过滤:通过过滤器确定数据包属于哪个类,过滤器可以基于多种条件,如协议、端口号、IP 地址等。
工作流程
- 分类:数据包首先通过分类器进行分类,判定进入哪个类。
- 排队:每个类有自己的队列,数据包按照策略进入相应的队列。
- 调度:调度器根据策略从队列中取出数据包发送。
3. Socket
Socket 是 Linux 内核提供的用于网络通信的基本接口,属于网络子系统中的应用层接口部分。Socket 抽象了网络通信的细节,使应用程序可以通过标准的接口发送和接收数据,而无需关心底层网络协议的具体实现。
主要特性
-
多种类型:支持多种类型的 Socket,包括流式套接字 (SOCK_STREAM)、数据报套接字 (SOCK_DGRAM) 和原始套接字 (SOCK_RAW)。
-
多种协议:支持多种网络协议,如 IPv4、IPv6、TCP、UDP 等。
-
阻塞与非阻塞操作:Socket 可以在阻塞模式和非阻塞模式下工作,允许应用根据需要选择合适的工作方式。
-
安全特性:支持通过 SSL/TLS 等协议提供加密通信。
工作流程
- 创建 Socket:应用程序通过
socket()系统调用创建一个 Socket。 - 配置 Socket:通过各种系统调用 (如
bind(),listen(),connect()) 配置 Socket 的属性和行为。 - 数据传输:使用
send()和recv()(或write()和read()) 系统调用进行数据的发送和接收。 - 关闭 Socket:通过
close()系统调用关闭 Socket。
这些子系统合作,形成了 Linux 内核中强大而灵活的网络功能,支持从简单的数据传输到复杂的网络应用。
二、内核参数优化
在 Linux 系统中,通过调整内核参数来优化网络性能是一种常见且有效的方法。内核参数可以控制 TCP/IP 栈和其他网络子系统的行为,从而改善网络吞吐量、降低延迟、增加连接的稳定性和响应速度。下面是对您提到的两个参数的详细介绍,以及其他一些常用的内核参数和它们的优化作用。
1. net.ipv4.tcp_window_scaling
-
参数说明:
net.ipv4.tcp_window_scaling是一个布尔值参数,用于启用或禁用 TCP 窗口缩放功能。 -
作用:TCP 窗口缩放是一种机制,允许 TCP 连接动态调整其接收窗口大小,从而适应不同的网络延迟和带宽条件。这个功能在高延迟或高带宽的网络环境(如卫星通信、长距离光纤连接)中尤其重要,可以显著提高数据传输效率。
-
默认值:通常默认为
1(启用)。 -
调整建议:
- 在网络环境稳定且网络延迟较低的局域网环境中,这个选项的效果不明显,但在宽带较大的网络中,启用窗口缩放可以提高传输性能。
- 如果要启用 TCP 窗口缩放,确保
sysctl设置为net.ipv4.tcp_window_scaling = 1。
2. net.core.netdev_max_backlog
-
参数说明:
net.core.netdev_max_backlog设置了在内核处理之前,网络设备驱动能够队列的接收包的最大数量。 -
作用:这个参数决定了网络设备接收队列的最大长度,对于高速网络或是在突发大量网络请求时,增加这个参数的值可以减少因队列溢出而导致的丢包,从而提高网络性能。
-
默认值:默认值可能在 1000 左右,具体值依据不同的内核和系统配置而变化。
-
调整建议:
- 在高速网络环境中或大量并发连接的服务器上,可以适当增加这个值,例如设置为
2000或更高,如3000。 - 修改方式:
sysctl -w net.core.netdev_max_backlog=2000或通过编辑/etc/sysctl.conf文件添加net.core.netdev_max_backlog = 2000并重新加载配置sysctl -p。
- 在高速网络环境中或大量并发连接的服务器上,可以适当增加这个值,例如设置为
3. net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem
-
参数说明:
net.ipv4.tcp_rmem:这个参数控制 TCP 接收缓冲区的最小值、默认值和最大值,单位是字节。net.ipv4.tcp_wmem:这个参数控制 TCP 发送缓冲区的最小值、默认值和最大值,单位是字节。
-
作用:调整这些参数可以优化 TCP 的缓冲区大小,适应不同的网络环境,特别是在高带宽和高延迟的网络中,增大这些值可以提高网络性能。
-
默认值:通常形式为
4096 87380 6291456。 -
调整建议:
- 对于高性能服务器,可以将这些值调整为更大,例如
4096 65536 16777216(对应最小、默认、最大)。 - 修改方式:
sysctl -w net.ipv4.tcp_rmem="4096 65536 16777216" sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
- 对于高性能服务器,可以将这些值调整为更大,例如
4. net.ipv4.tcp_fin_timeout
-
参数说明:
net.ipv4.tcp_fin_timeout指定了等待一个 TCP 连接完全终止前的超时时间,单位是秒。 -
作用:这个参数影响 TIME-WAIT 状态的持续时间。减少这个值可以快速回收套接字,但是太小可能导致旧的重复数据段出现在新的连接中。
-
默认值:通常默认为
60秒。 -
调整建议:
- 对于处理大量短连接的服务器,可以适当减少这个值,例如设置为
30或更低,如15。 - 修改方式:
sysctl -w net.ipv4.tcp_fin_timeout=30
- 对于处理大量短连接的服务器,可以适当减少这个值,例如设置为
5. net.core.rmem_default 和 net.core.wmem_default
-
参数说明:
net.core.rmem_default:指定接收套接字缓冲区的默认大小(字节)。net.core.wmem_default:指定发送套接字缓冲区的默认大小(字节)。
-
作用:这些参数控制非 TCP 套接字的默认缓冲区大小,对于 UDP 通信等场景下,增大这些值可以提高性能。
-
默认值:通常为
212992。 -
调整建议:
- 对于需要大量 UDP 通信的应用,可以增加这些值,如设置为
262144或更大。 - 修改方式:
sysctl -w net.core.rmem_default=262144 sysctl -w net.core.wmem_default=262144
- 对于需要大量 UDP 通信的应用,可以增加这些值,如设置为
通过合理调整这些参数,可以显著提高 Linux 系统的网络性能,尤其是在高负载、高并发的网络服务器环境中。每一次调整后,都应该进行充分的测试,以确保新的配置不仅提升了性能,而且保持了系统的稳定性和可靠性。
相关文章:
【DevOps】Linux 内核网络子系统全面指南与性能调优
目录 一、Linux 内核网络子系统 1. Netfilter 主要特性 工作流程 2. Traffic Control (TC) 主要特性 工作流程 3. Socket 主要特性 工作流程 二、内核参数优化 1. net.ipv4.tcp_window_scaling 2. net.core.netdev_max_backlog 3. net.ipv4.tcp_rmem 和 net.ipv4…...
mybatis-plus-ui代码生成器
mybatis-plus-generator-ui 提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Service,Controller等 ,可以自定义模板以及各类输出参数,也可通过SQL查询语句直接生成代码。 使用方法 引入mave…...
项目进度总结
完成了签到,老师发布签到并设置持续的时间,学生在规定的时间内可用签到码进行签到,超过时间将不在允许签到...
CheckStyle静态样式之道
优质博文:IT-BLOG-CN 在标准化的统一样式检查规范里,最为常用的统一样式工具是checkstyle插件,而不是国内阿里的代码规约插件。 【1】下载插件 【2】配置生效 配置生效及告警设置 【3】配置checkstyle.xml 官网地址 官网最新Releases 下面…...
2024中国振威化工装备展
2024上海国际化工设备展览会 第十六届上海国际化工装备博览会将于2024年11月19-21日在国家会展中心(上海)举办,预计参展企业1000多家,展览面积7万平方米,观众突破10万人次。展会设置石化装备、化工单元设备、化工环保…...
Docker操作之启动多个相同容器实例并nginx负载均衡
文章目录 前言 一、一些概念 1.Docker 2.nginx 二、操作步骤 1.构建compose.yaml 2.nginx配置 3.Docker compose命令 4.问题与解决 总结 前言 Docker对于开发、运维人员来说都很熟悉,但是对于开发人员来说,多数时候只需一个容器实例运行即可。…...
本地的git仓库和远程仓库
文章目录 1. 远程创建仓库2. 关联远程和本地代码3. 推送本地分支到远程4. 删除远程分支5. 分支重命名6. git pull rebase7. git merge master把本地文件删除了 1. 远程创建仓库 2. 关联远程和本地代码 上面创建完后会得到一个git仓库的链接,有SSH或者http的 http:…...
Google I/O 2024 干货全解读:Gemini AI 横空出世,智能未来触手可及!
Google I/O 2024 干货全解读:Gemini AI 横空出世,智能未来触手可及! 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》…...
深入理解JVM:介绍JVM的工作原理,包括类加载机制,内存模型,垃圾回收机制等
类加载机制: JVM的类加载机制主要包括加载、连接(验证、准备和解析)、初始化、使用和卸载五个阶段。第一个阶段是加载需求的.class文件到内存中。第二个阶段是完成对字节码的验证,为类变量分配内存并初始化为对应类型默认值。第三…...
Springboot+Vue项目-基于Java+MySQL的民族婚纱预定系统(附源码+演示视频+LW)
大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…...
Java面经学习2
来源 https://www.nowcoder.com/discuss/619573767051800576 1.一面内容 RocketMQ延时消息(项目用到了)底层怎么实现的(不会) 消息量太大导致读消息延迟时间很长怎么办 redis为什么快(说了内存、数据结构优化、单线…...
Java bin目录中的文件如何执行?
在 Java 项目中,bin 目录通常用于存放编译后的 .class 文件。如果你将编译后的 .class 文件放在 bin 目录中,需要确保在运行 Java 程序时指定正确的类路径。下面是一个简单的例子说明如何执行 bin 目录中的文件。 假设你的项目结构如下: pr…...
Kafka和Spark Streaming的组合使用学习笔记(Spark 3.5.1)
一、安装Kafka 1.执行以下命令完成Kafka的安装: cd ~ //默认压缩包放在根目录 sudo tar -zxf kafka_2.12-2.6.0.tgz -C /usr/local cd /usr/local sudo mv kafka_2.12-2.6.0 kafka-2.6.0 sudo chown -R qiangzi ./kafka-2.6.0 二、启动Kafaka 1.首先需要启动K…...
5.9网络协议
由网卡发送数据通过网线进行发送,当网卡接收到信号以后将数据传给内核数据区,然后由操作系统交给相应的进程。 将数据进行发送的时候需要借助于网线实现,这个时候会出现当传输的数据比较远的时候就借助于中继器将信号进行再生扩大࿰…...
QT客户端开发的注意事项
QT客户端开发是一个涉及图形用户界面(GUI)设计、网络编程、数据库交互等多个方面的复杂过程。以下是在进行QT客户端开发时应注意的一些关键事项,通过关注这些事项,可以提高QT客户端应用的质量和开发效率。北京木奇移动技术有限公司…...
k8s源码编译失败:Makefile:1: *** 缺失分隔符。 停止。
目录 问题解决 更换Arch或系统 问题解决 编译k8s源码的kubelet时执行make失败:Makefile:1: *** 缺失分隔符。 停止。 首先,查看文件内容 # cat Makefile build/root/Makefile 修改Makefile,给第一行前增加include,如下&…...
服务器数据恢复—拯救raid5阵列数据行动,raid5数据恢复案例分享
Raid5数据恢复算法原理: 分布式奇偶校验的独立磁盘结构(被称之为raid5)的数据恢复有一个“奇偶校验”的概念。可以简单的理解为二进制运算中的“异或运算”,通常使用的标识是xor。运算规则:若二者值相同则结果为0&…...
旅游集市数仓建设
旅游集市数仓建设 小白如何从0到1成为大数据工程师 目录 旅游集市数仓建设 1.上传数据 2.可能用到的UDF函数 3.创建所需数据库及表 1)ODS层 ①ods_oidd ②ods_wcdr ③ods_ddr ④ods_dpi 2)DWD层 ①dwd_res_regn_mergelocation_msk_d ②dwm_s…...
vue实现点击高亮效果
<view class"tabs"><textv-for"(item, index) in subTypes":key"item.id"class"text":class"{ active: index activeIndex }"//动态绑定高亮类:判断下标是否等于当前下标tap"activeIndex index&…...
uniapp 配置请求代理+请求封装
uniapp官网提供了三种方式:什么是跨域 | uni-app官网 1. 通过uniapp自带浏览器 打开项目是不存在跨域的 第二种方式: "h5" : {"template" : "static/index.html","devServer": {"proxy": {&quo…...
VisDrone2019数据集转换COCO格式实战:手把手教你用Python脚本搞定YOLOX训练数据准备
VisDrone2019数据集转换COCO格式全流程解析:从数据清洗到YOLOX适配 无人机视角下的目标检测一直是计算机视觉领域的特殊挑战。VisDrone2019作为该领域最具代表性的开源数据集,包含了10个类别、超过26万张标注图像,但原始数据格式与主流框架的…...
从 API 调用到工具链:梳理 AI 介入测试流程的 5 个成熟度等级
2026年,AI正在以前所未有的速度重构软件测试行业。但“AI测试”并非一个开关——从简单调用ChatGPT生成几条用例,到构建完整的Agent自愈测试体系,中间存在一条清晰的能力进化路径。本文将这条路径梳理为5个成熟度等级,结合2026年最新工具、开源项目与行业数据,帮你准确评估…...
如何用3分钟完成淘宝淘金币全任务?终极自动化脚本完全指南
如何用3分钟完成淘宝淘金币全任务?终极自动化脚本完全指南 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi …...
FPGA设计实战:别再乱用复位了!同步、异步与异步复位同步释放的Verilog代码避坑指南
FPGA设计实战:复位电路设计的黄金法则与Verilog避坑指南 在FPGA开发的世界里,复位电路就像交响乐团的指挥——它决定了整个系统能否从混沌走向有序。许多工程师往往低估了复位设计的重要性,直到项目后期遭遇难以追踪的亚稳态问题或时序收敛失…...
大语言模型推理引擎优化:架构挑战与关键技术解析
1. 大语言模型推理引擎的架构挑战与优化方向1.1 Transformer架构的固有瓶颈Transformer架构的自注意力机制存在两大核心瓶颈:计算复杂度和内存占用。对于序列长度N,自注意力层的计算复杂度为O(N),这使得长文本处理成为性能黑洞。以2048 token…...
告别轮询!手把手教你用S32K3的FlexCAN Enhanced FIFO+DMA实现高效CAN FD数据接收
告别轮询!手把手教你用S32K3的FlexCAN Enhanced FIFODMA实现高效CAN FD数据接收 在汽车电子和工业控制领域,CAN FD总线的高负载场景对MCU的实时性提出了严苛挑战。当波特率飙升至5Mbps、单帧数据扩展到64字节时,传统的中断接收模式会让CPU陷入…...
MobaXterm自定义语法高亮进阶:修复绿色失效与打造个性化终端
1. 为什么你的MobaXterm绿色高亮总是不亮? 第一次用MobaXterm时我就被它的彩色终端吸引了,特别是成功操作会显示醒目的绿色,失败提示则是刺眼的红色。但用了两周后突然发现:所有成功操作的绿色提示全都消失了!这就像开…...
加密货币交易的AI革命:awesome-deep-trading中的区块链量化策略终极指南 [特殊字符]
加密货币交易的AI革命:awesome-deep-trading中的区块链量化策略终极指南 🚀 【免费下载链接】awesome-deep-trading List of awesome resources for machine learning-based algorithmic trading 项目地址: https://gitcode.com/gh_mirrors/aw/awesome…...
Matlab阶跃响应性能指标自动化计算:从原理到工程实践
1. 项目概述:从阶跃响应曲线到量化性能的灵魂拷问在控制系统、信号处理乃至电路设计的日常工作中,我们常常会面对一个看似简单却至关重要的任务:给一个系统施加一个“阶跃”输入,然后观察它的输出如何从静止状态“爬升”到新的稳态…...
破解人类微生物组数据分析难题:curatedMetagenomicData的完整解决方案
破解人类微生物组数据分析难题:curatedMetagenomicData的完整解决方案 【免费下载链接】curatedMetagenomicData Curated Metagenomic Data of the Human Microbiome 项目地址: https://gitcode.com/gh_mirrors/cu/curatedMetagenomicData 宏基因组数据分析在…...
