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基本都是这个方法啊,具体得到的话基本需要几分钟吧。你也可以改进。不过都要几分钟才能测得准确的端到端带宽!