我如何才能看到数据发送的速率?

我如何才能看到数据发送的速率?

我有一个应用程序通过 UDP 以某种已知格式发送消息。我想知道这些消息的发送速率。明确地说,我不太关心数据速率 - 这是一个环回,所以它接近无穷大 + 1 - 我需要知道它的频率完整的消息出去。

答案1

你应该看看使用TCPDUMPWireShark捕获数据然后进行分析。

如果您关心的只是数据包速率,那么运行netstat可能会给您带来启发。

在 Linux 上:

`netstat --interfaces=lo -c`

会以 1 秒为间隔给你一个想法,但大多数现代操作系统上都有类似的标志

答案2

如果您所说的“消息”是指“数据报”,那么答案是 100%。UDP 数据报要么被发送,要么不发送,要么到达,要么不到达。您永远不应该recvfrom()只发送 UDP 数据报的一部分。如果数据报最终大于网络 MTU,它可能会在 IP 层被分段,但任何丢弃的片段都会导致整个数据报被丢弃,而不是部分消息。

回送速度不是无限的:它受 CPU 限制。如果您发送数据太快,则传出的 UDP 缓冲区将填满。然后,当您尝试发送一个sendto()太大而无法放入剩余缓冲区空间的数据报时,您将收到错误,如EAGAINENOBUFSEMSGSIZE,具体取决于实现。如果接收方调用recvfrom()速度太慢,则其传入缓冲区将填满,数据报将被默默丢弃。

一个更相关的问题是实际收到的发送数据报的百分比。在远低于 CPU 饱和度的速率下,环回时该百分比应为 100%。但是当接近 CPU 饱和度时,或者如果接收方读取数据报的速度很慢,该百分比可能会变得非常低。

相关内容