⏱️
NTP(네트워크 시간 프로토콜)란
인터넷에 연결된 여러 기기의 시계를 하나의 기준 시간에 맞춰 동기화하는 프로토콜로, UDP 123번 포트를 사용합니다.
NTP(Network Time Protocol)는 컴퓨터, 서버, 네트워크 장비 등이 저마다 조금씩 어긋나는 내부 시계를 인터넷상의 정확한 시간 서버와 주기적으로 맞춰볼 수 있도록 해주는 표준 프로토콜입니다. 사람이 손목시계를 라디오 시보에 맞추듯, 기기들이 자동으로 시간 서버에 물어보고 그 답을 바탕으로 스스로 시계를 보정합니다.
❗
시간 동기화가 중요한 이유
HTTPS 인증서 검증, 2단계 인증(OTP), 로그 기록 순서 비교 등 시스템 곳곳이 정확한 시간에 의존하고 있어, 시계가 어긋나면 눈에 띄지 않는 오류로 이어질 수 있습니다.
HTTPS 접속 시 브라우저는 인증서의 유효 기간을 내 기기 시계와 비교해 판단하기 때문에, 시계가 크게 어긋나면 정상적인 사이트인데도 인증서 오류가 뜰 수 있습니다. 마찬가지로 일회용 비밀번호(OTP) 인증 앱은 현재 시각을 기준으로 코드를 생성하므로 서버와 기기의 시간 차이가 크면 인증에 계속 실패하게 됩니다. 여러 서버의 로그를 시간 순서대로 비교해 문제를 추적하는 작업 역시 각 서버의 시계가 맞춰져 있어야 의미가 있습니다.
🪜
스트라텀(Stratum) 계층 구조
원자시계나 GPS 수신기 같은 최상위 기준 시각원을 스트라텀 0으로 두고, 여기에 직접 연결된 서버가 스트라텀 1, 그 서버를 참조하는 다음 서버가 스트라텀 2로 이어지는 계층 구조입니다.
스트라텀 0 장비는 그 자체로는 네트워크에 연결되지 않는 원자시계나 GPS 수신 모듈 같은 기준 시각원을 뜻하며, 이 장비에 직접 연결된 시간 서버가 스트라텀 1이 되어 다른 서버들에게 시간을 제공합니다. 이후 스트라텀 1 서버를 참조하는 서버는 스트라텀 2, 그 서버를 참조하는 서버는 스트라텀 3과 같이 계층을 내려가며, 계층이 낮을수록(숫자가 작을수록) 기준 시각원에 더 가깝다고 볼 수 있습니다.
📶
NTP가 오차를 보정하는 방식
클라이언트가 여러 시간 서버에 시각을 물어본 뒤 왕복 지연 시간과 오차를 계산해 이상치를 걸러내고, 시계를 갑자기 튀지 않게 서서히 조정하는 방식으로 정확도를 높입니다.
NTP 클라이언트는 요청을 보낸 시각과 응답을 받은 시각을 비교해 네트워크를 오가는 데 걸린 지연 시간을 추정하고, 이를 감안해 서버가 알려준 시각과 내 시계 사이의 오차(오프셋)를 계산합니다. 여러 서버에서 받은 값 중 유난히 튀는 값은 걸러내고, 시계를 맞출 때도 갑자기 시간을 앞뒤로 점프시키기보다는 조금씩 속도를 조절해 서서히 맞춰가는 방식을 씁니다. 이렇게 하면 일반적으로 수 밀리초에서 수십 밀리초 수준의 비교적 정밀한 동기화를 유지할 수 있다고 알려져 있습니다.
📱
일상 기기에서 만나는 NTP
컴퓨터와 스마트폰의 "자동으로 날짜와 시간 설정" 옵션이 바로 NTP를 이용해 시계를 맞추는 기능으로, 이 옵션을 꺼두면 시간이 서서히 어긋날 수 있습니다.
윈도우, macOS, 안드로이드, iOS 모두 기본적으로 인터넷을 통해 시간을 자동으로 맞추는 기능을 내장하고 있으며, 이 기능이 바로 NTP를 활용합니다. 만약 이 설정을 꺼두거나 방화벽이 NTP 통신(UDP 123번 포트)을 막고 있다면 기기 내부 시계가 조금씩 어긋나기 시작해, 나중에는 로그인 실패나 인증서 오류 같은 예상치 못한 문제로 이어질 수 있습니다.
⚠️
NTP와 관련된 보안 위험
설정이 허술한 공개 NTP 서버는 공격자가 소량의 요청으로 훨씬 큰 응답을 유도하는 증폭 공격(NTP 증폭 DDoS)에 악용될 수 있어, 접근 범위를 제한하고 최신 소프트웨어를 유지하는 관리가 필요합니다.
NTP 증폭 공격은 공격자가 피해자의 IP로 위조된 요청을 여러 공개 NTP 서버에 보내면, 각 서버가 원래 요청보다 훨씬 큰 응답 데이터를 피해자에게 쏟아붓게 만드는 방식의 디도스 공격입니다. 이 때문에 조직에서 NTP 서버를 직접 운영한다면 불특정 다수의 요청에 응답하지 않도록 접근을 제한하고, 알려진 취약점이 패치된 최신 버전의 NTP 소프트웨어를 유지하는 것이 권장됩니다.