什么是时间同步?
提到时间同步,你会想到什么?
很多人会想到影视剧中的经典情节,比如两人拿枪互指:“我数到三,我们一起把枪放下”,或是行动或战争开始前,大家对表的时间。
《让子弹飞》中张麻子和黄四郎对峙
时间同步其实就是指多个时钟(clock,计时设备)之间的同步,理论上来说,这个同步既包括点时间的同步,也包括走时(即频率)的同步。
在《我和我的祖国》这部电影的“回归”一节中,中国和英国强调要在1997年7月1日0时0分0秒升起中国国旗,那么要达成这一共识,首先他们需要保证双方的时钟是同步的。
《我和我的祖国》中外交部礼宾司副司长安文彬与交接仪式执行总监莫林同步时间
网络中的时间同步是普遍而重要的,你和朋友约好5点吃饭,你迟到了20分钟他可能就会生气(接受范围是数十分钟的误差);你的另一半过生日,你没能在12点准时祝她生日快乐,那她可能就会生气(接受范围是一分钟内的误差);古早时期,当电脑主板的纽扣电池电耗尽后,关机时不会走时,再次开机时间会对不上,会影响拨号上网,可能也不能通过一些网站的安全性检验而无法访问(接受范围是一般分钟级或小时级的误差)。
这些场景看似只有一个时钟,但其实都蕴含着“标准时”的概念,即我们需要把时钟与“标准时”同步。标准时可以来自原子钟,卫星等,对于网络内的时间同步,我们大可以将“标准时”看做是给定的一个节点,而不用去管这个时间是否符合你感知意义下的“准确”,比如计算机网络中的时间,许多都是从1970年1月1日0时0分0秒开始计数的定长整数型,则计算机的时间同步,只需要同步这个数字,我们可以将这样的数字叫做时间戳(timestamp)。
计算机网络的时间同步
计算机之间的网络同步普遍而重要。在分布式系统中,尽管受限于通信的时间开销,很多时候时间同步并不会成为分布式系统性能的瓶颈,但依然充当着下限的作用。比如一个共享存储系统,A接受到B传来的tB时间将磁盘X处写成0, C传来的tC时间将磁盘X处写成1,那么究竟磁盘应该是被写成0还是1呢?
在不了解时钟同步前,你可能会回答,如果tC大于tB就是1,反过来就是0。但假设B和C的时间误差绝对值在T以内,那么这个操作只有在tC和tB的差的绝对值大于T的时候才是100%保证正确的,也就是说系统的性能与正确性和B与C之间的时钟同步息息相关。
网络中的时间同步,概括的来讲基本都是采用双向探针同步(BPS, Bidirectional Probing Synchronization)的思想。从A到B发送一个数据包,记录了A的发送时间tA和B的接收时间rB,从B到A发送一个数据包,记录了B的发送时间tB和A的接受时间rA,那么rB-tA和rA-tB理论上是相同的,如果有差别,就看做是B和A之间的时钟误差。所以误差就是用B的两个时间相加,减去A的两个时间相加,再除以2。
当然这个过程没有理论上这么简单,过程中的误差不可胜数。比如网络的波动,网络的拥塞同样会带来误差。当前的许多网络中存在多路径,如果只是随便发数据包,连从A到B和从B到A走的是同一条路径都不能保证,那么rB-tA和rA-tB在理论上都未必是相同的。同步网络中的多个节点,如果保证效果也是一个问题。
网络时间协议(NTP, network time protocol)
当前网络中最常见的时间同步方法就是网络时间协议NTP。它的思想简单概括(并不全面)就是选择多次BPS中往返时间(RTT)最小的那个作为判定依据。每一次做同步的时候,NTP发送多个双向探针,每次新探针结果出现就把旧的探针结果替换掉(比如第5次替换第1次),但每次判断是是从所有保存的结果中选择RTT最小的(比如当第5次的结果到达时,选择的依旧是第3次的误差)。当然NTP的设计远比这要更复杂严谨,在此就不详细介绍了,感兴趣的朋友可以阅读网络上关于NTP的详细介绍,或是RFC 958。NTP在局域网内可能可以达到微秒级别的误差,在广域网内也可以保证毫秒级别的误差,是简单常用的时间同步协议,它不需要另外的硬件支持,大家可以在自己的个人电脑中配置这项协议。
精确时间协议(PTP, Precise Time Protocol)
传统的BPS思想其实不考虑网络中的网络设备对于测量时间的影响,但实际上往往正是在网络设备上出现了排队拥塞,或是处理数据包时间的波动。所以在IEEE 1588中,提出了精确时间协议(PTP)。PTP的主要思想是引入网络内设备的支持,PTP定义了两类网络内设备,TC(transparent clock)和BC(boundary clock),这些设备能够记录数据包在设备内的处理时间,这样就可以从端到端时间(即BPS中的rB-tA和rA-tB)中减去这些会带来很大误差的干扰因素,从而提高测量的精度。
当前,许多高性能网络中对于PTP的支持已经相当普遍。在理想情况下,PTP可以做到纳秒级别的误差,但PTP有两个核心缺点,一是当部分部署或部分支持时精度损失严重;二是依然会受到网络拥塞的影响。
全球定位系统(GPS, Global Position System)
是的,你没有理解错,就是许多汽车会装的车载导航的那个GPS。GPS本质是一个卫星定位系统,它同时具备了时间同步功能。设备通过安装GPS天线和GPS服务来获取卫星时间,获得高精度的准确时间,可以达到纳秒级别。但GPS的服务比较昂贵,且要求很苛刻,比如需要专用硬件和专用缆线等的支持,难以用于计算机网络内每一个设备的同步。不过进行跨地域、远距离的时间同步时,往往可以用卫星时间作为网络同步的“第一跳”,即每一个网络中少量节点和卫星通过GPS进行时间同步。
前沿工作和结语
当前,网络领域的前沿研究中有许多针对时间同步的工作:利用物理层和数据链路层支持的DTP(SIGCOMM‘16),考虑引入支持向量机和网络效应的HUYGENS(NSDI‘18),使用可编程数据平面的进行网内同步的DPTP(SOSR’19)等等。在此就不加介绍了,欢迎感兴趣的朋友阅读论文。
网络内时间同步,正朝着稳定的纳秒精度,更低的额外开销的目标前进,软件上的方法革新,硬件上的更多支持,都在为这个方向打开新的研究思路。
(来源:赛博新经济公众号)