AVR 마이컴과 전파 시계를 사용한 SNTP 서버 제작

게재월 | 2009 - 11 조회1889 추천0

목록으로 글자확대하기 글자축소하기

내장 기기의 시각 동기에도 사용할 수 있다


네트워크를 통한 시각 공급의 필요성


네트워크를 통해 각 기기의 시각을 동기시키는 것에 대하여 그 중요성이 높아지고 있다. 예를 들면 다음과 같은 사례이다.

① 전자상거래에 있어서 주문 시각 확정

② 녹화 예약 등 시각이 중요도를 갖는 기기의 운용

③ 시스템 로그의 정밀도 향상

④ 서버와 각 PC 사이의 파일 타임 스탬프 동기

이들은 네트워크 내에서 시각이 제각각일 경우 트러블의 원인이 될 수도 있다. 여기서는 마이컴을 사용한 간단한 SNTP 서버(사진 1)를 소개한다.


▲ 사진 1. AVR 마이컴을 사용한 간이 SNTP 서버 기판의 외관


마이컴으로 SNTP 서버를 만들 때의 이점


그림 1에 NTP(SNTP) 서버를 사용한 시각 보정, 시각 동기의 구성을 나타낸다.


▲ 그림 1. NTP(SNTP) 서버를 사용한 시각 보정, 시각 동기의 구성


복수의 PC를 이더넷으로 연결하여 사용하는 환경에서는 일반적으로 PC 등에서 NTP 서버를 구성하고 그 서버에 대해 각 기기가 시각을 조회한다. 이 구성이라면 PC가 2대 있는 것과 같으므로 장소도 전력도 2대만큼 사용해 버린다.

마이컴과 LAN 컨트롤러라는 심플한 구성으로 함으로써 소비 전력을 억제할 수 있고 PoE(Power over Ethernet)에 의한 전원 공급도 가능해진다.


SNTP와 시각에 관한 기초 지식


1. SNTP란

SNTP(Simple Network Time Protocol)는 네트워크를 사용하여 시각을 동기시키기 위해 사용하는 프로토콜이다(그림 2).

RFC2030(SNTPv4)에 규정되어 있다. 대규모 서버용인 NTP(Network Time Protocol)와 같이, 통계적인 오차 처리 기능 등은 부여하지 않고 서버에 대한 시각 정보 요구와 그에 대한 응답만 실행하는 통신이므로 마이컴을 사용하여 비교적 용이하게 기능을 실현할 수 있다. 단, 상기의 오차 처리가 프로토콜에 없기 때문에 통신 트래픽이 많으면 시각의 동기 정밀도가 떨어질 가능성이 있다. 또 메시지 상에서 NTP, SNTP의 차이는 거의 없으며 기준 ID부만 다르다. 따라서 NTP 서버에는 SNTP 클라이언트가 액세스할 수도 있다.


▲ 그림 2. NTP(SNTP)와 TCP/IC 프로토콜의 관계


2. 멀리 있는 상위 서버보다 가까운 하위 서버 사용

그림 3에 NTP(SNTP) 서버의 계층 구조를 나타낸다. NTP(SNTP) 서버는 계급이 높을수록 시각원에 가까워진다. 언뜻 보기에 상위 계급에 액세스하는 쪽이 정확할 것 같지만, 시각정밀도는 서버와의 네트워크적인 거리에 큰 영향을 받는다.


▲ 그림 3. NTP(SNTP)와 서버의 계층 구조


서버와 클라이언트의 시각차는 가는 길과 오는 길의 전파 시간이 같다는 것을 전제로 하여 계산되므로 멀리 있을수록 양쪽의 시간이 달라질 확률이 높다. 따라서 정확하게 시각을 맞추려면 왕복 시간의 지연이 가급적 안정적인, 가까운 곳의 NTP(SNTP) 서버에 액세스 할 필요가 있다. 복수의 서버를 이용하여 정밀도와 정확도를 높이는 것도 중요한 사항이다.


3. SNTP 프로토콜의 상세 내용

그림 4는 SNTP 패킷, 표 1은 SNTP 서버의 응답이다.


▲ 그림 4. SNTP의 패킷


▲ 표 1. SNTP 서버의 응답


(1) SNTP 패킷

SNTP는 UDP(User Datagram Protocol) 및 IP(Internet Protocol)를 사용한다. 포트는 NTP와 같은 123을 사용한다.

(2) LI(Leap Indicator) 비트

2비트로 표현한다. 윤초의 조정이나 얼람 형태를 나타낸다. 00이 정상, 01이 1초 삽입, 10이 1초 삭제, 11이 경고를 나타낸다.

(3) VN(Version Number) 비트

3비트로 표현한다. NTP 및 SNTP 버전 번호를 나타낸다. 서버에서는 통상적으로 클라이언트와 같은 번호가 사용된다.

(4) MODE 비트

3비트로 표현한다. 동작모드를 나타낸다. 클라이언트에서는 3, 서버에서는 4로 된다.

(5) 계층

8비트로 표현한다. 서버의 계층 레벨을 나타낸다. Stratum 1에서 1, 이하 15까지의 범위를 갖는다.

(6) 폴링 간격

8비트로 표현한다. 연속된 메시지의 최대 간격을 나타낸다. 초 단위이며 2의 거듭제곱으로 나타낸다. 통상적으로는 6(26=64초)에서 10(210=1,024초)의 값을 갖는다.

(7) 정밀도

8비트로 표현한다. 서버의 정밀도를 나타낸다. 초 단위이며 소수점 이하의 의미가 있는 최소 비트 수에 마이너스를 붙인 값을 설정한다. 예를 들면, 소수점 이하 10비트째까지 의미가 있을 때에는 2-10=0.0009765625초의 정밀도가 된다.

(8) 루트 지연

32비트 부호 부착 고정소수점으로, Stratum 1까지의 왕복 지연 합계를 나타낸다. 상위 16비트가 초이며, 하위 16비트가 소수점 이하이다.

(9) 루트 확산

32비트의 부호가 없는 고정소수점으로, Stratum 1까지의 명목적인 상대 오차 합계를 나타낸다. 상위 16비트가 초이고, 하위 16비트가 소수점 이하이다.

(10) 참조식별자

고유의참조원을확인하는비트열이다. Stratum 1에서는참조원을 나타내는 4문자의 ASCII 문자가 들어 있다. NTPv3의

Stratum 2에는 참조원의 32비트 IPv4 어드레스가 들어 있다. NTPv4의 Stratum 2에는 참조원의 최신 송신 타임 스탬프의 하위 32비트가 들어 있다.


4. 시각을 나타내는 타임 스탬프의 사양

SNTP나 NTP에서 시각을 나타내는 타임 스탬프는 UTC(세계 협정시)가 사용된다. 1900년 1월 1일 0시 0분부터의 경과 초 수로서 64비트 길이의 고정소수점으로 나타낸다.

초를 표현하는 부분은 32비트밖에 없으므로 232-1초 경과한 2036년 2월 6일 06 : 28 : 15(UTC) 이후는 표현할 수 없다.

클라이언트는 최상위 비트가 0인 경우 2036년부터의 경과 초라고 해석하도록 RFC2030에 사양화되어 있다. 따라서 타임 스탬프는 다음과 같은 범위이다.

(1) 0x80000000∼0xffffffff

1968년∼2036년 2월 6일 06 : 28 : 15

(2) 0x00000000∼0x7fffffff

2036년 2월 6일 06 : 28 : 16∼2104년

한편, mktime( ) 등의 시간함수에 의해 얻어지는 값은 1970년 1월 1일부터의 경과 초 수이므로, 이 초 수를 NTP의 타임 스탬프로 하려면 70년만큼 초 수(2208988800)를 플러스해야 한다.


5. 고정소수점 형식에 대해

타임 스탬프에서는 그림 5와 같이 상위 32비트가 정수부, 하위 32비트가 소수부의 고정소수점으로 취급된다. 밀리초를 고정 소수점 형식으로 변환하려면 다음과 같은 식을 사용한다.


▲ 그림 5. 타임 스탬프는 64비트 고정 소수점 형식


N(32비트)=밀리초×4294967296÷1000

당연하겠지만, 64비트 길이로 계산하지 않을 경우 자릿수가 넘친다.


6. UTC에서 JST로의 변환

UTC는 세계의 표준시이므로 일본표준시(JST)와는 9시간 엇갈린다. 취득한 UTC를 JST로 바꾸려면 9시간 플러스해야 한다. 날짜도 영향을 받으므로 날짜가 바뀌었는가도 체크해야 한다. 또 윤년도 고려해야 한다.


7. LAN 내에 있어서 SNTP 서버의 계급

LAN 내에서 상위에 NTP 서버 등이 없을 경우에는 전파 시계와 GPS 등이 시각의 참조원으로 된다. 이들을 참조할 경우, SNTP의 계급이 1(Stratum 1)로 된다.


전파 시계와의 시각 맞춤 및 제작


1. SNTP 서버의 시각 참조처는 전파 시계를 사용한다

SNTP 서버는 시각의 참조원이 되므로 현재 시각을 정확히 알아야 한다. 이번에는 간단히 구할 수 있는 전파 시계를 사용했다. 여기서는 RS-232-C로 문의할 수 있는 트라이스테이트사의 전파 시계 키트 TS-JJY02(사진 2. 이하, 전파 시계)를 사용, 출력되는 시각 펄스를 트리거로 하고 현재 시각을 문의한다.


▲ 사진 2. 트라이스테이트사의 전파 시계 키트 기판의 외관


2. 제작한 SNTP 서버의 정밀도

회로도를 그림 6에 나타낸다. 이번에 제작한 SNTP 서버의 정밀도는 주로 시각을 참조하는 기기에 있어서 실용상 문제없는 정도로 한다. 하위에 NTP 서버 등이 있을 경우에는 높은 시각 정밀도가 필요하지만, 일반적인 SNTP 서버를 사용하는 목적은 PC 등의 시각 보정을 위해서이다. 파일의 타임 스탬프와 RTC는 초 단위이므로 수ms∼수십ms 정도의 편차라면 영향도 거의 없어 충분히 실용적이라 판단했다. 내부의 계시 정밀도는 12.8MHz÷64÷200=1,000Hz(1ms)로 했다.


▲ 그림 6. AVR 마이컴을 사용한 간이 SNTP 서버의 회로도


3. 계시용 클록원에는 고정밀도인 것이 필요하다

SNTP 서버는, 시각의 참조원에는 주기적으로 동기를 취하는 정도이므로 그 외에는 스스로 계시를 계속하고 있다.

계시에는 시계용 32,768Hz 수정진동자를 이용하는 것이 일반적인데, 입력용 핀이 2개 필요하다. 이번과 같이 메인 클록 단자와 핀이 겸용이며 외부 클록원을 사용할 경우에는 메인 클록으로 계시하게 된다.

일반적인 온도 특성 50ppm인 수정진동자를 사용했을 경우, 분주하기 쉬운 19.6608MHz를 사용하면 주파수 변동은, 

19.6608MHz×(50×10-6)=983.04Hz 

로 된다.

마이컴 내의 프리스케일러 설정에 따라서도 다르지만, 1시간에 180ms 편차가 발생해 버린다. 이것으로는 시간 참조원의 정밀도로서 부족하며 하루에 참조원이 1초 가까이 엇갈린다면 시각이 보정되지 않는다. 그래서 온도 특성 ±3ppm이라는 고정밀도의 수정 모듈 KTXO-18S(쿄세라)를 클록원으로 사용하여 정밀도를 확보했다.


4. 시간관리 모듈에 대해

경과 초 수 ⇔ UTC 시각 구조체를 변환하는 시간관리 루틴은 아카마츠 타케시(赤松武史) 씨가 AVR용으로 라이브러리로서 공개하고 있는 간이판 time 모듈을 사용했다.


5. PC 등의 시각을 맞춘다

시각 맞춤은 일반적인 NTP 클라이언트를 사용할 수 있다. 프리 소프트웨어 등으로 공개되어 있는 NTP 클라이언트 소프트웨어 등으로, 문의처에 SNTP 서버의 IP 어드레스를 지정하는 것 뿐이다.

LAN 대응 기기 등도 마찬가지로 문의 NTP 서버란에 IP 어드레스를 설정한다.


6. 키 조작

SET 버튼으로 직접 일시를 편집할 수 있도록 했다. 또 상하버튼으로 각 화면의 표시를 전환할 수 있다.

① JST 일시 표시

② UTC 일시 표시

③ IP 어드레스와 네트마스크

④ 디폴트 게이트웨이와 MAC 어드레스

⑤ 펌웨어와 ENC28J60의 리비전


운용 후의 고찰


사내 LAN에서는 파일 서버와 PC의 시각 동기에 사용하고 있다. 지금까지 서버와 PC에서 파일의 타임 스탬프가 다른 것이 싫었지만, SNTP 서버 덕분에 동기할 수 있게 됐다.

또 Windows는 소프트웨어를 동작시키면 시각이 엇갈려 버리지만, 1시간에 1도 정도로 보정함으로써 대부분 편차가 신경 쓰이지 않게 됐다. 닫힌 네트워크 내에서의 타임 서버로서 충분히 실용에 견딜 수 있다고 생각된다.



外丸順一


本 記事는 日本CQ出版社가 發行하는「トランジスタ技術」誌(2009年1月號)와의 著作權協定에 依據하여 提供받은 資料입니다.

목록으로

게재월 | 2009 - 11 조회 1889 추천 0

기사 미리보기