C# 如何使用c语言计算带宽#

C# 如何使用c语言计算带宽#,c#,networking,bandwidth,C#,Networking,Bandwidth,我想用c#测量带宽。这就是我所做的。欢迎提出意见和建议 查找最大udp有效负载(在我的测试台上,其1472字节) 创建大小为1472字节的不可压缩数据 将此数据从服务器多次发送到客户端(在我的测试中,它的5000个数据包) 客户端在第一个数据包到达时启动秒表 发送所有数据后,向客户端发送通知,说明所有数据已发送 客户秒表 我将带宽计算为(发送的数据包总数(5000)*MTU(1500字节))/时间间隔 我注意到一些数据包丢失了。最好的,20%的损失。最坏的情况是损失40%。我在计算带宽时没有考虑

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

  • 查找最大udp有效负载(在我的测试台上,其1472字节)
  • 创建大小为1472字节的不可压缩数据
  • 将此数据从服务器多次发送到客户端(在我的测试中,它的5000个数据包)
  • 客户端在第一个数据包到达时启动秒表
  • 发送所有数据后,向客户端发送通知,说明所有数据已发送
  • 客户秒表
  • 我将带宽计算为(发送的数据包总数(5000)*MTU(1500字节))/时间间隔
  • 我注意到一些数据包丢失了。最好的,20%的损失。最坏的情况是损失40%。我在计算带宽时没有考虑到这一点。我怀疑客户端网络设备遇到缓冲区溢出。我需要考虑这个因素吗
  • 如果你们有任何建议或意见,请随时提出


    谢谢。

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


    我会使用TCP并计算将TCP速度(KB/s)转换为吞吐量(Mbps)(我认为TCP开销约为8%)

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