OpenNTPD时间服务器的基本工作过程分析
原创
©著作权归作者所有:来自51CTO博客作者heroincu的原创作品,请联系作者获取转载授权,否则将追究法律责任
在文件ntp.h中SNTPv4(RFC2030)协议包定义如下:
struct l_fixedpt {
u_int32_t int_partl;
u_int32_t fractionl;
};
struct s_fixedpt {
u_int16_t int_parts;
u_int16_t fractions;
};
struct ntp_msg {
u_int8_t status; /* status of local clock and leap info */
u_int8_t stratum; /* Stratum level */
u_int8_t ppoll; /* poll value */
int8_t precision;
struct s_fixedpt rootdelay;
struct s_fixedpt dispersion;
u_int32_t refid;
struct l_fixedpt reftime;
struct l_fixedpt orgtime;
struct l_fixedpt rectime;
struct l_fixedpt xmttime;
} __packed;
下面以最常用的SNTPv4工作模式-单播模式,来说明服务器的工作过程:
openNTPD服务器在初始化时,主函数ntp_main()调用函数setup_listeners()在123端口建立UDP服务;函数server_dispatch()将数据包结构体ntp_msg 成员status中LI字段设置为3(表示未与上级服务器同步);VN字段设置为4,表示SNTPv4;Mode 字段设置为4(服务器模式);成员stratum和ppoll设置为0;成员precision设置为0xFA(十进制为-6)。
一旦服务器与外部时钟源取得同步后,进入工作状态,在日志中会记录“clock is now synced”。LI字段设置为0,stratum字段设置为外部时钟源服务器的stratum+1;Reference Identifier字段设置为时钟源的ip地址,如十六进制C0 A8 FE 01表示192.168.254.1,Precision字段和前边设置相同;VN字段设置为客户端请求信息包的VN字段值,Root Delay和Root Dispersion字段通常设置为0,Reference Timestamp字段设置为从外部时钟源最新取得的时间,Originate Timestamp字段设置为客户请求包的Transmit Timestamp字段值,Transmit Timestamp字段设置为服务器发出时间戳给客户的时间。
SNTP服务器在工作过程中,如果与外部时钟源失去同步,Stratum字段设置为0,此时客户收到这个信息时,要丢弃服务器发给它的时间戳信息
下一篇:我的友情链接
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
CDN的基本工作过程
CDN的基本工作过程
CDN 基本 工作过程 -
需求分析工作过程
需求分析工作过程包括以下几个方面:0)绘制系统上下文范围关系图没能查到这个系统上下文范围图的作用。我的理
系统分析 需求分析 开发人员 数据流图 多用户 -
编译器的工作过程
源码要运行,必须先转
编译器 头文件 可执行文件 -
CPU的工作过程
CPU的工作过程1.计算机组成2.CPU组成3.取数指令
计算机组成原理 计算机组成 其他 -
工作过程的编译器
编译器的工作过程源代码要执行,必须先转成二进制的机器码。这是编译器的任务。比方。以下这段源代码
编译器 头文件 预编译 安装包 机器码