网络编程之XDP技术介绍

一、简介

XDP:eXpress Data Path,快速数据面,听名字是不是很高大上。其实它就是一个快速处理Rx数据包的数据面技术。为什么现在对数据处理如此敏感?原因非常简单,随着网络的不断覆盖社会的各个层面,海量的数据不断出现,而处理这些数据就要求一个字,快。
无论是Linux亦或是Windows,它们都产生于早期的计算机系统,对快速的网络数据处理,大多天生就带有一些不足,这也导致了很多的问题。一般来说,操作系统的特点就是要有相当大的通用性,而这种通用性往往也是性能的瓶颈,这个瓶颈自然也包括网络数据通信。如果说早期的网络尚未普及阶段,数据的量对计算机来说还是可以承受的,但随着网络带宽的不断增加,大型网站的不断出现,导致大规模的并发不断出现,从而使得数据量以无法想象的速度快速增长。通用型的设计在面对这些场景时往往力不从心。
当双11和618的同时支付数量不断上升到一个新层面时,当大量的在线视频用户不断突破上限时…,新的技术需求已经涌现。而针对这些需求,除了应用层、中间层的不断发展,对操作系统也不可避免的提出了更高的技术要求。虽然做为操作系统稳定压倒一切,但稳定不代表不前进。
在前面的文章“eBPF介绍”中就已经对eBPF进行了初步的分析。而此篇的XDP技术就是基于此技术的。

二、原理

在早期的网络编程中,一般能到C1K就已经不错了,后来提高到C10K,C100K,C1000K…可以负责任的说,这个数字一定会继续发展下去。那么,传统的Linux系统对网络协议栈的处理未免有些跟不上潮流。当各种的优化,不管是从硬件还是驱动还是OS还是应用层,都无能为力时,但网卡的性能还在不断增加,传输速率从10G到100G而且还在不断的增加时,新的技术就会应运而生。Intel公司率先提出了自己的解决方案DPDK,但做一家知名的大公司与开源的Linux天生就不会合群的,你有的,Linux一定也会有的,这也就是David S. Miller说的那句名言“DPDK is not Linux”。随着Linux技术准备完成,在Linux4.8以上版本,提供了XDP技术支持。
XDP可以理解成一个Linux内核网络栈的最底层的数据处理机制,利用钩子为BPF提供了一个加载的入口。而这个入口可以直接操作数据而无需劳动内核其它的部分。说的简单一些,去一家公司办事,在门口就被拦了下来,能处理就处理,不能处理的再按套路来。这样,就灵活快捷了很多。XDP只能用来处理Rx路径上的数据包而不会处理Tx路径上的数据包。

在这里插入图片描述

XDP有三种处理模式:
1、offload(卸载)模式即网卡需要支持将XDP程序直接运行到网卡上。这种械是最强的编程模式,它可以直接在最原始的网络数据入口处对数据进行处理(过滤、丢弃等),其效率和速度当然是最好的,但缺点是它需要硬件的支持即NIC的支持,这个就比较麻烦了。一般来说,硬件厂商是无利不起早的,所以这个模式目前还有点难缠。
2、native(原生或者本地)模式,相对于上面的处理,退而求其次,运行在网卡驱动中,而这种层级,也是相当底层的,处理数据的性能也非常高。相对来说,驱动做为一种固件,升级还是比硬件升级容易不少,所以在这种模式下支持XDP程序的网卡还是有不少。
3、generic(通用)模式,一听通用,大家可能明白了,这就是一种兼容模式。也就是说网卡不支持,驱动不支持都没事儿,反正现在是虚拟的设备横行。没有可以模拟出一个来,但这样一来,对内核的要求就高了。当然,模拟的总归不如真实的,直接的表现就是性能会显著降低。网上的资料其与native模式大约有10倍左右的差距。

在这里插入图片描述

XDP通过上述的方式提供了内核网络栈的可编程机会并且解决了使用kernel bypass出现的一些问题,这才是重点。

三、优点和缺点

一个技术不可能光有优点也不可能光有缺点,对XDP而言也是如此:
XDP的优点主要有:
1、对网络数据处理及时、快捷
2、性能高度优化
3、支持指令虚拟机(BPF)
4、可扩展
5、可编程
6、不需要专门的硬件
7、不需要kernel bypass(或者说Linux自己的kernel bypass)
8、与传统网络协议栈(TCP/IP)很好融合
XDP的缺点:
1、通用性差,毕竟XDP是专用的
2、XDP没有缓存队列,所以可能在Tx和Rx不匹配时,可能丢包
3、对IP分片支持不友好

四、应用

明白了XDP的优势,就可以有针对性的在相应的场景下应用:
1、防火墙,各种数据过滤
2、阻止一些网络攻击,如DDoS
3、处理网络的负载均衡
4、高并发处理(如交易、金融等)
5、网络数据采集(采样和统计分析等)

五、总结

我们学习了很多的Linux的相关的新技术,这次又是XDP。网络技术的不断前进最主要的原因是需求的爆发式增长,为了解决问题,各种技术不断的涌现,有临时的,有侧重一点的,有关心一层的,诸多种类,不一而足。学习一个技术点,然后将其它相关的技术点整合成线,最终融合成面,那么对这些相关的技术的整体综合运用就会得心应手。

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

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

相关文章

发布自己的 npm 插件包:步骤与最佳实践

在 Node.js 的生态系统中,npm(Node Package Manager)是一个不可或缺的组成部分。npm 允许开发者创建、共享和使用各种库和插件。如果你有自己的 Node.js 插件或库,并且希望与全世界的其他开发者共享,那么发布到 npm 是…

android 编译源码添加日志打印

最近闲来无事,把源码编译一下,然后把这个源码编译到pixel3手机上,并且简单修改一下源码的网络请求,添加一些日志打印,堆栈打印,记录一下防止忘记 首先需要下载源码 下载对应源码对应的驱动 https://develop…

Docker 创建mysql用户

要在Docker中以root用户身份创建一个MySQL数据库(schema)并设置一个新用户xiaokkk,密码为123456,您需要先确保您的Docker容器正在运行,并且知道如何连接到它。以下是一步步的指南: 1. 连接到Docker中的MyS…

Rhino Linux 2024.1

Rhino Linux 2024.1的发布信息概述如下: 1. **开发更新**: - 由于开发者原因,开发进程曾一度停滞,但目前团队已起草了Rhino Linux宪法,重点在于社区参与。 - 组织结构的变化将在此次发布后不久生效。 - 社区…

JVM学习-详解类加载器(二)

双亲委派机制 双亲委派优势 避免类的重复加载,确保一个类的全局唯一性 Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层次关系可以避免类的重复加载,当父类已经加载了该类,就没有必要子ClassLoader再加载…

无锡哲讯:引领半导体企业ERP革新,打造行业数字化先锋

在半导体行业,随着技术的不断进步和市场需求的日益增长,企业面临着激烈的竞争和复杂的管理挑战。ERP系统作为现代企业管理的核心工具,对于半导体企业而言,其作用不容小觑。无锡哲讯智能科技有限公司,凭借其在SAP ERP领…

图像编解码器在AI绘画中的革新作用

随着人工智能技术的飞速发展,AI绘画已经从一个简单的概念演变为一个充满创意与可能性的领域。在这场技术与艺术的融合中,图像编解码器扮演着至关重要的角色。它们不仅提升了AI绘画的质量和效率,还拓宽了艺术创造的边界。本篇博客将深入探讨图…

数据结构(树)

数据结构(树) 度:每一个节点的子节点数量 二叉查找树: 每一个节点上最多有两个子节点; 任意节点左子树上的值都小于当前节点; 任意节点右子树上的值都大于当前节点。 添加节点规则: 小的存左边&…

Unity与前端交互:深度解析与实战指南

Unity与前端交互:深度解析与实战指南 在现代游戏开发和跨平台应用中,Unity作为一款强大的游戏引擎,其与前端技术的交互能力显得尤为重要。本文将从四个方面、五个方面、六个方面和七个方面深入探讨Unity如何与前端进行交互,揭示其…

Postman 连接数据库 利用node+xmysql

1、准备nodejs环境 如果没有安装,在网上找教程,安装好后,在控制台输入命令查看版本,如下就成功了 2、安装xmysql 在控制台输入 npm install -g xmysql 3、连接目标数据库 帮助如下: 示例: 目标数据库…

UI前端交互的艺术:探索设计的四个维度、五个层面、六个要点与七大原则

UI前端交互的艺术:探索设计的四个维度、五个层面、六个要点与七大原则 在数字时代的浪潮中,UI前端交互设计如同一门深邃的艺术,既需要技术支撑,又需要设计灵感。它关乎用户体验,影响着产品的成败。那么,UI…

操作系统:进程的状态

进程三种的状态是什么? 运行:进程占有处理器正在运行的状态。进程已获得CPU,其程序正在执行。 就绪:进程具备运行条件,等待系统分配处理器以便运行的状态。当进程已分配到除CPU以外的所有必要资源后,只要…

HTML静态网页成品作业(HTML+CSS)—— 美食湘菜介绍网页(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

企业估值的三种方法

估值模型三剑客—DCF、P/E、EV /EBITDA 三种主要估值模型的优缺点: DCF 优点:通过对自由现金流的折现计算,反映了公司内在价值的本质,是最重要与最合理的估值方法。 缺点:未来自由现金流的估计不准确,受折现率影响…

MASA:匹配一切、分割一切、跟踪一切

摘要 https://matchinganything.github.io/ 在复杂场景中跨视频帧稳健地关联相同对象是许多应用的关键,特别是多目标跟踪(MOT)。当前方法主要依赖于标注的特定领域视频数据集,这限制了学习到的相似度嵌入的跨域泛化能力。我们提…

企业应如何选择安全合规的内外网文件摆渡系统?

网络隔离是一种安全措施,旨在将网络划分为不同的部分,以减少安全风险并保护敏感信息。常见的隔离方式像物理隔离、逻辑隔离、防火墙隔离、虚拟隔离、DMZ区隔离等,将网络隔离成内网和外网。内外网文件摆渡通常指在内部网络(内网&am…

Llama模型家族之拒绝抽样(Rejection Sampling)(五)蒙特卡罗算法在拒绝抽样中:均匀分布与样本接受标准

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

weditor安装时提示This is an issue with the package mentioned above, not pip

报错如下: note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed Encountered error while generating package metadata. ╰─> See above for output. note: This is an issue with …

kerberos: Clock skew too great (37) - PROCESS_TGS

kerberos认证失败错误信息: Caused by: org.ietf.jgss.GSSException: No valid credentials provided (Mechanism level: Clock skew too great (37) - PROCESS_TGS)at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:772)at sun.security.j…

正则限制字符串的长度必须是n的倍数

正则可以帮助我们来判断用户提供的字符串是否是指定长度n的倍数, 写法如下: ^([\w]{8})*$ 说明: ^ 匹配字符串开头; $ 匹配字符串结尾; [\w] 这个为你要限制用户输入的字符串的类型 匹配字母或数字或下划线&am…