今天在看《linux内核源代码情景分析》的时候,在中断那章看到了时间中断,里面提到时钟是计算机系统里非常重要的部分,不仅仅对单个计算机系统很重要,对于计算机网络来说同样非常重要,就想到一个问题,在网络中,不同的计算机之间是如何同步时钟的?暂时还没有考虑时钟不同步时可能出现哪些后果。
在网上简单查了一下,网络中同步时钟主要是用的网络时间协议(NTP, network time protocol),名字很简单,协议本身实际上也很简单。用下面的图来简单说明。
这里是以一台计算机(client)如何与时间服务器(server)通过NTP进行时间同步,来简单说明NTP的工作原理。
从下图中,可以很简单的就列出两个等式,在图右侧。而从这两个等式,用解方程的方法,就可以求出Delay和Offset。
Client如何知道T2和T3?很简单呀,在client和server之间不是有数据包的传送么,把T2和T3作为payload放到数据包里就OK啦!
从计算结果可以看出,NTP并没有要求server很快做出响应,因为offset只和T1、T2间,以及T3、T4间的差值有关,而与T2、T3间的差值无关。当然,这只是从原理上简单分析,具体在协议中是如何实现的并没有研究。