tcpdump歷史

哎呀我的天吶發表於2022-10-08

這些抓包技術名詞,你分清楚了嗎?

首先,我幫你捋一下這些技術的來龍去脈甚至“八卦”,這樣你在進入後面課程的具體技術學習時,就會多幾分親近感,

也多幾分底氣了。


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部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2917284/,如需轉載,請註明出處,否則將追究法律責任。