确定(S)NTP数据包的目的地时间戳?

时间:2011-10-06 13:07:42

标签: c ntp berkeley-sockets

我正在尝试使用Berkeley套接字API在C中创建一个简单的SNTP客户端,但是我无法从响应消息中计算调整后的时间。我是从RFC2030得到的。

  

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

     
      
  • Originate Timestamp(T1):客户端发送的时间请求
  •   
  • 接收时间戳(T2):服务器收到的时间请求
  •   
  • 传输时间戳(T3):服务器发送的时间回复
  •   
  • 目的地时间戳(T4):客户收到的时间回复
  •   

据我所知,我可以通过获取客户的时间并将时间偏移 t 添加到其中来计算调整后的当前时间,时间偏移定义为

t = ((T2 - T1) + (T3 - T4)) / 2

我需要知道 T4 进行此计算,但它不是数据包消息的一部分。我怎样才能获得这个时间戳?

1 个答案:

答案 0 :(得分:0)

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

<击>   

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

哎呀,我的坏假设。

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