2010-07-31 42 views
1

我需要能够使用java监视内部网络的速度。我想我可以使用一个服务器和一个客户端的两部分系统。我不需要响应时间,例如使用ping生成的内容,但实际的上传和下载速度为mbps。使用Java测量内部网络速度/带宽

我的想法是让服务器发送一个数据包或一系列数据包到客户端,然后服务器会计算这两个点之间的网络速度。有没有人有任何想法我可以如何实现这一点?

谢谢你提前。

+0

如果你不想要实际的速度,那么你究竟在测量什么?你关心上传和下载吗? – 2010-07-31 17:34:49

+0

在网络上的两点完全上传和下载速度 – 2010-07-31 17:43:37

回答

3

嗯,一个有趣的问题。我希望你喜欢阅读...... :-)

我很想知道如何使用监测工具。在 的工作,系统管理员在房间里只有几个大屏幕, 显示一个包含网络统计负载的网页,并不断更新 。

我的描述的其余部分假定网络监视工具将如上所述使用 。如果你只是想在你的网络上的两个随机主机之间做一个特别的 测试,我只需要使用rsync到 传输一个相当大的文件(大约1-2MB)。我确定有 其他文件传输工具也可以计算传输速度。

在实现这一点,(尤其是在大型网络),您必须 的风险降到最低,测试充斥网络,妨碍了人们 (或程序)真正使用它。您不希望因为您正在进行测试而导致大量减速(或更糟糕的是,停电)。您的系统管理员不会感谢你...

我最好的建筑师以下列方式的工具:

  1. 鲍勃是做 以下参与个别“试验”的服务器:

    1. Bob收到来自客户端的请求。请求说明了客户端要发送多少数据。
    2. 如果建议发送的数据量不是太大,请等待数据。否则Bob立即拒绝该请求并结束通信。
    3. 一旦收到所需的字节数,回复所需的时间量。鲍勃终止通信。
  2. Alice是显示测量结果 (通过网页或其他方式)的组件。 Alice是一个长期存在的进程 (也许是一个web服务器),被配置为定期连接到Bob服务器的列表 。对于每个配置的Bob:

    1. 发送Bob一个请求数据量为Alice约为 发送。
    2. 尽可能快地向Bob发送指定数量的数据。
    3. 等待Bob的回复,然后计算网络速度。
    4. '显示'这个Bob实例的结果。您可以选择 以显示汇总结果。例如,对于每一个在过去20次测试的 ,平均结果,以消除任何异常...
  3. 当进行特定的测试,爱丽丝应报告任何故障。例如。 ,或“可以与Bob建立一个TCP连接不” “鲍勃 提前终止转让”或任何其他...

  4. 分散鲍勃服务器战略位置在(可能很大) 网络,并配置爱丽丝去他们。对于Bob的每个实例,您应配置

    1. 测试之间的时间间隔。
    2. '余地'(我会解释一下)。
    3. 每次测试发送给Bob的数据量。
    4. 鲍勃的地址(duh)。
  5. 你想'错开'给定的爱丽丝将尝试的测试。您不希望Alice一次触发所有Bob服务器的测试,因此 淹没您的网络,可能会导致结果偏斜等等。 允许测试发生在未来的随机时间。对于 示例,如果测试间隔为每10分钟一次,则配置1分钟的“回旋余地” ,这意味着下一次测试可能发生在9到11分钟之间的任何时间。

  6. 如果一次要运行多个Alice,则实例总数应该很小。您拥有的Alices越多,您就越会干扰网络。同样,您不希望对中断负责 。

  7. 爱丽丝应该在单个测试中发送的数据量应该是 小。 500KB?您可能希望给定的测试运行时间不超过10秒。如果测试时间过长,可能会让Bob超时。

我故意省略了运输使用(TCP,UDP,等等) ,因为你会得到不同的传输问题,我不知道你 要如何处理这些问题。例如,你不得不 考虑如何处理与UDP丢弃的数据报。 你计算的结果是什么?您不会遇到TCP问题,因为它会自动重新传输丢弃的数据包。对于TCP,如果两个端点 彼此远离,则您的吞吐量将被人为地降低。这里有一些 info就可以了。

如果您有耐心阅读这一点,我希望它有帮助!

0

与编写服务器不同,您可能只想使用tomcat或apache作为服务器,然后您只需要客户端上传一个特定大小的文件,然后测量时间,然后转向并下载文件,来衡量下载速度。

你可以编写自己的服务器来做到这一点,但基本上你会做很多次之前做过的事情,那么你需要确保你的服务器不会歪曲数字。

+0

我最初想到这个,但我需要它在Java中,因为它需要能够插入我的网络监控程序,它是用java编写的 – 2010-07-31 17:53:24

+0

您的网络监控程序是客户端,它将数据发送到Web服务器,然后检索它。服务器可以使用任何语言,因为您只需要一台服务器即可轻松上载并下载文件。 – 2010-07-31 18:01:13

+0

是的,我明白,但我将如何计算速度。假设我从监控程序向客户端发送一个1024字节的数据包。程序必须得到一个时间戳,然后计算速度,如果是这样,我会怎么做?我将如何获得准确的时间戳? – 2010-07-31 18:05:03