究竟在哪里设置了时间戳?

Where exactly a timestamp is set?

我需要知道在 NIC 上接收或发送帧的时间戳的确切设置点。我已经搜索了很多,但找不到任何东西,这对我很有帮助。 对于发送案例,它可以是例如:

我使用的是 Intel 82541PI 网卡。

我最近对此做了一些研究,但是例如Linux 驱动程序编写者可能会添加更多详细信息或纠正我的错误。简短摘要:何时获取时间戳取决于设备。

例如,在 Intel I210 NIC 上,当使用 PTP 一步时间戳时(即在 UDP 有效负载中指定偏移量的尚不常见的 PTP 模式,其中发送方 PTP 时间戳由 NIC hw 写入),则硬件时间戳是在帧从 MAC 发送到 PHY 之前获取的。在 1 Gbit 速度下,从 PHY 将以太网前导码放到线路上之后,大约需要 178 ns 才能到达第一位。查看您的 NIC 的 NIC 数据表以获取更多信息,或检查 Linux 驱动程序源代码。对于 I210,数据表可公开下载,名称为“Intel® Ethernet Controller I210” 数据表'。另请注意,目前尚不清楚 I210 Linux 驱动程序 (igb) 是否支持一步时间戳。 'classic' 方法是发送一个数据包,在套接字错误队列上接收硬件时间戳,然后在后续数据包中发送硬件时间戳,这称为 2 步硬件 tx 时间戳,并得到更多支持NIC。另请注意,驱动程序补偿了 178 ns MAC-to-PHY 延迟。