1

我需要获取本地计算机上的接口列表,以及它们的 IP 地址、MAC 和一组 QoS 测量值(延迟、抖动、错误率、丢失率、带宽)......

我正在编写一个内核模块来从本地网络设备读取这些信息,到目前为止,我已经提取了上面提到的所有内容,除了抖动和带宽......

我正在使用 linux 内核 2.6.35

4

2 回答 2

2

这取决于您所说的带宽。在大多数情况下,您只能从 PHY 获得更好称为比特率的东西。我想你更需要一些关于更高层可用带宽的信息,如果没有完成主动或被动测量,你就无法获得这些信息,例如发送类似 ICMP 回声的探测数据包,并调查回复。您还应该明确网络中的两个点是什么(实际端点和通信层),您希望在它们之间测量可用带宽。

至于抖动,你还需要做一些测量,基本上和上面的方法一样。

于 2012-04-23T13:21:28.673 回答
1

我知道这是一篇旧帖子,但您至少可以通过检查 RTCP 数据包(如果它们可用)来实现抖动。据我所知,它们通过 RTP 端口的 +1 进入并与任何 RTP 流一起出现。可以从 RTCP 获得很多信息,但出于您的目的,只需基本的源描述即可:

编辑:(没看预览)

只需查看此链接以了解协议的详细信息,但您可以很容易地从 RTCP 数据包中获取抖动。

根据您使用 RTP 流的目的,还有很多其他资源,例如扩展报告中的 VoIP 指标报告块 ( https://www.rfc-editor.org/rfc/rfc3611#page-25)。

编辑

根据 Artem 的要求,这里有一个基本流程,您可以这样做:

  1. RTP 流在端口 16400 上启动(发生这种情况所需的驱动程序/机制很可能已经到位)。

  2. 告诉内核也开始监听端口 16401(RTP 流端口上方的 1);这就是 RTCP pkts 开始发挥作用的地方。

  3. 随着 RTCP pkts 的出现,将它们发送到您想要处理它们的任何地方(即,如果您想在用户空间或其他地方解析它)。

  4. 解析所需数据的 pkts。我不知道有一个特定的库可以做到这一点,但是很容易将一些结构指向它(在 C 中)并取消引用,注意 Endianess。

于 2018-10-03T15:06:32.083 回答