用Java测量内部网络速度/带宽

时间:2010-07-31 17:24:56

标签: java networking bandwidth

我需要能够使用java监控内部网络的速度。我以为我可以使用服务器和客户端的两部分系统。我不需要响应时间,例如ping生成的内容,以及上传和下载的实际速度(mbps)。

我的想法是让服务器向客户端发送一个数据包或一系列数据包然后回复,然后服务器将计算这两个点之间的网络速度。有谁知道如何实现这个?

提前谢谢你。

2 个答案:

答案 0 :(得分:3)

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

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

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

实现此功能时(尤其是在大型网络中),必须 最大限度地降低测试充斥网络的风险,从而阻碍人们 (或程序)实际使用它。你不想被指责为 因为你正在进行大规模的放缓(或更糟糕的是,停电) 一个测试。你的系统管理员不会感谢你......

我将按以下方式构建该工具:

  1. Bob是一个参与个人“测试”的服务器 以下内容:

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

    1. 向Bob发送一个请求,其中包含Alice即将发布的数据量 发送。
    2. 尽可能快地向Bob发送指定数量的数据。
    3. 等待Bob的回复,并计算网络速度。
    4. '显示'此Bob实例的结果。你可以选择 显示汇总结果。例如,平均结果为 过去20次测试中的每次测试,都要解决任何异常问题......
  3. 在进行特定测试时,Alice应报告任何失败。例如。 '无法与Bob'或'Bob建立TCP连接 过早地终止转移'或其他任何......

  4. 将Bob服务器分散到您(可能很大)的战略位置 网络,并配置Alice去他们。对于Bob的每个实例,你 应配置

    1. 测试之间的时间间隔。
    2. '余地'(我会稍微解释一下)。
    3. 每次测试发送给Bob的数据量。
    4. Bob的地址(duh)。
  5. 您希望“错开”给定Alice尝试的测试。您 不希望Alice立即触发对所有Bob服务器的测试 充斥您的网络,可能会给出错误的结果等等。 允许测试在将来的随机时间进行。对于 例如,如果测试间隔是每10分钟,则配置一个'余地' 1分钟,意味着下一次测试可能发生在9到11之间 分钟的时间。

  6. 如果一次运行多个Alice,则总计 实例数应该很小。你拥有的Alices越多,越多 你干扰网络。同样,你不想要负责任 停电。

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

  8. 我故意省略了要使用的传输(TCP,UDP,等等) 因为根据运输方式你会遇到问题,我不知道 你想如何处理这些问题。例如,你必须这样做 考虑如何使用UDP处理丢弃的数据报。会有什么结果 你算了?你没有得到TCP的这个问题,因为它 自动重传丢弃的数据包。用TCP,你的 如果两个端点,吞吐量将是人为的低 彼此相距甚远。这是一些 info就可以了。

    如果你有耐心阅读这篇文章,我希望它有所帮助!

答案 1 :(得分:0)

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

您可以编写自己的服务器来执行此操作,但您基本上可以执行以前多次执行的操作,然后您需要确保服务器不会扭曲数字。