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 自带协议栈已经能满足需求;但如果需要极高性能或处理更复杂的场景,则开源网络协议栈可能表现更好。

分析比较:

639fcd80a49285cd2a4521d337814e78.png

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

opencv——识别图片颜色并绘制轮廓

图像边缘检测 本实验要用到Canny算法&#xff0c;Canny边缘检测方法常被誉为边缘检测的最优方法。 首先&#xff0c;Canny算法的输入端应为图像的二值化结果&#xff0c;接收到二值化图像后&#xff0c;需要按照如下步骤进行&#xff1a; 高斯滤波。计算图像的梯度和方向。非极…

Edge SCDN深度解析,边缘安全加速的创新实践

边缘安全加速&#xff08;Edge Secure Content Delivery Network&#xff0c;SCDN&#xff09;是酷盾安全推出的边缘集分布式 DDoS 防护、CC 防护、WAF 防护、BOT 行为分析为一体的安全加速解决方案。通过边缘缓存技术&#xff0c;智能调度使用户就近获取所需内容&#xff0c;为…

软考高级架构 —— 10.6 大型网站系统架构演化实例 + 软件架构维护

10.6 大型网站系统架构演化实例 大型网站的技术挑战主要来自于庞大的用户&#xff0c;高并发的访问和海量的数据&#xff0c;主要解决这类问题。 1. 单体架构 特点: 所有资源&#xff08;应用程序、数据库、文件&#xff09;集中在一台服务器上。适用场景: 小型网站&am…

Golang囊地鼠gopher

开发知识点-golang 介绍红队专题-Golang工具Fscan简介主要功能ubuntu 安装windows 安装常用命令:项目框架源文件common目录Plugins目录Webscan目录入口点插件扫描类型爆破插件common.ScantypeWebtitle函数webpoc扫描POC 执行CEL-GO 实践CEL指纹识别免杀源码特征参考链接红队专…

多分类交叉熵与稀疏分类交叉熵

总结: 标签为 One-hot 编码的多分类问题,用分类交叉熵对于标签为整数的多分类问题,用稀疏分类交叉熵稀疏分类交叉熵内部会将整数标签转换为 One-hot 编码,而如果标签已经是 One-hot 编码的形式,再使用稀疏分类交叉熵就会多此一举。 算例 假设我们有三个类别:A、B 和 C。…

360极速浏览器不支持看PDF

360安全浏览器采用的是基于IE内核和Chrome内核的双核浏览器。360极速浏览器是源自Chromium开源项目的浏览器&#xff0c;不但完美融合了IE内核引擎&#xff0c;而且实现了双核引擎的无缝切换。因此在速度上&#xff0c;360极速浏览器的极速体验感更佳。 展示自己的时候要在有优…

零基础微信小程序开发——小程序的宿主环境(保姆级教程+超详细)

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

麒麟信安推出支持信创PC的新一代云桌面方案,助力政务信创高效安全运维

12月11日&#xff0c;在第二届国家新一代自主安全计算系统产业集群融通生态大会上&#xff0c;麒麟信安发布了支持信创PC的新一代云桌面方案&#xff0c;该方案是基于国际TCI架构实现国产PC机云化纳管在国内的首次发布&#xff0c;并与银河麒麟桌面操作系统、长城国产PC整机实现…

vim优化

1.编辑如下内容&#xff1a; cat > /root/.vimrc <<EOF set tabstop2 " 设置 Tab 为 2 个空格 set shiftwidth2 " 设置自动缩进为 2 个空格 set expandtab " 将 Tab 转换为空格 " 基本设置 set number syntax on" 快捷键设置…

hive—常用的日期函数

目录 1、current_date 当前日期 2、now() 或 current_timestamp() 当前时间 3、datediff(endDate, startDate) 计算日期相差天数 4、months_between(endDate, startDate) 日期相差月数 5、date_add(startDate, numDays) 日期加N天 6、date_sub(startDate, numDays) 日期减…

医学分割数据集肾结石分割数据集labelme格式359张1类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;359 标注数量(json文件个数)&#xff1a;359 标注类别数&#xff1a;1 标注类别名称:["kidney stone"] 每个类别标注的框数&…

Vulnstack红日安全内网域渗透靶场2实战攻略

一&#xff1a;环境搭建 新增的网卡VMnet2&#xff0c;ip调成10段。 PC配置如下&#xff1a; DC在该环境中充当是域控。DC配置如下 &#xff1a; WEB配置&#xff1a;需要两块网卡&#xff0c;相当于网关服务器。 作者把外网网段都写成了192.168.111.1/24&#xff0c;我们可以…

基础库urllib的使用

学习爬虫&#xff0c;其基本的操作便是模拟浏览器向服务器发出请求&#xff0c;那么我们需要从哪个地方做起呢?请求需要我们自己构造吗?我们需要关心请求这个数据结构怎么实现吗?需要了解 HTTP、TCP、IP层的网络传输通信吗?需要知道服务器如何响应以及响应的原理吗? 可能…

【大数据技术基础】【记录Ubuntu 16.04升级到18.04】Ubuntu的一个版本升级到另一个版本

在 Ubuntu 操作系统中进行软件更新和系统升级 Ubuntu Kylin 16.04 LTS 系统进行系统升级到 Ubuntu 18.04.6 LTS 版本 升级提示&#xff1a;系统弹出提示框&#xff0c;告知用户有新版本的 Ubuntu 可用&#xff0c;询问用户是否想要升级。 认证窗口&#xff1a;显示了一个认证…

【环境搭建】Python、PyTorch与cuda的版本对应表

一个愿意伫立在巨人肩膀上的农民...... 在深度学习的世界里&#xff0c;选择合适的工具版本是项目成功的关键。CUDA、PyTorch和Python作为深度学习的三大支柱&#xff0c;它们的版本匹配问题不容忽视。错误的版本组合可能导致兼容性问题、性能下降甚至项目失败。因此&#xff0…

SpringBoot 学习

SpringBoot 学习 什么是 Springboot Spring Boot 是 Spring 提供的一个子项目&#xff0c;用于快速构建 Spring 应用程序 传统的问题&#xff1a; 导入依赖繁琐项目配置繁琐 SpringBoot 的特性 起步依赖&#xff1a;整合所有 web 的依赖配置好了自动配置&#xff1a;bean…

计算机网络-传输层 TCP协议(下)

目录 TCP核心机制五&#xff1a;流量控制 TCP核心机制六&#xff1a;拥塞控制 TCP核心机制七&#xff1a;延迟应答 TCP核心机制八&#xff1a;捎带应答 TCP核心机制九&#xff1a;面向字节流 粘包问题 TCP核心机制十&#xff1a;异常处理 &#xff08;1&#xff09;进程…

【游戏设计原理】10 - 科斯特的游戏理论

科斯特的游戏理论强调了游戏与学习之间的关系&#xff0c;认为“玩得开心”与“学习”是紧密相连的。换句话说&#xff0c;游戏的核心魅力在于通过适当的挑战和不断的学习进程激发玩家的内啡肽循环&#xff0c;这让玩家在不断的探索和进步中找到乐趣。 科斯特的理论通过游戏是…

【Android学习】RxJava

文章目录 资料连接1. Merge & Zip操作符: 合并数据源2. Map & FlapMap & ConcatMap & Buffer: 变换操作符3. retry & retryUntil & retryWhen : 错误处理操作符4. Transformer & Compose 转换符 资料连接 Android RxJava&#xff1a; 这是一份全面…

数据结构初阶---二叉树---堆

一、树 1.树的概念 树是一种非线性的数据结构&#xff0c;由n(n≥0)个有限结点组成的一个有层次关系的集合。形状类似一棵倒挂的树&#xff0c;根朝上&#xff0c;分支向下。 根结点没有前驱结点&#xff0c;可以有n(n≥0)个后继结点。 其余结点被分为M个互不相交的集合&am…