【问题标题】:how to send maximum number of udp packets per second如何每秒发送最大数量的 udp 数据包
【发布时间】:2026-01-18 12:55:01
【问题描述】:

我在 Visual Studio 2010 for c++ 中有一个应用程序 在 Windows Server 2008 r2 上

伪代码如下

创建多播套接字

while ( 仍然要传输的数据 == true ) { sendto(多播套接字,数据) }

但我只能达到大约 60k msgs/秒,其中每个数据包的大小约为 50 字节。

谁能建议如何每秒发送更多的消息? 我想我可以尝试绑定 2 个或更多 NIC 和 我应该尝试使用线程安全的消息队列和线程池吗? 每个线程只是试图从队列中拉出一个元素 和 sendto(多播套接字,数据); ?

这里有什么想法吗?

【问题讨论】:

  • 您是否尝试通过多个千兆网卡发送数据?
  • 我目前正在尝试通过单个 1G NIC 发送
  • 60,000/s 似乎非常接近线路限制。每个数据包有多少字节的数据?
  • 每个数据包大小约为50字节; 60k 消息/秒 * 50 字节 = 2.8 兆字节/秒。这远不及 NIC 的 1GB.sec 限制。但它每次都需要发送完整帧,即 MTU,即 1500 字节 60 000 * 1500 字节 = 0.670552254 千兆位/秒,这并不可怕,我只想接近 1.0

标签: c++ visual-studio-2010 udp


【解决方案1】:

加快速度的唯一方法是绕过网络层,使用原始套接字。

【讨论】:

  • 我可以不使用像 solarflare 这样的内核绕过来做到这一点吗?还是我需要那个?
  • 如果您使用的是 berkley 或 windows 套接字,则不需要内核绕过。
  • 我想知道在不同线程中使用多个套接字是否会有所帮助......我在 Windows 上的应用程序中遇到了同样的问题,每秒发送大约 150k 个数据包,在 20 个不同的 IP 上分派。