2010-07-31 68 views
1

我需要能夠使用java監視內部網絡的速度。我想我可以使用一個服務器和一個客戶端的兩部分系統。我不需要響應時間,例如使用ping生成的內容,但實際的上傳和下載速度爲mbps。使用Java測量內部網絡速度/帶寬

我的想法是讓服務器發送一個數據包或一系列數據包到客戶端,然後服務器會計算這兩個點之間的網絡速度。有沒有人有任何想法我可以如何實現這一點?

謝謝你提前。

+0

如果你不想要實際的速度,那麼你究竟在測量什麼?你關心上傳和下載嗎? – 2010-07-31 17:34:49

+0

在網絡上的兩點完全上傳和下載速度 – 2010-07-31 17:43:37

回答

3

嗯,一個有趣的問題。我希望你喜歡閱讀...... :-)

我很想知道如何使用監測工具。在 的工作,系統管理員在房間裏只有幾個大屏幕, 顯示一個包含網絡統計負載的網頁,並不斷更新 。

我的描述的其餘部分假定網絡監視工具將如上所述使用 。如果你只是想在你的網絡上的兩個隨機主機之間做一個特別的 測試,我只需要使用rsync到 傳輸一個相當大的文件(大約1-2MB)。我確定有 其他文件傳輸工具也可以計算傳輸速度。

在實現這一點,(尤其是在大型網絡),您必須 的風險降到最低,測試充斥網絡,妨礙了人們 (或程序)真正使用它。您不希望因爲您正在進行測試而導致大量減速(或更糟糕的是,停電)。您的系統管理員不會感謝你...

我最好的建築師以下列方式的工具:

  1. 鮑勃是做 以下參與個別「試驗」的服務器:

    1. Bob收到來自客戶端的請求。請求說明了客戶端要發送多少數據。
    2. 如果建議發送的數據量不是太大,請等待數據。否則Bob立即拒絕該請求並結束通信。
    3. 一旦收到所需的字節數,回覆所需的時間量。鮑勃終止通信。
  2. Alice是顯示測量結果 (通過網頁或其他方式)的組件。 Alice是一個長期存在的進程 (也許是一個web服務器),被配置爲定期連接到Bob服務器的列表 。對於每個配置的Bob:

    1. 發送Bob一個請求數據量爲Alice約爲 發送。
    2. 儘可能快地向Bob發送指定數量的數據。
    3. 等待Bob的回覆,然後計算網絡速度。
    4. '顯示'這個Bob實例的結果。您可以選擇 以顯示彙總結果。例如,對於每一個在過去20次測試的 ,平均結果,以消除任何異常...
  3. 當進行特定的測試,愛麗絲應報告任何故障。例如。 ,或「可以與Bob建立一個TCP連接不」 「鮑勃 提前終止轉讓」或任何其他...

  4. 分散鮑勃服務器戰略位置在(可能很大) 網絡,並配置愛麗絲去他們。對於Bob的每個實例,您應配置

    1. 測試之間的時間間隔。
    2. '餘地'(我會解釋一下)。
    3. 每次測試發送給Bob的數據量。
    4. 鮑勃的地址(duh)。
  5. 你想'錯開'給定的愛麗絲將嘗試的測試。您不希望Alice一次觸發所有Bob服務器的測試,因此 淹沒您的網絡,可能會導致結果偏斜等等。 允許測試發生在未來的隨機時間。對於 示例,如果測試間隔爲每10分鐘一次,則配置1分鐘的「迴旋餘地」 ,這意味着下一次測試可能發生在9到11分鐘之間的任何時間。

  6. 如果一次要運行多個Alice,則實例總數應該很小。您擁有的Alices越多,您就越會干擾網絡。同樣,您不希望對中斷負責 。

  7. 愛麗絲應該在單個測試中發送的數據量應該是 小。 500KB?您可能希望給定的測試運行時間不超過10秒。如果測試時間過長,可能會讓Bob超時。

我故意省略了運輸使用(TCP,UDP,等等) ,因爲你會得到不同的傳輸問題,我不知道你 要如何處理這些問題。例如,你不得不 考慮如何處理與UDP丟棄的數據報。 你計算的結果是什麼?您不會遇到TCP問題,因爲它會自動重新傳輸丟棄的數據包。對於TCP,如果兩個端點 彼此遠離,則您的吞吐量將被人爲地降低。這裏有一些 info就可以了。

如果您有耐心閱讀這一點,我希望它有幫助!

0

與編寫服務器不同,您可能只想使用tomcat或apache作爲服務器,然後您只需要客戶端上傳一個特定大小的文件,然後測量時間,然後轉向並下載文件,來衡量下載速度。

你可以編寫自己的服務器來做到這一點,但基本上你會做很多次之前做過的事情,那麼你需要確保你的服務器不會歪曲數字。

+0

我最初想到這個,但我需要它在Java中,因爲它需要能夠插入我的網絡監控程序,它是用java編寫的 – 2010-07-31 17:53:24

+0

您的網絡監控程序是客戶端,它將數據發送到Web服務器,然後檢索它。服務器可以使用任何語言,因爲您只需要一臺服務器即可輕鬆上載並下載文件。 – 2010-07-31 18:01:13

+0

是的,我明白,但我將如何計算速度。假設我從監控程序向客戶端發送一個1024字節的數據包。程序必須得到一個時間戳,然後計算速度,如果是這樣,我會怎麼做?我將如何獲得準確的時間戳? – 2010-07-31 18:05:03