NTP는 네트워크를 통한 시간 동기화에 사용되는 프로토콜이다. NTP데몬은 NTP를 이용해 시간 동기화에 사용되는 데몬을 말한다.
정확한 '시간'을 얻기위해 주로 사용되는 방법은 크게 2가지가 있다. 하나는 GPS의 시간을 받아오는 방법이고, 다른 하나는 세슘 원자 시계를 구매하는 방법이다. 당연한 말이지만 GPS를 이용한것이 가장 가격이 저렴하다. (저렴하게 구성하려면 10만원 안팍이다) GPS리시버를 COM포트로 연결해서 시간을 얻어오는 방법이 그것이다.
1계층서버(Stratum 1)는 호스트에 정확한 시간을 알 수 있는 장치(위에서 말한 GPS나 원자시계)를 달아 얻은 시간을 NTP를 이용해 다른 서버에 전달해주는 서버를 말한다. [1계층서버]에서 NTP를 이용해 시각 정보를 받아 다시 다른 서버에 전달해주는 서버를 2계층서버라고 한다. 무료로 사용할 수 있는 시간 서버는 모두 2계층서버다. 계층이 높다고 해서 시각이 부정확한건 아니다. NTP는 계층 15까지 가도 계층 1과 1/1000 초 정도의 차이밖에 나지 않도록 설계되었기 때문이다.
VMWare, VirtualBox 같은 가상환경에서는 제대로 테스트 해볼 수 없다. NTP를 설정할 필요도 없고 설정해서도 안된다.
솔라리스에서 쉽게 NTP를 이용해 시간을 설정하는 방법에 대해 설명한다. ntp.conf의 내용을 모두 지우고 아래의 2줄만 추가한 후 NTP서버를 시작하면 설정이 완료된다.
아래 세팅은 ntp*.epidc.co.kr 에서 시간 데이터를 가져와 로컬에 세팅한다.
root@wl ~ # cat /etc/inet/ntp.conf
server ntp1.epidc.co.kr
server ntp2.epidc.co.kr
slewalways yes
disable pll
root@wl ~ # svcadm enable svc:/network/ntp:default 1)
root@wl ~ # tail /var/adm/messages
Aug 3 10:24:01 wl ntpdate[362]: [ID 558275 daemon.notice] adjust time server 211.115.194.21 offset -0.006361 sec
Aug 3 10:24:01 wl xntpd[364]: [ID 702911 daemon.notice] xntpd 3-5.93e+sun 03/08/29 16:23:05 (1.4)
Aug 3 10:24:01 wl xntpd[364]: [ID 301315 daemon.notice] tickadj = 5, tick = 10000, tvu_maxslew = 495, est. hz = 100
Aug 3 10:24:01 wl xntpd[364]: [ID 266339 daemon.notice] using kernel phase-lock loop 0041, drift correction 0.00000
root@wl ~ # ntpq -p 2)
remote refid st t when poll reach delay offset disp
==============================================================================
ntp1.epidc.co.k 192.168.18.6 2 u 36 64 3 2.09 -1.962 7876.68
ntp2.epidc.co.k 192.168.18.10 2 u 36 64 3 2.29 -1.596 7876.68
root@wl ~ #
1) 솔라리스 9 이하의 경우 /etc/init.d/xntpd start 명령을 주면 된다. 2) 시작 직후에는 이렇게 나오고, 30분 정도 후에 정상상태로 된다.
NTP 서버 설정
NTP서버란 호스트에 설정된 시각을 다른 서버에 전해줄 수 있도록 하는 서버로 세팅하는 것을 말한다. NTP서버가 되려면 시각을 정확하게 측정할 수 있는 장치가 서버에 장치되어있어야 한다. (보통 GPS장치다) 아래는 그 세팅 방법이다.
NTP 서버 설정(로컬 시간)
로컬 장치에서 시간을 받아온다. (쉽게 말하면 마더보드에서 시간을 받아온다) 주소는 127.127.XType.Unit형식으로 예약되어있으며 다른 장치가 있는 경우 XType대신 다른 번호를 써 줘야 한다. /etc/inet/ntp.server에 XType에 대해 설명되어있다. 이 시간을 다른 서버에서 NTP를 이용해 받아갈 수 있다.
root@wl ~ # ntpq -p
remote refid st t when poll reach delay offset disp
==============================================================================
NTP.MCAST.NET 0.0.0.0 16 - - 64 0 0.00 0.000 16000.0
ntp1.epidc.co.k 0.0.0.0 16 - - 64 0 0.00 0.000 16000.0
ntp2.epidc.co.k 0.0.0.0 16 - - 64 0 0.00 0.000 16000.0
root@wl ~ # # 10분 정도 후에 다시 해본다
root@wl ~ # ntpq -p
remote refid st t when poll reach delay offset disp
==============================================================================
NTP.MCAST.NET 0.0.0.0 16 - - 64 0 0.00 0.000 16000.0
*ntp1.epidc.co.k 192.168.18.6 2 u 33 64 377 1.28 7.353 7.31
+ntp2.epidc.co.k 192.168.18.10 2 u 33 64 377 1.54 7.110 7.34
root@wl ~ # # 1시간 이상 지난 후에 다시 해본다
remote refid st t when poll reach delay offset disp
==============================================================================
+ntp1.epidc.co.k 192.168.18.6 2 u 160 1024 377 1.60 0.584 0.29
*ntp2.epidc.co.k 192.168.18.10 2 u 213 1024 377 3.59 0.272 0.72
root@wl ~ #
※ 필드 설명
remote: 원격 서버의 주소
refid: REFID(해당 서버가 참고하고 있는 호스트의 주소). 0.0.0.0 인 경우 알 수 없거나 없음
st: 계층
t: 종류. (local, unicast, multicast, broadcast)
when: 마지막 패킷 받은 후 지난 시간(초)
poll: 풀링 인터벌(초)
reach: The reachability register, in octal
delay: 지연시간(밀리초)
offset: 시간차이(밀리초)
disp: 피어분산(밀리초)
※ 왼쪽의 기호 설명
공백: 높은 계층 또는 온전성 검사 실패로 인한 버림
x: Designated falsticker by the intersection algorithm.
.: Culled from the end of the candidate list.
-: 클러스터링 알고리즘에 의해 버림
+: 최근 선택 셋에 포함됨
#: 동기화를 위해 선택됨. 거리가 최고에 이름
*: 동기화를 위해 선택됨.
o: 동기화를 위해 선택됨. PPS 시그널이 사용중(시간 서버가 시간을 맞추는 중)
접근 제한
NTP 서버에서 시각 데이터를 가져갈 수 있는 호스트의 IP를 제한할 수 있다. 설정하지 않으면 모든 호스트에서 가져갈 수 있다.
사용자 노트는 사용자의 제안이나 문서의 정확도 향상을 위해 개발되었습니다. 본문과 관련된 대한 질문/의견등을 노트에 남겨주시면 이 페이지에 방문하는 다른 사용자에게 도움이 될 것입니다. 사용자 노트는 서술한 내용이 반영되거나, 코멘트 내용이 본문과 관련 없는 경우 '삭제'됩니다.