问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

数据包捕获!网络时间协议(NTP)讲解

创作时间:
作者:
@小白创作中心

数据包捕获!网络时间协议(NTP)讲解

引用
CSDN
1.
https://blog.csdn.net/chen1415886044/article/details/112549133

网络时间协议(NTP)是计算机系统中用于时钟同步的重要协议,属于TCP/IP协议套件的一部分。它基于用户数据报协议(UDP),端口号为123。本文将详细介绍NTP的工作原理、报文格式,并通过数据包捕获来分析NTP通信过程。

NTP是计算机系统中的时钟同步协议。它属于TCP / IP协议套件的最老部分之一,是基于用户数据报协议(UDP),端口号是123。
对于同步过程,NTP依赖于协调世界时(UTC),该时间是从分层系统中的各个客户端和服务器获得的。

NTP如何工作?

NTP的四种工作模式中,最常用的是服务器/客户端模式(server/client)。在这种模式下,只需要在客户端进行配置,服务器端除了配置NTP主时钟外,不需要进行其他专门配置。并且,只能是客户端同步到服务器,服务器不会同步到客户端。

当NTP客户端启动与NTP服务器的时间请求交换时,交换的结果是客户端能够计算链路延迟及其本地偏移,并调整其本地时钟以匹配服务器计算机上的时钟。

客户端向服务器发送时钟同步报文,报文中的Mode字段设置为3(客户模式)。
服务器端收到报文后会自动工作在服务器模式,并发送应答报文,报文中的Mode字段设置为4(服务器模式)。
客户端收到应答报文后,进行时钟过滤和选择,并同步到优选的服务器。

NTPv4报文格式

NTPv4在NTPv3上进行了改进,并纠正了某些错误。NTP时间戳定义已得到扩展,以鼓励使用浮动双精度数据类型。这导致时间分辨率优于1纳秒,而频率分辨率小于1纳秒/秒。 下面是报文格式:

NTP消息的标头字段如下:
LI字段值如下
0: 无leap秒调整
1: 一天的最后一分钟为61秒
2: 一天的最后一分钟为59秒
3:时钟未同步
VN:NTP版本号 (3 bits) (当前版本为4),
模式(Mode)字段的值如下:
0:保留
1:对称主动
2:对称被动
3:客户端
4:服务器
5:广播
6:NTP控制消息
7:保留供私人使用
Stratum:时间源的层级别(8bits)Stratum字段的值如下
0:未指定或无效
1:主服务器
2 – 15:辅助服务器
16:未同步
17 –255:保留
Poll:轮询间隔(8位有符号整数)连续NTP消息之间的最大间隔的2值,以秒为单位。
Precision: 时钟精度(8位有符号整数)。
Root Delay:本地到主参考时钟源的往返时间。
Root Dispersion:系统时钟相对于主参考时钟的最大误差。
Reference Identifier:参考时钟标识符,占用8个bits,用来标识特殊的参考源。
Reference Timestamp:该字段是上次设置或纠正系统时钟的时间,格式为64位时间戳。
Originate Timestamp:该值是请求离开服务器客户端的时间,采用64位时间戳格式。
Receive Timestamp: 该值是客户端请求以64位时间戳格式到达服务器的时间。
Transmit Timestamp:此值是服务器回复离开服务器的时间,采用64位时间戳格式。

NTPv4报文抓包

在pcap中, 显示了客户端到服务器的基本通信。NTP客户端询问服务器时间。在服务器的答案中,您可以看到参考时钟(94.198.159.10)。
通常,NTP通信在ntp服务运行的整个生命周期中都在进行;它以“轮询”间隔查询服务器。

NTPv4客户/服务模式实例

int main(int argc, char* argv[])
{
    char errbuf[1024];
    pcap_t *desc = 0;
    char *filename = argv[1];
    if (argc != 2)
    {
        printf("usage: ./dissect_ntp [pcap file]\n");
        return -1;
    }
    printf("ProcessFile: process file: %s\n", filename);
    if ((desc = pcap_open_offline(filename, errbuf)) == NULL)
    {   
        printf("pcap_open_offline: %s error!\n", filename);
        return -1; 
    }   
    //pcap_buff2user_loop(desc, 0, (pcap_handler)pcap_hand, 0);
    pcap_loop(desc, pkt_number, (pcap_handler)ace_pcap_hand, NULL);
    pcap_close(desc);
    return 0;
}

编译结果:
NTP使用协调世界时(UTC),以极其精确同步计算机时钟时间,在小型网络中提供更高的精度-在一个到一个单一的毫秒局域网和几十通过互联网毫秒内。NTP不考虑时区,而是依靠主机来执行此类计算。

总结

在实际开发中,网络中准确的时间很重要。即使是几分之一秒的差异也会引起问题。例如,分布式过程取决于协调时间,以确保遵循正确的顺序。
关于数据包捕获,网络时间协议(NTP)了解,请参考官方文档。剖析NTP数据包第3版和第4版可参考(RFC5905, RFC2030, RFC1769, RFC1361, RFC1305)等。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号