欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

NTP协议与计算

程序员文章站 2024-02-26 15:35:34
...

NTP:Network Time Protocol,网络时间协议,用于时间同步,它可以提供高精准度的时间校正(LAN上与标准时间差小于1毫秒,WAN上几十毫秒),且可通过加密确认的方式来防止恶意攻击。

NTP校时原理:
每一个时间包内包含最近一次的事件的时间信息、包括上次事件的发送与接收时间、传递现在事件的当地时间、及此包的接收时间。在收到上述包后即可计算出时间的偏差量与传递资料的时间延迟。时间服务器利用一个过滤演算法,及先前八个校时资料计算出时间参考值,判断后续校时包的精确性,一个相对较高的离散程度,表示一个对时资料的可信度比较低。仅从一个时间服务器获得校时信息,不能校正通讯过程所造成的时间偏差,而同时与许多时间服务器通信校时,就可利用过滤算法找出相对较可靠的时间来源,然后采用它的时间来校时。

时间信息的传输都使用UDP协议。服务端口123。

NTP协议格式

NTP packet = NTP header + Four TimeStamps = 48byte

NTP header : 16byte
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|   LI  |   VN  |  Mode  |  Stratum  |  Poll  |  Precision   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 
LeapYear Indicator : 2bit 
Version Number : 3bit
Stratum : 8bit
Mode : 3 bit 
PollInterval : 8 bit 
Percision : 8bit

|                       Root Delay                           | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Root delay : 32bit

|                    Root Dispersion                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 
Root Dispersion : 32bit

|                Reference Identifier                        | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 
Reference Identifier : 32bit





Four TimeStamps : 32byte
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|               Reference Timestamp                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 
Reference Timestamp : 64bit

|               Originate Timestamp                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 
Originate Timestamp : 64bit

|               Receive Timestamp                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Receive Timestamp : 64bit

|                   Transmit Timestamp                       | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Transmit Timestamp : 64bit

|               Authenticator (optional) (96)                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

64bit的时间戳:

struct ntptime {
    unsigned int integer;
    unsigned int fraction;
};

前32bits表示1900年以来的秒数。后32bits用以表示秒以下的部份,是微秒数的4294.967296(=2^32/10^6)倍。

    Originate Timestamp       T1        客户端发送请求的时间 
     Receive Timestamp        T2        服务器接收请求的时间 
     Transmit Timestamp       T3        服务器答复时间 
    Destination Timestamp     T4        客户端接收答复的时间 

网络延时 d 和服务器与客户端的时差 t

     d = (T2 - T1) + (T4 - T3); 
     t = [(T2 - T1) + (T3 - T4)] / 2; 

加上网络延时量的估计,理论上可以精确到到2的-32次方秒,实际使用大约只有50ms(广域网)左右,在局域网可达1ms。在实际中您应找最近而且最稳定的Server作时间源。

SNTP算是NTP的一个子集,它不像NTP可以同時和多个Server对时, 一般在Client端下使用。

相关标签: 网络