千兆UDP连接接收数据丢失的可能原因

本文关键字:连接 UDP 数据 千兆 | 更新日期: 2023-09-27 18:16:18

我写了一个自定义的c#程序,接收大约1MByte/sec的UDP多播数据。它运行在一个千兆网卡上,连接到一个专用服务器。

在一天中的某些时候,当网络流量大时,它会丢失UDP数据包。

  • 如果我有两个副本的程序正在运行,它们都在8小时内接收到100%的UDP数据包。
  • 如果我有三个副本的程序运行,它们都开始丢失偶尔的UDP数据包在相同的8小时内。

在这两种情况下,CPU使用率只有大约15%的峰值。

这怎么可能?

千兆UDP连接接收数据丢失的可能原因

UDP连接不保证数据包的传递,如果需要保证数据包的传递,请使用TCP。

使用UDP时丢包的原因有很多,这里只列举几个:

  • 网络拥堵,
  • 包腐败,
  • 故障硬件。

虽然你可能只在服务器(或客户端)上使用了15%的CPU,但这并不意味着你没有耗尽其他资源(即网络吞吐量,路由器缓冲区)。对我来说,这听起来像是你遭受了潜在的网络拥塞(正如你自己所说的,这只发生在高网络流量的时候)。

这里实际上有两个缓冲区在工作:硬件缓冲区(在网卡上)和窗口端缓冲区(在。net中设置)。我们将网卡上的硬件缓冲区重新配置为1024KB而不是256KB,希望这能解决问题。