IPerf是一個開源的測試網路寬頻並能統計並報告延遲抖動、數據包丟失率信息的控制台命令程式,通過參數選項可以方便地看出,通過設置不同的選項值對網路帶寬的影響,對於學習網路編程還是有一定的借鑒意義,至少可以玩上一段時間。 IPerf開始出現的時候是在03年,版本是1.7.0,在網上找到的僅有的系列源碼 ...
IPerf是一個開源的測試網路寬頻並能統計並報告延遲抖動、數據包丟失率信息的控制台命令程式,通過參數選項可以方便地看出,通過設置不同的選項值對網路帶寬的影響,對於學習網路編程還是有一定的借鑒意義,至少可以玩上一段時間。
IPerf開始出現的時候是在03年,版本是1.7.0,在網上找到的僅有的系列源碼解析篇 http://blog.chinaunix.net/uid/11568125/cid-131106-abstract-1.html 就是基於1.7.0 進行介紹和解析的,貌似1.7.0還是使用C++編寫比較多,後面到了IPerf2版本,C++和C結合,現在出來一個法國人團隊另起爐竈重構出不向下相容的IPerf3,他們開了一個論壇專門討論維護,但因為是法語所以跟我也無法溝通,所以也沒怎麼上去看,一開始入門的時候就只能上處鏈接的文章,還好有所幫助。
現在IPerf的官方網站為:https://iperf.fr/
IPerf的一些特性:
- 開源,每個版本的源碼都能進行下載和研習;
- 跨平臺,支持Windows Linux MacOS Android,現有支持不同平臺的IPerf版本,UWP,Docker...很早之前就出來了一個JPerf(在IPerf的基礎上添加了界面),有興趣的同學可以找來看看;
- 支持TCP、UDP協議,包括IPV4和IPV6,最新的IPerf還支持SCTP協
- TCP
- 測試網路帶寬;
- 報告MSS(最大報文段長度)、MTU(最大傳輸單元)的大小,在Windows上不支持;
- 支持通過套接字緩衝區修改TCP視窗大小;
- 支持多線程併發;
- UDP
- 客戶端可創建指定大小的帶寬流;
- 統計數據包丟失、延遲抖動率等信息
- TCP
IPerf的簡單使用示例:
IPerf通過選項 -c 和 -s 決定其當前是作為客戶端程式還是作為服務端程式運行,當作為客戶端程式運行時,-c 後面必須帶所連接對端伺服器的IP地址或功能變數名稱
上面圖片顯示三種信息:本地設置信息,連接信息,傳輸信息,究竟其在程式設計中是如何列印出來的,看完接下來的源碼解析希望你能夠明白其中的原理 :)
下麵列舉一些比較常用的選項參數,想要知道更多的選項參數,請查看官方網站的文檔說明
選項參數 說明
[客戶端]
-c host 以客戶端模式運行,連接到IPerf服務端運行的主機IP地址或功能變數名稱
-t ; -i -t(timing)測試的時長;-i(interval)帶寬報告周期性顯示的間隔時間
-n 設置測試所發送的數據總量,#[KM] 覆蓋-t選項
-d, -L 雙向測試模式,客戶端與服務端建立雙向連接,並相互發送數據進行測試
-r, -L 交易模式,在客戶端到服務端的測試結束後,執行服務端到客戶端的測試
-P 設置客戶端同時連接到服務端的併發數(在多線程允許的條件下)
[服務端]
-s 以服務端模式運行,等待客戶端的連接請求
-D Unix平臺以後臺守護程式運行;Windows平臺下以服務形式運行
-w 設置TCP視窗大小或UDP接收緩衝區大小為其指定的值