NTP란?
NTP(Network Time Protocol)는 네트워크로 연결된 컴퓨터들의 시계를 동기화하기 위해 설계된, 현재까지 널리 사용되는 가장 오래된 인터넷 프로토콜 중 하나입니다. 1985년 데이비드 밀스가 처음 설계한 NTP는 공용 인터넷에서 몇 밀리초, 로컬 네트워크에서는 마이크로초 이하의 정확도로 컴퓨터 시계를 맞출 수 있습니다.
핵심 알고리즘
NTP는 클라이언트와 서버 간에 타임스탬프를 교환하여 작동합니다. 클라이언트는 현재 시간(T1)을 담아 요청을 보내고, 서버는 수신 시각(T2)을 기록하고 T2와 전송 시각(T3)을 담아 응답하며, 클라이언트는 수신 시각(T4)을 기록합니다:
왕복 지연 = (T4 - T1) - (T3 - T2)
시계 오프셋 = ((T2 - T1) + (T3 - T4)) / 2
클라이언트는 이 오프셋을 사용해 갑자기 시계를 바꾸지 않고 점진적으로 조정합니다 (급격한 변경은 애플리케이션을 망가뜨릴 수 있음).
Stratum 계층 구조
NTP는 시간 출처를 stratum이라는 계층으로 구성합니다:
- Stratum 0: 원자 시계, GPS 수신기, 라디오 시계 — 최상위 시간 기준
- Stratum 1: Stratum 0 장치에 직접 연결된 서버 (예: time.google.com)
- Stratum 2: Stratum 1에서 동기화하는 서버 — 대부분의 조직이 사용
- Stratum 3~15: 단계가 내려갈수록 정확도 감소
공용 NTP 서버
time.google.com— Google 공개 NTP (윤초 스무딩 지원)time.cloudflare.com— Cloudflare NTP (Roughtime 지원)pool.ntp.org— 글로벌 자원봉사 NTP 풀
NTP 상태 확인
# Linux (systemd-timesyncd)
timedatectl status
timedatectl timesync-status
# Linux (ntpd)
ntpq -p
# Windows
w32tm /query /status
보안 고려사항
표준 NTP에는 인증이 없어 중간자 공격에 취약하며, 악의적으로 시스템 시계를 조작할 수 있습니다. NTPsec와 Roughtime은 암호화 검증을 추가한 현대적 대안입니다. 중요 인프라에서는 항상 인증된 시간 소스를 사용하세요.