Network Time Protocol
네트워크 타임 프로토콜(Network Time Protocol, NTP)은 패킷 교환, 가변 레이턴시 데이터 네트워크를 통해 컴퓨터 시스템 간 시간 동기화를 위한 네트워크 프로토콜이다.
1985년 이전부터 작동해 온 NTP는 현재까지 쓰여온 가장 오래된 인터넷 프로토콜 가운데 하나이다. NTP는 델라웨어 대학교의 데이비드 L. 밀스가 설계하였다.
Categories
Projects
- docker-ntp
- Chrony NTP Server running in a Docker container (without the priviledged flag)
- https://github.com/cturra/docker-ntp
NTPQ 사용방법
ntp에 쿼리를 보내는 방법은 아래와 같다.
## 각 피어의 상태의 요약과 함께, 서버의 현재 피어목록을 획득한다.
$ ntpq -c peers
## Obtains and prints a list of association identifiers and peer statuses for in-spec peers of the server being queried.
$ ntpq -c assoc
Korea NTP Server
대한민국에서 운영되고 있는 NTP 서버는 아래와 같다.
- kr.pool.ntp.org
- time.bora.net
- time.nuri.net
Facebook NTP Server
페이스북이 time.facebook.com 주소로 새로운 NTP 시간 서비스를 공개했습니다. 다른 공개 시간 서비스보다 정확도가 높으며, IP 주소로 사용자를 식별하지 않는다고 합니다. 또한 페이스북은 이 서비스와 관련한 글을 자사 엔지니어링 블로그에 올렸습니다. (영어)
페이스북과 같은 대형 IT기업이 시간 서비스에 관심을 가지는 것은 바로 분산 시스템 운영 때문입니다. 분산 데이터베이스의 트랜잭션을 처리하거나 올바른 로깅을 보장하기 위해서는 여러 서버들이 높은 정밀도로 시계를 동기화하고 있어야 하지요.
페이스북은 Stratum 1(인공위성의 원자시계로부터 직접 시간정보를 수신받는 기기)인 전문 테스트 장비를 구입하여 기존에 흔히 시간 서버로 사용하던 ntpd와 상대적으로 새로운 NTP 데몬인 chrony( https://chrony.tuxfamily.org/ )를 비교하는 벤치마크를 실시했습니다. ntpd는 최초 시작 후 일시적으로 -10 ms의 오차를 낸 뒤 점차 ±1 ms의 오차로 수렴하였으나, chrony는 대부분의 오차가 계속 ±0.2 ms 이내에 있어서 ntpd보다 훨씬 정확한 모습을 보였습니다.
chrony에는 다른 장점도 있습니다. 바로 하드웨어 타임스탬프를 지원한다는 것이죠. 시간 동기화 프로토콜인 NTP는 서버와 클라이언트 사이에서 패킷이 오갈 때마다 타임스탬프를 찍어 오갈 때 걸린 시간차를 계산하는 방법으로 최대한 정확한 현재 시각을 도출하려 합니다. 그런데 실시간 운영체제가 아닌 경우에는 어떤 처리에 걸리는 지연시간이 일정 수준 이하라는 것을 보장할 수 없지요. 이는 NTP에서도 마찬가지로, 네트워크로 시간을 동기화할 때 오차가 커지는 원인 중 하나가 됩니다.
그런데 일부 NIC(랜카드)에서는 하드웨어 타임스탬프 기능을 지원합니다. 이 기능은 NIC에서 별도의 하드웨어를 통해 자체 클럭을 유지하며 타임스탬프 처리를 하는 것인데, 처리 지연시간이 불과 몇 나노초 수준에 불과하지요. 만약 로컬 네트워크 환경이고 NTP 서버와 클라이언트가 모두 하드웨어 타임스탬프를 지원하는 이상적인 상황이라면 1마이크로초 미만의 오차로 시간 동기화를 할 수도 있다고 합니다. 실제 시간 서비스는 로컬 네트워크 환경이 아니고 클라이언트 쪽 NIC가 하드웨어 타임스탬프를 지원하지 않는 경우도 있으니 그 정도까지 바랄 수는 없겠지만, 어쨌든 chrony와 하드웨어 타임스탬프 기능을 조합하여 벤치마크한 결과 대부분의 시간 동기화 오차가 ±0.1 ms 안에 들어왔다고 합니다.
그래서 페이스북은 chrony에 하드웨어 타임스탬프를 활성화한 설정으로 공개 시간 서비스를 한다고 합니다. 구글이나 애플 등 다른 공개 시간 서버는 제공하는 시간의 오차가 ±2 ms를 넘기기도 하는데, 페이스북의 서비스는 ±1 ms 안쪽인 경우가 대부분이라는군요. 참고로 이 서비스는 서로 다른 5곳의 지역에 엔드포인트를 두고 운영됩니다. 자세한 것은 글 원문을 참고하세요.
Examples
See also
Favorite site
- Wikipedia (en) NTP에 대한 설명
- SNTP (RFC-1361) 프로토콜
- public ntp time server for everyone 1
- NIST Internet Time Servers
- NTP설정
- NTP 시간 동기화
- pool.ntp.org를 사용하려면 어떻게?
- [추천] NTP설정하기
- [추천] Setting Up “NTP (Network Time Protocol) Server” in RHEL/CentOS 7
- Linux Home Server HOWTO: Chapter 9 - Network Time Protocol
References
-
수백만 클라이언트들에게 안정적이고 사용하기 쉬운 커다란 가상의 시간 서버 클러스터를 제공하는 프로젝트 ↩