Python 为什么是NTP';你的延误和我的往返行程有这么大的不同?

Python 为什么是NTP';你的延误和我的往返行程有这么大的不同?,python,time,ntp,Python,Time,Ntp,获取网络时间协议数据包时(NTP版本4,请参阅): 我通常会得到大约40毫秒的往返时间now-start 但是, format = "!4b4h9I" unpacked = struct.unpack(format, msg[0:struct.calcsize(format)]) livnmode, stratum, poll, precision = unpacked[0:4] print 'root_delay', unpacked[4] + float(unpacked[5]) / 2

获取网络时间协议数据包时(NTP版本4,请参阅):

我通常会得到大约40毫秒的往返时间
now-start

但是,

format = "!4b4h9I"
unpacked = struct.unpack(format, msg[0:struct.calcsize(format)]) 
livnmode, stratum, poll, precision = unpacked[0:4]
print 'root_delay',  unpacked[4] + float(unpacked[5]) / 2**16                             # https://tools.ietf.org/html/rfc5905#page-13
print 'root_dispersion', unpacked[6] + float(unpacked[7]) / 2**16
print 'ref_id', unpacked[8]
print 'ref_timestamp  %.3f' % (unpacked[9] + float(unpacked[10]) / 2**32 - 2208988800L)
print 'orig_timestamp %.3f' % (unpacked[11] + float(unpacked[12]) / 2**32)
print 'recv_timestamp %.3f' % (unpacked[13] + float(unpacked[14]) / 2**32 - 2208988800L)
print 'tx_timestamp %.3f' % (unpacked[15] + float(unpacked[16]) / 2**32 - 2208988800L 
我得到了0.00056秒的
root\u延迟
,这似乎不太可能是真的!(我不认为我对时间服务器的ping为0.5毫秒,往返时间……这实在太小了)

问题:NTP协议中如何准确测量
root\u延迟

注:

  • 各国:

  • 我越是重新启动脚本,
    root\u延迟
    似乎越小(即使我的本地计算机RTC时间没有被我的Python脚本更新…所以这很奇怪…)

  • 我对根延迟的解析似乎是正确的,请参阅:

    以及:

  • 我不使用
    ntplib
    ,它似乎具有不同的
    root\u延迟
    解析(但不符合?)


您只需将远程“服务器”查询为“客户端”,它发送的根延迟和根分散度是服务器相对于Stratum-0源的值

如果你想计算出你自己的根延迟和根色散,你必须自己做数学题

您可以使用您必须的时间戳数据来计算数据包的往返行程,添加服务器发送的值作为其根延迟,现在您有了根延迟

format = "!4b4h9I"
unpacked = struct.unpack(format, msg[0:struct.calcsize(format)]) 
livnmode, stratum, poll, precision = unpacked[0:4]
print 'root_delay',  unpacked[4] + float(unpacked[5]) / 2**16                             # https://tools.ietf.org/html/rfc5905#page-13
print 'root_dispersion', unpacked[6] + float(unpacked[7]) / 2**16
print 'ref_id', unpacked[8]
print 'ref_timestamp  %.3f' % (unpacked[9] + float(unpacked[10]) / 2**32 - 2208988800L)
print 'orig_timestamp %.3f' % (unpacked[11] + float(unpacked[12]) / 2**32)
print 'recv_timestamp %.3f' % (unpacked[13] + float(unpacked[14]) / 2**32 - 2208988800L)
print 'tx_timestamp %.3f' % (unpacked[15] + float(unpacked[16]) / 2**32 - 2208988800L 
Root Delay (rootdelay): Total round-trip delay to the reference
clock, in NTP short format.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|LI | VN  |Mode |    Stratum     |     Poll      |  Precision   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Root Delay                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Root Dispersion                       |
...
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Seconds              |           Fraction            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     NTP Short Format