如何使用C对TCP和UDP进行基准测试?

我想使用C套接字测量TCP和UDP的消息延迟和吞吐量.我正在写一个client.c和server.c(问题1:我必须吗?)在不同的服务器上运行来实现这一目标.我必须使用不同的数据包大小和多次试验进行多次测量并绘制我的结果.

对于消息延迟:
发送不同大小的数据包并测量往返时间并除以2以获得延迟.
问题2:我发送一个大小为x的数据包,然后从server.c发回数据包.所以在客户端我启动计时器,发送数据包然后等到收到数据包然后停止计时器.计时器/ 2是我的延迟?测量这个的步骤是什么?

对于吞吐量:
问题3:我如何测量两者的吞吐量?这样做的步骤是什么?

我是C语言中Unix套接字编程的初学者,所以细节很有用,重点是bechnmarking方面.

编辑:我不能使用已经存在的工具.我需要自己写.

谢谢!

最佳答案 问题1:您可能会发现使用Google的现有测试用例.但是如果你需要处理特殊情况,那么编写自己的情况可能是有意义的,这样你就可以考虑到这一点.

问题2:在网络运营方面可能存在“延迟”的官方定义,但我认为真正重要的是往返成本.所以我不会除以2.总往返成本是用户(客户)经历的.这将是他们看到的延迟.

问题3:我认为您使用不同数据包大小的计划有助于测量吞吐量.有another SO question与此相关.我发布了这个问题的答案,并提供了我自己测试UDP与TCP的一些数字.那些可能作为“理智”检查点感兴趣.

啊 – 我忘记了一件我要提到的事情.如果你用UDP写一个非常简单的测试用例,那可能有点不切实际.如果直接使用UDP,则需要添加自己的错误处理,数据包验证等.这将增加成本.最终,我们发现UDP在大多数情况下对我们来说更快,因为我们已根据自己的需要量身定制UDP.但它肯定需要更多代码才能使一切正常运行.

点赞