【问题标题】:The most accurate way to determining the arrival time of an ethernet frame in a c program在c程序中确定以太网帧到达时间的最准确方法
【发布时间】:2018-01-04 15:36:32
【问题描述】:

我正在使用可用的 c 程序 here 来接收以太网帧。我想知道框架的确切到达时间并打印出来。到达时间是否可用作程序使用的网络结构之一中的字段,或者如何推断帧的到达时间?

【问题讨论】:

  • 在此处发布相关代码和信息以增加问题的清晰度。
  • @chux 我无法发布代码,因为它太大(它不允许我),但我已经提供了链接。谢谢

标签: c networking ethernet


【解决方案1】:

通过标准套接字 API 调用获得的帧没有附加“到达时间”。根据您需要的时间分辨率,您可以在 recv() 调用成功后立即调用 clock_gettime() 以获取估计值。

请注意,这不是物理层的帧到达时间,而是您的进程收到它的时间。因此,如果在您的进程检索它之前它已经位于驱动程序缓冲区中,则时间可能会有所不同。而且它还受到调度延迟和其他因素的影响,因此它可能会延迟数百微秒,可能更多取决于系统负载。

还要注意,打印时间也需要时间,否则这些时间会花在服务缓冲区上。数据包通过以太网到达的速度比在控制台上打印要快得多。如果处理不当,打印到达时间的行为可能会完全破坏您对未来到达时间的估计。

【讨论】:

  • 感谢您花时间解释这一点,我很感激。有没有办法,你知道如何获取物理层或最近的到达时间吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2020-01-22
相关资源
最近更新 更多