一、功能实现
以NTP服务器为基准,同步网内计算机或嵌入式设备的时间。
二、协议原理
协议:
客户端向NTP服务器发送请求数据包,NTP服务器回应一个数据包。
分别记录客户端发送请求包时的时刻t1和接收到回应包的时刻t4,服务器回应的数据包内包含了服务器接收到请求包的时刻t2和服务器发送回应包的时刻t3。
t4-t1表示整个消息传递过程所需要的时间;
t3-t2表示消息传递过程在服务器停留的时间;
(t4-t1)-(t3-t2)是来回路上消耗的时间,如果来回传输所用的时间一样,那么,单程的时间为:
t = ( (t4 - t1) - (t3 - t2) )/2;
假定客户端相对于服务器的时间误差是dis,则有下列等式:
t2 = t1 + dis + t;
t4 = t3 - dis + t;
则:dis = (( t2 - t1 ) + ( t3 - t4 )) / 2;
根据此差值重新设置时间即可。
说明:
服务器发返回的时间是以1900年为基准计算的,而linux是以1970年为基准的,所以需要用到一个常数做转化:
#define JAN_1970 2208988800UL /* 1970 - 1900 in seconds */