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

    文章

    1309

    浏览量

    39843
  • Linux
    +关注

    关注

    87

    文章

    10988

    浏览量

    206725
  • 网络设备
    +关注

    关注

    0

    文章

    266

    浏览量

    29344

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    初识电阻与电阻器

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

    高性能网络框架之XDP技术解析

    还没有较好的通用用户态协议栈开源项目出现。在这种情况下,XDP借助于eBPF虚拟机技术在网卡驱动层实现高性能网络框架,且其原生运行在内核态可直通内核TCP/UDP协议栈。XDP作为一种数据面高性能框架技术为平衡高速数据处理和协议栈兼容开辟了一个新的道路。
    的头像 发表于 11-05 11:19 1866次阅读
    高性能网络框架之<b class='flag-5'>XDP</b>技术解析

    【RA2L1开发实践】-1.初识点灯

    瑞萨RA2L1产品组属于48MHz Arm® Cortex®-M23 超低功耗通用微控制器 ,能够支持 1.6V 至 5.5V 宽电压工作,CPU 时钟频率最高 48MHz,且运行模式电流和待机模式电流更低。
    的头像 发表于 10-11 10:38 335次阅读
    【RA2L1开发实践】-1.<b class='flag-5'>初识</b>点灯

    【昉·星光 2 高性能RISC-V单板计算机体验】原创3 控制螺旋桨电路的升力大小

    接上三篇:1初识赛昉科技StarFivehttps://bbs.elecfans.com/jishu_2368572_1_1.html 控制小车前进后退 https
    发表于 08-31 16:45

    【Milk-V Duo 开发板免费体验】初体验(一)---- 初识GPIO外挂点灯

    1、初识milk-v duo GPIO milk-v duo将GPIO分为了五组,每组32个端口。下为五个分组的基础地址标号 gpioe基地址352 gpiod基地址384 gpioc基地址416
    发表于 08-16 08:04

    【昉·星光 2 高性能RISC-V单板计算机体验】1初识赛昉科技StarFive

    初识赛昉科技StarFive 接下来为大家做一些小东西,玩一玩。 板子的做工整体来看是非常不错的!值得入手。 谢谢!
    发表于 08-07 20:47

    一文初识C++

    无论你使用命令行界面或者IDE,大多数编译器都要求程序源码存储在一个或多个文件中。程序文件通常被称为源文件(source file)。在大多数系统中,源文件的名字以一个后缀为结尾,后缀是由一个句点后接-一个或多个字符组成的。后缀告诉系统这个文件是一个C++程序。不同编译器使用不同的后缀命名约定,最常见的包括. cc、.cxx、.cpp、.cp及.C。
    发表于 07-17 15:14 136次阅读
    一文<b class='flag-5'>初识</b>C++

    初识IBIS模型

    半导体LSI的EDA模型之一是"IBIS模型",完整称为Input/OutputBuffer Information Specification,是一个描述数字IC输入端和输出端电气特性的文本文件,在电路仿真中被广泛使用。IBIS模型由封装模型部分和缓冲器模型部分组成。
    的头像 发表于 07-14 10:10 1085次阅读

    初识MBD及MBD模型管理

    基于模型的设计( **Model-Based Design,MBD** )是一种围绕模型搭建展开的一种项目开发方法。
    的头像 发表于 07-13 09:16 1044次阅读
    <b class='flag-5'>初识</b>MBD及MBD模型管理

    HPLC通信技术初识

    随着人工智能、物联网、通信技术的高速发展,电网形态随之发生变化,建设能源互联网成为顺应能源革命和数字革命融合发展趋势的根本途径。电力线载波(PLC)通信技术因覆盖面广和无需要额外布线的优势,是能源互联网建设过程中最理想的信息传输载体。   用电信息采集系统利用电力线载波通信技术实现用电数据采集,伴随着能源互联网建设的进程,由仅为营销系统提供数据转向为多系统、多专业提供应用支撑,采集的数据类型不
    的头像 发表于 07-11 08:40 7118次阅读
    HPLC通信技术<b class='flag-5'>初识</b>

    OpenMV初识

    OpenMV是由美国克里斯团队基于MicroPython发起的开源机器视觉项目,目的是创建低成本,可扩展,使用python驱动的机器视觉模块。OpenMV搭载了MicroPython解释器,使其可以在嵌入式端进行python开发。OpenMV基于32位,ARM Cortex-M7内核的OpenMV-H7, 并结合各种摄像头,可以进行多种机器视觉应用的实现,比如人脸检测,物体分类等。
    的头像 发表于 06-12 11:23 1661次阅读
    OpenMV<b class='flag-5'>初识</b>

    初识自动驾驶系统

    近几年自动驾驶技术越来越火,前沿的人工智能、机器学习、大数据等技术也被应用到自动驾驶领域中,各大主机厂、自动驾驶解决方案提供商在不断加入和努力,行业在将自动驾驶技术由学术探索向商业化落地的方向持续推进。因此可以预见,未来自动驾驶方向将会吸引更多的企业和人才加入。本篇文章对于自动驾驶及相关技术进行初步介绍,适用于入门或科普。 自动驾驶(auto pilot)是指车辆能够依据自身设备对周围环境进行感知
    发表于 06-06 11:21 0次下载
    <b class='flag-5'>初识</b>自动驾驶系统

    解密英飞凌 PD应用 | 使用目前唯一有量产经验可程控最新PFC+HFB combole IC XDPS2221 140W应用

    为加速USB PD 3.1 规格普及,英飞凌推出全新XDP数位电源XDPS2221控制 IC , 提供PFC 及 Hybrid Flyback combo高整合度产品解决方案, 使周边元件数大幅减少
    的头像 发表于 05-23 11:13 642次阅读
    解密英飞凌 PD应用 | 使用目前唯一有量产经验可程控最新PFC+HFB combole IC XDPS2221 140W应用