.

NTP(Network Time Protocol)

by 담배맛구마



최근에 NTP 관련 취약점이 발표되었는데 생각보다 NTP에 대해서 잘 모르는 것 같아서 정리한다.




NTP(Network Time Protocl)은 네트워크상에서 시간을 동기화하는 목적으로 디자인 되었다. UDP 123번 포트를 사용하며 현재 NTP Version 4까지 나와있다.


NTP를 통해 시간을 동기화 하기 위해서는 기준시간이 필요한데, 기준시간을 만들어내는 NTP 서버가 별도로 있다. 이 서버는 원자시계 등을 이용해서 매우 정밀한 시간을 만들어낸다고 한다.


아무튼, 이 매우 정밀한 NTP 서버들은 수직적인 구조로 하위 NTP 서버들로 연결(동기화)가 된다. 이 구조를 표현하기 위해서 Stratum이라는 개념이 있는데 0부터 15까지 Hop 같은 개념이다.


Stratum 0 : 매우 정밀한 NTP 서버(최상위)

Stratum 1 : 매우 정밀한 NTP 서버에 연결되어있는 NTP 서버

Stratum 2 : 매우 정밀한 NTP 서버에 연결되어있는 NTP 서버에 연결되어 있는 NTP 서버

...

Stratum 15 : 매우 정밀한 NTP 서버[에 연결되어있는 NTP 서버] x 15


윈도우의 기본 NTP 서버인 time.windows.com은 Stratum 4로 확인이 된다.


Stratum값은 NTP 패킷의 Peer Clock Stratum 항목에 기록이 된다.




NTP 클라이언트와 NTP 서버 간의 시간을 동기화할때에는 Request 패킷과 Replay 패킷 한 쌍이 교환된다.


NTP 패킷구조를 보면 4가지 Timestamp가 있다. 이 Timestamp의 초기값은 1970년부터 시작하는 그 시간 맞다.


1. Reference Timestamp

- 서버 혹은 클라이언트의 마지막으로 시스템이 초기화한 시간을 기록하는 항목이다.

- 초기화한 기록이없으면 그냥 초기값이다.

2. Origin Timestamp

- 클라이언트가 서버로 Request한 시간이다.

- 클라이언트 Request에서는 Transmit Timestamp에 찍혀있고 Origin Timestamp는 초기값이다.

- 서버에서 Reply 보낼때엔 Origin Timestamp에 찍혀있다.

3. Receive Timestamp

- 서버가 클라이언트로 부터 Request 받았을때의 시간이다.

- 클라이언트 Request에서는 초기값이다.

4. Transmit Timestamp

- 서버 혹은 클라이언트로 부터 패킷이 전송될 떄의 시간이다.


이를 토대로 패킷을 주고 받을때 상태를 보면


1. 클라이언트가 Request 패킷 보낼때

Reference Timestamp -> 초기값 혹은 마지막 동기화 시간

Origin Timestamp -> 초기값

Receive Timestamp -> 초기값

Transmit Timestamp -> 보내는 시간


2. 서버가 Reply 패킷을 보낼때

Reference Timestamp -> 초기값 혹은 마지막 동기화 시간

Origin Timestamp -> 클라이언트의 Request에 있는 Transmit Timestamp 값

Receive Timestamp -> 클라이언트의 Request를 받은 시간

Transmit Timestamp -> 서버의 Reply을 보내는 시간


이러하다.




서버로 부터 Reply를 받은 클라이언트는 Timestamp를 통해 시간을 동기화한다.





https://en.wikipedia.org/wiki/Network_Time_Protocol









반응형

'Note' 카테고리의 다른 글

TCPDUMP로 웹 서비스 패킷을 이쁘게 찍어보자  (0) 2021.09.05
Bootable DOS by CD For Firmware Update  (2) 2018.07.29
Chrom Offline Installer for Win32  (0) 2017.09.11
파일 시스템 정리  (0) 2017.08.16
Project Euler  (0) 2015.09.12

블로그의 정보

정윤상이다.

담배맛구마

활동하기