OpenNTPD

**OpenNTPD**(**OpenBSD NTP 데몬**)은 네트워크 타임 프로토콜을 구현하는 유닉스 데몬으로, 컴퓨터 시스템의 로컬 클럭을 원격 NTP 서버와 동기화한다. 또한 NTP 호환 클라이언트에 NTP 서버 역할을 할 수도 있다.

OpenBSD NTP 데몬은 알렉산더 가이와 헤닝 브라우어가 OpenBSD 프로젝트의 일환으로 처음 개발했으며, 많은 다른 개발자들이 추가로 도움을 주었다. 설계 목표는 안전하고(익스플로잇 불가), 구성하기 쉬우며, 대부분의 목적에 충분히 정확한 것이었다. 오픈SSH와 마찬가지로 이식성 있는 버전은 OpenBSD 버전에 이식성 코드를 추가하여 별도로 릴리스하는 하위 프로젝트로 개발된다. 이식성 버전은 브렌트 쿡이 개발한다. 이 프로젝트 개발자들은 OpenBSD 재단으로부터 일부 자금을 지원받는다.

## 역사
OpenNTPD 개발은 현재 NTP 데몬의 여러 문제점(어려운 구성, 복잡하고 감사하기 어려운 코드, 부적절한 라이선싱)이 복합적으로 작용하여 동기 부여되었다. OpenNTPD는 이러한 문제를 해결하고 시간 동기화를 더 넓은 사용자층이 접근할 수 있도록 설계되었다. 개발 기간을 거쳐 OpenNTPD는 OpenBSD 3.6에 처음 등장했다. 첫 번째 릴리스는 2004년 11월 2일에 발표되었다.

## 목표
OpenNTPD는 OpenBSD 팀이 안전하고, 감사하기 간단하며, 설정 및 관리하기 쉽고, 합리적으로 정확하며, 시스템 자원을 적게 사용하는 NTP 데몬 구현을 만들기 위한 시도이다. 따라서 OpenNTPD의 설계 목표는 보안, 사용 편의성 및 성능이다. OpenNTPD의 보안은 네트워크 입력 경로의 견고한 유효성 검사, strlcpy를 통한 경계 버퍼 작업 사용, 권한 확대를 통해 데몬을 악용할 수 있는 보안 버그의 영향을 완화하기 위한 권한 분리를 통해 달성된다. NTP 사용을 단순화하기 위해 OpenNTPD는 네트워크 타임 프로토콜 프로젝트에서 제공하는 것과 같은 다른 NTP 데몬에서 사용할 수 있는 기능보다 적은 기능을 구현한다. 목표는 특수하거나 틈새 요구 사항에 부적합할 위험을 감수하고도 일반적인 사용을 만족시키기에 충분한 기능을 제공하는 것이다. OpenNTPD는 구성 파일 ntpd.conf를 통해 구성된다. 최소한의 옵션이 제공된다: OpenNTPD가 수신해야 하는 IP 주소 또는 호스트 이름, 사용할 timedelta 센서 장치, 그리고 시간이 동기화될 서버 세트. OpenNTPD의 정확도는 최선 노력 방식이다; 데몬은 가능한 한 정확하려고 시도하지만 특정 정확도는 보장되지 않는다.

## 예시
OpenNTPD는 시스템 클럭을 점진적으로 조정한다. 다음은 리눅스 시스템에서 실행 중인 OpenNTPD의 출력이다.

```
$ grep ntpd /var/log/daemon.log | grep adjusting
Aug  4 03:32:20 nikolai ntpd[4784]: adjusting local clock by -1.162333s
Aug  4 03:36:08 nikolai ntpd[4784]: adjusting local clock by -1.023899s
Aug  4 03:40:02 nikolai ntpd[4784]: adjusting local clock by -0.902637s
Aug  4 03:43:43 nikolai ntpd[4784]: adjusting local clock by -0.789431s
Aug  4 03:47:35 nikolai ntpd[4784]: adjusting local clock by -0.679320s
Aug  4 03:50:45 nikolai ntpd[4784]: adjusting local clock by -0.605858s
Aug  4 03:53:31 nikolai ntpd[4784]: adjusting local clock by -0.529821s
```


## 비판
OpenNTPD는 NTP 프로젝트(ntp.org)에서 생산하는 NTP 데몬보다 정확도가 떨어진다는 비판을 받았다. 내부적으로 OpenNTPD는 밀리초 정확도를 유지하지 않으며 코드 단순성을 위해 정확도를 높이는 다양한 알고리즘을 생략하기 때문에 "실제" 시간과 50-200ms 정도 차이가 날 수 있다. OpenNTPD 프로젝트는 이러한 비판을 인정했지만, 마이크로초 정밀도 부족은 단순성과 보안에 이점을 주는 설계상의 절충이라고 밝혔다. OpenNTPD 설계 목표는 "마지막 나노초나 애매한 예외 상황을 얻기 위해 안전한 설계를 희생하지 않고" "[합리적인 정확도에 도달하는 것]"이 프로젝트의 의도라고 명시하고 있다.

2004년 9월, OpenNTPD 3.6 출시 직후, ntp.org 기여자 브래드 놀스는 OpenNTPD의 NTP 프로토콜 구현의 다양한 측면과 오픈SSH 및 OpenBGPD 개발에서도 사용되는 프로젝트의 분할 개발 모델을 비판하는 "OpenNTPd Considered Harmful"이라는 제목의 기사를 발표했다. 2004년 12월, OpenNTPD의 이식성 브랜치 수석 개발자인 대런 터커는 놀스에게 자세한 답변을 작성했으며, 일부 문제는 유효하다고 인정하고, 다른 여러 문제는 부당하다고 반박했으며, 또 다른 문제들은 오해의 소지가 있다고 간주했다. 놀스가 제기한 더 심각한 문제 중 하나는 OpenNTPD 서버가 스트라툼 1 서버라고 주장했다는 것이다. 하지만 이 문제는 터커의 답변이 나올 무렵 이미 수정되었다. 2005년 3월, 놀스는 터커의 답변을 인정하고 "[남은] 문제를 해결하기 위해 [터커]와 협력하기 위해 할 수 있는 모든 것을 하겠다"고 밝혔다. 또한 OpenBSD 네트워킹 FAQ는 놀스의 초기 비판에 대한 답변으로 확장되었다.

현재 OpenNTPD의 정확도 주장은 2004년 21C3 발표에서 "일반적으로 50 밀리초"였다.

## 윤초
OpenNTPD (및 OpenBSD 커널)는 윤초를 무시한다. OpenNTPD를 다른 ntpd 서버의 상위 스트라툼 소스로 사용하거나 협정 세계시를 참조하는 고해상도 시간 요구 사항과 함께 사용할 때는 주의해야 한다. 윤초는 협정 세계시에는 사용되지만 국제원자시 또는 GPS 시간 신호에는 사용되지 않는다. 50ms 정확도 또한 상위 스트라툼 소스의 일반적인 정확도는 아니다.

미국 해군 천문대와 국제도량형국은 윤초를 구현하지 않는 시스템은 국제원자시 또는 직접 GPS 시간 신호를 참조할 것을 권장한다. 그러나 NTP의 현재 버전()은 비 UTC 시간 척도를 지원하지 않는다.

## 각주

## 외부 링크
* 
* 헤닝 브라우어가 OpenNTPD를 설명하는 문서
* OpenBSD FAQ: OpenNTPD 사용하기

분류:OpenBSD
분류:BSD 소프트웨어