c# - 如何使用c#计算带宽

标签 c# networking bandwidth

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

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

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

谢谢。

最佳答案

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

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

关于c# - 如何使用c#计算带宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4167278/

相关文章:

c# - Xamarin Android Visualizer SetDataCaptureListener 抛出 InvalidCastException

python - 使用 python flask fork 传入请求

java - 如何确定 Play Framework 服务器可以处理的最大并行/同时文件下载数。对于固定带宽

multithreading - 测量多线程应用程序的带宽

c# - Silverlight 和一个表单应用程序

c# - ListChildren SQL 报告服务

c# - 为什么 Resharper/Jetbrains [NotNull] 注释接口(interface)会警告我 nullreferenceexceptions?

mysql - 如何限制mysqldump使用的带宽

Android:如何检测设备是 WiFi 还是 WiFi+Cellular

bandwidth - 主存带宽测量