【问题标题】:How to calculate bandwidth using c#如何使用c#计算带宽
【发布时间】:2011-05-09 05:05:26
【问题描述】:

我想使用 c# 测量带宽。这就是我所做的。欢迎提出意见和建议。

  1. 找到最大 udp 负载(在我的测试台上,它的 1472 字节)
  2. 创建 1472 字节大小的不可压缩数据
  3. 将此数据从服务器多次发送到客户端(在我的测试中,它有 5000 个数据包)
  4. 客户端在第一个数据包到达时启动秒表
  5. 所有数据发送完毕后,向客户端发送通知,说明所有数据已发送完毕
  6. 客户秒表
  7. 我将带宽计算为(发送的总数据包(5000)* MTU(1500 字节))/时间流逝
  8. 我注意到一些数据包丢失了。最好的,20%的损失。在最坏的情况下损失 40%。我在计算带宽时没有考虑到这一点。我怀疑客户端网络设备遇到缓冲区溢出。我需要考虑这个因素吗?

如果你们有任何建议或意见,请随时提出。

谢谢。

【问题讨论】:

  • 如果您想测量可以从计算机 a 传输到计算机 b 的数据量,我不会使用 udp,因为它不可靠。您无法确定您的包裹是否已经到达。因此,当您发送 5000 个数据包时,服务器可能没有收到所有数据包(正如您已经注意到的那样)。我会使用 tcp 或其他一些可以真正测量吞吐量的可靠协议。否则它只是您的计算机可以发送的吞吐量。或者您在计算机 b 收集所有数据,并在发送所有数据包后,计算机 b 将接收到的数据量(长度)发回。
  • 我不确定正确的术语是什么,带宽或吞吐量,但我的目的是测量通道质量(通道可以传输的数据量,包括数据包头)。丢包是预料之中的,因为它与信道的质量有关。希望你能理解。
  • 相关,但可能不是骗人的:stackoverflow.com/questions/566139/…
  • tcp 的问题是几乎不可能测量丢包。加上数据重传会扭曲带宽计算,例如,当你认为你得到 1mbps 时,传输的数据实际上更多地考虑 tcp 数据包头和重传的数据。实际上,它可能是 2mbps 频道。谁知道呢。
  • 你的网络带宽测试和你的真实网络使用最终都需要重传。所以你在那里测量一种真实的使用场景。另外,比较 TCP 和 UDP 的测量误差,我会选择 TCP。

标签: c# networking bandwidth


【解决方案1】:

为了计算带宽,我会使用 TCP 而不是 UDP。当您使用 UDP 时,所有数据报可能会非常快地通过您的网卡(以 100mbps)发出并在链的“最慢链接”处排队(例如 512kbps 电缆调制解调器/路由器)。如果队列缓冲区已满,则可能会丢弃数据报。所以你的测试不是很可靠。

我会使用 TCP 并进行一些数学运算来将 tcp 速度 (KB/s) 转换为吞吐量 (Mbps)(我认为 TCP 开销约为 8%)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多