tcpdump歷史
這些抓包技術名詞,你分清楚了嗎?
首先,我幫你捋一下這些技術的來龍去脈甚至“八卦”,這樣你在進入後面課程的具體技術學習時,就會多幾分親近感,
也多幾分底氣了。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS歷史(iOS系統發展歷史)iOS
- OAuth歷史OAuth
- Oracle歷史Oracle
- Mysql歷史MySql
- 歷史背景
- HTTP的歷史HTTP
- Shell歷史命令
- Laravel 的歷史Laravel
- Java的歷史Java
- Macromedia的歷史Mac
- [oracle] 查詢歷史會話、歷史執行計劃Oracle會話
- Oracle中檢視sql命令歷史,檢視rman命令歷史OracleSQL
- 光榮策略遊戲的歷史及未來——歷史篇遊戲
- 計算機歷史計算機
- 人工智慧歷史人工智慧
- java發展歷史Java
- C++的歷史C++
- linux歷史命令Linux
- IBM的歷史IBM
- DB2歷史DB2
- 中國歷史(2)明朝276年曆史
- 中國歷史(5)唐朝289年曆史
- 中國歷史(3)元朝98年曆史
- 中國歷史(6)唐朝289年曆史
- 歷史的回顧:HP-UX系統概況和版本歷史UX
- 回顧 Firefox 歷史Firefox
- Linux發展歷史Linux
- Git基本命令 -- 歷史Git
- arguments 物件的老歷史物件
- git檢視提交歷史Git
- mysql架構和歷史MySql架構
- 技術決定歷史
- 【譯】"Typeof null" 的歷史Null
- CTRL + ALT + DELETE 的歷史delete
- Oracle公司發展歷史Oracle
- Git 檢視提交歷史Git
- INTEL CPU 歷史表 收藏Intel
- 轉:IBM的歷史IBM