NTP(Network Time Protocol 网络时间协议)

news2024/12/23 8:44:29

作用

        大数据产生与处理系统是各种计算设备集群的,计算设备将统一、同步的标准时间用于记录各种事件发生时序,如 E-MAIL 信息、文件创建和访问时间、数据库处理时间等。大数据系统内不同计算设备之间控制、计算、处理、应用等数据或操作都具有时序性,若计算机时间不同步,这些应用或操作或将无法正常进行。大数据系统是对时间敏感的计算处理系统,时间同步是大数据能够得到正确处理的基础保障,是大数据得以发挥作用的技术支撑。大数据时代,整个处理计算系统内的大数据通信都是通过网络进行。时间同步也是如此,利用大数据的互联网络传送标准时间信息,实现大数据系统内时间同步。网络时间同步协议(NTP)是时间同步的技术基础。
        NTP 是用来获取网络时间,它是一个 UDP 服务器,你给它发送一个正确格式的数据,他就会回复你
        在 CentOS8.0 中默认不再支持 ntp 软件包,时间同步将由 chrony 来实现。chrony 是一种相对于 ntp 更好的时间同步程序。
        全球一共有很多 NTP 服务器,例如我们去网上搜索 NTP 服务器就会看到:
NTP 服务器一般使用的端口号为 123
NTP 的协议格式:
NTP packet = NTP header(16 字节) + 4 个时间戳(每个 8 字节) = 48 字节
其中 NTP header 的顺序格式:
LI | VN |Mode | Stratum | Poll | Precision |Root Delay |Root Dispersion |Reference Identifier
Li - LeapYearIndicator : 2bit
VN - VersionNumber : 3bit
Mode : 3 bit
Stratum : 8bit
Poll - PollInterval : 8 bit
Percision : 8bit
Root delay : 32bit
Root Dispersion : 32bit
Reference Identifier : 32bit
主要字段的解释如下:
LI(Leap Indicator):长度为 2 比特,值为“11”时表示告警状态,时钟未被同步。为其他值时 NTP 本身不做处理。
VN(Version Number):长度为 3 比特,表示 NTP 的版本号,目前的最新版本为 3。
Mode:长度为 3 比特,表示 NTP 的工作模式。不同的值所表示的含义分别是:0 未定义、1 表示主动对等体模式、2 表示被动对等体模式、3 表示客户模式、4 表示服务器模式、5 表示广播模 式或组播模式、6 表示此报文为 NTP 控制报文、7 预留给内部使用。
Stratum:系统时钟的层数,取值范围为 1~16,它定义了时钟的准确度。层数为 1 的时钟准确度最高,准确度从 1 到 16 依次递减,层数为 16 的时钟处于未同步状态,不能作为参考时钟。
Poll:轮询时间,即两个连续 NTP 报文之间的时间间隔。
Precision:系统时钟的精度。
Root Delay:本地到主参考时钟源的往返时间。
Root Dispersion:系统时钟相对于主参考时钟的最大误差。
Reference Identifier:参考时钟源的标识。
Reference Timestamp:系统时钟最后一次被设定或更新的时间。
Originate Timestamp:NTP 请求报文离开发送端时发送端的本地时间。
Receive Timestamp:NTP 请求报文到达接收端时接收端的本地时间。
Transmit Timestamp:应答报文离开应答者时应答者的本地时间。
Authenticator:验证信息。
四个时间戳(TimeStamps) : 共 32 字节
Reference Timestamp : 64bit 提出时间
Originate Timestamp : 64bit 客户端发送请求的时间
Receive Timestamp : 64bit 服务器接收请求的时间
Transmit Timestamp : 64bit 服务器答复时间
知道上面格式我们就可以通过 UDP 发送协议报文给 NTP 服务器获取时间信息

实例程序

#include<stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

//秒---》时间字符串
//ctime 1970 1 1 到现在的秒数
//网络时间 1900 1 1 

#define NTP_SEC 2208988800ull // 1900~1970 年时间差

int main(int argc,char *argv[])
{
    //创建一个套接字
    int sock = socket(AF_INET, SOCK_DGRAM, 0);
    if(sock == -1)
    {
        perror("socket error");
        return -1;
    }

    //2.初始化一个目的地的 IPV4 结构体,你的服务器的地址
    // prot:123 阿里云 NTP 服务器:182.92.12.11
    struct sockaddr_in sAddr;
    memset(&sAddr,0,sizeof(sAddr));//内存设置
    sAddr.sin_family = AF_INET; //指定协议族 AF_INET
    sAddr.sin_port = htons(atoi(argv[1])); //端口号
    //sAddr.sin_addr; //ip 地址
    //inet_aton(argv[2],&(sAddr.sin_addr));
    sAddr.sin_addr.s_addr = inet_addr(argv[2]);

    unsigned char buf[48] = {0};
    buf[0] = 0x1b;
    //发送消息
    int res = sendto(sock,buf, 48, 0,(struct sockaddr*)&sAddr,sizeof(sAddr));
    struct sockaddr_in sa;
    socklen_t addrlen = sizeof(sa);
    res = recvfrom(sock,buf,48,0,(struct sockaddr *)&sa,&addrlen);
    if(res >0)
    {
        printf("res = %d\n",res);
        printf("server IP:%s
        prot:%d\n",inet_ntoa(sa.sin_addr),ntohs(sa.sin_port));
        //printf("recv message:%s\n",buf1);
        unsigned int rec_sec = *(int *)(buf+40);//网络字节序
        rec_sec = ntohl(rec_sec);
        time_t cur_sec = rec_sec-NTP_SEC;//1970 到现在
        printf("%s\n",ctime(&cur_sec));
    }
    close(sock);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

荣耀推送服务消息分类标准

前言 为了提升终端用户的推送体验、营造良好可持续的通知生态&#xff0c;荣耀推送服务将对推送消息进行分类管理。 消息分类 定义 荣耀推送服务将根据应用类型、消息内容和消息发送场景&#xff0c;将推送消息分成服务通讯和资讯营销两大类别。 服务通讯类&#xff0c;包…

如何在宝塔面板安装配置MySQL数据库并实现公网访问

宝塔安装MySQL数据库&#xff0c;并内网穿透实现公网远程访问 文章目录 宝塔安装MySQL数据库&#xff0c;并内网穿透实现公网远程访问前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网…

【科普】干货!带你从0了解移动机器人(六) (底盘结构类型)

牵引式移动机器人&#xff08;AGV/AMR&#xff09;&#xff0c;通常由一个牵引车和一个或多个被牵引的车辆组成。牵引车是机器人的核心部分&#xff0c;它具有自主导航和定位功能&#xff0c;可以根据预先设定的路径或地标进行导航&#xff0c;并通过传感器和视觉系统感知周围环…

音视频开发(一)ffmpeg 简单学习

前言 简单音视频处理。 学习自&#xff1a; 小破站FFmpeg最强教学丨入门FFmpeg看这一篇就够了丨从入门到放弃系列_哔哩哔哩_bilibili 01 下载、配置_哔哩哔哩_bilibili 基础知识 音视频处理基本都是&#xff1a;采样-处理得到帧队列-编码得到包队列-封装得到文件。 视频…

怎么设置禁止使用U盘

怎么设置禁止使用U盘 在工作中&#xff0c;数据对企业来说是尤为重要的&#xff0c;一旦企业或机构的数据泄露&#xff0c;就会给企业或机构带来极大的损失&#xff0c;企业为了保护公司数据的安全&#xff0c;往往禁用公司电脑使用U盘&#xff0c;禁用U盘也成为了企业的必要措…

Allegro电商平台:为卖家打开全球市场,为消费者带来无限选择

Allegro电商平台是一个全球性的在线零售平台&#xff0c;为卖家提供了一个广阔的市场&#xff0c;让他们可以在全球范围内销售产品。这个平台以其丰富的产品类别、便捷的购物体验和优质的客户服务而受到卖家和消费者的欢迎。本文将介绍Allegro电商平台的特点&#xff0c;以及卖…

【@胡锡进】大模型量化分析- 潍柴动力 000338.SZ

对于预测股票价格的问题&#xff0c;有许多不同的方法可以尝试。下面我将为你分别使用SARIMA、简单移动平均线、指数加权移动平均线、Bollinger带、相对强弱指标、随机指标、线性回归、随机森林回归、支持向量回归法、自回归移动平均法和长短期记忆模型来预测潍柴动力未来3天的…

NVM 安装及使用

1.安装 我使用的是解压版&#xff0c;免安装 github下载压缩包 下载后放在一个【没有中文】的文件夹下&#xff0c;解压 然后需要配环境变量&#xff0c; 首先添加两个变量&#xff0c;分别是刚刚nvm解压的路径&#xff0c;和当前node安装的路径。 然后编辑path变量&#x…

将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表

将两个有序顺序表合并为一个新的有序顺序表&#xff0c;并由函数返回结果顺序表 算法思路&#xff1a; 这个其实就是一个归并排序&#xff0c;我们这里两顺序表为升序&#xff0c;要合并成一个升序表 用i和j分别标记顺序表A和顺序表B的元素&#xff0c;然后新表是C 每次从A和…

springboot异步线程池

项目中经常会遇到线程池异步处理一些任务 1.配置信息 # 异步线程配置 # 核心线程数 async:executor:thread:core_pool_size: 10# 最大线程数max_pool_size: 100# 任务队列大小queue_capacity: 20# 线程池中线程的名称前缀name:prefix: kc-async-service-# 缓冲队列中线程的空闲…

玫瑰红葡萄酒的基本知识

在过去的几年里&#xff0c;玫瑰红葡萄酒越来越受欢迎&#xff0c;但是如果你是饮用玫瑰红葡萄酒的新手&#xff0c;你可能想知道它是如何从其他红葡萄酒或白葡萄酒中脱颖而出的。 玫瑰红具有标志性的粉色&#xff0c;很难归类&#xff0c;那它是更适合放在红酒类还是属于白酒…

什么是IGBT测试,igbt动态测试都有哪些指标,纳米软件科普

IGBT测试是指对绝缘栅双极型晶体管(IGBT)的性能进行检测和评估。IGBT是一种复合全控型电压驱动式功率半导体器件&#xff0c;兼有金属氧化物半导体场效应晶体管(MOSFET)的高输入阻抗和电力晶体管(GTR)的低导通压降两方面的优点。 IGBT测试包括电气性能测试、可靠性测试、耐久性…

全能型开源数据库监控平台 - lepus

简 介 Lepus 是一款开源的数据库监控平台&#xff0c;目前已经支持 MySQL、Oracle、SQLserver、MongoDB、Redis 等数据库的基本监控和告警。 Lepus 在监控数据库时&#xff0c;无需在每台数据库服务器上部署脚本或 Agent&#xff0c;只需要在数据库中创建授权账号后&#…

HarmonyOS 自定义抽奖转盘开发(ArkTS)

介绍 本篇 Codelab 是基于画布组件、显式动画&#xff0c;实现的一个自定义抽奖圆形转盘。包含如下功能&#xff1a; 1. 通过画布组件 Canvas&#xff0c;画出抽奖圆形转盘。 2. 通过显式动画启动抽奖功能。 3. 通过自定义弹窗弹出抽中的奖品。 相关概念 ● Stack组件…

业务流程图基本规范要求

再描述业务流程应该如何画之前&#xff0c;需要了解几个概念 BPA&#xff08;Business Process Automation&#xff09;是指通过自动化技术来改进和优化企业的业务流程&#xff0c;以提高生产力 和效率。 BPM&#xff08;Business Process Management&#xff09;是指对企业…

java数据结构 基本查找,二分查找,分块查找

目录 算法查找基本查找二分查找优化方式 插值查找了解即可斐波那契查找 了解以上总结 分块查找 算法查找 基本查找 又叫顺序查找 从0索引开始挨个往后查找 需求 定义一个方法利用基本查找 查找某个元素是否存在 {132,135,65,86,89,6} public static void main(String[] args) …

java--while循环

1.while循环 2.示例 3.执行的流程&#xff1a; ①循环一开始&#xff0c;执行int i 0一次 ②此时 i0&#xff0c;接着计算机执行循环条件语句&#xff1a;0 < 3 返回true&#xff0c;计算机就进到循环体中执行&#xff0c;输出&#xff1a;"Hello World",然后执…

SpringBoot 源码分析(四) 内置Tomcat分析

一、Tomcat相关知识 1. tomcat目录结构 Tomcat文件的目录结构 2.启动流程 启动一个Tomcat服务是执行的bin目录下的脚本程序&#xff0c;startup.bat和 startup.sh.一个是windows的脚本&#xff0c;一个是Linux下的脚本&#xff0c;同样还可以看到两个停止的脚本 shutdown.ba…

AIGC是什么?一文读懂人工智能生成内容技术!

文章目录 前言一、AIGC是什么&#xff1f;二、AIGC的4个主要特征1、文本生成2、图像生成3、语音生成4、视频生成 三、AIGC如何运作&#xff1f;步骤1&#xff1a;收集数据步骤2&#xff1a;模型训练步骤3&#xff1a;内容生成步骤4&#xff1a;反馈和改进 四、AIGC关键技术能力…

智慧社区燃气管网监测系统

燃气易燃易爆&#xff0c;一旦操作不当或疏忽大意&#xff0c;极易引发燃气安全事故&#xff0c;造成严重后果&#xff0c;2023年10月24日&#xff0c;在吉林某小区&#xff0c;发生了燃气使用不当产生的爆炸导致了1人死亡&#xff0c;1人重伤&#xff0c;15人轻伤&#xff0c;…