1、什么是NTP
NTP(Network Time Protocol)是网络时间同步协议,就是用来同步网络中各个计算机的时间的协议。NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。
2、为什么使用NTP
为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务器和ntp客户机。在网络中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。使用NTP的目的是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用。
3、NTP原理简介
NTP的基本工作原理如图1所示。Device A和Device B通过网络相连,它们都有自己独立的系统时钟,需要通过NTP实现各自系统时钟的自动同步。为便于理解,作如下假设:
l 在Device A和Device B的系统时钟同步之前,Device A的时钟设定为10:00:00am,Device B的时钟设定为11:00:00am。
l Device B作为NTP时间服务器,即Device A将使自己的时钟与Device B的时钟同步。
l NTP报文在Device A和Device B之间单向传输所需要的时间为1秒。
图1 NTP基本原理图
系统时钟同步的工作过程如下:
l Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。
l 当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)。
l 当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)。
l 当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)。
至此,Device A已经拥有足够的信息来计算两个重要的参数:
l NTP报文的往返时延Delay=(T4-T1)-(T3-T2)=2秒。
l Device A相对Device B的时间差offset=((T2-T1)+(T3-T4))/2=1小时。
这样,Device A就能够根据这些信息来设定自己的时钟,使之与Device B的时钟同步。
4、NTP常用命令
ntpdate:直接同步,使用ntpdate命令进行同步,直接进行时间变更。如果服务器上存在一个12点运行的任务,当前服务器时间是13点,但标准时间时11点,使用此命令可能会造成任务重复执行。因此使用ntpdate同步可能会引发风险,因此该命令也多用于配置时钟同步服务时第一次同步时间时使用。
ntpd:平滑同步,使用ntpd进行时钟同步,可以保证一个时间不经历两次,它每次同步时间的偏移量不会太陡,是慢慢来的,这正因为这样,ntpd平滑同步可能耗费的时间比较长。
ntpq:ntpq 指令使用NTP模式6数据包与NTP服务器通信,能够在允许的网络上查询的兼容的服务器。它以交互模式运行,或者通过命令行参数运行。NTP服务端重启后,客户机要等5分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。等待的时间可以通过命令 watch ntpq -p来监控。
ntpstat:ntpstat将报告在本地计算机上运行的NTP守护程序(ntpd)的同步状态,如果发现本地系统与参考时间源同步,则ntpstat将报告大致的时间精度。
5、NTP实验
环境
[root@VM_0_11_centos etc]# cat centos-release
CentOS Linux release 7.7.1908 (Core)
[root@VM_0_11_centos etc]#
1)安装NTP
[root@VM_0_11_centos etc]# yum -y install ntp
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
2)查看NTP服务状态
[root@VM_0_11_centos ~]# systemctl status ntpd
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-02-15 04:39:34 MST; 1 day 20h ago
Main PID: 643 (ntpd)
Memory: 2.4M
CGroup: /system.slice/ntpd.service
└─643 /usr/sbin/ntpd -u ntp:ntp -g
3)修改配置文件
[root@VM_0_11_centos ~]# vim /etc/ntp.conf
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#
server 127.127.1.0 # 如果公网NTP不可用时,将使用Local时间作为NTP服务提供给NTP Client。
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
4)修改配置后重启
[root@VM_0_11_centos ~]# systemctl restart ntpd
[root@VM_0_11_centos ~]# systemctl status ntpd
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-02-17 01:09:21 MST; 16s ago
Process: 17031 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 17032 (ntpd)
Memory: 660.0K
CGroup: /system.slice/ntpd.service
└─17032 /usr/sbin/ntpd -u ntp:ntp -g
Feb 17 01:09:21 VM_0_11_centos ntpd[17032]: 0.0.0.0 c01d 0d kern kernel time sync enabled
Feb 17 01:09:21 VM_0_11_centos ntpd[17032]: ntp_io: estimated max descriptors: 1024, initial socket boundary: 16
Feb 17 01:09:21 VM_0_11_centos ntpd[17032]: Listen normally on 0 lo 127.0.0.1 UDP 123
Feb 17 01:09:21 VM_0_11_centos ntpd[17032]: Listen normally on 1 eth0 172.17.0.11 UDP 123
Feb 17 01:09:21 VM_0_11_centos ntpd[17032]: Listen normally on 2 lo ::1 UDP 123
Feb 17 01:09:21 VM_0_11_centos ntpd[17032]: Listen normally on 3 eth0 fe80::5054:ff:feef:d006 UDP 123
Feb 17 01:09:21 VM_0_11_centos ntpd[17032]: Listening on routing socket on fd #20 for interface updates
Feb 17 01:09:21 VM_0_11_centos ntpd[17032]: 0.0.0.0 c016 06 restart
Feb 17 01:09:21 VM_0_11_centos ntpd[17032]: 0.0.0.0 c012 02 freq_set kernel 2.797 PPM
Feb 17 01:09:22 VM_0_11_centos ntpd[17032]: 0.0.0.0 c515 05 clock_sync
[root@VM_0_11_centos ~]#
5)测试
[root@VM_0_11_centos ~]# ntpdate 127.0.0.1
17 Feb 01:13:12 ntpdate[17595]: the NTP socket is in use, exiting
[root@VM_0_11_centos ~]# ps -ef | grep ntp
root 17175 1 0 01:10 ? 00:00:00 ntpd
root 17222 1 0 01:10 ? 00:00:00 ntpd
ntp 17409 1 0 01:12 ? 00:00:00 /usr/sbin/ntpd -u ntp:ntp -g
root 17770 13846 0 01:14 pts/0 00:00:00 grep --color=a uto ntp
[root@VM_0_11_centos ~]# lsod -i:123
-bash: lsod: command not found
[root@VM_0_11_centos ~]# lsof -i:123
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ntpd 17409 ntp 16u IPv4 4001632 0t0 UDP VM_0_11_c entos:ntp
ntpd 17409 ntp 17u IPv4 4001633 0t0 UDP VM_0_11_c entos:ntp
ntpd 17409 ntp 18u IPv6 4001634 0t0 UDP VM_0_11_c entos:ntp
ntpd 17409 ntp 19u IPv6 4001637 0t0 UDP VM_0_11_c entos:ntp
[root@VM_0_11_centos ~]# kill -9 17409
来源:CSDN
作者:远去的栀子花
链接:https://blog.csdn.net/u012967763/article/details/104356416