最新NTP同步过程要点.docx
- 文档编号:15892657
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:21
- 大小:538.23KB
最新NTP同步过程要点.docx
《最新NTP同步过程要点.docx》由会员分享,可在线阅读,更多相关《最新NTP同步过程要点.docx(21页珍藏版)》请在冰点文库上搜索。
最新NTP同步过程要点
NTP协议
一、NTP数据帧格式
下图所示是NTP数据帧的帧头格式:
01234567890123456789012345678901
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|LI|VN|Mode|Stratum|Poll|Precision|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Seconds|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|SecondsFraction|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|原始时间戳(64)|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|接收时间戳(64)|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|传送时间戳(64)|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|参考时间戳(64)|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1、LI闰秒标识器:
使用两个比特表示,用来预警最近一分钟插入一秒或者删除一秒。
LIValue含义
000无预告
011最近一分钟有61秒
102最近一分钟有59秒
113警告状态(时钟未同步)
2、VN版本号:
用三个比特表示的当前NTP的版本。
3、Mode模式:
用三个比特来表示模式
mode含义
0保留
1对称性激活
2被动的对称性
3客户端
4服务器
5广播
6为NTP控制性系保留
7为自用保留
在点对点模式下,客户端机在请求中设置此字段为3,服务器在回答时设置此字段为4;在广播模式下,服务器在回答时设置此字段为5。
4、stratum(层):
这是一个8bits的整数(无符号),表示当前时钟的层次水平,
stratum含义
0未指定或难以获得
1主要参考(如无线电时钟钟,校正的原子时钟)
2-255第二参考(viaNTP)
5、Poll(轮询)间隔:
八位signedinteger,表示连续信息之间的最小间隔,用2的二次幂来表示,比如值为6的话表示最小间隔为64秒。
6、Precision精度:
八位signedinteger,表示本地时钟精度,用最接近的2的二次幂来表示,比如50Hz(20ms)或者60Hz(16.67ms)可以表示成值-5(31.25ms)
原始时间戳:
客户端发送的时间,64bits,如果该客户端不可达,值设为0;
接收时间戳:
服务端接受到的时间,64bits,如果该客户端不可达,值设为0;
传送时间戳:
服务端送出应答的时间,64bits;
参考时间戳:
本地时钟被修改的最新时间,64bits,如果WTP从未被同步,值设为0。
时间戳会记录四个关键时刻的本地时间,但是在某些时刻时间戳是不可得到的,比如主机重启、协议第一次启动,在这种情况下,64个比特被设为0,标识这个值是无效的或者没定义的。
NTP时间戳的帧格式:
NTP的时间戳使用一个64比特的无符号定点数来表示,前32比特表示整数部分,后32比特表示分数部分(SecondsFraction)。
时间戳的记录以秒的形式从1900年1月1日的0:
0:
0算起,在SecondsFraction部分,无意义的低位应设置为0。
这种格式方便于表示多精度算法和用于UDP/TIME的表示(单位:
秒)的变换。
它精度是大约是200皮秒。
实际实现中NTP提供的时间精度在WAN为数十毫秒,在局域网上则为亚毫秒级或者更高。
在Internet上绝大多数能提供了1-50ms的精确度,精确度的大小取决于同步源和网络路径等特性
0
++++++...+++++++。
++++++...++++++
具体记录时,计算当前时间与1900年1月1日0:
0:
0的时间间隔,以秒为单位写成二进制形式,整数部分填入前32位,分数部分填入后32位,无意义的低位设置为0.
比如当前时间为1902年1月1日1:
1:
1,与1900的参考时间相差(365*2*24*60*60+3661)63075661秒,转换成二进制为00000011110000100111010101001101.Xxxxxxxxx
因为
,所以
因为只有32位表示秒数,所以当到2036年时数据会溢出(
)。
所以以136年为一个周期置零,会用一些外部的方法来表示是相对1900年的时间还是2036年的时间。
二、NTP的通信模型
互联网中运用NTP进行时间同步和分配所涉及的设备和通路的集合称为时间同步子网络。
时间同步子网络以分层主从结构模式运行,其结构示意图见于图1。
在这种结构中,少许几个高层设备可以为大量的低层设备提供同步信息。
第0级设备处于该子网络的特殊位置,是时间同步网络的基准时间参考源。
它位于子网络的顶端,目前普遍采用全球卫星定位系统,即由GPS播发的UTC时间代码,本身并不具有NTP。
出于对精确度和可靠性的考虑,下层设备同时引用若干个上层设备作为参考源;而且也可以引用同层设备作为参考源。
NTP能够时间参考源中选择最好的几个时间源来推断现行时间。
在同层设备配置为互为参考时,NTP会在两个对等机间进行自动选择,以精确度高者作为两者共同的参考源,而绝非两者互相引用。
NTP工作在时间同步子网络1级以下的其他各级设备中。
图1中,在第1级和第2级上用机盒图式表示的设备是网络时间服务器,或者称为NTP时间服务器;用计算机主机和工作站图式表示的是一般互联网中的对应物,在时间同步子网络中它们均被视为时间服务器的时间客户机(下面简称服务器和客户机)。
服务器可以是专用设备,也可以是备有专用时钟电路的通用计算机。
出于对精确度和可靠性的考虑,下层设备同时引用若干个上层设备作为参考源;而且也可以引用同层设备作为参考源。
NTP以客户机和服务器方式进行通信。
每次通信共计两个包。
客户机发送一个请求数据包,服务器接收后回送一个应答数据包。
两个数据包都带有时间戳。
NTP根据这两个数据包代的时间戳确定时间误差,并通过一系列算法来消除网络传输的不确定性的影响。
在数据包的传送方式上,有客户机和服务器一对一的点对点方式,还有多个客户机对一个服务器的广播/多播方式。
两者工作方法基本相同。
处于两种方式下的客户机在初始时和服务器进行如同点对点的简短信息交换,据此对往返延时进行量化判断。
此后广播/多播客户机只接收广播/多播消息的状态,并根据第一次信息交换的判断值修正时间。
不同之处在于时间服务器在广播方式下周期性地向广播地址发送时间刷新信号;而在多播方式下周期性地向多播地址发送时间刷新信号。
在广播/多播方式下一个服务器可以为大量的客户机提供时间,但精度较低。
三、NTP的通信模式
NTP在以下5个模式中运行,用host-mode(peer.mode)变量来表示:
symmetricactive,symmetricpassive,client,serverandbroadcast这五种模式
1.服务器/客户端模式
在服务器/客户端模式中,客户端向服务器发送时钟同步报文,报文中的Mode字段设置为3(客户模式)。
服务器端收到报文后会自动工作在服务器模式,并发送应答报文,报文中的Mode字段设置为4(服务器模式)。
客户端收到应答报文后,进行时钟过滤和选择,并同步到优选的服务器。
在该模式下,客户端能同步到服务器,而服务器无法同步到客户端。
2.对等体模式
在对等体模式中,主动对等体和被动对等体之间首先交互Mode字段为3(客户端模式)和4(服务器模式)的NTP报文。
之后,主动对等体向被动对等体发送时钟同步报文,报文中的Mode字段设置为1(主动对等体),被动对等体收到报文后自动工作在被动对等体模式,并发送应答报文,报文中的Mode字段设置为2(被动对等体)。
经过报文的交互,对等体模式建立起来。
主动对等体和被动对等体可以互相同步。
如果双方的时钟都已经同步,则以层数小的时钟为准。
3.广播模式
在广播模式中,服务器端周期性地向广播地址255.255.255.255发送时钟同步报文,报文中的Mode字段设置为5(广播模式)。
客户端侦听来自服务器的广播报文。
当客户端接收到第一个广播报文后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。
之后,客户端就进入广播客户端模式,继续侦听广播报文的到来,根据到来的广播报文对系统时钟进行同步。
4.组播模式
在组播模式中,服务器端周期性地向用户配置的组播地址(若用户没有配置组播地址,则使用默认的NTP组播地址224.0.1.1)发送时钟同步报文,报文中的Mode字段设置为5(组播模式)。
客户端侦听来自服务器的组播报文。
当客户端接收到第一个组播报文后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。
之后,客户端就进入组播客户模式,继续侦听组播报文的到来,根据到来的组播报文对系统时钟进行同步。
四、NTP的通信原理
通常情况下,在设置的初始,在5至10分钟有内6次交换。
一旦同步后,每10分钟与服务器时间进行一次同步。
NTP的基本工作原理如下图所示。
DeviceA和DeviceB通过网络相连,它们都有自己独立的系统时钟,需要通过NTP实现各自系统时钟的自动同步。
为便于理解,作如下假设:
∙在DeviceA和DeviceB的系统时钟同步之前,DeviceA的时钟设定为10:
00:
00am,DeviceB的时钟设定为11:
00:
00am。
∙DeviceB作为NTP时间服务器,即DeviceA将使自己的时钟与DeviceB的时钟同步。
∙NTP报文在DeviceA和DeviceB之间单向传输所需要的时间为1秒。
∙DeviceA发送一个NTP报文给DeviceB,该报文带有它离开DeviceA时的时间戳,该时间戳为10:
00:
00am(T1)。
∙当此NTP报文到达DeviceB时,DeviceB加上自己的时间戳,该时间戳为11:
00:
01am(T2)。
∙当此NTP报文离开DeviceB时,DeviceB再加上自己的时间戳,该时间戳为11:
00:
02am(T3)。
∙当DeviceA接收到该响应报文时,DeviceA的本地时间为10:
00:
03am(T4)。
至此,DeviceA已经拥有足够的信息来计算两个重要的参数:
∙NTP报文的往返时延Delay=(T4-T1)-(T3-T2)=2秒。
∙DeviceA相对DeviceB的时间差offset=((T2-T1)+(T3-T4))/2=1小时。
这样DeviceA就能根据这些信息来设定自己的时钟,使之与DeviceB的时钟同步。
五、精度误差:
NTP理论上最大精度是大约是200皮秒。
实际实现中NTP提供的时间精度在广域网为数十毫秒,在局域网上则为亚毫秒级或者更高。
在Internet上绝大多数地方能提供了1-50ms的精确度,精确度的大小取决于同步源和网络路径等特性。
NTP可达到的精度受到本地时钟硬件固有框架、严格的硬件控制和过程延迟的很大影响,由于时钟速率间的微小差别和peers间精度的差异都会给时间同步的计算带来误差;必须依据相关的规定来调节软件的逻辑时钟的时间和频率来修正由于NTP产生的误差。
802.11的时间精度大概能达到微秒级。
1、网络的对称性
通过两次测量来估计链路延迟一般估算方法是假设链路是对称的,即时间服务器到客户端的延迟等于客户端到时间服务器的延迟。
这种假设是理想化的,实际的无线链路往往受到各种因素的影响,例如多径、时变而不能完全对称。
2、网络拓扑结构
简单的点对点拓扑结构能达到较高的同步精度,而一些复杂的网络容易受到网络延迟抖动的影响且精度与网络负载的情况相关。
六、事件进程
6.1符号表示
时钟补偿
,Roundtrip延迟
,dispersion
,小写希腊字母表示与peer相关的变量,大写希腊字母表示与主要参考源相关的变量,根据roundtrip延迟和dispersion可以得到同步的距离
。
表示上一次跟新时的间隔
表示skewrate的最大值
Sys.clock:
当前本地时间,是由硬件时钟的机制得到的
Peer.update:
时间戳格式下表示本地时间,whenthemostrecentNTPmessagewasreceived.Itisusedincalculatingtheskewdispersion.
Skew:
频率的差值
MaximumSkew(NTP.MAXSKEW):
Thisisthemaximumoffseterrorduetoskewofthelocal
clockovertheintervaldeterminedbyNTP.MAXAGE,inseconds.Theratio
isinterpretedasthemaximumpossibleskewrateduetoallcauses.
MaximumClockAge(NTP.MAXAGE):
Thisisthemaximumintervalareferenceclockwillbe
consideredvalidafteritslastupdate,inseconds.
Clockoffsetrepresentstheamounttoadjustthelocalclocktobringitintocorrespondencewiththereferenceclock.(时钟补偿指的是本地时钟与对应的参考时钟的差值)
Roundtripdelayprovidesthecapabilitytolaunchamessagetoarriveatthereferenceclockataspecifiedtime.(Roundtripdelay指信息发出达到响应端的时间)
Dispersionrepresentsthemaximumerrorofthelocalclockrelativetothereferenceclock.(相对于参考时钟,本地时钟所允许的最大错误)
每次有关的peer变量跟新后,所有和这个peer关联的分布都需要根据skew-erroraccumulation来跟新,这种计算总结如下
相关变量说明:
6.2传输过程
除了clientmodewithabroadcastserver和severmodeinallcases,当peer计时器衰减到零,开始执行传输过程。
前者是不会发送信息的,后者只会对接收到信息作出响应时才会发送信息。
begintransmitprocedure
初始化packetbuffer,复制数据变量,skew的值是计算累积skew-error必须的
pkt.peeraddr←peer.hostaddr;/*copysystemandpeervariables*/
pkt.peerport←peer.hostport;
pkt.hostaddr←peer.peeraddr;
pkt.hostport←peer.peerport;
pkt.leap←sys.leap;
pkt.version←NTP.VERSION;
pkt.mode←peer.mode;
pkt.stratum←sys.stratum;
pkt.poll←peer.hostpoll;
pkt.precision←sys.precision;
pkt.rootdelay←sys.rootdelay;
if(sys.leap=
or(sys.clock–sys.reftime)>NTP.MAXAGE)
skew←NTP.MAXSKEW;
else
skew←
(sys.clock−sys.reftime);
pkt.rootdispersion←sys.rootdispersion+(1< pkt.refid←sys.refid; pkt.reftime←sys.reftime; pkt.xmt用来验证回复,所以需要保证值得准确性,此外还需要注意时间戳的复制顺序,以确保不会迅速的衰落。 pkt.org←peer.org;/*copytimestamps*/ pkt.rec←peer.rec; pkt.xmt←sys.clock; peer.xmt←pkt.xmt; 在鉴权实现后,进行加密的呼叫。 如果鉴权是允许的,鉴权器的加密的延迟会是同步迅速衰落,所以在实现的时候需要用一个系统状态变量(NTP协议中未规定)包含着计算得到的加密延迟的补偿来修正本地时间戳。 #ifdef(authenticationimplemented)/*seeAppendixC*/ callencrypt; #endef sendpacket; 可达性寄存器每次向左移一比特,用0表示空位。 若寄存器全是0,则呼叫clearprocedure清空clockfilter并重新选择同步源。 如果这个连接没有由初始化过程进行配置,这个连接遣散。 peer.reach←peer.reach<<1;/*updatereachability*/ if(peer.reach=0andpeer.config=0)begin demobilizeassociation; exit; Endif 如果在先前的两个轮询间隔中,有效数据在filterregister中移动的至少一位,有效数据计数器增加。 否则有效数据计数器和poll间隔都将衰落。 时候选择进程会呼叫进行重新选择同步源。 if(peer.reach&6≠0)/*testtwolow-orderbits(shifted)*/ if(peer.valid peer.valid←peer.valid+1; elsepeer.hostpoll←peer.hostpoll+1; elsebegin peer.valid←peer.valid−1;/*nothingheard*/ peer.hostpoll←peer.hostpoll−1); callclock-filter(0,0,NTP.MAXDISPERSE); callclock-select;/*selectclocksource*/ endif callpoll-update; endtransmitprocedure; NOTE: 广播服务器直接响应clientwith包含着正确信息的pkt.org和pkt.rec。 其他情况下服务器知识纯粹的广播本地时间withpkt.org,且pkt.rec设为0; 6.3接收进程 一个NTP信息一被接收,该进程就会被执行。 该进程使得接收到的信息变得有效,解释变量模式并呼叫其他进程来过滤数据,选择同步源。 如果数据中的版本标志与当前版本不匹配,则丢弃该数据。 如果同附录B中描述的NTP的控制信息被应用了,且数据的模式是6,control-message进程被呼叫。 来源和目的地的IP和UDP头的网络地址和ports和相应的peer相匹配。 beginreceiveprocedure if(pkt.version≠NTP.VERSION)exit; #ifdef(controlmessagesimplemented) if(pkt.mode=6)callcontrol-message; #endef for(allassociations)/*accesscontrolgoeshere*/ matchaddressesandportstoassociations; if(nomatchingassociation) callreceive-instantiationprocedure;/*createassociation*/ 在鉴权完成后呼叫解密过程 #ifdef(authenticationimplemented)/*seeAppendixC*/ calldecrypt; #endef 如果packetmode是非零的使用如下步骤的模式的值,否则这个peer是一个旧的版本a模式的值由3.3节确定。 if(pkt.mode=0)/*forcompatibilitywitholdversions*/ mode←(seeSection3.3); else mode←pkt.mode; case(mode,peer.hostmode)/*seeTable5*/ 如果数据被丢弃或者连接终止,若先前没有配置 error: if(peer.config=0)demobilizeassociation;/*seenoevil*/ break; 如果接收到的数据头和数据是有效的,呼叫clock-update进程来跟新时间,如果这个连接是先前没有配置的则弃置。 recv: callpacket;/*processpacket*/ if(validheader)begin/*ifvalidheader,updatelocalclock*/ peer.reach←peer.reach|1; if(validdata)callclock-update; endif else if(peer.config=0)demobilizeassociation; break; 发射数据的进程中会及时的回复消息,如果先前没有配置,连接终止 xmit: cal
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 NTP 同步 过程 要点