Python 为什么是NTP';你的延误和我的往返行程有这么大的不同?
获取网络时间协议数据包时(NTP版本4,请参阅): 我通常会得到大约40毫秒的往返时间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
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