0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

崔鹏程:初识XDP

Linux阅码场 来源:Linux内核之旅 2020-08-03 15:59 次阅读

在计算机网络中,Hook钩子在操作系统中用于在调用前或执行过程中拦截网络数据包。Linux内核中暴露了多个钩子,BPF程序可以连接到这些钩子上,实现数据收集和自定义事件处理。

Linux内核中的钩子点很多,比如说网络子系统中存在两个钩子:XDP和TC。它们结合在一起,可以用来处理RX和TX上两个链路上靠近NIC的数据包,从而实现了许多网络应用的开发。今天我们简单介绍下XDP。

XDP全称为eXpress Data Path,是Linux内核网络栈的最底层。它只存在于RX路径上,允许在网络设备驱动内部网络堆栈中数据来源最早的地方进行数据包处理,在特定模式下可以在操作系统分配内存(skb)之前就已经完成处理。 XDP暴露了一个可以加载BPF程序的网络钩子。在这个钩子中,程序能够对传入的数据包进行任意修改和快速决策,避免了内核内部处理带来的额外开销。这使得XDP在性能速度方面成为最佳钩子,例如缓解DDoS攻击等 DPDK Intel DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用户空间高效的数据包处理提供库函数和驱动的支持,它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。 DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。Linux内核将DPDK应用程序看作是一个普通的用户态进程,包括它的编译、连接和加载方式和普通程序没有什么两样。DPDK程序启动后只能有一个主线程,然后创建一些子线程并绑定到指定CPU核心上运行。

XDP 相对于DPDK,XDP具有以下优点:

无需第三方代码库和许可

同时支持轮询式和中断式网络

无需分配大页

无需专用的CPU

无需定义新的安全网络模型

XDP的使用场景包括:

DDoS防御

防火墙

基于XDP_TX的负载均衡

网络统计

复杂网络采样

高速交易平台

XDP输入参数XDP暴露的钩子具有特定的输入上下文,它是单一输入参数。它的类型为 struct xdp_md,在内核头文件bpf.h 中定义,具体字段如下所示:


程序执行时,data和data_end字段分别是数据包开始和结束的指针,它们是用来获取和解析传来的数据,第三个值是data_meta指针,初始阶段它是一个空闲的内存地址,供XDP程序与其他层交换数据包元数据时使用。最后两个字段分别是接收数据包的接口和对应的RX队列的索引。当访问这两个值时,BPF代码会在内核内部重写,以访问实际持有这些值的内核结构 struct xdp_rxq_info。

XDP输出参数在处理完一个数据包后,XDP程序会返回一个动作(Action)作为输出,它代表了程序退出后对数据包应该做什么样的最终裁决,也是在内核头文件bpf.h 定义了以下5种动作类型:

可以看出这个动作的本质是一个int值。前面4个动作是不需要参数的,最后一个动作需要额外指定一个NIC网络设备名称,作为转发这个数据包的目的地。

XDP的位置

最显而易见的是,竟然可以在如此低的层面上把数据包丢弃或者回弹回去,如果面临DDoS攻击,采用这种方式的话,数据包就没有必要上升到Netfilter层面再被丢弃了。说白了,XDP允许数据包在进入Linux协议栈之前就能受到判决。这相当于在网卡驱动层面运行了一个eBPF程序,该程序决定数据包何去何从。 而且,假设我们经过目标网络设备的Ingress流量被我们的XDP程序drop了,专业术语叫RX流向。那么Egress流量是否也会被drop掉呢? 答案是,不会。XDP hook不会作用到Egress流量,也就是TX流向。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1362

    浏览量

    40216
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • 网络设备
    +关注

    关注

    0

    文章

    308

    浏览量

    29606

原文标题:崔鹏程: 初识XDP

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    厦门市领导莅临海辰储能调研

    近日,厦门市委副书记、市长伍斌率队莅临海辰储能调研,深入了解企业发展现状与未来规划。海辰储能联合创始人、总裁王鹏程热情接待并陪同调研。
    的头像 发表于 10-24 11:03 625次阅读

    中兴通讯丽:AI与5G-A共融共创

    7月16日资讯,2024世界人工智能大会汇聚了全球顶尖的科学家、企业领袖及投资精英,共襄盛举,深入探讨AI技术的最新进展、产业趋势以及道德治理的创新路径。中兴通讯首席发展官丽受邀出席央视网《科技新观察》节目,就人工智能时代下的数智化转型发表了独到见解。
    的头像 发表于 07-16 16:24 570次阅读

    【《软件开发珠玑》阅读体验】+ 初识

    非常感恩电子发烧友论坛,让我有幸阅读如此优秀的作品。 今天收到了的书,非常精美! 在书的扉页中,有刘总的签名: 太有意义了。 书中大佬们读了《推荐序》 还有21位大佬为此书写了《推荐语》,给本书以极其高度的评价: 本文的译者为“死月”,他在译者序中,表达了翻译完本书之后的收获“ 在翻译完这本书之后,我对软件工程,对需求、设计、项目管理、文化与团队合质量和过程改进有了全新的认知,我也可以尝试着为自己摘下“只会写代码”的标签了。相信在未来的职业生涯中,这本书给我带来的知识能让我在各个地方发光发热,在某种意义上可以帮我突破一些瓶颈。 同样,我期望这本书也能在正在阅读此书的你未来的职业生涯中,以某种形式为你带来一些不一样的视角,帮你更轻松地解决一些可能本来不那么容易解决的问题。能翻译这本书,对我来说,已经很值了;如果这本书还能为更多人提供价值,那真的是超值了。 在《序言》中,作者解释了”珠玑“,珠玑的即为珍珍,在于不断的成长。我在想,译者为何不直接译为”珍珠“。 在《关于作者》中,介绍了作者Karl Wiegers 学位、作品,以及他是一位爱好广泛,同时又非常有爱心的一位大神。
    发表于 06-21 16:33

    海辰储能王鹏程:新型储能+绿色城市,共筑包容发展之路

    5月22日至23日,2024重庆国际友好城市合作大会在重庆召开。
    的头像 发表于 05-28 09:33 375次阅读

    东树:进口车增量助力消费增长,年内潜力巨大

    东树指出,随着我国汽车产业的发展壮大以及电动化转型带来的市场需求变化,燃油车需求逐渐萎缩,进口燃油车需求亦随之降低。鉴于国际关系日益复杂,他建议应提前规划并建立多元化的进口模式,以保持进口车市场的稳定。
    的头像 发表于 05-27 10:30 454次阅读

    大语言模型:原理与工程实践+初识2

    前言 深度学习是机器学习的分支,而大语言模型是深度学习的分支。机器学习的核心是让计算机系统通过对数据的学习提高性能,深度学习则是通过创建人工神经网络处理数据。近年人工神经网络高速发展,引发深度学习的一系列变革。 大语言模型是深度学习的应用之一,可以认为,这些模型的目标是模拟人类交流,为了理解和生成人类语言。为此,模型需要在大量文本数据上训练,用来理解人类语言,进而,实现与人类的无障碍对话交流。关于其应用,大火的ChatGPT就是典型的例子。所以,提起大语言模型,看似离我们很远,其实不然,他就贯穿在我们生活中,或是悄无声息或是惊天动地的改变着我们的生活。 通过这本书,我对大语言模型的认识更深一步,不再局限于只识其名,不知其意,而是真正的了解了他的前生今世,他的意义非凡。我希望我能够有机会把我所学付诸实践,当然这需要真正的领悟和坚定的信心,但我相信,我可以做到!
    发表于 05-13 00:09

    三星显示CEO:中韩OLED显示器企业技术差距仅1年

    三星Display社长周善表示:“与中国显示器企业的技术差距缩小到1年或1年半。为了维持技术超差距,有必要聚集人才,提高研发的效率。”
    的头像 发表于 03-08 14:54 1030次阅读

    三星显示CEO:microOLED或于2027-2028年商业化,市场前景看好

    在KAIST大学的专题讲座之后,周善明确指出,microOLED市场前景广阔。然而,这项针对XR设备的显示技术仍需经过3至4年才能进入商业阶段。
    的头像 发表于 03-07 14:15 544次阅读

    初识FPGA需要关注的注意事项!

    1.基础问题 FPGA的基础就是数字电路和HDL语言,想学好FPGA的人,建议床头都有一本数字电路的书,不管是哪个版本的,这个是基础,多了解也有助于形成硬件设计的思想。在语言方面,建议初学者学习Verilog语言,VHDL语言语法规范严格,调试起来很慢,Verilog语言容易上手,而且,一般大型企业都是用Verilog语言。 2.EDA工具问题 熟悉几个常用的就可以的,开发环境QuartusII ,或ISE 就可以了,这两个基本是相通的,会了哪一个,另外的那个也就很Easy了。功能仿真建议使用Modelsim ,如果你是做芯片的,就可以学学别的仿真工具,做FPGA的,Modelsim就足够了。综合工具一般用Synplify,初学先不用太关心这个,用Quartus综合就OK了。当然最推荐的是各个厂商推荐的开发环境,容易进行demo测试体验。 3.硬件设计思想问题 对于初学者,特别是从软件转过来的,设计的程序既费资源又速度慢,而且很有可能综合不了,这就要求我们熟悉一些固定模块的写法,可综合的模块很多书上都有,语言介绍上都有,不要想当然的用软件的思想去写硬件。 4.学习习惯问题 FPGA学习要多练习,多仿真,signaltapII是很好的工具,可以看到每个信号的真实值,建议初学者一定要自己多动手,光看书是没用的。关于英文文档问题,如果要学会Quartus II的所有功能,只要看它的handbook就可以了,很详细,对于IT行业的人,大部分知识来源都是英文文档,一定要耐心看,会从中收获很多的。 5.算法问题 做FPGA的工程师,最后一般都是专攻算法了,这些基础知识都是顺手捏来的,如果你没有做好搞理论的准备,学FPGA始终只能停留在初级阶段上。 对于初学者,数字信号处理是基础,应该好好理解,往更深的方向,不用什么都学,根据你以后从事的方向,比如说通信、图像处理,雷达、声纳、导航定位等。
    发表于 02-22 10:57

    凌感英飞凌XDP7系列热插拔控制器介绍

    该系列主要有两款产品,XDP700主要用于电信基础设施,XDP710则更适合服务器、工业和数据中心电源系统等应用中,以实现安全的热插拔操作和系统保护。
    的头像 发表于 02-20 15:23 675次阅读

    三星显示器公司CEO荣任韩国显示器产业协会会长

    据相关行业消息,韩国显示器产业协会任命周善为新任会长,周善被任命为协会会长,沿袭了三星显示器和LG显示器的会长轮流担任协会会长的惯例。
    的头像 发表于 01-22 11:25 803次阅读

    《深入理解FFmpeg阅读体验》初识有感

    恰好有这么好的机会,当然也有缘份让我有幸成为试读者,特此感谢电子发烧友论坛。 【初识有感】 我今天刚拿到的书,认真的阅读了推荐语、序、前言这几篇,让我深有感触。 第一,通过这几篇我得知刘歧老师,是一位
    发表于 01-07 19:48

    初识电阻与电阻器

    初识电阻与电阻器
    的头像 发表于 12-08 17:24 599次阅读
    <b class='flag-5'>初识</b>电阻与电阻器

    什么是DDS?初识CP AUTOSAR平台下的DDS规范

    数据分发服务(DDS)[1]是一个来自对象管理组(OMG)的中间件协议和API标准。它将系统的组件集成在一起,提供低延迟的数据连接,极高的可靠性,和可扩展的架构。
    的头像 发表于 12-05 18:18 3650次阅读
    什么是DDS?<b class='flag-5'>初识</b>CP AUTOSAR平台下的DDS规范

    中兴通讯CDO丽:融合进阶 数智兴煤

    11月25日,中国煤炭学会2023年学术年会在北京举行,中兴通讯首席发展官丽应邀在煤矿智能化与企业数字化转型分论坛发表题为《融合进阶,数智兴煤》的主题演讲。 丽表示,作为我国能源安全稳定供应
    的头像 发表于 11-25 18:50 667次阅读
    中兴通讯CDO<b class='flag-5'>崔</b>丽:融合进阶 数智兴煤