libpcap丟包原理分析及Fedora 9 核心2.6.25.14下安裝PF-RING的詳細過程
阿新 • • 發佈:2019-01-22
看到網上有人講解fedora 9下安裝PF-RING的過程,都是幾年前的了,比較老了,我安裝PF-RING就是為了使用libpcap庫,libpcap的原理是通過socket將資料包從網絡卡 捕獲資料包,然後在提交給應用程式,和winpcap很大的區別是,libpcap採用的是2個緩衝區,核心類似的一個乒乓操作,詳細見我的庖丁解牛--winpcap原始碼徹底解密一系列的文章。winpcap採用的是環狀緩衝區,在winpcap下當網絡卡有資料到來時,npf.sys就會將資料拷貝到核心緩衝區中,而核心驅動實際上是一個Ndis協議驅動,當核心緩衝區的資料包大小達到一個閾值mintocopysize時,它就會將資料包拷貝到應用緩衝區中,kernelbuffer和userbuffer,及mintocopysize都提供了函式進行設定的。那麼為什麼在windows平臺進行包捕獲的時候,千兆網的條件下,都很少有包丟失呢,為什麼在linux環境下進行包捕獲,丟包率很大,這就要仔細分析原始碼了,winpcap的npf.sys是一個Ndis協議驅動,它和TCP/IP協議是同一層的,即採用winpcap捕獲資料包,資料包就不需要經過tcp/ip層了,而libpcap是linux下的捕獲包,他是在應用層之上的,及在tcp/ip協議上,本來通過socket可以捕獲包的,libpcap不過是對socket進行了一次封裝,在socket上面有提供了一層介面,方面使用者的呼叫。libpcap捕獲包的流程如下: