我有一对 UDP 多播发送器/接收器(最小可重现示例此处)。发件人本质上是这样做的:
uint64_t msg_count = 0;
while (!ev_flag) {
++msg_count;
sendto(fd, &msg_count, sizeof(msg_count), 0, (struct sockaddr *)&addr, sizeof(addr));
}
这意味着我们通过 UDP 向多播地址重复发送许多有效负载大小等于 8 字节的小数据包。小数据包大小是测试的目的,我想测试多播网络可以支持多少个小“更新”或“数据点”。
测试结果表明,在现代笔记本电脑上,它每秒只能发送约 10k 条消息。由于真正的有效负载大小只有 8 个字节,在考虑到每个数据包约 20 个字节的 IP 数据包开销后,它仍然只能转换为约 300 kbytes/s。
这个结果是预期的吗?还是我的示例代码有问题?
正如您所说,IP 有 20 字节的开销,UDP 有 8 字节的开销,使其成为 28,另外您还有 8 字节的有效负载,使得每个数据包 如果我们停在 IP 级别,20+8+8 = 36 字节。
如果你有 10K pck/s 那么它将是 36 字节/pck * 10000 pck/s = 36000 字节/s
36000/1024 约为 350,因此约为 350 kbytes/s。所以是的,离我们不远了。
另外,我不知道系统网络监视器在计算中是否考虑了IP开销,但如果我们要删除IP开销,你仍然会得到 28000 字节/秒,这意味着 273 KB/秒。所以无论如何,我想说你最终看到的都是预期的。