ntp网络时间协议_ntp网络时间协议特性

2022-11-07 17:58:36 浏览数 (2)

大家好,又见面了,我是你们的朋友全栈君。

NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。

原理:

NTP要提供准确的时间,就必须有准确的时间来源,那可以用格林尼治时间吗?答案是否定的。因为格林尼治时间是以地球自转为基础的时间计量系统,但是地球每天的自转是有些不规则的,而且正在缓慢加速,因此,格林尼治时间已经不再被作为标准时间使用。 新的标准时间,是由 原子钟 报时的国际标准时间UTC(Universal Time Coordinated,世界协调时)。所以NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。

有了准确而可靠的的时间源,那这个时间如何传播呢?在NTP中,定义了时间按照服务器的等级传播,按照离外部UTC源远近将所有的服务器归入不同的Stratum(层)中,例如把通过GPS(Global Positioning System,全球定位系统)取得发送标准时间的服务器叫Stratum-1的NTP服务器,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些 服务器 在逻辑上形成阶梯式的架构相互连接,而Stratum-1的 时间服务器 是整个系统的基础。

计算机主机一般同多个时钟服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源以便校正主机时间。即使在主机长时间无法与某一时钟服务器联系的情况下,NTP服务依然可以有效运转。 为了防止对时钟服务器的恶意破坏,NTP使用了识别机制,检查发送来的信息是否是真正来自所宣称的时钟服务器并检查信息的返回路径,以提供对抗干扰的保护机制。

下面我们用android的API来实现获取ntp时间:

代码语言:javascript复制
public static long getNtpTrustedTime(final Context context) {
        try {
            final Class<?> NtpClass = Class
                    .forName("android.util.NtpTrustedTime");

            Object obj = new Object();
            Method method = NtpClass.getMethod("getInstance", Context.class);
            Object gi = method.invoke(obj, context);
            method = NtpClass.getMethod("forceRefresh");
            Object receiverce = method.invoke(gi);
            if ((Boolean) receiverce) {
                method = NtpClass.getMethod("getCachedNtpTime");
                Object cachedNtpTime = method.invoke(gi);
                return (Long) cachedNtpTime;
            }
        } catch (Exception e) {
            Log.d(TAG, e.getMessage());
        }

        return -1;
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/182919.html原文链接:https://javaforall.cn

0 人点赞