网络编程之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,一经查实,立即删除!

相关文章

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

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

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

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

数据结构(树)

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

Postman 连接数据库 利用node+xmysql

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

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

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

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 …

每日题库:Huawe数通HCIA——全部【813道】

1.关于ARP报文的说法错误的是?单选 A.ARP报文不能被转发到其他广播域 B.ARP应答报文是单播方发送的 C.任何链路层协议都需要ARP协议辅助获取数据链路层标识 DARP请求报文是广播发送的 答案:C  解析: STP协议不需要ARP辅助 2.园区网络搭建时,使用以下哪种协议可以避免出现二层…

【小白专用24.6.8】c#异步方法 async task调用及 await运行机制

await是C#中用于等待异步操作完成的关键字。它通常用于异步方法内部,使得在等待异步操作期间,线程可以继续执行其他操作,从而保持程序的响应性。 在使用await时,需要注意以下几点: 1. async修饰符: 使用…

通过调用栈快速探究 Compose 中 touch 事件的处理原理

前言 Compose 视图的处理方式和 Android 传统 View 有很大差别,针对 touch 事件的处理自然也截然不同。 如何在 Compose 中处理 touch 事件,官方已有非常详尽的说明,可以参考:https://developer.android.google.cn/jetpack/comp…

产品NPDP+项目PMP助你成长

前言 从管理的角度来讲,产品经理和项目经理的区别,我们应该吧项目经理和产品的区别分为一纵一横,那一纵就是我们的项目经理,项目经理在整个新产品研发过程中他扮演的是管理监督项目参与者的角色,其中包括研发部门、技术部门、市场部门或是销售部门等等。他所要做的事情就…

第二十讲:文件操作

第二十讲:文件操作 1.什么是文件1.1什么是文件1.1.1程序文件1.1.2数据文件 1.2二进制文件和文本文件数据的存储方式 2.流和标准流2.1流2.2标准流 3.文件指针4.文件的打开与关闭5.文件顺序读写5.1顺序读写函数介绍5.2打开和关闭函数5.2.1fopen函数5.2.2fclose函数 5.…

matlab 计算三维空间点到直线的距离

目录 一、算法原理二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 直线的点向式方程为: x − x 0 m = y

DT-MIL:用于组织病理学图像的MIL方法

学习信息表示对于组织病理学图像的分类和预测任务至关重要。由于图像大小巨大,通常使用多实例学习(MIL)方案来处理整张组织病理学图像(whole-slide histopathological image)。然而,MIL的弱监督性质导致了学…

能在电脑和手机上使用的便签app 好用的便签软件

随着科技的日新月异,越来越多的软件被开发出来,极大地便利了我们的工作和生活。其中,便签软件凭借其便捷的记录功能,受到了广大用户的喜爱。特别是那些能在电脑和手机上同步使用的便签app,更是为我们的工作和生活带来了…

【阿里YYDS】通义千问正式开源 Qwen2

Qwen2–72B正式开源,性能全面超越开源模型Llama3-70B,也超过文心4.0、豆包pro、混元pro等众多中国闭源大模型。 在过去一段时间里,Qwen系列模型从Qwen1.5升级到Qwen2,Qwen2分5个尺寸,包括Qwen2-0.5B、Qwen2-1.5B、Qwen…

Nice Mind 手机版本的思维导图,最新V8.9.0版本,无内购!

这是一款非常好用的手机思维导图APP,为了防止和谐,名字就不说了,软件可以帮助用户快速制作思维导图,不管什么类型的都可以直接使用。如果需要电脑版本的思维导图,可以看置顶文章的另一款软件。 软件获取方式&#xff…

PostgreSQL基础(十):PostgreSQL的并发问题

文章目录 PostgreSQL的并发问题 一、事务的隔离级别 二、MVCC PostgreSQL的并发问题 一、事务的隔离级别 在不考虑隔离性的前提下,事务的并发可能会出现的问题: 脏读:读到了其他事务未提交的数据。(必须避免这种情况&#xf…