使用Iperf調整網路

2021-09-05 07:12:24 字數 2508 閱讀 7889

使用iperf調整網路

iperf

是乙個tcp/ip 和udp/ip 的效能測量工具,通過調諧各種引數可以測試tcp的最大頻寬,並報告頻寬、延遲,最大段和最大傳輸單元大小等統計資訊。iperf可以執行於linux/bsd、unix及windows等作業系統。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

一、iperf工作原理

iperf

主要的功能是調諧基於特定路徑的tcp連線的效能,我們知道tcp連線調諧最基本的措施是調諧tcp視窗的大小,視窗大小控制在任何節點網路中可以存在的資料大小如果該值太小, 傳送者將會在某段時間處於空閒狀態,從而影響傳送的效能。tcp視窗大小的理論值為鏈路瓶頸頻寬與往返時延的乘積:

bottleneck bandwidth * round trip time

例如鏈路瓶頸頻寬為45mbit/sec,往返時延為42ms(可以通過ping來測試),那麼視窗的理論值為:

45mbit/sec*42ms=(45e6)*(42e-3)

=1890000 bits

230kbyte

調諧視窗大小即可以上.理論值為基準,在該值上慢慢增大或減少,即可獲得最好的結果。

iperfn

試tcp頻寬的原理較簡單,即客戶端和伺服器端建立連線,然後客戶端傳送一定大小的資料,並記下傳送的時間, 或者客戶端在一定的時間內傳送資料,並記下傳送的總資料。頻寬的大小等於傳送的總資料除以傳送的總時間。對伺服器端來說,就是在連線建立時間內,接收的總資料除以所花時間即為伺服器端所測得的頻寬。mss的大小通過tcp核心介面函式直接獲得。

測試udp的效能,客戶端可以指定udp資料流的速率。客戶端傳送資料時將根據客戶提供的速率計算資料報傳送之間的時延。另外客戶還可以指定傳送資料報的大小。每個傳送的資料報包含乙個id號,用來惟一的標識該報文。伺服器端則根據該id 號來確定資料報丟失和亂序。當把udp報文大小設定可以將整個報文放入i p 層的包(packet)內時,那麼udp所測得的報文丟失資料即為ip層包的丟失資料。這提供了乙個有效的測試包丟失情況的方法。資料報傳輸延遲抖動(jitter)的測試由伺服器端完成,客戶傳送的報文資料報含有傳送時間戳,伺服器端根據該時間資訊和接收到報文的時間戳來計算傳輸延遲抖動。傳輸延遲抖動反映傳輸過程中是否平滑。由於它是乙個相對值,所以並不需要客戶端和伺服器端時間同步。

二、iperf實現

iperf

源**採用物件導向的c++語言實現,主要包括基本類和實現類兩部分。基本類提供了實現中需要用到的一些基本的物件,包括佇列、鍊錶、時間管理、鎖、條件、執行緒等,這些**不是特定於iperf應用的,可以移植到其他應用程式。實現類中主要包括針對iperf應用的類,包括實現客戶端/伺服器端傳送和接收資料的類,以及用於統計資訊的類等。這裡主要討論一下與應用關係最緊密的幾個類,其他的類不做詳述。

iperf

主要類圖結構包括9個類。iperf 的核心部分均在perfsocket類中實現,包括客戶端和伺服器端傳送和接收資料、頻寬報告、資料丟失及延遲抖動報告,以及視窗大小和mss報告等功能。其中speaker和client為客戶端的物件,listener、audience和server為伺服器端的物件。客戶端和伺服器端的通訊通過三個訊息完成:connect、write及shutdown。這裡connect不同於tcp中的連線,它還包含乙個資料報文,其資訊為雙向測試而傳給伺服器端的資訊,主要用於雙向測試時讓伺服器端啟動客戶端執行緒而所需要的資訊。udp 測試的過程基本上跟tcp類似。udp報文包含了乙個應用報文頭,其主要欄位為報文id和時間資訊,這個主要是為了測試udp報文的丟失、亂序以及延遲抖動效能。udp的第乙個報文用來建立連線,不作為應用資料,其資訊為雙向測試而傳給伺服器端的資訊,主要用於雙向測試時讓伺服器端啟動客戶端執行緒而所需要的資訊。udp與tcp第乙個報文內容的主要區別是udp報文還包括乙個應用報文頭。udp傳輸結束通過客戶端傳送乙個fin 的報文來實現,該報文的報文id為負數,伺服器端接收到fin報文後即停止接收報文並回送乙個ackfin報文給客戶,ackfin 報文包含了伺服器端得到的測試資料。

操作舉例:

1)tcp測試

伺服器執行:#iperf -s -i 1 -w 1m

客戶端執行:#iperf -c host -i 1 -w 1m

其中-w表示tcp window size,host需替換成伺服器位址。

2)udp測試

伺服器執行:#iperf -u -s

客戶端執行:#iperf -u -c 10.32.0.254 -b 900m  -i 1  -w 1m  -t 60

其中-b表示使用頻寬數量,千兆鏈路使用90%容量進行測試就可以了。

使用iperf測試網路效能

最近在測試區域網下http服務效能,伺服器用的是萬兆網絡卡,但是吞吐量到達100m s就上不去了,懷疑和網路環境有關係,然後上網搜尋發現了乙個很好用的網路效能測試工具iperf,下面的引數可以用來測試網路頻寬。客戶端 iperf3 c 127.0.0.1 伺服器ip p 4 t 30 i 2 p 5...

iperf網路工具使用小結

iperf的使用方法及詳解可以參考我的另一篇部落格 以下來自工作中使用iperf時遇到的問題 使用iperf測試乙個網路裝置的傳輸速率 1 測試環境 兩台windows7的膝上型電腦和乙個網路裝置。測試方法 兩台筆記本中間接網路裝置。乙個筆記本傳送資料,資料經過網路裝置然後另一台筆記本來接收資料。按...

網路效能測試工具iperf使用

iperf命令是乙個網路效能測試工具。iperf可以測試tcp和udp頻寬質量。iperf可以測量最大tcp頻寬,具有多種引數和udp特性。iperf可以報告頻寬,延遲抖動和資料報丟失。利用iperf這一特性,可以用來測試一些網路裝置如路由器,防火牆,交換機等的效能。iperf分為兩種版本,unix...