2010-06-29 38 views
2

我打算寫一個應用程序,我需要計算網絡帶寬以及延遲和丟包率。其中一個約束是被動地測量帶寬(使用應用程序數據本身)。通過最小數據傳輸測量的帶寬

我在線閱讀並從一些現有應用程序中瞭解到,幾乎所有這些應用程序都使用主動探測技術(即生成探測包流)並使用第一個和最後一個包到達之間的時間差來計算帶寬。

這種技術的主要問題是它使用探測數據包來洪泛網絡,探測數據包運行時間更長且不可伸縮(因爲我們需要在兩端運行應用程序)。

其中一個建議是呼應回給發送者一個包計算的RTT和使用下列公式計算帶寬:

Bandwidth <= (Receive Buffer size)/RTT. 

我不知道怎麼準確,這可能是因爲接收方可能不會總是按時回送數據包以獲得正確的RTT。許多服務器都會禁用它,因此單獨使用ICMP可能無法正常工作。

我的主應用程序運行在TCP連接上,所以我有興趣使用TCP連接來測量在特定時間段內提供的實際帶寬。如果有人能夠建議一種簡單的技術(可靠的公式)來測量TCP連接的帶寬,我將非常感激。

+1

不要忘記接受你的問題的答案。你已經提出了7個問題,直到現在還沒有接受其中的一個。 – glglgl 2011-10-14 09:23:44

回答

0

只有通過探測網絡才能知道可用帶寬。這是因爲80%利用鏈路仍然會毫無延遲地發送回聲包,即它看起來佔用了0%。

如果你只是想測量你的應用程序使用的帶寬,它會容易得多。例如。記錄您在最後一秒內傳輸的數據量,並將其分成10毫秒的時間間隔。

0

主動探測技術及其變體是帶寬估計算法。你不想使用這些算法來測量帶寬。請注意'度量'和'估計'之間的區別。

如果您想使用tcp來測量帶寬,您應該知道tcp帶寬受延遲的影響。

使用tcp測量帶寬的最簡單方法是發送tcp數據包並測量傳輸的帶寬。它會淹沒網絡。高速網絡中的非泛洪算法都不可靠。另外,非洪泛算法假定信道從流量中清除。如果頻道內有其他流量,結果將會偏斜。如果結果沒有意義,我不會感到驚訝。