网络编程之XDP技术介绍

news2025/1/19 23:27:51

一、简介

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.coloradmin.cn/o/1801769.html

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

相关文章

对比深度图聚类的硬样本感知网络

Hard Sample Aware Network for Contrastive Deep Graph Clustering 文章目录 Hard Sample Aware Network for Contrastive Deep Graph Clustering摘要引言方法实验结论启发点 摘要 本文提出了一种名为Hard Sample Aware Network (HSAN)的新方法,用于对比深度图聚类…

AI智能客服经验总结

AI智能客服经验总结 在使用OpenAI的API接口来构建人工智能客服系统时,prompt约束是非常重要的。它可以帮助确保生成的回复符合你的期望和需求。以下是一些关于如何设置和管理prompt约束的建议: 1. 明确客服系统的目标 首先,明确你的客服系…

大泽动力30KW静音汽油发电机

安全操作: 在使用前,确保发电机放置在通风良好、干燥、无易燃物品的地方。 避免在发电机运行时触摸其热表面或运转部件,以免烫伤或受伤。 遵循发电机的启动和停机程序,不要随意操作。 燃油管理: 使用高质量的汽油&…

柴油十六烷值检测 液压油硫含量检测 变压器油检测

检测的油品包括:柴油、润滑油、液压油、机油、汽油、以及一些工业用油等。 柴油检测项目GB19147-2013:氧化安定性、硫含量、酸度、10%蒸余物残炭、灰分、铜片腐蚀、水分、机械杂质、润滑性、多环芳烃、运动粘度、凝点、冷滤点、闪点、十六烷值、馏程、密…

pdf压缩文件怎么压缩最小,软件工具压缩清晰

PDF格式的文件,当其体积过于庞大时,确实在上传的过程中显得尤为不便。今天给大家分享一个压缩pdf的简单的方法,让大家可以轻松的压缩pdf。 浏览器打开 "轻云处理pdf官网" ,上传pdf文件,文件上传完成后网站会…

汇编:头文件

汇编头文件(header files)在汇编语言编程中类似于高层语言中的头文件,它们通常包含宏定义、常量定义、数据结构定义、函数声明以及其他在多个汇编源文件中共享的代码;使用头文件可以提高代码的可维护性和可读性,并使代…

3~35kV户内开关柜综合测控装置

安科瑞电气股份有限公司 祁洁 15000363176 一、产品概述 ASD系列开关柜综合测控装置用于3~35kV户内开关柜,适用于中置柜、手车柜、固定柜、环网柜等多种开关柜。具有一次回路模拟图及开关状态指示,高压带电显示及核相,自动温湿度控制&…

炫技来了!使用SDR设备成功抓到蓝牙air packet, 并且wireshark实时解析, 没错就是蓝牙空口抓包器

本文章主要介绍是用ZYNQ7020AD9361Gnu radio是搭建一个蓝牙抓包器的文章。 由于之前一直做蓝牙Host,对controller觉得是一个比较虚无缥缈的东西,得不到的总是在骚动,所以最近用我用吃灰了2年的SDR(Software Defined Radio)设备研…

【Java基础】OkHttp 超时设置详解

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

win10重装系统?电脑系统重装一键清晰,干货分享!

在电脑的使用过程中,由于各种原因,我们可能会遇到系统崩溃、运行缓慢或者出现各种难以解决的问题。这时,重装系统往往是一个有效的解决方案。今天,我们就来详细介绍一下如何在Win10环境下进行系统的重装,帮助大家轻松解…

运 算 符

算术运算符 算术运算符包括:,-,*,/,%,,-- 当左右两边都是数值型时,则做加法运算。 当左右两边有一方为字符串,则做拼接运算。任何一个 Java 对象都可以转换为字符串。 …

uniapp视频组件层级太高,解决方法使用subNvue原生子体窗口

目录 前言 先看一下uniapp官网的原话: subNvue的一些参数介绍 subNvues使用方法: 绑定id 显示 subNvue 弹出层 subNvue.show() 参数信息 subNvue.hide() 参数信息 在使用subNvue 原生子体窗口 遇到的一些问题 前言 nvue 兼容性 以及使用方式 控…

11-Linux文件系统与日志分析

11.1深入理解Linux文件系统 在处理Liunx系统出现故障时,故障的症状是最易发现。数学LInux系统中常见的日志文件,可以帮助管理员快速定位故障点,并及时解决各种系统问题。 11.1.1 inode与block详解 文件系统通常会将这两部分内容分别存放在…

刷代码随想录有感(96):贪心算法——小于目标数且是最大的单调递增的数字

题干&#xff1a; 代码&#xff1a; class Solution { public:int monotoneIncreasingDigits(int n) {string s to_string(n);int flag s.size();for(int i s.size() - 1; i > 0; i--){if(s[i - 1] > s[i]){s[i - 1]--;flag i;}}for(int i flag; i < s.size(); …

js 选择一个音频文件,绘制音频的波形,从右向左逐渐前进。

选择一个音频文件&#xff0c;绘制波形&#xff0c;从右向左逐渐前进。 完整代码&#xff1a; <template><div><input type"file" change"handleFileChange" accept"audio/*" /><button click"stopPlayback" :…

无延迟,持续畅玩 - Wi-Fi 6 助力打造游戏厅极致体验

1、需求背景&#xff1a; 连锁游戏厅行业竞争激烈&#xff0c;顾客对高品质的游戏体验有着高要求。网络是游戏厅的核心基础设施之一&#xff0c;需要确保游戏过程中的网络连接稳定性和顾客满意度。 长时间稳定连接 为保证顾客的游戏体验感&#xff0c;游戏厅要确保网络连接长…

SpringBoot实现参数校验拦截(采用AOP方式)

一、AOP是什么&#xff1f; 目的&#xff1a;分离横切关注点&#xff08;如日志记录、事务管理&#xff09;与核心业务逻辑。 优势&#xff1a;提高代码的可读性和可维护性。 关键概念 切面&#xff08;Aspect&#xff09;&#xff1a;包含横切关注点代码的模块。通知&#xff…

vscode编译c/c++找不到jni.h文件

解决办法: 一、下载JDK 访问Oracle官网的Java下载页面&#xff1a;Java Downloads | Oracle 选择适合您操作系统的JDK版本&#xff1a; 对于Windows&#xff0c;选择“Windows x64”或“Windows x86”&#xff08;取决于您的系统是64位还是32位&#xff09;。对于Linux&#…

STM32 HAL库开发——入门篇(3):OLED、LCD

源自正点原子视频教程&#xff1a; 【正点原子】手把手教你学STM32 HAL库开发全集【真人出镜】STM32入门教学视频教程 单片机 嵌入式_哔哩哔哩_bilibili 一、OLED 二、内存保护&#xff08;MPU&#xff09;实验 2.1 内存保护单元 三、LCD 3.1 显示屏分类 3.2 LCD简介 3.3 LCD…

基于Seatunnel最新2.3.5版本分布式集群安装部署指南(小白版)

基于Seatunnel2.3.5版本分布式集群安装部署 1.环境准备2.JDK安装3.Maven安装4.Seatunnel在master节点安装部署配置4.1.下载Seatunnel安装包4.2.解压下载好的tar.gz包4.3.下载连接器4.4.配置Seatunnel的系统环境变量4.5.配置 SeaTunnel Engine服务 JVM参数4.6.配置文件中集群相关…