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接收緩沖區大小為其指定的值