服务器(与time.windows.com同步的Windows 2016)与第三方Web服务(在AWS-亚马逊Web服务上部署)之间的差异为1秒。
问题是:我向TPS(第三方服务)发送了一个日期参数为Date = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
的请求,并获得了一个日期小于发送的响应(相差最多1秒)。请求中的日期是请求的创建日期,响应中的日期与响应的创建日期相同。
请求: “时间戳”:“ 2018-10-24T01:33:12Z”
响应: “时间戳记”:“ 2018-10-24T01:33:11.0000138Z”
有人可以解释时差吗?以及如何正确解决此问题
答案 0 :(得分:4)
网络延迟以及两个平台之间不同的NTP服务器可以解释1s的差异。您可能在上述设置中使用了2种不同的时间参考。仅此一项就可以解释这种漂移。
当然,不同的应用程序或用例将需要或多或少的精度。 1到2秒对于某些设置可能是不可接受的。以我的经验,通过使用相同参考时钟的普通NTP可以达到100ms的同步精度/抖动。
请参阅 https://serverfault.com/questions/724409/how-accurate-can-we-get-computer-clocks-synchronized-in-a-local-network-of-any-n很好地讨论了影响NTP时间同步精度的问题。
另请参阅https://aws.amazon.com/blogs/aws/keeping-time-with-amazon-time-sync-service/,以了解AWS如何管理其参考NTP时钟。
有关NTP网络时间协议的概述,请参见https://en.m.wikipedia.org/wiki/Network_Time_Protocol
答案 1 :(得分:2)
要添加到其他有趣的答案中:
如果要对响应和请求进行排序,则应使用同一台计算机(请求的发送者)产生的时间戳,而不是信任并比较不同计算机产生的时间戳。
只有在这里,您才能保证时间戳的顺序逻辑顺序与请求/响应的顺序一致。
此外,请不要忘记,标头中写入的时间戳基本上是可以伪造的数据,如果它来自第三方来源。