使用Iperf調整網絡

使用Iperf調整網絡
    Iperf 是一個 TCP/IP UDP/IP 的性能測量工具,通過調諧各種參數可以測試TCP的最大帶寬,並報告帶寬、延遲,最大段和最大傳輸單元大小等統計信息。Iperf可以運行於Linux/BSDUnixWindows等操作系統。

一、Iperf工作原理

Iperf主要的功能是調諧基於特定路徑的TCP連接的性能,我們知道TCP連接調諧最基本的措施是調諧TCP窗口的大小,窗口大小控制在任何節點網絡中可以存在的數據大小如果該值太小, 發送者將會在某段時間處於空閒狀態,從而影響發送的性能。TCP窗口大小的理論值爲鏈路瓶頸帶寬與往返時延的乘積:

bottleneck bandwidth * round trip time

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

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

               =1890000 bits

               230KByte

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

IperfNTCP帶寬的原理較簡單,即客戶端和服務器端建立連接,然後客戶端發送一定大小的數據,並記下發送的時間, 或者客戶端在一定的時間內發送數據,並記下發送的總數據。帶寬的大小等於發送的總數據除以發送的總時間。對服務器端來說,就是在連接建立時間內,接收的總數據除以所花時間即爲服務器端所測得的帶寬。MSS的大小通過TCP內核接口函數直接獲得。

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

二、Iperf實現

    Iperf源代碼採用面向對象的C++語言實現,主要包括基本類和實現類兩部分。基本類提供了實現中需要用到的一些基本的對象,包括隊列、鏈表、時間管理、鎖、條件、線程等,這些代碼不是特定於Iperf應用的,可以移植到其他應用程序。實現類中主要包括針對Iperf應用的類,包括實現客戶端/服務器端發送和接收數據的類,以及用於統計信息的類等。這裏主要討論一下與應用關係最緊密的幾個類,其他的類不做詳述。

Iperf主要類圖結構包括9個類。IPerf 的核心部分均在PerfSocket類中實現,包括客戶端和服務器端發送和接收數據、帶寬報告、數據丟失及延遲抖動報告,以及窗口大小和MSS報告等功能。其中SpeakerClient爲客戶端的對象,ListenerAudienceServer爲服務器端的對象。客戶端和服務器端的通信通過三個消息完成:Connectwriteshutdown。這裏connect不同於TCP中的連接,它還包含一個數據報文,其信息爲雙向測試而傳給服務器端的信息,主要用於雙向測試時讓服務器端啓動客戶端線程而所需要的信息。UDP 測試的過程基本上跟TCP類似。UDP報文包含了一個應用報文頭,其主要字段爲報文ID和時間信息,這個主要是爲了測試UDP報文的丟失、亂序以及延遲抖動性能。UDP的第一個報文用來建立連接,不作爲應用數據,其信息爲雙向測試而傳給服務器端的信息,主要用於雙向測試時讓服務器端啓動客戶端線程而所需要的信息。UDPTCP第一個報文內容的主要區別是UDP報文還包括一個應用報文頭。UDP傳輸結束通過客戶端發送一個FIN 的報文來實現,該報文的報文ID爲負數,服務器端接收到FIN報文後即停止接收報文並回送一個AckFIN報文給客戶,AckFIN 報文包含了服務器端得到的測試數據。

操作舉例:

1TCP測試

服務器執行:#iperf -s -i 1 -w 1M

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

其中-w表示TCP window sizehost需替換成服務器地址。

2UDP測試

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

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章