複製鏈接
請複製以下鏈接發送給好友

bpf

鎖定
柏克萊封包過濾器(Berkeley Packet Filter,縮寫 BPF),是類Unix系統上數據鏈路層的一種原始接口,提供原始鏈路層封包的收發,除此之外,如果網卡驅動支持洪泛模式,那麼它可以讓網卡處於此種模式,這樣可以收到網絡上的所有包,不管他們的目的地是不是所在主機
中文名
伯克利封包過濾器
外文名
Berkeley Packet Filter
英文縮寫
BPF
應    用
計算機

bpf簡介

柏克萊封包過濾器(Berkeley Packet Filter,縮寫 BPF),是類Unix系統上數據鏈路層的一種原始接口,提供原始鏈路層封包的收發,除此之外,如果網卡驅動支持洪泛模式,那麼它可以讓網卡處於此種模式,這樣可以收到網絡上的所有包,不管他們的目的地是不是所在主機
另外,BPF支持“過濾”封包,這樣BPF會只把“感興趣”的封包到上層軟件,可以避免從操作系統內核向用户態複製其他封包,降低抓包的CPU的負擔以及所需的緩衝區空間,從而減少丟包率。BPF的過濾功能是以BPF虛擬機機器語言解釋器的形式實現的,這種語言的程序可以抓取封包數據,對封包中的數據採取算術操作,並將結果與常量或封包中的數據或結果中的測試位比較,根據比較的結果決定接受還是拒絕封包。在一些平台上,包括FreeBSD和WinPcap,即時編譯技術用於把虛擬機指令轉換為原始碼,以進一步減少開銷。
在其他操作系統上,此虛擬機語言的內核態解釋器也被用於原始數據鏈路機制,例如Tru64 Unix系統,以及Linux中的套接字解釋器,和WinPcap封包抓取機制。
用户態解釋器由pcapAPI的libpcap/WinPcap實現提供,因此,在對此過濾機制沒有內核態支持的系統上抓取封包時,封包可以在內核態過濾,使用pcap API的代碼可以工作於此兩種模式;在使用用户態過濾的系統上,所有分包由內核態複製到用户態,包括將被過濾出去的封包。這種解釋器也可以用於包含由pcap抓取的封包的文件。
BPF有時也只表示過濾機制,而不是整個接口。
BSD 內核實現例程如bpf_mtap()和bpf_tap(),以BPF_MTAP()和BPF_TAP()等宏定義的形式進行包裹由網卡驅動(以及偽驅動pseudo-drivers) 向BPF機制發送進出的封包。
2007年,Robert Watson與Christian Peron為FreeBSD操作系統中BPF的實現加入了zero-copy buffer extension,使得驅動程序中斷處理器中的內核封包抓取能直接向用户內存寫,以避免BPF設備收到的所有封包數據的兩次複製需要,一份副本存在於用户進程的接收路徑中,這保證了不同BPF設備調用者的獨立性,同時使得只把封包頭部放入BPF緩衝區,而不是複製整個封包數據。 [1] 

bpf數據鏈路層

數據鏈路層(Data Link Layer)是OSI參考模型第二層,位於物理層與網絡層之間。在廣播式多路訪問鏈路中(局域網),由於可能存在介質爭用,它還可以細分成介質訪問控制(MAC)子層和邏輯鏈路控制(LLC)子層,介質訪問控制(MAC)子層專職處理介質訪問的爭用與衝突問題。
局域網廣域網皆屬第1,2層。 [1] 

bpf參見

參考資料
  • 1.    "Linux kernel 3.19, Section 11. Networking". kernelnewbies.org. February 8, 2015. Retrieved February 13, 2015.