1_linux系统网络性能如何优化——几种开源网络协议栈比较
之前合集《计算机网络从入门到放弃》第一阶段算是已经完成了。都是理论,没有实操,让“程序猿”很难受,操作性不如 Modbus发送的报文何时等到应答和 tcp通信测试报告单1——connect和send。开始是想看linux内核网络协议栈的源码,然后编译调试,找了下流程,感觉不适合刚开始接触网络协议栈的初学者。受益于之前Modbus UDP开源库的想法,萌生了找一些开源网络协议栈来学习的想法。下面介绍几款开源的网络协议栈,希望最终可以不用linux系统的网络协议栈然后用“自己的网络协议栈”写出socket通讯。
一、几种开源网络框架对比
开源 Linux 高效网络协议栈通常用于优化网络性能,尤其是在高吞吐量和低延迟场景中,如数据中心、云计算、高频交易等领域。以下是一些常见的开源 Linux 高效网络协议栈和相关框架:
1. DPDK(Data Plane Development Kit)
特点:
·高性能用户态网络框架,绕过内核网络协议栈,直接处理网卡上的数据包。
·提供零拷贝和高效内存管理。
·支持多核并行,常用于数据中心和网络功能虚拟化(NFV)应用。
应用场景:
·高性能网络转发(如 vSwitch)。
·流量分析、负载均衡、深度包检测等。
官网和资源:
·DPDK 官方网站 https://www.dpdk.org
2. eBPF/XDP(eXpress Data Path)
特点:
·eBPF 是 Linux 内核中的一种高效沙盒技术,允许在内核中运行用户定义的代码。
·XDP 是 eBPF 的扩展,用于加速数据包处理,支持直接在网卡驱动层面处理数据包。
·延迟低,适用于 DDoS 防护、流量分类等场景。
应用场景:
·超低延迟的网络应用。
·数据包过滤、负载均衡。
学习资源:
·eBPF 官方文档 https://ebpf.io
·XDP 入门指南 https://github.com/xdp-project/xdp-tutorial
3. VPP(Vector Packet Processing)
特点:
·由 FD.io 社区开发的高性能网络数据平面框架。
·基于数据包矢量处理,利用 CPU 的 SIMD 指令集加速数据包转发。
·提供插件式架构,可支持多种协议。
应用场景:
·数据包转发、IPSec 加速、LISP 协议等。
官网和资源:
·VPP 官网 https://fd.io
4. Netmap
特点:
·一个高效的网络 I/O 框架,用于绕过传统内核协议栈。
·轻量级设计,提供直接访问网络设备的能力。
·比传统网络栈具有更低的延迟和更高的吞吐量。
应用场景:
·高性能数据包捕获和发送。
·自定义用户态协议栈开发。
官网和资源:
·Netmap 项目主页 https://github.com/luigirizzo/netmap
5. mTCP
特点:
·专为高性能环境设计的用户态 TCP/IP 协议栈。
·支持多核并行化和高效内存管理。
·提供传统内核栈无法实现的高吞吐量和低延迟。
应用场景:
·高性能服务器应用程序(如 Web 服务器、代理服务器)。
官网和资源:
·mTCP 官方网站 https://github.com/mtcp-stack/mtcp
6. SEASTAR
特点:
·基于事件驱动的 C++ 框架,内置高效网络协议栈。
·专为低延迟和高吞吐量的分布式系统设计。
·被 ScyllaDB 等高性能数据库广泛采用。
应用场景:
·数据库、高性能分布式系统。
官网和资源:
·Seastar 官方网站 https://seastar.io
7. LWIP(Lightweight IP)
特点:
·一款开源轻量级 TCP/IP 协议栈,专为嵌入式设备设计。
·资源占用低,适合低性能设备或 IoT 应用。
·可移植性强,可运行在 bare-metal 环境或操作系统上。
应用场景:
·嵌入式设备、物联网。
官网和资源:
·LWIP 项目主页
8. TAS(TCP Acceleration as a Service)
特点:
·一种高效的用户态 TCP 协议栈。
·提供高性能和低延迟,支持 RDMA 等技术。
·在用户态实现高效连接管理和数据传输。
应用场景:
·高性能服务器和分布式存储。
如何选择?
·高性能数据包处理:选择 DPDK、eBPF/XDP、VPP。
·用户态协议栈:选择 mTCP、Seastar、TAS。
·嵌入式应用:选择 LWIP。
·可扩展性和灵活性:选择 eBPF 或 VPP。
这些开源项目广泛应用于现代网络系统,可以根据需求和场景选择合适的解决方案。
二、开源网络框架与linux系统自带网络协议栈对比
在 5ms 间隔发送网络数据包 的场景中,开源高效网络协议栈与 Linux 自带协议栈的效果对比主要取决于以下几个因素:
1> 数据包处理路径的效率:自带协议栈的内核路径较长,而高效网络协议栈(如 DPDK、Netmap)优化了数据包处理路径。
2> 发送速率的瓶颈:开源高效网络协议栈绕过了内核中的部分机制,可以显著降低 CPU 消耗和延迟。
3> 需求场景:如果发送间隔和吞吐量要求较低,Linux 自带协议栈已经能满足需求;但如果需要极高性能或处理更复杂的场景,则开源网络协议栈可能表现更好。
分析比较:
1、何时选择 Linux 自带协议栈
适用场景:
·发包速率较低(例如每 5ms 一个包,约 200 PPS)。
·需要使用通用的系统工具和库,无需额外依赖。
·应用程序不需要极低的延迟或极高的吞吐量。
优点:
·简单易用,开发周期短。
·适配性强,几乎可以在任何 Linux 发行版上运行。
缺点:
·受内核网络协议栈开销限制,性能相对较低。
·如果网络负载增加,可能受到内核中断或队列的瓶颈影响。
2、何时选择开源高效网络协议栈
适用场景:
·需要更低的延迟和更高的吞吐量(比如发包速率接近线速)。
·CPU 资源有限,希望降低内核和用户态切换的开销。
·有硬件支持并需要处理高负载的场景。
推荐协议栈:
DPDK:
o最适合高性能发包需求。
o提供直接操作网卡队列的能力,绕过内核协议栈。
o在 5ms 间隔发包场景下,CPU 占用率和延迟表现优于自带协议栈。
Netmap:
o实现简单,比 DPDK 更易上手。
o提供高效的用户态数据包发送能力。
优点:
·高性能,绕过内核,提高了吞吐量和降低延迟。
·支持零拷贝和批量发送,适合高频发包。
缺点:
·开发复杂,需要熟悉框架。
·可能需要特定硬件支持。
结论
Linux 自带协议栈:
o如果 5ms 发一次数据包的负载较低(<200 PPS),它已经足够胜任,无需额外引入复杂的工具。
o开发和部署都更简单,适合资源充足且不追求极限性能的场景。
开源高效网络协议栈:
o如果需要处理更高的负载、追求极低延迟、或 CPU 资源有限(避免频繁用户态和内核态切换),建议选择高效网络协议栈,如 DPDK 或 Netmap。
o对于 5ms 发一次的需求,优化后的性能将大幅优于内核自带协议栈,但开发和配置成本更高。
建议根据你的硬件条件(如网卡是否支持 DPDK)和开发周期需求来选择适合的方案。如果是新手且性能要求不高,推荐先尝试 Linux 自带协议栈;若追求高性能或部署于生产环境,建议采用 DPDK 或类似的高效网络协议栈。
欢迎关注:
网络相关的其他笔记:Modbus发送的报文何时等到应答
tcp通信测试报告单1——connect和send
libmodbus库的一些使用经历
7_计算机网络五层体系结构
6_协议与层次划分
5_计算机网络体系结构的形成
4_计算机网络在我国的发展_20241024
3_路由器分组交换知多少?20241009
2_互联网概述_20241007
1_计算机网络体系结构的形成_20241006
相关文章:
1_linux系统网络性能如何优化——几种开源网络协议栈比较
之前合集《计算机网络从入门到放弃》第一阶段算是已经完成了。都是理论,没有实操,让“程序猿”很难受,操作性不如 Modbus发送的报文何时等到应答和 tcp通信测试报告单1——connect和send。开始是想看linux内核网络协议栈的源码,然…...
C#—BitArray点阵列
C#—BitArray点阵列 在 C# 中,BitArray 类用来管理一个紧凑型的位值数组,数组中的值均为布尔类型,其中 true(1)表示此位为开启,false(0)表示此位为关闭。 当需要存储位(…...
特工找密码(蓝桥杯)
本来这题想用枚举暴力解的,但是运行总是超时,数值范围太大了~,所以该题不能用枚举进行暴力。 转换成二进制,我们判断一下其规律 注意:按位与是都为1时其值才为1,所以当x和y按位与的结果为2时,其…...
微信小程序--创建一个日历组件
微信小程序–创建一个日历组件 可以创建一个日历组件,来展示当前月份的日期,并支持切换月份的功能。 一、目录结构 /pages/calendarcalendar.wxmlcalendar.scsscalendar.jscalendar.json二、calendar.wxml <view class"calendar"><…...
A6919 基于java+SSM+mysql的区域物流管理系统设计与实现
的区域物流管理系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 摘 要 随着当前我国市场经济和计算机互联网技术迅速发展,各行各业的销售和管理都在逐步转向着第三方物流服务,包括中通快递,申通&…...
Python大数据可视化:基于python的电影天堂数据可视化_django+hive
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 电影数据 看板展示 我的信息 摘要 电影天堂数据可视化是…...
美畅物联丨JS播放器录像功能:从技术到应用的全面解析
畅联云平台的JS播放器是一款功能十分强大的视频汇聚平台播放工具,它已经具备众多实用功能,像实时播放、历史录像回放、云台控制、倍速播放、录像记录、音频播放、画面放大、全屏展示、截图捕捉等等。这些功能构建起了一个高效、灵活且用户友好的播放环境…...
前端国际化实战:从需求到落地的完整实践
"我们要开拓东南亚市场了!"产品经理小王兴奋地告诉我这个消息。作为技术负责人,我立刻意识到这意味着我们需要对整个系统进行国际化改造。说实话,虽然之前也做过一些多语言的项目,但面对一个正在运行的大型系统,国际化改造的挑战还是不小。 回想起上周的…...
MySQL 内置函数
字符串函数 concat(str1, str2, ...) 描述: 这个函数用于连接两个或多个字符串,返回一个新字符串。语法: concat(str1, str2, ...)注意点: 如果任意一个参数是null,则结果为null。可以连接任意数量的字符串。示例: select concat(first name: , first_…...
【Spring】日志类Logger的使用
在Spring框架中,日志记录是一个重要的组成部分,通常使用不同的日志框架来处理应用程序的日志。Spring 本身并直接提供一个名为Logger 的类,而是通过抽象的日志 API 让开发者能够选择和使用不同的日志实现(如 Log4j、Logback、SLF4…...
动态高优先权优先进程调度
一、实验目的 目的:了解并掌握动态高优先权优先调度算法的理论,掌握动态优先权的设置方式。 任务:模拟实现动态高优先权优先的调度(若数值越大优先权越高,每运行一个时间单位优先权-n,若数值越小优先权越高…...
【Linux SH脚本】LinuxCheck 应急检查信息脚本
LinuxCheck 1.下载地址 【Linux SH脚本】LinuxCheck 应急检查信息脚本 2.简介 LinuxCheck 是一个开源的自动化检查脚本,旨在快速检测 Linux 系统的安全配置和潜在问题。它支持多种发行版,能够扫描并生成详细的报告,涵盖用户管理、权限配置…...
Vue - route路由(router-link、useRoute、useRouter)
为了避免反复在 app.vue 中去修改引入的路径,当用了新的页面,想切换回老页面的时候,都需要去手动改变路径,那么有没有一种可能,可以在一个地方,把这些组件配置好,然后通过不同的路径,…...
【HarmonyOS】鸿蒙应用实现手机摇一摇功能
【HarmonyOS】鸿蒙应用实现手机摇一摇功能 一、前言 手机摇一摇功能,是通过获取手机设备,加速度传感器接口,获取其中的数值,进行逻辑判断实现的功能。 在鸿蒙中手机设备传感器ohos.sensor (传感器)的系统API监听有以下…...
渗透测试工具 -- SQLmap安装教程及使用
随着网络安全问题日益严峻,渗透测试成为了保护信息安全的重要手段。而在渗透测试的众多工具中,SQLmap凭借其强大的自动化SQL注入检测和利用能力,成为了网络安全专家必备的利器。那么,你知道如何高效地使用SQLmap进行漏洞扫描吗&am…...
vue 前端使用fetch实现下载文件跨域
首先配置vite.config.js export default defineConfig({plugins: [vue(),],resolve: {alias: {: /src, // 根据你的项目结构进行设置},},server: {proxy: {/image-proxy: {target: https://你得代理服务器,changeOrigin: true,rewrite: path > path.replace(/^/image-proxy…...
AI与大数据的深度结合:驱动决策的革命性力量
引言:数字时代的决策挑战 在这个信息爆炸的数字时代,数据早已渗透到我们生活的方方面面。全球每天产生的数据量呈指数级增长,无论是用户的消费行为、设备的运行状态,还是社会热点的实时动态,这些信息的规模和复杂性前所…...
搭建C#开发环境
本文记录C#开发环境的搭建过程。 一、Windows系统 二、Ubuntu 运行以下命令安装.NET SDK, sudo add-apt-repository ppa:dotnet/backports sudo apt-get install -y dotnet-sdk-9.0网络资料 Install .NET on Windowshttps://learn.microsoft.com/en-us/dotnet/co…...
Gitlab分支合并及在本地解决冲突
文章目录 问题及解决参考 问题及解决 Gitlab分支合并时碰到了合并冲突的问题,进行了本地解决冲突的操作,并成功进行了合并。 在服务器端的冲突解决比较简单,在此不赘述,这里主要记录下在本地解决冲突的操作。 Gitlab冲突的根本…...
解决 “TypeError: ‘tuple‘ object cannot be interpreted as an integer“ 错误提示
错误背景 这个错误通常出现在期望一个整数时,却传入了一个元组(tuple)。Python 无法将元组解释为整数,因此会抛出 TypeError。 错误示例 python 复制代码 for i in (1, 2, 3): print(range(i)) 运行时会抛出如下错误:…...
OSPF协议
OSPF介绍 OSPF(Open Shortest Path First,开放最短路径优先)是一种用于互联网协议网络的链路状态路由协议。它属于内部网关协议(IGP),主要用于单一自治系统(AS)内部的路由选择。在A…...
前端编辑器JSON HTML等,vue2-ace-editor,vue3-ace-editor
与框架无关 vue2-ace-editor有问题,ace拿不到(brace) 一些组件都是基于ace-builds或者brace包装的 不如直接用下面的,不如直接使用下面的 <template><div ref"editor" class"json-editor"><…...
threejs——无人机概念切割效果
主要技术采用着色器的切割渲染,和之前写的风车可视化的文章不同,这次的切割效果是在着色器的基础上实现的,并新增了很多可调节的变量,兄弟们,走曲儿~ 线上演示地址,点击体验 源码下载地址,点击下载 正文 从图中大概可以看出以下信息,一个由线组成的无人机模型,一个由…...
360极速浏览器不支持看PDF
360安全浏览器采用的是基于IE内核和Chrome内核的双核浏览器。360极速浏览器是源自Chromium开源项目的浏览器,不但完美融合了IE内核引擎,而且实现了双核引擎的无缝切换。因此在速度上,360极速浏览器的极速体验感更佳。 展示自己的时候要在有优…...
Python Turtle 实现动态时钟:十二时辰与星空流星效果
在这篇文章中,我将带你通过 Python 的 turtle 模块构建一个动态可视化时钟程序。这个时钟不仅具备传统的时间显示功能,还融合了中国古代的十二时辰与八卦符号,并通过动态星空、流星效果与昼夜背景切换,为程序增添了观赏性和文化内…...
使用 UniApp 实现简单的个人中心页面
1. 创建 UniApp 项目 首先,确保你已经安装了 HBuilderX 或其他支持 UniApp 的开发工具。然后创建一个新的 UniApp 项目。 # 使用 HBuilderX 创建新项目 # 选择 uni-app 模板 -> 选择 Vue.js 模板 -> 输入项目名称 -> 创建2. 安装依赖 UniApp 内置了一些…...
spring cloud contract http实例
微服务很多时,服务之前相互调用,接口参数的一致性要变得很难维护。 spring cloud contract 提供了测试接口一致性的方法。 一 项目配置 plugins {id "groovy"id "org.springframework.cloud.contract" version "4.0.5"i…...
修改docker源
在/etc/docker/daemon.json文件中写入 { "registry-mirrors": [ "Welcome to nginx!" ] } 执行 systemctl daemon-reload systemctl restart docker docker info能够看到源已经被替换 现在国内能够使用的docker源经过测试只有Welcome to nginx! …...
顺序表的使用,对数据的增删改查
主函数: 3.c #include "3.h"//头文件调用 SqlListptr sql_cerate()//创建顺序表函数 {SqlListptr ptr(SqlListptr)malloc(sizeof(SqlList));//在堆区申请连续的空间if(NULLptr){printf("创建失败\n");return NULL;//如果没有申请成功ÿ…...
【在Linux世界中追寻伟大的One Piece】自旋锁
目录 1 -> 概述 2 -> 原理 3 -> 优缺点及使用场景 3.1 -> 优点 3.2 -> 缺点 3.3 -> 使用场景 4 -> 纯软件自旋锁类似的原理实现 4.1 -> 结论 5 -> 样例代码 1 -> 概述 自旋锁是一种多线程同步机制,用于保护共享资源避免受并…...
信创改造-Spring Boot 项目部署至 TongWeb
打 war 包参考:https://blog.csdn.net/z1353095373/article/details/144330999...
选择WordPress和Shopify:搭建对谷歌SEO友好的网站
在建设网站时,不仅要考虑它的美观和功能性,还要关注它是否对谷歌SEO友好。如果你希望网站能够获得更好的搜索排名,WordPress和Shopify是两个值得推荐的建站平台。 WordPress作为最流行的内容管理系统,其强大的灵活性和丰富的插件…...
Rust之抽空学习系列(二)—— 编程通用概念(上)
Rust之抽空学习系列(二)—— 编程通用概念(上) Rust 作为一门强类型的静态类型语言,会有哪些与生俱来的天赋呢? 1、静态类型语言 vs 动态类型语言 特性静态动态类型检查编译时运行时错误检测执行前执行期…...
《神经网络与深度学习》(邱锡鹏) 内容概要【不含数学推导】
第1章 绪论 基本概念:介绍了人工智能的发展历程及不同阶段的特点,如符号主义、连接主义、行为主义等。还阐述了深度学习在人工智能领域的重要地位和发展现状,以及其在图像、语音、自然语言处理等多个领域的成功应用。术语解释 人工智能&…...
Wireshark如何查看数据包时间间隔
1.如果数据包量不大,抓包本身也不大,建议从绝对时间判断,打开wireshark软件,并点开相应要分析的抓包文件。 进入到最上方菜单<视图>,在弹出菜单选择时间显示格式,再在右侧菜单中选择自捕获经过的秒数。 这样就可…...
ISP和IQ调试(一)
系列文章目录 文章目录 系列文章目录前言一、ISP(image signal process)二、ISP位置三、IQ总结 前言 一、ISP(image signal process) image signal process 图像处理技术 image signal processor 图像信号处理器 设备 什么是图像信号? 代表…...
uniapp改成用vue起项目
目的:让项目按照vue的打包流程跑流水线 1.按照uniapp官网教程执行 2.执行第二条命令时报错 ERROR Failed to get response from true/vue-cli-version-marker 3.解决方式 报错可能跟yarn有关,然后切换成npm 找到自己本地电脑的这个文件 按照截图修…...
java之集合(详细-Map,Set,List)
1集合体系概述 1.1集合的概念 集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。 1.2集合分类 集合分为单列集合和多列集合 Collection代表单列集合,每个元素(数据ÿ…...
利用卷积神经网络进行手写数字的识别
数据集介绍 MNIST(Modified National Institute of Standards and Technology)数据集是一个广泛使用的手写数字识别数据集,常用于机器学习和计算机视觉领域中的分类任务。它包含了从0到9的手写数字样本,常用于训练和测试各种图像…...
Flutter 桌面端串口配置
前言 我使用flutter_libserialport包在macOS中实现串口通信的功能,可以实现数据收发,但是收到的内容是乱码。这种情况一般都是由于波特率和硬件设备不一致导致的。 配置串口配置 1.打开串口读写 import package:flutter_libserialport/flutter_libser…...
Java 的常量池与 String 优化
Java 中的常量池(Constant Pool)是一种内存优化机制,比如字符串常量池: String s1 "Hello"; String s2 "Hello"; System.out.println(s1 s2); // 输出 true,因为指向同一池中的对象但对于使用…...
防范TCP攻击:策略与实践
TCP(传输控制协议)是互联网通信的核心协议之一,它确保了数据在网络上的可靠传输。然而,TCP也容易成为各种网络攻击的目标,如SYN洪水攻击、TCP连接耗尽攻击等。本文将探讨如何通过配置防火墙规则、优化服务器设置以及采…...
单片机:实现呼吸灯(附带源码)
单片机实现呼吸灯详细解读 呼吸灯是一种常见的灯光效果,广泛应用于电子产品、汽车、家居照明等领域。其基本特性是通过逐渐增亮和减弱的方式,使得灯光呈现出“呼吸”的效果,给人一种平缓、舒适的视觉感受。在嵌入式系统中,呼吸灯…...
Android 第三方框架:RxJava:源码分析:责任链模式
文章目录 责任链模式RxJava中的责任链总结 责任链模式 RxJava中的责任链 链式调用的使用过程中形成了两个单向链表 第一个单向链表是Observable链表 它的形成过程: 1.首先调用Observable的静态方法创建第一个Observable对象,作为Observable链表的表…...
基于HTML的个人博客系统的设计与实现
一、前言 随着互联网的飞速发展,人们分享生活、表达观点和展示自我的需求日益增长。个人博客作为一种重要的网络交流平台,为用户提供了便捷的信息发布和分享渠道。它不仅可以记录个人的成长经历、专业知识、兴趣爱好等,还能促进用户之间的互动…...
DMA(Direct Memory Access):直接内存访问
DMA(Direct Memory Access):直接内存访问 一、传统CPU存取数据 CPU不直接存取外设的原因主要有两点: 速度差异:CPU的处理速度远高于外设,无法直接同步。格式多样性:外设数据格式种类繁多&…...
数据分析python小工具录入产品信息到Excel
在没有后台管理系统的时候,有时候为了方便起见,想提供一个输入框让运营人员直接输入,然后数据就会以数据库的形式存进数据库 效果图: 输入用户名 输入数据 输入信息后点击添加到表格,检查后方便批量保存到excel …...
Mac安装brew的终极方法
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"按回车后,根据提示操作: 输入镜像序号(1-5都可以)输入Y,回车等待brew安装完成即可。 M系列芯片亲测有效&#x…...
卷积神经网络比于全连接神经网络强在哪?
卷积神经网络(Convolutional Neural Networks,简称CNN)与全连接神经网络(Fully Connected Neural Networks,简称FFNN)是深度学习和神经网络领域中两种最为常见的网络结构。两者在结构、工作原理及应用场景上…...
Stable Diffusion Controlnet常用控制类型解析与实战课程 4
本节内容,是stable diffusion Controlnet常用控制类型解析与实战的第四节课程。上节课程,我们陆续讲解了几个与图像风格约束相关的控制类型,本节课程我们再学习一些实用价值较高的控制类型,看一看他们提供了哪些控制思路。 一&…...