一種基於linux系統的精準流量統計方法

2021-09-27 05:49:29 字數 1472 閱讀 3860

在linux系統關於流量統計,已經有開源的工具,比如nethogs,nload和iptraf。它們適合我們在pc上直接監控某台裝置的流量情況,但並不適合我們應用到自己的程式中去。如果要在自己**中實現流量的統計,可以有下面幾種方法:統計應用層流量;使用tcpdump抓取每一包資料進行統計;使用iptables命令來實現。下面就這幾種方法進行對比:

(1)應用層計算流量

該方法也就是在自己程式中的每個end和recv函式中去實現,統計自己每次進行網路通訊時候資料的接收和傳送長度,進而統計出總的資料流量。這種方法是一種粗略的計算,實際上是非常不準確的,它比實際的資料流量統計少了。因為我們的send和recv函式是在應用層。應用層的資料,到鏈路層,中間需要經過傳輸層和網路層,他們會對資料程序封裝,加上資料報頭,校驗等等資訊之後才會到鏈路層,所以實際鏈路層傳送的資料比應用層的資料要多一些額外的資料,接收資料的時候其實也是一樣,只是整個流程反過來了。另外,在網路傳輸的過程中,還可能出現資料的丟失,這個在有線傳輸**現比較少,但是在無線傳輸並且網路狀態不是很好的情況下,出現資料丟失資料重傳的概率是非常高的,而在應用層的send和recv函式並不能感知到資料的丟失和重傳,所以在應用層統計的流量是不準確的,它會比實際的資料流量統計少了,實際少多少,這個跟網路狀態和傳輸方式有關。實際網路運營商統計的資料流量,是鏈路層的資料流量,而不是應用層的網路流量。

(2)tcpdump抓資料

tcpdump是與windows系統的wireshark類似的乙個網路抓包工具。它可以感知鏈路層資料的丟失和重傳等等資訊,但是它是基於資料擷取的方式來獲取資訊,這樣的方式比較比較影響網路的效能,同時也是比較消耗系統的資源,可以用來做網路除錯,但不是非常適合網路流量的統計。

(3)使用iptables統計流量

iptables命令 是linux上常用的防火牆軟體,是netfilter專案的一部分。它可以根據不同的規則對資料進行過濾,**和統計。它可以針對某乙個ip或是多個ip程序處理,也可以針對某乙個埠進行處理。當它做資料統計的時候,它的數值統計的是鏈路層的資料。也就是包括了ip包資訊和資料重傳等額外資料的長度。通過這種方式,可以實現流量的精準統計。

設計思路:

基本設計方法是這樣:在乙個程序(程序a)中迴圈檢測有那些ip和埠需要新增進iptable的統計規則中,如果有收到乙個新增規則的請求,則判斷該規則是否已經新增進iptable中,如果沒有則新增,如果有則放棄此次規則的新增。在其他的程序中,比如程序b,c,d,e...,在程序網路連線的時候,根據需求將需要統計的ip或是埠資訊,傳送給程序a,讓程序a去進行iptables規則的新增。另外,在程序a中,可以迴圈的去獲取iptables統計的流量,還可以實時的去獲取網絡卡實際收發的資料,實現網路流量的實時更新。程序a,b,c,d,e之間,可以使用程序間通訊的任意一種,這裡為了方便擴充套件,使用了命名管道程序通訊。為了方便資料檢驗傳遞和處理,在程序間傳遞的ip位址可以轉換為數值二不是字串,實際在connet函式建立網路連線的時候,使用的也是乙個32位的int型別資料來表示ip位址。

www.lekaowang.com.cn/mjk/rgo/gid/

一種基於Makefile的編譯系統架構實現及自動化

一.我分享的是乙個簡化版的編譯架構,我要實現的目標是 對遵循以下組織結構的資料夾進行編譯 bb inc src entry modules module1 module2 src 目錄下可以允許有遞迴目錄或者檔案,最大深度不超過 5,makefile 定義規則會去自動搜尋所有的 c原始檔,編譯出的所...

tmpfs 一種基於記憶體的檔案系統

tmpfs是一種基於記憶體的檔案系統,tmpfs有時候使用rm 物理記憶體 有時候使用swap 磁碟一塊區域 根據實際情況進行分配。rm 物理記憶體。real memery的簡稱?真實記憶體就是電腦主機板上那塊記憶體條,叫做真實記憶體不為過。tmpfs最大可使用的大小為什麼是rm swap。swap...

一種基於DSP的音訊實時處理系統

0 引 言 聲學回聲消除成為提公升音訊通訊質量的乙個非常重要的環節。聲學回聲消除採用了自適應濾波來估計回聲產生的迴路特徵,並不斷修正自適應濾波器的係數,使得估計值更加逼近真實回聲,最後從話筒訊號中去除估計的回聲,以達到回音消除的目的。聲學回聲具有訊號衝激響應時間長,特徵分布範圍廣且多路徑反射和時變的...