【发布时间】:2011-05-09 05:05:26
【问题描述】:
我想使用 c# 测量带宽。这就是我所做的。欢迎提出意见和建议。
- 找到最大 udp 负载(在我的测试台上,它的 1472 字节)
- 创建 1472 字节大小的不可压缩数据
- 将此数据从服务器多次发送到客户端(在我的测试中,它有 5000 个数据包)
- 客户端在第一个数据包到达时启动秒表
- 所有数据发送完毕后,向客户端发送通知,说明所有数据已发送完毕
- 客户秒表
- 我将带宽计算为(发送的总数据包(5000)* MTU(1500 字节))/时间流逝
- 我注意到一些数据包丢失了。最好的,20%的损失。在最坏的情况下损失 40%。我在计算带宽时没有考虑到这一点。我怀疑客户端网络设备遇到缓冲区溢出。我需要考虑这个因素吗?
如果你们有任何建议或意见,请随时提出。
谢谢。
【问题讨论】:
-
如果您想测量可以从计算机 a 传输到计算机 b 的数据量,我不会使用 udp,因为它不可靠。您无法确定您的包裹是否已经到达。因此,当您发送 5000 个数据包时,服务器可能没有收到所有数据包(正如您已经注意到的那样)。我会使用 tcp 或其他一些可以真正测量吞吐量的可靠协议。否则它只是您的计算机可以发送的吞吐量。或者您在计算机 b 收集所有数据,并在发送所有数据包后,计算机 b 将接收到的数据量(长度)发回。
-
我不确定正确的术语是什么,带宽或吞吐量,但我的目的是测量通道质量(通道可以传输的数据量,包括数据包头)。丢包是预料之中的,因为它与信道的质量有关。希望你能理解。
-
相关,但可能不是骗人的:stackoverflow.com/questions/566139/…
-
tcp 的问题是几乎不可能测量丢包。加上数据重传会扭曲带宽计算,例如,当你认为你得到 1mbps 时,传输的数据实际上更多地考虑 tcp 数据包头和重传的数据。实际上,它可能是 2mbps 频道。谁知道呢。
-
你的网络带宽测试和你的真实网络使用最终都需要重传。所以你在那里测量一种真实的使用场景。另外,比较 TCP 和 UDP 的测量误差,我会选择 TCP。
标签: c# networking bandwidth