标签: ebpf

BPF的理解

当我需要使用捕获一些数据包时tcpdump,我使用如下命令:

tcpdump -i eth0 "dst host 192.168.1.0"
Run Code Online (Sandbox Code Playgroud)

我一直认为dst 主机 192.168.1.0部分是称为 BPF(伯克利数据包过滤器)的东西。对我来说,这是一种过滤网络数据包的简单语言。但今天我的室友告诉我 BPF 可以用来捕获性能信息。根据他的描述,这就像Windows上的工具perfmon。这是真的吗?它与我在问题开头提到的BPF相同吗?

performance tcpdump ebpf

9
推荐指数
1
解决办法
2365
查看次数

数据包如何流经内核

当谈到数据包过滤/管理时,我实际上从来不知道内核内部发生了什么。有很多不同的工具可以作用于数据包,无论是从用户空间(修改内核空间子系统)还是直接在内核空间。

是否有任何地方可以记录每个工具与其他工具的交互或它们的作用。我觉得应该在某个地方有一个图表,为那些技术不够强、无法阅读内核代码的人指明正在发生的事情。

这是我的例子:

我的一个网络接口收到一个数据包,并且我有:

  • 超细纤维束
  • iptables
  • IPv4子系统(路由)
  • IPV
  • 电子BPF

好的,我知道 UFW 是 iptables 的前端,而 iptables 是 Netfiler 的前端。现在我们在内核空间,我们的工具是 Netfiler、IPV、IPv4 和 eBPF。

同样,Netfilter 和 IPv4 子系统之间的交互很容易找到,因为这些都是非常古老(不是很糟糕)的子系统,因此缺少文档会很奇怪。该图是交互的概述: 在此输入图像描述

但 IPV 和 eBPF 又如何呢?当这两个数据包位于内核中时,内核子系统对数据包执行操作的实际顺序是什么?

我总是发现一些很棒的人试图深入了解并帮助他人理解,例如,http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.filter_rules.html

但这不应该以更官方的方式记录吗?我不是在这里寻找有关这些子模块如何交互的解释,我知道我可以通过搜索自己找到它。我的问题更笼统,为什么没有官方文档来真正尝试解释这些内核子系统内部发生的事情。它是否记录在我不知道的地方?有什么理由不尝试解释这些工具呢?

如果我没有任何意义,我深表歉意。我刚刚开始学习这些事情。

linux ipv4 netfilter ipvs ebpf

5
推荐指数
1
解决办法
2300
查看次数

标签 统计

ebpf ×2

ipv4 ×1

ipvs ×1

linux ×1

netfilter ×1

performance ×1

tcpdump ×1