【问题标题】:Measuring Internal Network Speed/Bandwidth in Java在 Java 中测量内部网络速度/带宽
【发布时间】:2010-07-31 17:24:56
【问题描述】:

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

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

提前谢谢你。

【问题讨论】:

  • 如果您不想要实际速度,那么您测量的精确度是多少?您是否担心上传和下载?
  • 网络上两点的准确上传和下载速度

标签: java networking bandwidth


【解决方案1】:

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

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

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

在实现这一点时,(尤其是在大型网络中)您必须 将测试淹没网络的风险降到最低,从而妨碍人们 (或程序)实际使用它。你不想被指责 仅仅因为您正在进行大规模减速(或更糟糕的是,停电) 一个测试。你的系统管理员不会感谢你...

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

  1. Bob 是一个服务器,它通过以下方式参与个人“测试” 以下:

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

    1. 向 Bob 发送一个请求,其中包含 Alice 即将发送的数据量 发送。
    2. 尽快向 Bob 发送指定数量的数据。
    3. 等待 Bob 的回复,计算网速。
    4. “显示”此 Bob 实例的结果。你可以选择 显示聚合结果。例如,平均结果为 过去 20 次测试中的每一次,以消除任何异常...
  3. 在进行给定测试时,Alice 应报告任何失败。例如。 '无法与 Bob 建立 TCP 连接',或 'Bob 过早终止转移'或其他任何事情......

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

    1. 测试之间的时间间隔。
    2. “余地”(我会稍微解释一下)。
    3. 每次测试发送给 Bob 的数据量。
    4. Bob 的地址(呃)。
  5. 您希望“错开”给定 Alice 将尝试的测试。你 不希望 Alice 立即触发对所有 Bob 服务器的测试,从而 泛滥您的网络,可能会产生偏差的结果等等。 允许测试在未来随机时间进行。为了 例如,如果测试间隔是每 10 分钟,配置一个 'leeway' 1 分钟,这意味着下一次测试可能发生在 9 点到 11 点之间的任何时间 分钟的时间。

  6. 如果一次有多个 Alice 运行,则总数 实例数应该很小。你拥有的爱丽丝越多 你干扰网络。再说一次,你不想负责 停电。

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

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

如果您有耐心读到这里,希望对您有所帮助!

【讨论】:

    【解决方案2】:

    你可能不想写一个服务器,你可能只想使用tomcat或apache作为服务器,然后你只需让客户端上传一个特定大小的文件,测量时间,然后转身下载文件,到测量下载速度。

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

    【讨论】:

    • 我最初是这么想的,但我需要它在 java 中,因为它需要能够插入到我用 java 编写的网络监控程序中
    • 您的网络监控程序是客户端,它将数据发送到网络服务器,然后检索它。服务器可以是任何语言,因为您只需要一个允许您轻松上传然后下载文件的服务器。
    • 是的,我明白这一点,但我将如何计算速度。假设我从监控程序向客户端发送了一个 1024 字节的数据包。程序是否必须获取时间戳,然后计算速度,如果是这样,我该怎么做?如何获得准确的时间戳?
    • 收到文件后立即发送两个 UDP 数据包。很可能两者都会通过,但 UDP 比 TCP 快,因此响应会很快。如果您上传 1M 文件,则响应速度会减慢。
    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2010-10-08
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    相关资源
    最近更新 更多