根据众多博客资料,言简意赅的介绍xdp-ebpf. 小白一个,个人理解。勿喷!

1、bfp:

Berkeley Packet Filter, 用于过滤filter 网络报文packet的架构。

是tcpdump(linux)和wireshark(windows)乃至网络监控(network monitoring)领域的基石。

其背后的思想是:“与其把数据包复制到用户空间执行用户态程序过滤,不如把过滤程序灌进内核去”

简单来讲,BPF是一套完整的计算机体系结构 。和x86,ARM这些类似,BPF包含自己的指令集和运行时逻辑,同理,就像在x86平台编程,

最终要落实到x86汇编指令一样,BPF字节码也可以看成是汇编指令的序列。我们通过tcpdump的-d/-dd参数可见一斑:

[root@localhost ~]# tcpdump -i any tcp and host 1.1.1.1 -d
 
             (000) ldh [14]
 
             (001) jeq #0x86dd jt 10 jf 2
 
             (002) jeq #0x800 jt 3 jf 10
 
             (003) ldb [25]
 
             (004) jeq #0x6 jt 5 jf 10
 
             (005) ld [28]
 
             (006) jeq #0x1010101 jt 9 jf 7
 
             (007) ld [32]
 
             (008) jeq #0x1010101 jt 9 jf 10
 
             (009) ret #262144
 
             (010) ret #0
 
             [root@localhost ~]#
         bpf的核心功能包括:

a)过滤filter:根据外界输入的规则过滤报文;

b)  复制copy:将符合条件的报文由内核空间复制到用户空间

以tcpdump为例:

位于内核之中的 BPF 模块是整个流程之中最核心的一环:

它一方面接受 tcpdump 经由 libpcap 转码而来的滤包条件(Pseudo Machine Language) ,

另一方面也将符合条件的报文复制到用户空间最终经由 libpcap 发送给 tcpdump。

bpf设计

途经网卡驱动层的报文在上报给协议栈的同时会多出一路来传送给BPF,再经后者过滤后最终拷贝给用户态的应用。

2、eBPF

eBPF是最新加入linux内核模块,源于bpf,后来加入了JIT, 使得它实际上成了一个虚拟机。

eBPF 程序支持自己的字节码语言,基于该字节码语言编译成内核原生代码,就像 BPF 程序一样。

eBPF在内核中运行。

eBPF 程序对内核内存访问是有限制的。只能通过内核提供的函数去获取严格限制的必须的内存。

eBPF可以和User空间的程序通过 BPF Map进行通讯。

eBPF 必须编译成字节码才能使用。

3、bcc

直接手写ebpf字节码显得非常笨拙又低效,于是人们开始使用c语言直接编写ebpf程序,然后使用编译器将其编译成为eBPF字节码。

目前支持eBPF字节码的编译器只有llvm,即使是gcc编译过的内核bpf范例调用也要通过llvm编译后才能执行。直接对ebpf编程还是非常困难,

为了便于使用,出现了很多ebpf框架便于我们使用,如bcc和bpftrace。

4、xdp

如何用eBPF实现一个学习型网桥:  https://www.hy-print.com/licai/69858.html

XDP, eXpress Data Path, 它其实是位于网卡驱动程序里的一个快速处理包的HOOK点。

为什么快?

--数据包处理位于非常底层(在网卡的驱动程序处),避免了很多内核skb处理开销(socket buffer, 数据包的管理结构);可以将很多处理逻辑offload到网卡硬件。

--显而,在XDP这个HOOK点灌进来一点eBPF字节码,将是一件令人愉快的事情。

5、流程图

XDP_DROP:使用XDP进行丢弃的速度很快,缓冲区只是回收到rx环形队列
XDP_PASS:可能在修改后传递到普通网络堆栈
XDP_TX:修改包后,发送相同的NIC包
XDP_REDIRECT:使用XDP程序中的XDP_REDIRECT操作,该程序可以将入口帧重定向到其他启用XDP的netdev
注:用户态的程序通过响应 perf-event 事件进行收包,即使是在XDP_DROP动作下。

通常就是设置xdp_drop 动作下,来进行高速抓包。其他动作会影响性能。

推荐>

【超全】深入理解 BPF:一个阅读清单   https://linux.cn/article-9507-1.html

github 源码:

https://github.com/cloudflare/xdpcap

https://github.com/xdp-project/xdp-tutorial/

xdp-ebpf 简介相关推荐

  1. XDP/eBPF — eBPF

    目录 文章目录 目录 eBPF 诞生的背景 eBPF eBPF 与 cBPF 的区别 eBPF 与 Kernel 的区别 eBPF 的逻辑框架 eBPF 的运行原理 eBPF 的整体设计 eBPF J ...

  2. XDP/eBPF — 架构设计

    目录 文章目录 目录 XDP 的架构设计 XDP 的包处理 XDP 程序示例 XDP 的架构设计 XDP 总体设计包括以下几个部分: XDP 驱动:是网卡驱动中的一个 XDP 程序的挂载点,每当网卡接 ...

  3. 实现基于XDP/eBPF的快速路由转发功能

    周末用eBPF实现了学习型网桥的XDP快速转发路径之后,再来用eBPF实现一个快速路由转发.同样很有意思. 关于eBPF和XDP的前置基础知识,我在前面实现网桥转发路径前已经概览过了,所以本文不再赘述 ...

  4. XDP/eBPF — 基于 eBPF 的 Linux Kernel 可观测性

    目录 文章目录 目录 eBPF 的可观测性架构 版本支持 BCC 60s 系列 BPF 版本 生成火焰图 排查网络调用来源 eBPF 的可观测性架构 BPF 观测技术相关的程序程序类型可能是 kpro ...

  5. XDP/eBPF — Overview

    目录 文章目录 目录 XDP XDP 设计原则 XDP技术优势 XDP 的工作模式 XDP 的适用场景 XDP v.s. DPDK XDP XDP(eXpress Data Path,快速数据面)是 ...

  6. XDP/eBPF — BPF

    目录 文章目录 目录 BPF 的诞生背景 BPF BPF 的运行架构 BPF 的诞生背景 在没有 BPF(Berkeley Packet Filter,伯克利包过滤器)之前,当 Userspace 的 ...

  7. Linux eBPF和XDP高速处理数据包;使用EBPF编写XDP网络过滤器;高性能ACL

    目录 eBPF和XDP以裸机速度处理数据包 通过网络堆栈的入口数据包流 XDP构造 在Go中编程XDP 结论 使用EBPF编写XDP网络过滤器 01.简介 02.什么是XDP 03.示例问题 04. ...

  8. DPDK and XDP and ebpf

    另外除了以下文章还有个ebpf https://qiita.com/sg-matsumoto/items/8194320db32d4d8f7a16 图片上传有问题,原文参考 https://cloud ...

  9. eBPF.io eBPF文档:扩展的数据包过滤器(BPF)

       目录 什么是eBPF? 安全 跟踪和分析 联网 可观察性与监控 什么是eBPF.io? eBPF简介 挂钩概述 eBPF程序如何编写? 加载程序和验证架构 地图 辅助呼叫 尾部和函数调用 eBP ...

  10. 云原生安全攻防|使用eBPF逃逸容器技术分析与实践

    作者:pass.neargle @ 腾讯安全平台部 前言 容器安全是一个庞大且牵涉极广的话题,而容器的安全隔离往往是一套纵深防御的体系,牵扯到AppArmor.Namespace.Capabiliti ...

最新文章

  1. 结合项目实例 回顾传统设计模式(九)迭代器模式
  2. centos6 安装 mantisbt-1.2.8 —— (3)Linux系统下yum源配置(Centos 6)
  3. m叉树的叶子节点数量
  4. OPA 21 - enter test case by testNumber
  5. opencv中的imwrite如何保存_如何把公众号的文章用文档保存到电脑中?
  6. Neo4j Java Rest绑定入门(Heroku部署)
  7. Docker制作镜像(四)
  8. QT中使用全局变量在多个源程序中传递变量
  9. 20. PHP 表单验证 - 验证 E-mail 和 URL
  10. 互联网大厂与编程语言
  11. Python贪吃蛇小游戏
  12. java script特效_javascript 常用特效(40种)
  13. 【leetcode刷题】[简单]427. 建立四叉树(construct quad tree)-java
  14. 卫星定轨理论、GPS信号与卫星星历
  15. qc快充协议2.0/3.0
  16. TCP AIMD Algorithm (copy)
  17. 携程后台开发笔试第二题
  18. 【python与数据分析】实验十三 北京市空气质量
  19. 武汉市征集人工智能领域技术成果等通知-2022年申请时间及条件
  20. 杰理之上下文件夹播放上文件夹从最后一首播放【篇】

热门文章

  1. POJ 3668 枚举?
  2. Android UI(一)Layout 背景局部Shape圆角设计
  3. UUIDGenerator
  4. Python零基础学习笔记(三十九)—— time
  5. rollup打包js的注意点-haorooms博客分享
  6. Linux 进程间通信的六种机制
  7. PostgreSQL 全文检索 - 词频统计
  8. 每周百万封业务邮件的服务器不知道为啥就down掉了?
  9. Sublime Text 使用记录汇总
  10. OpenTSDB的读写API