2010-11-12 78 views
2

我想用c#來測量bandwidh。在這裏我做了什麼。歡迎提出意見和建議。如何使用c來計算帶寬#

  1. 查找最大UDP有效載荷(在我的測試臺,其1472字節)
  2. 創建具有1472字節大小非壓縮數據
  3. 從服務器到客戶端多次發送該數據(在我的測試,其5000包)
  4. 客戶端啓動秒錶在第一時間到達包
  5. 當所有數據已發送,發送通知給客戶,說明所有數據已發送
  6. 客戶停止秒錶
  7. 我計算帶寬爲(總數據包發送(5000)* MTU(1500bytes))/時間流逝
  8. 我注意到一些數據包丟失。最好的,20%的損失。最糟糕的是40%的損失。計算帶寬時我沒有考慮到這一點。我懷疑客戶端網絡設備遇到緩衝區溢出。我需要考慮這個因素嗎?

如果你們有任何建議或評論,請隨時這樣做。

謝謝。

+1

從計算機a到計算機bi不會使用udp,因爲它不可靠。 您無法確定您的包是否已抵達。 因此,當您發送5000個數據包時,服務器可能沒有收到所有數據包(如您已經注意到的)。我會使用tcp或其他可靠的協議,您可以真正測量吞吐量。否則它只是您的計算機可以發送的吞吐量。或者您在計算機b收集所有數據並在所有數據包發送完畢後發送計算機b將收到的數據量(長度)發回。 – 2010-11-12 17:28:39

+0

我不知道什麼是正確的術語,帶寬或吞吐量,但我的目的是測量信道質量(信道可以傳輸的數據量包括數據包頭)。預期數據包丟失與信道質量有關。我希望你明白。 – 2010-11-12 17:32:12

+1

相關,但可能不會愚弄:http://stackoverflow.com/questions/566139/detecting-network-connection-speed-and-bandwidth-usage-in-c – GWLlosa 2010-11-12 17:56:12

回答

1

要計算帶寬,我會使用TCP而不是UDP。當你使用UDP時,所有數據報可能通過你的網卡非常快速地(100mbps)排隊,並在鏈路的「最慢鏈路」(例如512kbps有線調制解調器/路由器)排隊。如果隊列緩衝區已滿,則可能會丟棄數據報。所以你的測試不是很可靠。

我會使用TCP,並提出一些數學變換TCP速度(KB/s)的吞吐量(Mbps)的(我認爲TCP開銷大約是8%),如果你想衡量你有多少數據傳輸