查看: 49|回复: 0

NTP:毫秒误差不容忽视,性能与“时间”的万千关联

[复制链接]
发表于 2025-5-19 17:11:49 | 显示全部楼层 |阅读模式

  前言  


上期《长文:“互联网基石协议”——DNS详解》中我们介绍了DNS协议,你们本期我们就接着再给大家讲讲另外一个重要协议——有关NTP的概念、工作原理、数据包解码及简单的分析案例。希望通过本篇系列文章,让大家能更直观地了解NTP协议。


本期互动问题,欢迎大家评论区一起聊聊:

NTP协议的工作模式有几种?

  一、 NTP的概念和原理  

NTP的概念

NTPNetwork Time Protocol)中文叫网络时间协议,是一种用于确保网络中各个设备保持准确时间的关键协议。NTP就像互联网的"原子钟",专门负责将计算机时间同步到毫秒甚至微秒级精度。它诞生于上世纪八十年底,至今仍是全球最广泛使用的时间同步协议。NTP版本迭代如下图:



NTP采用层级模型结构来确保时间同步,层级中的每层被称为Stratum。最顶层的参考时钟(权威时钟)被分配编号0,从权威时钟获得时钟同步的NTP服务器的层数设置为Stratum 1,并将其作为主时间服务器,为网络中其他的设备提供时钟同步。Stratum 2则从Stratum 1获取时间,Stratum 3Stratum 2获取时间,以此类推。这种分层结构有助于防止层次结构中的循环依赖。Stratum的取值范围为116,取值越小,时钟准确度越高(Stratum编号表示与参考时钟的距离,而不一定代表质量或可靠性,较高层的时间源通常质量更高)。Stratum115的时钟处于同步状态,层数为16的时钟被认为是未同步的,不能使用的。


NTP时间服务器层次结构是NTP协议的核心,分层结构确保了时间同步的可靠性,因为在发生故障或问题时,系统可以切换到更高层次的时间服务器,以保持时间准确性。NTP层级模型结构示意图如下:



注意:

最上层又称为Stratum 0,通常由地球上的主要时间源提供,例如全球定位系统(GPS)卫星,原子钟等,被认为是最准确和最可信赖的。NTP服务器无法被分配到Stratum 0。有的资料中提到Stratum最多为15,而实际中会看到Stratum 16,此时代表时钟未能同步。


  二、 NTP工作原理  

基本工作原理

NTP的工作过程很简单,在C/S(客户端/服务器)模式下就是客户端发请求,服务器回复响应,客户再根据响应信息来同步时间。NTP工作在UDP上(保证实时性),默认端口为123

NTP原理用图形展示会更加直观,见下图:



NTP会用以下4个步骤,计算出NTP ClientNTP Server之间的时间差:


1NTP Client发送一个NTP报文给NTP Server,该报文带有它离开NTP Client时的时间戳,该时间戳为10:00:00amT1)。在数据包中T1origin timestamp字段中记录(后面NTP数据包解码中还会提到,为方便讲解,把T1定位10:00:00am和抓包截图有点不同,后面步骤不再赘述解释),如下图:



2)当此NTP报文到达NTP Server时,NTP Server加上自己的时间戳,该时间戳为11:00:01amT2)。在数据包中T2recive timestamp字段中记录,如下图:



3)当此NTP报文离开NTP Server时,NTP Server再加上自己的时间戳,该时间戳为11:00:02amT3)。在数据包中T3transmit timestamp字段中记录,如下图:



4)当NTP Client接收到该响应报文时,NTP Client的本地时间为10:00:03amT4)。在数据包中看不到T4时间戳,由系统网卡接收时记录T4时间,直接交由CPU行后文中的计算过程,计算出时间差,进行时间同步。


经过上面4个步骤,NTP Client已经拥有足够的信息来计算两个重要的参数:


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


NTP Client相对NTP Server的时间差offset=((T2-T1+T3-T4))/2=1小时。


这样,NTP Client就能够根据这些信息来设定自己的时钟,使之与NTP Server的时钟同步。上面只是简单的理论算法(如上面offset的计算只适用于往返时间相同的情况,如果往返时间差异大就会出现误差),真实条件下,还涉及很多具体算法(如多层次多服务器同步算法)来消除两地时钟的各种误差和网络的不稳定性,有兴趣的读者可以参考RFC1305


另外,时间同步不是一次性事件,而是定期进行的。客户端设备通常每隔一段时间与NTP服务器进行一次时间同步,以确保时钟的准确性。


NTP工作模式


NTP和其他协议只能用C/S模式不同,它可以采用多种NTP工作模式进行时间同步。通过CSNAS分析数据包的交互过程,必须先理解NTP工作模式,不同工作模式下,会看到不同的NTP数据包交互过程。


(1)客户端/服务器模式(client/server



NTP最基本的工作模式,工作过程如上图所示。(其中mode3mode4NTP解码字段mode(共3bit)的取值,0未定义、1表示主动对等体模式、2表示对等体模式、3表示客户模式、4表示服务器模式、5表示广播模式、6表示此报文为NTP控制报文、7预留给内部使用。)


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


应用场景:适用于上层设备与下层设备同步的配置。


(2)对称模式(symmetric active/passive



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


应用场景:常用于具有相同层次的服务器之间,作为彼此的备份。当服务器与底层所有服务器通信失败时,仍然可以同步到同一层的服务器。


(3)广播模式(broadcast



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


应用场景:广播服务器发送时钟同步消息来同步同一子网内的客户端。因为只有广播服务器发送时钟同步消息,所以广播模式的时间准确性低于客户端/服务器模式和对称的主动/被动模式。


(4)组播模式(multicast



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


应用场景:组播服务器可以为同一子网或不同子网的客户端提供时间同步。组播模式的时间精度低于客户端/服务器模式和对称模式。


(5)多播模式(unicast



多播模式是NTP协议扩展定义的特殊模式(RFC 5908),本质是基于组播地址的单播响应机制,属于应用层协议扩展。


多播模式下的客户端周期性地向IPv4/IPv6组播地址发送请求报文(Mode字段设置为3)。当客户端接收到应答报文时,客户端会进行时钟过滤和选择,并同步到时钟优选的服务器。多播服务器持续监听报文。若某个服务器可以被同步,则服务器将使用客户端的单播地址返回报文(Mode字段设置为4)。


为了防止在多播模式下,客户端不断的向多播服务器发送NTP请求报文增加设备的负担,协议规定了最小连接数的概念。(多播模式下,客户端每次和服务器时钟同步后,都会记录此次同步过中建立的连接数,将调用最少连接的数量被称为最小连接数。)


注意:为了防止客户端无法同步到服务器,协议规定客户端每发送一个NTP报文,都会将报文的生存时间TTLTime To Live)进行累加(初始为 1),直到达到最小连接数,或者TTL值达到上限(上限值为 255)。若TTL达到上限,或者达到最小连接数,而客户端调动的连接数仍不能完成同步过程,则客户端将停止一个超时周期的数据传输以清除所有连接,然后重复上述过程。


应用场景:多播模式适用于服务器分布分散的网络中。客户端可以发现与之最近的多播服务器,并进行同步;多播模式同样适用于服务器不稳定的组网环境中,服务器的变动不会导致整网中的客户端重新进行配置。


小结:在实际学习NTP流量分析时,需要了解NTP服务器的配置,知道服务器处于什么模式,才能看明白CSNAS抓到的NTP数据包的交互流程。当然,熟练掌握了NTP各种模式后,在CSNAS中看到NTP数据包的交互顺序,也就知道了NTP工作在什么模式!排查障碍也就水到渠成。


  三、 NTP数据包解码  


NTP请求包和响应包的解码字段完全相同,因为有不同模式,所以需从mode字段区分NTP的工作模式,而不是直接区分NTP包是请求还是响应。NTP数据包的具体解码如下:



通过表格列出各字段的含义:



用一次C/S模式NTP交互数据包来举例。


请求包:



对应的响应包:



  四、 NTP面临的安全问题  


NTP面临的最主要的安全威胁举例如下:


时钟偏移攻击(Clock Offset Attack

攻击者通过篡改NTP数据包中的时间或精度,让目标设备的时钟与实际时间偏离,从而影响网络设备的正常工作。

要避免这种攻击,可以对数据包加密、进行身份验证等方式保证数据包的完整性和来源合法性。


(2) 重放攻击(Replay Attack

攻击者通过截获历史NTP数据包,并再次发送给目标设备,从而实现恶意操作或伪造信息的目的。重放攻击可能导致网络设备收到误导,执行错误的命令或共享虚假的时间信息。

防护措施是启用时间戳机制,并通过授权、加密等手段验证数据包的合法性。


(3) 放大攻击(Amplification Attack

这是一种DDOS攻击,和DNS放大攻击类似,通过查询NTP服务的monlist(请求包小,响应包却巨大)。阻塞被攻击主机带宽,从而无法进行正常工作。

防护措施是禁用NTP服务器Monlist功能,身份验证,设置ACL策略,只允许来自受信任的NTP服务器的数据包通过。


  五、 NTP流量分析举例  


1:客户网络突然变得十分缓慢,经监测发现存在流量突发。


分析:

科来回溯分析服务器上下载流量突发时间段的流量,用CSNAS打开显示如下:



发现流量占比最高的是两个协议,即NTPIP_FragmentIP分片),仔细查看,发现IP_Fragment包其实是NTP协议的分片包(分片后,只有首个分片数据包有协议字段,因此没显示为NTP,显示成了IP_Fragment协议),如下图:



至此,我们知道了造成这次流量突发是NTP导致的。再看数据包的概要信息,注意到:



这是上面我们讲NTP安全威胁中提到的典型NTP放大攻击(原理见上面章节介绍)


至此,我们清楚了造成这次故障的根因:遭受了NTP放大攻击。


解决方案:

  • 禁用NTP服务的monlist功能(从流量中看到此NTP服务器和客户端在同一网络);

  • 启用NTPv4(本例中可以看到用的是v2);

  • 部署NTP安全扩展(Autokey协议);

  • 配置防火墙规则:仅允许服务器访问可信NTP服务器;

2:某客户单位上新业务部署了一批服务器,运行一段时间后发现业务指标有些对不上,经排查发现大部分Linux服务器时钟会发生跳变,导致按时间统计的业务指标不准确。


即:服务器每隔一段时间,系统时钟增加固定一段时间,然后隔一小段时间又恢复正常时间,虽然时间间隔非常短,但是时间跳变对系统调试、指标统计等还是造成了一定影响。该单位业务系统由多个模块和子系统组成,如果各个模块之间时间不一致,会导致业务流程出现问题,甚至可能进一步影响系统的正常运行。


分析:

CSNAS抓包结果如下图:



确定只有唯一一个NTP数据源,且NTP协议运行无异常。


多方排查无异常后,工程师通过排除法将系统部署的程序逐个卸载,最后发现将XX软件卸载后故障现象消失。通过厂商确定是由于XX软件采用了自己的私有时间同步协议,并且该私有协议为加密传输(自有NTP数据源,导致网内存在多个NTP数据源),导致抓包分析NTP时,没有发现多个NTP数据源。


结论:客户网络中存在多个NTP数据源,NTP数据源时间存在差异,导致服务器不停去和不同NTP数据源进行时间对齐,从而导致系统时间不停出现跳变。


解决方法:卸载XX软件,联系XX软件修改NTP机制后再启用。

  六、 知识点延伸  


除了NTP协议,还有GPS时间同步、PTP等其他时间同步方法,每种方法都有其独特的优势和适用场景:


GPS时间同步GPS时间同步在需要极高时间精度的领域中表现优异,通常在纳秒级别或更高,如科学实验、金融交易和电信网络。然而,其可用性可能受到GPS信号受阻的影响,特别是在城市环境中。


PTP PTP适用于需要亚微秒级别同步的局域网环境,例如广播、电力系统和高频交易。它对硬件时钟的依赖较高,要求网络稳定性良好,对网络延迟和抖动敏感。


其他时间同步方法无线信号同步适用于不需要极高时间精度的应用,如智能家居系统。基于时钟源的方法适用于对时间精度要求极高的领域,例如科学实验和天文学观测。

NTP作为最常见和广泛使用的协议,适用于大多数一般性网络环境,提供了良好的灵活性和可扩展性。对于需要更高时间精度的特定领域,可以考虑使用GPS时间同步或PTP,它们分别在精度和稳定性方面有所优势。


  七、 总结  


本篇文章我们从数据包的角度深入介绍了NTP协议,NTP协议常常因为没和业务直接关联而被运维人员忽视,今天重新认识了NTP协议,知道NTP对系统,乃至业务也是有重要影响的!在今后的工作中,通过不断地分析实践,积累经验,大家会对NTP协议有更深层次的认识。后面我们会陆续介绍更多常见应用层协议,请大家持续关注!

还记得开篇的互动问题吗?

NTP协议的工作模式有几种?

看了这篇文章,你有什么新的想法?欢迎在评论区留言和我们交流~

免费易用的流量分析工具下载
扫码关注公众号
更多网络分析技术、技巧、干货分享

- End -

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表