ntp协议_ntp协议认证算法有哪些 - CSDN
精华内容
参与话题
  • NTP协议解析

    万次阅读 2017-04-27 16:59:39
    NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。NTP基于UDP报文进行传输,使用的UDP端口号为123。 使用NTP的目的是对网络内所有...

    NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。NTP基于UDP报文进行传输,使用的UDP端口号为123。

    使用NTP的目的是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用。

    对于运行NTP的本地系统,既可以接收来自其他时钟源的同步,又可以作为时钟源同步其他的时钟,并且可以和其他设备互相同步。

    NTP工作原理

    NTP的基本工作原理如所示。Device A和Device B通过网络相连,它们都有自己独立的系统时钟,需要通过NTP实现各自系统时钟的自动同步。为便于理解,作如下假设:

    在Device A和Device B的系统时钟同步之前,Device A的时钟设定为10:00:00am,Device B的时钟设定为11:00:00am。

     Device B作为NTP时间服务器,即Device A将使自己的时钟与Device B的时钟同步。

       NTP报文在Device A和Device B之间单向传输所需要的时间为1秒。

    NTP技术 - yu - sms

           系统时钟同步的工作过程如下:

       Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。

      当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)。

      当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)。

      当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)。

    至此,Device A已经拥有足够的信息来计算两个重要的参数:

     NTP报文的往返时延Delay=(T4-T1)-(T3-T2)=2秒。

      Device A相对Device B的时间差offset=((T2-T1)+(T3-T4))/2=1小时。

    这样,Device A就能够根据这些信息来设定自己的时钟,使之与Device B的时钟同步。

    NTP的报文格式

    NTP有两种不同类型的报文,一种是时钟同步报文,另一种是控制报文。控制报文仅用于需要网络管理的场合,它对于时钟同步功能来说并不是必需的,这里不做介绍。

    NTP技术 - yu - sms

     

    主要字段的解释如下:

    l              LI(Leap Indicator):长度为2比特,值为“11”时表示告警状态,时钟未被同步。为其他值时NTP本身不做处理。

    l              VN(Version Number):长度为3比特,表示NTP的版本号,目前的最新版本为3。

    l              Mode:长度为3比特,表示NTP的工作模式。不同的值所表示的含义分别是:0未定义、1表示主动对等体模式、2表示被动对等体模式、3表示客户模式、4表示服务器模式、5表示广播模式或组播模式、6表示此报文为NTP控制报文、7预留给内部使用。

    l              Stratum:系统时钟的层数,取值范围为1~16,它定义了时钟的准确度。层数为1的时钟准确度最高,准确度从1到16依次递减,层数为16的时钟处于未同步状态,不能作为参考时钟。

    l              Poll:轮询时间,即两个连续NTP报文之间的时间间隔。

    l              Precision:系统时钟的精度。

    l              Root Delay:本地到主参考时钟源的往返时间。

    l              Root Dispersion:系统时钟相对于主参考时钟的最大误差。

    l              Reference Identifier:参考时钟源的标识。

    l              Reference Timestamp:系统时钟最后一次被设定或更新的时间。

    l              Originate Timestamp:NTP请求报文离开发送端时发送端的本地时间。

    l              Receive Timestamp:NTP请求报文到达接收端时接收端的本地时间。

    l              Transmit Timestamp:应答报文离开应答者时应答者的本地时间。

    l              Authenticator:验证信息。

    NTP的工作模式

     设备可以采用多种NTP工作模式进行时间同步:

                 客户端/服务器模式

                 对等体模式

                广播模式

                组播模式

    用户可以根据需要选择合适的工作模式。在不能确定服务器或对等体IP地址、网络中需要同步的设备很多等情况下,可以通过广播或组播模式实现时钟同步;客户端/服务器和对等体模式中,设备从指定的服务器或对等体获得时钟同步,增加了时钟的可靠性。
    1. 客户端/服务器模式

    NTP技术 - yu - sms

    在客户端/服务器模式中,客户端向服务器发送时钟同步报文,报文中的Mode字段设置为3(客户模式)。服务器端收到报文后会自动工作在服务器模式,并发送应答报文,报文中的Mode字段设置为4(服务器模式)。客户端收到应答报文后,进行时钟过滤和选择,并同步到优选的服务器。

    在该模式下,客户端能同步到服务器,而服务器无法同步到客户端。

    2. 对等体模式

    NTP技术 - yu - sms

     在对等体模式中,主动对等体和被动对等体之间首先交互Mode字段为3(客户端模式)和4(服务器模式)的NTP报文。之后,主动对等体向被动对等体发送时钟同步报文,报文中的Mode字段设置为1(主动对等体),被动对等体收到报文后自动工作在被动对等体模式,并发送应答报文,报文中的Mode字段设置为2(被动对等体)。经过报文的交互,对等体模式建立起来。主动对等体和被动对等体可以互相同步。如果双方的时钟都已经同步,则以层数小的时钟为准

    3. 广播模式

    NTP技术 - yu - sms

    在广播模式中,服务器端周期性地向广播地址255.255.255.255发送时钟同步报文,报文中的Mode字段设置为5(广播模式)。客户端侦听来自服务器的广播报文。当客户端接收到第一个广播报文后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。之后,客户端就进入广播客户端模式,继续侦听广播报文的到来,根据到来的广播报文对系统时钟进行同步。

    4. 组播模式

    NTP技术 - yu - sms

    在组播模式中,服务器端周期性地向用户配置的组播地址(若用户没有配置组播地址,则使用默认的NTP组播地址224.0.1.1)发送时钟同步报文,报文中的Mode字段设置为5(组播模式)。客户端侦听来自服务器的组播报文。当客户端接收到第一个组播报文后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。之后,客户端就进入组播客户模式,继续侦听组播报文的到来,根据到来的组播报文对系统时钟进行同步。

    展开全文
  • NTP协议详解

    万次阅读 2018-10-09 21:23:30
    NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能。提供NTP对时的服务器有很多,比如微软的NTP对时...

    前言

    NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能。提供NTP对时的服务器有很多,比如微软的NTP对时服务器,利用NTP服务器提供的对时功能,可以使我们的设备时钟系统能够正确运行。

    NTP报文格式

    NTP报文格式如上图所示,它的字段含义参考如下:

    1. LI 闰秒标识器,占用2个bit
    2. VN 版本号,占用3个bits,表示NTP的版本号,现在为3
    3. Mode 模式,占用3个bits,表示模式
    4. stratum(层),占用8个bits
    5. Poll 测试间隔,占用8个bits,表示连续信息之间的最大间隔
    6. Precision 精度,占用8个bits,,表示本地时钟精度
    7. Root Delay根时延,占用8个bits,表示在主参考源之间往返的总共时延
    8. Root Dispersion根离散,占用8个bits,表示在主参考源有关的名义错误
    9. Reference Identifier参考时钟标识符,占用8个bits,用来标识特殊的参考源    
    10. 参考时间戳,64bits时间戳,本地时钟被修改的最新时间。
    11. 原始时间戳,客户端发送的时间,64bits。
    12. 接受时间戳,服务端接受到的时间,64bits。
    13. 传送时间戳,服务端送出应答的时间,64bits。
    14. 认证符(可选项)

    抛开复杂的协议报文,我们来理解一下NTP客户端与服务器的交互过程,进而理解参考时间戳、原始时间戳、接受时间戳、传送时间戳的关系。如图,客户端和服务端都有一个时间轴,分别代表着各自系统的时间,当客户端想要同步服务端的时间时,客户端会构造一个NTP协议包发送到NTP服务端,客户端会记下此时发送的时间t0,经过一段网络延时传输后,服务器在t1时刻收到数据包,经过一段时间处理后在t2时刻向客户端返回数据包,再经过一段网络延时传输后客户端在t3时刻收到NTP服务器数据包。特别声明,t0和t3是客户端时间系统的时间、t1和t2是NTP服务端时间系统的时间,它们是有区别的。对于时间要求不那么精准设备,直接使用NTP服务器返回t2时间也没有太大影响。但是作为一个标准的通信协议,它是精益求精且容不得过多误差的,于是必须计算上网络的传输延时。客户端与服务端的时间系统的偏移定义为θ、网络的往返延迟定义为δ,基于此,可以对t2进行精确的修正,已达到相关精度要求,它们的计算公式如下:

    式中:

    t0是请求数据包传输的客户端时间戳

    t1是请求数据包回复的服务器时间戳

    t2是响应数据包传输的服务器时间戳

    t3是响应数据包回复的客户端时间戳

    对此,我们只需将NTP服务端返回的时间t2加上网络延时δ的一半就可以了(t2+δ/2)。

    NTP请求样例

    #include <sys/types.h>  
    #include <sys/stat.h> 
    #include <sys/ioctl.h> 
    #include <sys/socket.h>
    #include <sys/wait.h> 
    #include <sys/time.h>
    #include <netdb.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h> 
    #include <stdio.h>  
    #include <stdlib.h>
    #include <string.h>  
    #include <pthread.h>   
    #include <dirent.h> 
    #include <time.h>
    #include <fcntl.h> 
    #include <errno.h>
    
    #define debugprintf 1
    #ifdef debugprintf
    	#define debugpri(mesg, args...) fprintf(stderr, "[NetRate print:%s:%d:] " mesg "\n", __FILE__, __LINE__, ##args) 
    #else
    	#define debugpri(mesg, args...)
    #endif
    
    #define JAN_1970     		0x83aa7e80
    #define NTPFRAC(x) (4294 * (x) + ((1981 * (x))>>11))
    #define USEC(x) (((x) >> 12) - 759 * ((((x) >> 10) + 32768) >> 16))
    #define Data(i) ntohl(((unsigned int *)data)[i])
    #define LI 0
    #define VN 3
    #define MODE 3
    #define STRATUM 0
    #define POLL 4 
    #define PREC -6
    struct NtpTime 
    {
    	unsigned int coarse;
    	unsigned int fine;
    };
    
    void sendPacket(int fd)
    {
    	unsigned int data[12];
    	struct timeval now;
    
    	if (sizeof(data) != 48) 
    	{
        	fprintf(stderr,"size error\n");
        	return;
    	}
    
    	memset((char*)data, 0, sizeof(data));
    	data[0] = htonl((LI << 30) | (VN << 27) | (MODE << 24) | (STRATUM << 16) | (POLL << 8) | (PREC & 0xff));//构造协议头部信息
    	data[1] = htonl(1<<16);
    	data[2] = htonl(1<<16);
    	gettimeofday(&now, NULL);
    	data[10] = htonl(now.tv_sec + JAN_1970);//构造传输时间戳
    	data[11] = htonl(NTPFRAC(now.tv_usec));
    	send(fd, data, 48, 0);
    }
    //获取NTP服务器返回的时间
    void getNewTime(unsigned int *data,struct timeval *ptimeval)
    {
    	struct NtpTime trantime;
    	trantime.coarse = Data(10);
    	trantime.fine   = Data(11);
    	
    	ptimeval->tv_sec 	= trantime.coarse - JAN_1970;
    	ptimeval->tv_usec 	= USEC(trantime.fine);
    }
    
    int getNtpTime(struct hostent* phost,struct timeval *ptimeval)
    {
    	if(phost == NULL)
    	{
    		debugpri("err:host is null!\n");
    		return -1;
    	}
    	int sockfd;
    	struct sockaddr_in addr_src,addr_dst;
    	fd_set fds;
    	int ret;
    	int recv_len;
    	unsigned int buf[12];
    	memset(buf,0,sizeof(buf));
    	int addr_len;
    	int count = 0;
    	
    	struct timeval timeout;
    
    	addr_len = sizeof(struct sockaddr_in);
    
    	memset(&addr_src, 0, addr_len);
    	addr_src.sin_family = AF_INET;
    	addr_src.sin_addr.s_addr = htonl(INADDR_ANY);
    	addr_src.sin_port = htons(0);
    
    	memset(&addr_dst, 0, addr_len);
    	addr_dst.sin_family = AF_INET;
    	memcpy(&(addr_dst.sin_addr.s_addr), phost->h_addr_list[0], 4);
    	addr_dst.sin_port = htons(123);//ntp默认端口123
    
    	if(-1==(sockfd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)))//创建UDP socket
    	{		
    		debugpri("create socket error!\n");
    		return -1;
    	}
    
    	ret = bind(sockfd, (struct sockaddr*)&addr_src, addr_len);//bind
    	if(-1==ret)	
    	{		
    		debugpri("bind error!\n");		
    		close(sockfd);		
    		return -1;
    	}
    	
    	ret = connect(sockfd, (struct sockaddr*)&addr_dst, addr_len);//连接NTP服务器
    	if(-1==ret)	
    	{		
    		debugpri("connect error!\n");		
    		close(sockfd);		
    		return -1;
    	}
    	sendPacket(sockfd);	//发送请求包
    	while (count < 50)//轮询请求
    	{
    		FD_ZERO(&fds);
    		FD_SET(sockfd, &fds);
    
    		timeout.tv_sec = 0;
    		timeout.tv_usec = 100000;
    		ret = select(sockfd + 1, &fds, NULL, NULL, &timeout);
    		if (0 == ret)
    		{
    			count++;
    			debugpri("ret == 0\n");
    			sendPacket(sockfd);
    			usleep(100*1000);
    			continue;
    		}
    		if(FD_ISSET(sockfd, &fds))
    		{
    			recv_len = recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr *)&addr_dst, (socklen_t*)&addr_len);
    			if(-1==recv_len)		
    			{			
    				debugpri("recvfrom error\n");			
    				close(sockfd);			
    				return -1;
    			}
    			else if(recv_len > 0)
    			{
    				debugpri("receiv data\n");
    				getNewTime(buf,ptimeval);
    				debugpri("sec = %d usec = %d",ptimeval->tv_sec ,ptimeval->tv_usec);//打印输出NTP服务器返回的时间
    				break;
    			}
    		}
    		else
    		{
    			debugpri("count %d \n",count);
    			usleep(50*1000);
    			count ++;
    		}
    	}
    	if(count >=50)
    	{
    		debugpri("getNewTime   timeout fail \n");
    		close(sockfd);
    		return -1;
    	}
    	close(sockfd);
    	return 0;
    }
    
    int main(int argc, char** argv)  
    {
    	struct timeval TimeSet;
    	static struct hostent *host = NULL;
    	
    	host = gethostbyname(argv[1]);
    	memset(&TimeSet ,0 ,sizeof(TimeSet));
    	getNtpTime(host,&TimeSet);
    	return 0;
    	 
     }

    常用的NTP服务端站点

    time.windows.com

    time.nist.gov

    s1a.time.edu.cn

    s1c.time.edu.cn

    time-nw.nist.gov

    time-a.nist.gov

    time-b.nist.gov

    s1b.time.edu.cn

    nist1.aol-ca.truetime.com

    总结:

    NTP协议作为常用的通信协议,各种参考资料齐全,本文做一次梳理,以加深对NTP协议的理解。参考:

    https://zh.m.wikipedia.org/wiki/%E7%B6%B2%E8%B7%AF%E6%99%82%E9%96%93%E5%8D%94%E5%AE%9A

    https://wenku.baidu.com/view/4ab65c3ec850ad02de80418e.html

     

    展开全文
  • NTP协议简介

    2019-05-16 16:45:24
    NTP协议简介一. datec dates分析1. 同步流程2. 缺陷二. NTP(**Network Time Protocol**)1. NTP概述 [1、2、3、7]2. NTP的时钟同步原理与授时精度分析 [3、1、10]NTP的时钟同步原理NTP的授时精度分析3. NTP中其它的...

    一. datec dates分析

    1. 同步流程

    服务端:开启监听
    。。。。。。
    客户端N:应用层发出同步请求
    客户端N:链路层发出同步请求
    服务端:链路层接收同步请求
    服务端:应用层接受同步请求,并发出服务端当前时间
    服务端:链路层发出同步包
    客户端N:链路层接收同步包
    客户端N:应用层接受同步包,并设置系统时间
    。。。。。。

    2. 缺陷

    从服务端从应用层发出同步包开始,至客户端接收同步包为止,其中产生的传输延时均未被考虑。

    二. NTP(Network Time Protocol)

    1. NTP概述 [1、2、3、7]

    NTP 协议用于在(网络延迟可变的)网络之中通过分组交换进行时钟同步,由时间协议、ICMP时间戳消息及IP时间戳选项发展而来,使用层次式时间分布模型(第n+1层的机器向第n层的机器请求同步,第0层的机器与高精度计时设备相连)。在配置时,NTP可以利用冗余服务器和多条网络路径来获得时间的高准确性和高可靠性,即使客户机在长时间无法与某一时间服务器相联系的情况下,仍可提供高准确度时间。

    2. NTP的时钟同步原理与授时精度分析 [3、1、10]

    NTP的时钟同步原理

    NTP最典型的授时方式是Client/Server方式。

    客户机首先向服务器发送一个NTP 包,其中包含了该包离开客户机的时间戳T1,当服务器接收到该包时,依次填入包到达的时间戳T2、包离开的时间戳T3,然后立即把包返回给客户机。客户机在接收到响应包时,记录包返回的时间戳T4。

    客户机用上述4个时间参数就能够计算出2个关键参数:NTP包的往返延迟d和客户机与服务器之间的时钟偏差t。客户机使用时钟偏差来调整本地时钟,以使其时间与服务器时间一致。

    img

    ​ 图1 Client/Server方式下NTP授时原理

    图1中T1、T2、T3、T4已知,t为客户机与服务器之间的时钟偏差未知,d1、d2为NTP包的往返延迟未知。目标是求出t、d:

    img

    ​ 式1

    假设NTP请求和回复包传送延时相等,即d1=d2,则可解得:

    img

    ​ 式2

    可以看出最终的结果与服务器处理请求所需的时间无关(t、d与T2、T3差值无关)。因此,客户端可通过T1、T2、T3、T4计算出时差t去调整本地时钟。

    实际应用中,客户端通过估算的时间偏移去调整时钟频率、逐渐减小偏移,即一次同步过程可包含多次通信和调整。

    NTP的授时精度分析

    • 往返路由延时对称 的假设

      • 由于式(2)是在假设NTP请求和回复包在网上传送延时相等,即d1=d2=d/2的情况下得出的,因而NTP授时精度与NTP服务器与用户间的网络状况有关,主要取决于NTP包往返路由的延时对称程度。

        由于往返路由的延时不对称值最大不超过网络延时,从而d1、d2的取值范围在(0…d)间,根据式(1),t也可表示为:t=(T2-T1)+d1=(T2-T1)+d/2, 可以得出最大授时误差是±d/2。一般广域网的网络延时在10 ms~500ms之间;局域网的网络延时在计时操作系统内核处理延迟的情况下通常小于1ms。

      • 为何实际的往返路由时延是不同 [10]

        这主要是因为那些排队。路由器中有队列,交换机中有队列,甚至终端设备的网络堆栈中也有队列。尽管消息通常在队列中花费最少的时间,但有时它们在等待交换机结束与同一端口上的其他消息的通信,或者等待操作系统完成正在执行的操作,以便获取时间戳。在某些情况下,等待造成的延迟可能非常长,如几十微秒,甚至毫秒。很明显,如果这些都发生在一个方向上的传输,而非另一方向上,将造成很大的延时不对称。

    • 客户端与服务器间的时钟偏差 t不变 的假设

      以NTP服务器时钟为标准时间,在某一时刻设置NTP客户机时间为NTP服务器当前时间T0,经过一段时间后,NTP服务器时间为T0+tsn,NTP客户端时间为T0+tcn。

      因为存在时钟频率偏差,tsn与tcn并不相等。NTP客户端时间tcn需乘以时钟频率偏差系数k才等于tsn,即tsn=k×tcn,所以k=tsn/tcn。

      任何晶振实际工作频率都是不稳定的,只是程度不同,晶振实际频率是受外界多种因素(温度、电压、老化等)影响而改变的。因此,时钟频率偏差系数k并非恒定不变的。每隔一定时间,NTP客户机要对时钟频率偏差系数k进行校正,才能保证计时精度。

    3. NTP中其它的提高授时精度的措施[1、6]

    • 发送和接收时间戳使用UDP,而非TCP

      避免流量控制的影响

    • 一个客户端配置多台服务器,并使用Marzullo算法的修改版来选择准确的时间服务器

      避免单个服务器的时钟出现错误、跳变

    参考资料

    1. NTP详述

    2. NTP简述

    3. NTP的时钟同步算法及误差分析

    4. Marzullo算法详述

    5. Marzullo算法的思路简述

    6. NTP实现的注意事项(见链接中4楼)

    7. NTP简述2以及NTP服务器配置


    三. 对NTP改进以获得更高的授时精度的措施

    改进的思路:

    1. 减少时延中的不确定部分

    2. 对时钟频率的校准

    3. 减少延时不对称带来的误差

    4. 使用多个时间服务器以提高授时精度

    1. PTP(Precision Time Protocol)[8、9、10]

    • 硬件时间戳[10]

      当消息离开或到达网络端口时,专用硬件从本地时钟生成时间戳(通常在数据链路层(MAC)和物理层(PHY)之间的媒体独立接口中)。这消除了操作系统和其他软件不可预测的缓慢响应(链路层与应用层之间的时延)。转发PTP的特殊的交换机和路由器也会生成时间戳,或用来更新PTP消息、或直接把该时间戳发给客户端。

    • NTP未被PTP取代的理由[8]

      • 实现难度

        • 大多数个人电脑、服务器、交换机已经集成了免费的NTP客户端程序;
        • 网上可以找到免费的NTP程序,以及免费的NTP服务器地址
      • 价格

        • NTP客户端程序是免费的
        • NTP不需要专用的硬件
      • 鲁棒性

        • PTP客户机和一个主服务器进行时间同步,仅在主服务器失效时访问其它的服务器;

          而NTP总是会访问多个服务器,并排除其中的异常时间值。

    参考资料

    1. NTP vs PTP

    2. PTP详述

    3. 硬件时间戳及其对PTP精度提升的原理

    4. NTP的概述及其改进方法的一份ppt

    2. NTP中的数据过滤算法[11]

    (同一个服务器选择最佳数据)
    数据过滤算法主要负责过滤这个模块接收到的服务器信息,然后根据数理统计方法从具体服务器提供的一组数据中,选出最能体现服务器性质的信息。在网络时间协议中,本算法按照相应的规则从指定服务器提供的8对数据报文中,选出质量最优的一组数据。实际上,可以对这种规则做相应的改进,以便改善数据滤波算法效率,因此,这种滤波规则就至关重要。

    在网络时间协议第三版中,这种选取规则就是最小时延准则。最小时延准则就是在所有的数据中选取网络传输时延最小的偏移量数据。该算法的功能是确认数据包的有效性和从某个给定的时间参考源的时间样本中选取最佳的样本。它可以分成健全性校验和滤波两个部分。健全性主要是指数据是否具有唯一性、相关通信参数是否合理等。滤波主要是指根据当前的四个时间戳计算出当前的时间偏移、路径延迟和离差,并更新寄存器数组,计算滤波离差、同步距离等以降低偏移的均方误差。

    3. 时钟选择算法[11]

    (多时间服务器提高精度下,使用intersection算法选择可靠服务器,使用clustering算法对可靠性进行排序)
    时钟选择算法主要用在网络时间协议的系统处理模块的时钟选择部分,本算法检查所有时间服务器的相关变量,排除质量不好的时间服务器留下几个质量最好的时间服务器。为了保证系统时间同步的可靠性,设计两台或多台NTP授时服务器,通过时钟选择算法确定所采用的时间服务器。

    本算法具体包括Intersection算法和Clustering算法。其中Intersection算法构造一个符合成为同步源条件的候选时钟列表,分别为每个时钟计算置信区间,并淘汰错误的时钟。Clustering算法则是通过对时间服务器的质量信息进行排序,选出质量最好的一组服务器。

    3.1 Intersection算法

    NTP用一张时间参考源的表格来记录可供访问的所有时间参考源。这些参考源中最为优秀的才能作为候选者进入参考源的优选目录。聚类算法根据前面数据滤波算法,针对每一个服务器得出其最佳的偏移量θ,而通过以上同步原理的分析,准确的时钟偏移量一定在误差区间内。通过这一结论如果现行候选者真正的偏移量存在于正确时间服务器区间的交集中则留用,反过来,也可以通过这一结论来淘汰错误的服务器,所以Intersection算法主要是抛弃错误信息的服务器。算法示意图如图2.1所示:

    Intersection算法示意图

    Intersection算法示意图

    其中A、B、C表示正确时钟,其交集表示包含正确时钟的最大交集,D表示错误时钟。

    3.2 Clustering算法

    Clustering算法是通过对时间服务器的相关参数进行排序,选出质量最好的一组服务器。一般来说,最高的可靠性通常与最小的层和同步离差有关系,最高的准确度通常与最小的层和同步距离有关系。从Intersection算法得出正确服务器后,Clustering算法先按层(Stratum)排序再按离差排序。

    4. 合并算法[11]

    (NTP协议误差的一大来源是往返路由时延的不对称,使用合并算法可一定程度上减少这一部分的误差)
    时钟选择算法工作在网络时间协议中,利用加权平均算法分析所有提供时间服务的主机产生一个合并的估计值,得到一组精度最好的服务器,候选服务器列表中包含的对等点的偏移量是统计相等的,所以它们中的任一个都可以被用来调整本地时钟。聚合算法得到的列表中保存了精度最高的m个时钟源(10≥m≥1),并在系统变量Source中存放了m个时钟源中间性能最好的一个时钟的ID。若合并算法没有执行,ID号等于Source的时钟源作为主同步时钟源,客户机和它通讯得到的时间偏差将成为本地时钟校正的最终数据。但是在时间同步网络中,经常出现由于NTP报文发送和接收的路径不对称导致的时间偏差值的系统误差。误差的范围在微秒级到秒级之间。

    实验证明,多个时间源的时间偏差值的合并结果可以大大抵消不对称系统误差。这也是合并算法产生的主要目的。虽然只有一个时钟被挑选为主同步时钟源,本地时钟的最终修正值还是受所有通过了聚合算法的时钟源影响。

    5. 时钟调节算法[11]

    (这一部分我不是很明白。。。)
    本算法主要负责对系统时钟进行校正,在很大程度上影响着本地时钟调整的精度,本算法并不是简单的将前面三种算法得到的时钟偏移量补偿到本地系统时钟,而是采用现行相位调整和非线性相位调整两种方式来调整时钟。线性调整是指渐进地对时钟进行调整,实现“微调”的效果,使系统时钟单调增加。

    线性调整通过把本地时钟偏移量划分成多个微小的偏移量来调整系统时钟,这样的渐进调整方法,在时钟偏移量比较小的时候,效果要优于一次性调整,这也说明了校正本地时钟偏移量是一个需要很长时间的过程。而非线性调整就是直接把各种算法计算出的时间偏移量直接补偿到系统时钟上,这种方式比较适合时钟偏移量较大的情况使用。时钟校正是实现网络时间同步的重要环节,影响时间同步精度的因素还有网络响应能力变化产生的抖动和振荡器频率稳定度产生的漂移。可以使用锁相环路和锁频环路来补偿固有频率误差。锁相环路能够消除抖动但调节偏移的效果不好,锁频环路则正好相反。客户机启动时通常会有较大的时间偏差,适合直接在客户端软件主界面中选择立即同步函数一次同步到位,即采用非线性调整方式调整时钟。

    当系统逐渐运行稳定后,采用线性调整方式调整系统时钟,通常它由两个循环组成:外循环和内循环。外循环每隔校正周期m时间对系统时钟进行修改,内循环每隔微量调整间隔n对时钟进行微调。如果时间偏差的预测值远大于期望的精度,则m取值过大,振荡器的稳定度不能维持该精度的要求,不用增加调整的次数,只需通过减少m值来满足精度间偏差的预测值达到所需精度水平;如果预测值远小于测量值,则校正周期值明显偏小,晶振的稳定度能维持该精度,应增加m的值来减少系统开销。

    参考资料

    1. NTP网络时间校准对时器的4个核心算法

    四. socketAPI vs NTP(SNTP) vs PTP

    1. 精度:

      API:秒级、分钟级
      NTP:毫秒级
      PTP:微秒级

    2. 耗费

      API:无专属硬件
      NTP:无专属硬件
      PTP:有专属硬件

    3. 更新

      API:软件级
      NTP:软件级
      PTP:硬件级

    展开全文
  • NTP协议

    2020-03-20 11:42:31
    NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能。提供NTP对时的服务器有很多,比如微软的NTP对时...

    概述
          NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能。提供NTP对时的服务器有很多,比如微软的NTP对时服务器,利用NTP服务器提供的对时功能,可以使我们的设备时钟系统能够正确运行。SNTP(Simple Network Time Protocal简单网络时间协议),用于跨广域网或局域网同步时间的协议,具有较高的精确度(几十毫秒)。SNTP是NTP协议的简化版,两者分别在RFC1305和RFC2030介绍。端口号为:123。


    NTP帧格式

    0    1           4               7                      15         23                 31
    LI VN Mode Stratum Poll Precision
    Root Delay(32bits)
    Root Dispersion(32bits)
    Reference Identifier(32bits)
    Reference Timestamp(64bits)
    Originate Timestamp(64bits)
    Receive Timestamp(64bits)
    Transmit Timestamp(64bits)
    Authenticator(96bits)


    帧中各字段含义参考如下:
    1、LI - 闰秒标识器,2bits。
    00:无警告
    01:最后一分钟是61秒
    10:最后一分钟是59秒
    11:警告(时钟没有同步)
    2、VN - NTP版本号,现在为3,3bits。
    3、Mode - 模式,3bits。
    000:保留
    001:对称主动
    010:对称被动
    011:客户端
    100:服务器
    101:广播
    110:保留为NTP控制信息
    111:保留为用户定义
    单播和多播模式,客户在请求时此字段设为3,服务器响应此字段设为4.广播模式,服务器此字段设为5。
    4、Stratum - 系统时钟的层数,取值范围1~16,定义时钟准确度,1精确度最高依次递减,8bits。
    5、Poll - 指示数据包的最大时间间隔,以秒为单位,作为2的指数方的指数部分,该字段只在服务器端有效。字段长度为8位整数,取值范围从4-17,即16秒到131,072秒。
    6、Precision - 指示系统时钟的精确性,以秒为单位,作为2的指数方的指数部分,该字段只在服务器端有效。字段长度为8位符号整数,取值范围从-6到-20。
    7、Root Delay - 指示与主时钟参考源的总共往返延迟,以秒为单位,该字段只在服务器端有效。字段长度为32位浮点数,小数部分在16位以后,取值范围从负几毫秒到正几百毫秒。
    8、Root Dispersion - 指示与主时钟参考源的误差,以秒为单位,该字段只在服务器端有效。字段长度为32位浮点数,小数部分在16位以后,取值范围从零毫秒到正几百毫秒。
    9、Reference Identifier - 指示时钟参考源的标记,该字段只在服务器端有效。对于一级服务器,字段长度为4字节ASCII字符串,左对齐不足添零。对于二级服务器,在IPV4环境下,取值为一级服务器的IP地址,在IPV6环境下,是一级服务器的NSAP地址。    
    10、Reference Timestamp - 参考时间戳,指示系统时钟最后一次校准的时间,该字段只在服务器端有效,64bits。
    11、Originate Timestamp - 原始时间戳,指示客户向服务器发起请求的时间,64bits。
    12、Receive Timestamp - 接受时间戳,指服务器收到客户请求的时间,64bits。
    13、Transmit Timestamp - 传送时间戳,指示服务器向客户发时间戳的时间,64bits。
    14、Authenticator - 认证符,当需要进行认证时,该字段包含密钥和信息加密码(可选项),96bits。

    校时原理
          主要是通过记录客户端向服务器发送数据包时的时间戳t1,服务器端接收到该数据包时的时间戳t2,服务器向客户端回应时的时间戳t3和最后客户端接收到服务器回应时的时间戳t4来计算客户端时间和服务器端时间的偏差,从而进行校时操作,如下图所示。

    SNTP

    数据包在网络上传播的时间为:t3+((t4-t1)-(t3-t2))/2。

    要点
           NTP时间戳从1900年开始记秒数,而UNIX时间戳从1970年开始记秒数,即记录到NTP结构体中的时间要加上JAN_1970(1900到1970共70年的秒数),而从起获取出来需减掉JAN_1970。

    #define    JAN_1970    0x83AA7E80    //2208988800s

    附SNTP服务器原代码下载地址:

    https://download.csdn.net/download/GhostGuardian/12256739

     

    展开全文
  • NTP 协议介绍

    2019-08-03 12:55:17
    NTP协议 NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。NTP基于UDP报文进行传输,使用的UDP端口号为123。使用NTP的目的是对网络内...
  • NTP(网络时间协议

    万次阅读 2018-09-18 14:29:29
    NTP(网络时间协议) 网络时间协议(英语:Network Time Protocol,简称NTP)是在数据网络潜伏时间可变的计算机系统之间通过分组交换进行时钟同步的一个网络协议之一。NTP由特拉华大学David.Mills设计。 NTP意图将...
  • NTP 协议

    万次阅读 2010-10-13 09:37:00
    NTP协议属于应用层协议,是用于在分布式时间服务器和客户端之间进行时间同步的,它定义了协议实现过程中所使用的结构、算法、实体和协议。NTP协议是基于IP和UDP的,也可以被其它协议组使用。NTP是从时间协议(TIME ...
  • STM32+NTP网络时间协议

    千次阅读 2018-09-02 12:08:46
    最近要基于STM32芯片和NTP网络时间协议实现芯片内部RTC的时间同步功能,也在学习NTP协议,故整理了自己学习NTP协议一些心得与大家分享,欢迎大家留言交流。下面将从以下几个方面进行详解分享: NTP协议原理 NTP...
  • NTP协议原理

    千次阅读 2018-09-02 12:09:20
    NTP协议
  •   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议NTP 实现什么目的?  目的很简单,就是为了提供准确时间。因为我们的手表、设备等,经常会时间跑着跑着就...
  • NTP服务的安装和使用

    万次阅读 2020-07-16 09:57:55
    网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1...
  • NTP

    千次阅读 2016-08-27 00:19:38
    NTP(Network Time Protocol) 网络时间协议NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在...
  • NTP网络时间协议

    千次阅读 2018-07-25 09:55:33
    SNPT 秒级时间精度 NTP授时精度与NTP服务器与用户间的网络状况有关:广域网授时精度通常能达50ms级,但有时超过500ms;局域网授时不存在路由器路径延迟问题,因而授时精度理论上可以提到亚毫秒...一、NTP协议简介 ...
  • 0.cn.pool.ntp.org 1.cn.pool.ntp.org 2.cn.pool.ntp.org 3.cn.pool.ntp.org ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com ntp4.aliyun.com ntp5.aliyun.com ntp6.aliyun.com ntp7.aliyun.com 示例...
  • WIN7搭建NTP服务器

    千次阅读 2015-07-29 14:10:10
    NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。 1、启用 NTPServer。为此,请按照下列步骤操作:  a. 单击“开始”,单击“运行”,键入“regedit”,...
  • NTP网络校时协议

    千次阅读 2012-06-20 15:48:52
    Ntp协议基本原理如下:  上图所示的是ntp 协议基本工作原理,路由器gwa 和gwb 通过网络相连,它们都有自己独立的系统时钟, 要实现各自系统时钟的自动同步,作如下假设: 1 在gwa 和gwb 的系统时钟同步之前, ...
  • NTP网络协议校时

    千次阅读 2019-09-29 15:07:10
    实际业务需求中由于两台server的时间不一致。导致漏数据。损失巨大,被user批的不行不行的。...server 0.rhel.pool.ntp.org #server 1.rhel.pool.ntp.org #server 2.rhel.pool.ntp.org #server 3.rhel.pool....
  • Windows下安装NTP服务器

    万次阅读 多人点赞 2020-03-27 18:19:47
    NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上...
  • NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上...
  • NTP和PTP

    千次阅读 2018-05-27 20:41:53
    今天学习了NTP和PTP的区别,总结如下:1)NTP通过软件实现,只需要一次握手2)PTP通过软件和硬件实现,需要两次握手通过软件实现的协议精度要低,NTP大约是ms级别精度,而PTP最高可以达到10us。...
1 2 3 4 5 ... 20
收藏数 20,301
精华内容 8,120
关键字:

ntp协议