chrony客户端发送时间戳随机问题
现象
使用centos8的chrony给本机同步时间时,发现客户端发送给服务器的NTP包中,transmit timestamp(T3)的时间戳是随机的,同时,服务器端收到客户端请求的包后,原封不动的将时间赋值给origin timestamp(T1),如下图所示:

但是这种情况在使用ntpdate同步本地时间时并不存在,时间都是正确的:

我记得之前并不存在这个问题,随后用centos6.5的ntpd同步测试发现时间戳不是随机的,而是一个正确的客户端本地时间。
分析
Linux7之前的版本同步时间用的是ntpd,Linux7以及7之后的版本都改用chrony了,两者区别参考:https://chrony.tuxfamily.org/comparison.html。
经过查资料发现,这个随机时间戳是因为安全考虑,虽然该备忘录要求客户端数据包中的大部分字段设置为零,但发送时间戳应该是随机的。这个决定是出于安全和隐私的动机。在没有密码认证的情况下,验证原始时间戳是客户端对NTP响应进行盲欺骗的主要防御手段。因此,客户端的传输时间戳不可预测是很重要的。参考:https://datatracker.ietf.org/doc/html/draft-ietf-ntp-data-minimization#page-4

同时,自chrony2.3开始已经不显示客户端数据包中的本地时间和同步状态,这个版本2016年2月16日发布的。参考:https://chrony.tuxfamily.org/news.html

同时chrony与ntp对比官方文档的安全性对比表格中,也有关于随机时间戳的说明:

结论
根据上面的分析可得出:
使用chrony2.3及以上版本作为同步工具的系统均存在客户端时间随机问题。
一些遵循NTPv4(RFC5905)的时间同步工具,均存在客户端时间随机问题。
Linux7及以下版本系统使用的同步工具是ntpd,故不存在客户端时间随机问题。
问题
当需要计算客户端在校时中的delay和offset是需要用到这4个时间戳的。现在T1变成随机的,应该怎么计算呢?
chrony客户端发送时间戳随机问题的更多相关文章
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- 在ASP.NET MVC的Action中直接接受客户端发送过来的HTML内容片段
出于安全的考虑,默认情况下,如果从客户端发送过来的数据中直接包括了HTML内容,ASP.NET会自动启动保护措施,你会收到下面的错误提示 这当然是一个不错的设计,只不过在某些特殊的事情,如果我们确实需 ...
- SpringMVC客户端发送json数据时报400错误
当测试客户端发送json数据给服务器时,找不到响应路径? 原来是参数类型不符,即使是json也要考虑参数的个数和类型 解决:将age请求参数由"udf"改为"3" ...
- JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求 哇,一看标题怎么这么长啊,其实意思很简单,哥讨厌用HTTP Client做POST与GET提交 觉得那个毕竟是别人写 ...
- {网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习
要求: 实现多个客户端发送文件给一个服务器端 提示:多个人创建客户端发送文件,服务端循环接收socket,从socket中获取文件 说明:这里我们只要建立一个服务端就可以了,然后让多台电脑使用客户端给 ...
- server-sent-event使用流信息向客户端发送数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- socket 套接字服务器端和客户端发送信息
import socket import threading host='' port=6889 def cilenThred(conn,addr): print("成功接受客户端{}的连接 ...
- asp.net mvc中action接收客户端发送过来的html片段
出于安全的考虑,默认情况下,如果从客户端发送过来的数据中直接包括了HTML内容,ASP.NET会自动启动保护措施,这当然是一个比较好的设计,只不过在某种情况下我们真的需要获取这个值,那我们应该怎么办呢 ...
- Netty客户端发送消息并同步获取结果
客户端发送消息并同步获取结果,其实是违背Netty的设计原则的,但是有时候不得不这么做的话,那么建议进行如下的设计: 比如我们的具体用法如下: NettyRequest request = new N ...
- C#模拟客户端发送数据示例
在给一些客户端做服务器端支持时,发现他们提交上来的数据大都不是http请求格式,因而使用Request.Form获取不到内容,今天用C#做下模拟,并演示下数据接收. 1.发送文本 1).客户端发送 ...
随机推荐
- 核心工具之 ideavim
对于个人的核心工具集的选择,因为编程中熟练使用主力IDE能够大大提高效率,所以IDE是一个必选项.而IDE与VIM结合的插件,对于VIM使用者,常常是一个必选项. 在Jetbrains系列工具中,插件 ...
- 即学即会 Serverless | 如何解决 Serverless 应用开发部署的难题?
本文节选自<Serverless 开发速查手册>,关注Serverless 公众回复 手册 即可获得下载链接 作者 | 江昱(阿里云 Serverless 产品经理) 破局:工具链体系匮乏 ...
- HanLP — 汉字转拼音,简繁转换 -- JAVA
目录 语料库 训练 加载语料库 训练模型 保存模型 加载模型 计算 调用 HanLP 在汉字转拼音时,可以解决多音字问题,显示输出声调,声母.韵母,通过训练语料库, 本文代码为<自然语言处理入门 ...
- freeswitch的ACL规则
概述 freeswitch是一款好用的VOIP开源软交换平台. VOIP公共网络中的安全问题是最重要的问题,我们必须对网络端口的访问权限做出限制. ACL全称Access Control List,意 ...
- Liunx常用操作(十)-VI编辑器-命令模式命令
vI编辑器三种模式 分别为命令模式.输入模式.末行模式.
- Angular系列教程之依赖注入详解
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- strlen和sizeof区别
strlen 和 sizeof 是 C/C++ 中用于获取字符串长度或数据类型大小的两个不同的操作. 1.strlen: strlen 是在 C 语言和 C++ 中用于获取以空字符 ('\0') 结尾 ...
- 【SHELL】在指定格式的文件中查找字符串
在指定格式的文件中查找字符串 grep -nr "string" --include=*.{c,cpp,h} 在排除指定格式的文件中查找字符串 grep -nr "str ...
- CSS - 工具类 tool.css
/* flex */ .flex{ display: flex; } .f1{ flex:1 } .flex-center{ align-items: center; ...
- 【Tomcat 组成与工作原理】
Tomcat组成与工作原理 Tomcat 是什么 开源的 Java Web 应用服务器,实现了 Java EE(Java Platform Enterprise Edition)的部 分技术规范,比如 ...