C 确定NTP数据包的目标时间戳?

C 确定NTP数据包的目标时间戳?,c,ntp,berkeley-sockets,C,Ntp,Berkeley Sockets,我试图使用Berkeley sockets API在C中创建一个简单的SNTP客户机,但是我无法从响应消息计算调整后的时间。这是我从你那里得到的 当收到服务器回复时,客户机确定目标 Timestamp变量,作为根据其时钟输入的到达时间 NTP时间戳格式。下表总结了这四个方面 时间戳 发起时间戳(T1):客户端发送的时间请求 接收时间戳(T2):服务器接收的时间请求 传输时间戳(T3):服务器发送的时间回复 目的地时间戳(T4):客户端收到的时间回复 据我所知,我可以计算调整后的当前时间,方法

我试图使用Berkeley sockets API在C中创建一个简单的SNTP客户机,但是我无法从响应消息计算调整后的时间。这是我从你那里得到的

当收到服务器回复时,客户机确定目标 Timestamp变量,作为根据其时钟输入的到达时间 NTP时间戳格式。下表总结了这四个方面 时间戳

  • 发起时间戳(T1):客户端发送的时间请求
  • 接收时间戳(T2):服务器接收的时间请求
  • 传输时间戳(T3):服务器发送的时间回复
  • 目的地时间戳(T4):客户端收到的时间回复
据我所知,我可以计算调整后的当前时间,方法是获取客户机的时间并将时间偏移t添加到其中,时间偏移定义为

t = ((T2 - T1) + (T3 - T4)) / 2
我需要知道T4才能进行计算,但它不是数据包消息的一部分。如何获得这个时间戳?

仅从您发布的这一点,我相信您应该能够以获得T1的相同方式获得T4(也就是说,它们都是本地机器处理请求特定阶段时的时间)

发起时间戳(T1):客户端发送的时间请求
目的地时间戳(T4):客户端收到的时间回复

哎呀,我的坏假设


在收到响应数据包后立即使用类似的方法创建自己的时间戳是否足够?

T1实际上嵌入在服务器返回的响应消息中,因此我不需要特殊技巧来提取它。你可以在这里举一个被Wireshark分解的服务器响应消息的例子:我可以这样做,但理想情况下,我希望使用数据包的接收时间戳(如果系统中有数据,我不确定),因为它会产生更准确的结果。