zz from http://community.csdn.net/Expert/topic/4904/4904585.xml?temp=1.748294E-02
說明:原來寫了很多,但是沒有儲存,又沒發表出去,結果……懶得寫了
=================================================================================
主 題: 怎麼擷取或計算網路中任意兩個節點的頻寬?
作 者: rvvd (rvvd) Blog
等 級:
信 譽 值: 100
所屬社區: 專題開發/技術/項目 網路通訊
問題點數: 20
回複次數: 13
發表時間: 2006-7-25 22:17:39
請各位大俠多多指教,提供相關的資料或演算法給我參考,謝謝!
=================================================================================
metaza() ( ) 信譽:100 Blog 2006-8-20 19:41:27 得分: 0
FLUKE應該有吧,我認為,沒見過
=================================================================================
taosiming(浪蒼雲) ( ) 信譽:100 Blog 2006-8-22 21:19:08 得分: 0
int m_iPWSize; // size of probe history window size
int getBandwidth()
{
// sorting
int temp;
for (int i = 0, n = (m_iPWSize >> 1) + 1; i < n; ++ i)
for (int j = i, m = m_iPWSize; j < m; ++ j)
if (m_piProbeWindow[i] > m_piProbeWindow[j])
{
temp = m_piProbeWindow[i];
m_piProbeWindow[i] = m_piProbeWindow[j];
m_piProbeWindow[j] = temp;
}
// read the median value
int median = (m_piProbeWindow[(m_iPWSize >> 1) - 1] + m_piProbeWindow[m_iPWSize >> 1]) >> 1;
int count = 1;
int sum = median;
int upper = median << 3;
int lower = median >> 3;
// median filtering
for (int k = 0, l = m_iPWSize; k < l; ++ k)
if ((m_piProbeWindow[k] < upper) && (m_piProbeWindow[k] > lower))
{
++ count;
sum += m_piProbeWindow[k];
}
return (int)ceil(1000000.0 / (double(sum) / double(count)));
}
=================================================================================
guomin(敏感) ( ) 信譽:100 Blog 2006-8-24 11:02:26 得分: 0
用最笨的辦法咯。兩點間傳輸一個檔案,然後計算平均值或者穩定值。
=================================================================================
guomin(敏感) ( ) 信譽:100 Blog 2006-8-24 11:13:32 得分: 0
請問taosiming(浪蒼雲) 的代碼什麼意思啊?偶是新新手,看不懂啊。。。
=================================================================================
f_acme(滄海一聲笑) ( ) 信譽:100 Blog 2006-8-24 11:13:46 得分: 0
taosiming(浪蒼雲) :
能不能解釋一下?
那些m_piProbeWindow代表什麼意思啊?
=================================================================================
taosiming(浪蒼雲) ( ) 信譽:100 Blog 2006-8-25 13:09:40 得分: 0
這個代碼不具備參考性,具體可以參考pathrate原始碼。
=================================================================================
troyleescong() ( ) 信譽:100 Blog 2006-8-28 1:44:20 得分: 0
發送一個一定長度的UDP包並在IP首部設定“不分區”標誌位元,如果其長度超過了頻寬則路由器會自動把他分區,但是因為設定了“不分區”標誌位元,所以路由器會發送一個ICMP包告訴你要分區而且告訴你頻寬。就是這樣你設定TTL從1增加,一個一個的發送UDP包,直到你的UDP包能發到目的地為止就是頻寬了。
詳細可以看看《TCP/IP詳解 卷1:協議》
=================================================================================
benjiam(今晚打老虎) ( ) 信譽:100 Blog 2006-8-30 15:24:54 得分: 0
ls 去死 不要悟到
不太懂那個代碼 應該不對
頻寬大小 和rtt 有關
=================================================================================
saoyu(燒魚) ( ) 信譽:100 Blog 2006-8-30 22:16:49 得分: 0
頻寬並不是固定不變的,跟你網路中裝置的QoS的設定值等等有關,單純一個程式是沒法算出的。
=================================================================================
taosiming(浪蒼雲) ( ) 信譽:100 Blog 2006-9-5 15:42:05 得分: 0
基本思想:利用packet pair 來測試end-to-end 的頻寬,經過多次測試,在接收端利用一個數組或者list來儲存這個測試的時間差。然後排序,取中間值,然後在去掉兩邊的極端資料。取8倍和1/8 median 的值為有效值,在取一次平均值。然後得到時間差。單位為微妙。
其實也就是packet pair的多峰估計值。
=================================================================================
guomin(敏感) ( ) 信譽:100 Blog 2006-9-7 21:54:39 得分: 0
請教下樓上的,這樣會不會比較慢呢?想了很久都沒想出有什麼好點的演算法啊
=================================================================================
taosiming(浪蒼雲) ( ) 信譽:100 Blog 2006-9-8 13:47:21 得分: 0
pathneck 和pathrate基本都是這個方法啊,具體得到的話基本需要幾分鐘吧。你也可以改進。不過都要幾分鐘才能測得準確的端到端頻寬!