|
前言
上期《长文:“互联网基石协议”——DNS详解》中我们介绍了DNS协议,你们本期我们就接着再给大家讲讲另外一个重要协议——有关NTP的概念、工作原理、数据包解码及简单的分析案例。希望通过本篇系列文章,让大家能更直观地了解NTP协议。
本期互动问题,欢迎大家评论区一起聊聊: NTP协议的工作模式有几种? 一、 NTP的概念和原理 NTP的概念 NTP(Network Time Protocol)中文叫网络时间协议,是一种用于确保网络中各个设备保持准确时间的关键协议。NTP就像互联网的"原子钟",专门负责将计算机时间同步到毫秒甚至微秒级精度。它诞生于上世纪八十年底,至今仍是全球最广泛使用的时间同步协议。NTP版本迭代如下图: NTP采用层级模型结构来确保时间同步,层级中的每层被称为Stratum。最顶层的参考时钟(权威时钟)被分配编号0,从权威时钟获得时钟同步的NTP服务器的层数设置为Stratum 1,并将其作为主时间服务器,为网络中其他的设备提供时钟同步。Stratum 2则从Stratum 1获取时间,Stratum 3从Stratum 2获取时间,以此类推。这种分层结构有助于防止层次结构中的循环依赖。Stratum的取值范围为1~16,取值越小,时钟准确度越高(Stratum编号表示与参考时钟的距离,而不一定代表质量或可靠性,较高层的时间源通常质量更高)。Stratum为1~15的时钟处于同步状态,层数为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 Client和NTP Server之间的时间差:
(1)NTP Client发送一个NTP报文给NTP Server,该报文带有它离开NTP Client时的时间戳,该时间戳为10:00:00am(T1)。在数据包中T1在origin timestamp字段中记录(后面NTP数据包解码中还会提到,为方便讲解,把T1定位10:00:00am和抓包截图有点不同,后面步骤不再赘述解释),如下图:
(2)当此NTP报文到达NTP Server时,NTP Server加上自己的时间戳,该时间戳为11:00:01am(T2)。在数据包中T2在recive timestamp字段中记录,如下图:
(3)当此NTP报文离开NTP Server时,NTP Server再加上自己的时间戳,该时间戳为11:00:02am(T3)。在数据包中T3在transmit timestamp字段中记录,如下图:
(4)当NTP Client接收到该响应报文时,NTP Client的本地时间为10:00:03am(T4)。在数据包中看不到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最基本的工作模式,工作过程如上图所示。(其中mode3、mode4是NTP解码字段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报文,都会将报文的生存时间TTL(Time 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打开显示如下:
发现流量占比最高的是两个协议,即NTP和IP_Fragment(IP分片),仔细查看,发现IP_Fragment包其实是NTP协议的分片包(分片后,只有首个分片数据包有协议字段,因此没显示为NTP,显示成了IP_Fragment协议),如下图:
至此,我们知道了造成这次流量突发是NTP导致的。再看数据包的概要信息,注意到:
这是上面我们讲NTP安全威胁中提到的典型NTP放大攻击(原理见上面章节介绍)
至此,我们清楚了造成这次故障的根因:遭受了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协议有更深层次的认识。后面我们会陆续介绍更多常见应用层协议,请大家持续关注! 还记得开篇的互动问题吗? 看了这篇文章,你有什么新的想法?欢迎在评论区留言和我们交流~
|