ITPub博客

首页 > Linux操作系统 > Linux操作系统 > tcpdump历史

tcpdump历史

原创 Linux操作系统 作者:哎呀我的天呐 时间:2022-10-08 18:35:32 0 删除 编辑

这些抓包技术名词,你分清楚了吗?

首先,我帮你捋一下这些技术的来龙去脉甚至“八卦”,这样你在进入后面课程的具体技术学习时,就会多几分亲近感,

也多几分底气了。


tcpdump

我们先来认识大名鼎鼎的 tcpdump。1988 年,劳伦斯伯克利国家实验室的四位工程师编写出了 tcpdump 这个殿堂级的工具。

这个实验室呢,也很值得我们尊敬。这里涌现过13 位诺贝尔奖获得者,其中包括 1997 年获得物理学奖的华人巨匠朱棣文,

可见这是多么耀眼的一块科学圣地。 这个地方能做出开创性的技术,确实一点都不令人意外。

tcpdump 可以工作在各种 Unix 类的操作系统上,包括 Linux、FreeBSD、macOS、Solaris 等,

也是目前使用最为广泛的 抓包工具之一。 但是 tcpdump 要过滤报文的话,还要依赖一个底层能力:BPF。


BPF

BPF 全称是 Berkeley Packet Filter(也叫 BSD Packet Filter),它是 tcpdump 等抓包 工具的底层基础。

在 BPF 出现之前,虽然各家操作系统都有自己的抓包工具,但也都有这 样或那样的不足。

比如,有些系统把所有网络报文一股脑儿塞给用户空间程序,开销非常大;而有些系统虽然有报文过滤功能,

但是工作很不稳定。 为了解决这些问题,1992 年,也还是在劳伦斯伯克利国家实验室,

当初 tcpdump 的两个 作者史蒂文·麦克凯恩(Steven McCanne)和范·雅各布森(Van Jacobson)发表了关于 BPF 论文,

它以一种新的基于寄存器的虚拟机方式,实现了高效稳定的报文过滤功能。从此以后,

抓包技术这棵大树有了一个甚为强大的根基,而构建在 BPF 之上的 libpcap、tcpdump 等不断枝繁叶茂,

进一步使得抓包工作变得方便、稳定,我们这些凡夫俗子才好在这棵大树底下,下棋乘凉。


libpcap

BPF 实现了抓包虚拟机,但它是如何被用户空间程序使用的呢?于是,libpcap 出现了, 

它提供了 API 给用户空间程序(包括 tcpdump、Wireshark 等),使得后者能方便地调 用 BPF 实现抓包过滤等功能。

也就是说,libpcap 是 BPF 的一层 API 封装。 那么到目前为止,我们应该就能明白 tcpdump 是怎么工作的了:

tcpdump 调用了 libpcap 接口,后者调用 BPF 实现了报文过滤和抓取。我们来看一下示意图: 

WinPcap

Windows 上也可以做到类似 Linux 这样的抓包,其底层就是依赖 WinPcap,它是 libpcap 的 Windows 版本。

微软很早就支持了图形界面抓包工具,从 Windows NT 时代 开始,

人们就可以用 Network Monitor 这个工具在 Windows 平台上进行网络排查。

十多年前,我还在做 Windows 工程师时,也时常用到这个工具。算起来,我跟抓包工具结 缘也有不少年头了。


eBPF

Linux 从 3.18 版本开始支持 extended BPF,简称 eBPF。这是一个更加通用的内核接 口,不仅能支持网络抓包,

还能支持网络以外的内核观测点的信息收集等工作。所以事实 上,eBPF 已经是一个通用工具,

而不再局限在网络工具这个角色定位上了。同时,也因为它在数据面上的性能很出色,所以现在不少公司正在探索,

利用它实现一些 数据面的开发工作,比如高性能的负载均衡。相信不久的将来,

我们就能看到越来越多的 eBPF 的应用案例了。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29990276/viewspace-2917284/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 什么是 TCP 流?
请登录后发表评论 登录
全部评论
https://cloud.tencent.com/developer/inventory/14362

注册时间:2014-10-30

  • 博文量
    403
  • 访问量
    2528743