怎么获取或计算网络中任意两个节点的带宽?(zz)

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

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一步:例如我们要测试内网结点A与B两台计算机之间的传输带宽,那么我们需要复制iperf.exe到这两台计算机硬盘。   第二步:随意选择结点A作为服务端,而B作为客户端,在A上进入命令提示窗口运行iperf -s命令,这样iperf将以服务端方式启动,并且通过TCP的5001端口监听数据。(如图4)   第三步:接下来我们返回到B结点进入命令提示窗口,然后运行iperf -c 192.168.0.199 -t 60,这个命令是将B结点以客户端的方式运行,并且连接IP地址为192.168.0.199的服务端,监视测量数据时间是60秒。(如图5)   第四步:运行完毕客户端将自动开启1903端口连接服务端的5001端口,通过发送与接收数据包来实现测量带宽的目的。   第五步:与此同时我们在服务端上也可以看到有客户端连接5001端口的提示,这表明两个结点已经建立了相应的连接,数据通讯正常。(如图6)   第六步:由于我们之前是设置了测量时间间隔为60秒,所以在60秒过后客户端结点上就会显示出测量的具体数据,从A到B发送接收数据的速度为177Mbits/sec,由于以太网数据传输是双向双工的,所以百M网线理想状态传输速度应该是200Mbits/sec。(如图7)   第七步:当然我们还可以通过在客户端上执行iperf -c 192.168.0.199 -t 60 -i 2,这样将每隔两秒自动将测量结果显示出来,在最后再计算其平均值。(如图8)   通过简单的设置和简单的指令我们轻松实现了针对内网两个结点之间带宽传输速度的测量,当然iperf程序还支持很多参数,具体设置我们可以参考其帮助信息,比较常用的有-l 缓冲区大小,-m 显示tcp最大mtu值,-p 指定服务器端使用的端口或客户端所连接的端口,-u 使用udp协议,-w 指定TCP窗口大小,默认是8KB,-M 设定TCP数据包的最大mtu值等。另外在客户端上可以通过-n 指定传输的字节数,-r 单独进行双向传输测试,在服务端则可以通过-D参数以服务方式运行ipserf,以-R来停止iperf服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值