Linux 查看两个主机之间时间是否同步 - clockdiff命令详解
Linux 查看两个主机之间时间是否同步 - clockdiff命令详解
- 引言
- 一、clockdiff命令
- 1.1 例子
- 1.2 命令详解
- 二、原理以及部分源码解析
- 2.1 原理部分
- 2.2 部分源码解析
- 三、参考链接
引言
两个服务器 (基于Linux) 之间时间同步的重要性体现在多个方面,对系统的稳定性、安全性、数据一致性以及业务逻辑的正确执行都起着关键作用,比如日志记录和分析:当服务器之间时间不同步时,日志记录的时间戳将不准确,导致日志顺序混乱。这使得在分析问题时,很难准确地还原事件发生的先后顺序,增加了故障排查的难度。在Linux系统下,可以使用
clockdiff
查看两个主机之间系统时间的差值 – 精度为ms
,可依据此差值判断时间是否同步,或继续排查其他问题。
一、clockdiff命令
clockdiff
可以测量两个主机之间系统时间的差异1 ,一般Linux系统自带,没有的话需安装2。注:需管理员权限3。
1.1 例子
# clockdiff [-o] [-o1] destination,需要管理员权限
sudo clockdiff 192.168.1.1
-
测量本地与
192.168.1.1
主机之间的系统时间差,以上命令的输出结果如下所示:
-
其中,各项的含义如下表所示:
项 | 值 | 含义 |
---|---|---|
host | 192.168.1.1 | 目标主机的ip地址,测量本机与ip地址为192.168.1.1的机器之间的系统时差 |
rtt | 750(187)ms/0ms | 平均往返时延(多次往返时延的标准差)/最小的往返时延 |
delta | 1ms/1ms | d e l t a = 目标主机系统时间 − 本机系统时间 delta=目标主机系统时间 - 本机系统时间 delta=目标主机系统时间−本机系统时间,两种测量方式计算出的系统时间差 (ms) |
时间 | (省略) | 没啥,就是本地时间 |
1.2 命令详解
clockdiff [-o] [-o1] destination
,通过本机与目标主机写入的时间戳来计算两个系统时间的差值,通过参数可控制使用何种时间戳4 (默认ICMP TIMESTAMP
,一般使用默认的足以满足需求)。
- -o
sudo clockdiff -o 192.168.1.1
使用带有ICMP ECHO的IP TIMESTAMP,适用不支持ICMP时间戳的主机 - -o1
sudo clockdiff -o1 192.168.1.1
使用 three-term IP时间戳(使用预先定义好的中间节点),而不是-o
的 four-term IP时间戳
可以使用man clockdiff
命令查看自带手册,如下图所示:
二、原理以及部分源码解析
2.1 原理部分
源码网址如下,想深入了解可直接看其源码,这篇博文讲的很清楚5:
https://github.com/iputils/
https://gitee.com/rogerbowu/iputils
2.2 部分源码解析
- 输出部分有疑惑 (
比如下图rtt不应该是750ms
),在自己的机子上尝试clockdiff
自己sudo clockdiff 127.0.0.1
,结果如下所示:
- 看源码输出部分:
- 继续看计算rtt部分以及其初始化,其初始化为
1000ms
,计算一次过后rtt=(1000*3+0)/4=750ms
由于时延很小直接退出,计算rtt确实有bug
,但不影响测量delta.
三、参考链接
Linux系统之clockdiff命令详解:https://blog.csdn.net/weixin_56303229/article/details/146570938 ↩︎
Ubuntu18.04系统如何用clockdiff测算目标主机和本地主机之间的系统时间差:https://www.henghost.com/news/article/159229/?jsmc=30d7b72212&jsme=1748797460 ↩︎
统信os平台普通用户无法调用clockdiff的问题解决方法:https://blog.csdn.net/liuy5277/article/details/136557641 ↩︎
INTERNET CONTROL MESSAGE PROTOCOL:https://dl.acm.org/doi/pdf/10.17487/RFC0792 ↩︎
iputils网络工具时间比对程序clockdiff - 检测两台linux主机的时间差:https://blog.csdn.net/s_lisheng/article/details/80910902 ↩︎