参加计算所面试的时候查礼老师问到一个问题:如何利用UDP协议使客户机获得服务器上的标准时间,简单说就是对一下表。我当时本来就紧张,开口就说首先要保证可靠传输,要用TCP实现。老师又提醒说要求用UDP协议,然后我又是一阵沉默……总之老师提示一点,我就讲一点,答得一塌糊涂……
前几天的时候又想起这个问题,就上网搜了一下,这才发现这个授时功能早就有标准协议来实现了。然后赶紧把这个NTP协议学习一下,发现它的原理其实是十分简单的,每个人都能想到,我当时只是想不出其中的两个假设,无法列出数学方程。想来也惭愧,这么常用的一个协议,我以前居然一点都不知道……不过正所谓“学然后知不足”,努力吧!
传说中的NTP(Network Time Procotol)
一、NTP协议简介
NTP协议全称网络时间协议(Network Time Procotol)。它的目的是在国际互联网上传递统一、标准的时间。具体的实现方案是在网络上指定若干时钟源网站,为用户提供授时服务,并且这些网站间应该能够相互比对,提高准确度。
NTP最早是由美国Delaware大学的Mills教授设计实现的,从1982件最初提出到现在已发展了将近20年,2001年最新的NTPv4精确度已经达到了200毫秒。对于实际应用,又有确保秒级精度的SNTP(简单的网络时间协议)。本项目使用网上时间传递格式NTPv3公布于1992年,当前几乎所有的授时网站都是基于NTPv3的。
NTP的基本原理
T1:客户方发送查询请求时间(以客户方时间系统为参照)
T2:服务器收到查询请求时间(以服务器时间系统为参照)
T3:服务器回复时间信息包时间(以服务器时间系统为参照)
T4:客户方收到时间信息包时间(以客户方时间系统为参照)
δ1:请求信息在网上传播所消耗的时间
δ2:回复信息在网上传播所消耗的时间
θ :客户端和服务器的时间差
现已知T1 、T2、T3、T4,希望求得θ以调整客户方时钟,有:
假设请求和回复在网上传播的时间相同,即δ1=δ2,则可解得:
可以看到,θ、δ只与T2T1差值、T3T4差值相关,而与T2T3差值无关,即最终的结果与服务器处理请求所需的时间无关。据此,客户方A即可通过T1、T2、T3、T4计算出时差θ去调整本地时钟。
NTP的网络体系结构
NTP所建立起的网络基本结构是分层管理的类树形结构。网络中的节点有两种可能:时钟源或客户。每一层上的时钟源或客户可向上一层或本层的时钟源请求时间校正。
第0层为官方时钟所保留。
第一层为一级时钟源层,其上没有任何客户,只有主钟源,这些钟源之间相互不允许校正。一级钟源的任务就是将时间信息向第二层的钟源或客户发布。
第二层及以下层除层数不同、时间质量不一样外没有本质上的区别。第N层上的时钟源的时间来自第N-1层或第N层,并向第N层上的时钟源和第N+1层上的客户提供校时服务。
NTP的工作模式:
主/被动对称模式:一对一的连接,双方均可同步对方或被对方同步,先发出申请建立连接的一方工作在主动模式下,另一方工作在被动模式下。
客户/服务器模式:与主/被动模式基本相同。唯一区别在于,客户方可被服务器同步,但服务器不能被客户同步。
广播模式:一对多的连接,服务器不论客户工作在何种模式下,主动发出时间信息,客户由此信息调整自己的时间,此时网络延时d2忽略,因此在准度上有损失,但可满足秒级应用。