「NTP」の版間の差分
提供: Wikinote
細 |
細 (→処理の流れ) |
||
(同じ利用者による、間の18版が非表示) | |||
行1: | 行1: | ||
+ | Network Time Protocol | ||
+ | |||
やってることは単に時刻を合わせて、時計の進み方を正確にするだけなのに、異様に奥が深い NTP について。 | やってることは単に時刻を合わせて、時計の進み方を正確にするだけなのに、異様に奥が深い NTP について。 | ||
− | + | ちなみに、ntp 付属文書の [http://hagio.org/docs/ 日本語訳] やってます。いつまでかかることやら。 | |
− | + | これ [http://www.amazon.co.jp/Expert-Network-Time-Protocol-Experience/dp/1590594843/hagio.org-22 Expert Network Time Protocol: An Experience in Time with NTP (Expert)] 誰か翻訳して…。 | |
== 参考文献 == | == 参考文献 == | ||
− | * [http://www.ntp.org/ ntp.org] | + | * [http://www.ntp.org/ ntp.org] NTP Project のサイト。 |
+ | * [http://www.eecis.udel.edu/~mills/ntp.html Network Time Synchronization Research Project] NTP Project の David Mills 先生のサイト。 | ||
+ | * [http://tools.ietf.org/html/rfc5905 Network Time Protocol Version 4: Protocol and Algorithms Specification] RFC-5905 | ||
+ | * [http://tools.ietf.org/pdf/rfc1305.pdf Network Time Protocol (Version 3) Specification, Implementation and Analysis] RFC-1305 | ||
+ | * [http://www.rr.iij4u.or.jp/~zubora/ntpcook-20070413-1.pdf NTPメモ] おそらく日本語で書かれた NTP 関連ドキュメントとしては'''最強'''。 | ||
* [http://www.linux.or.jp/JF/JFdocs/TimePrecision-HOWTO/ Managing Accurate Date and Time] Linux での時刻管理に関する JF ドキュメント。 | * [http://www.linux.or.jp/JF/JFdocs/TimePrecision-HOWTO/ Managing Accurate Date and Time] Linux での時刻管理に関する JF ドキュメント。 | ||
* [http://www.linux.or.jp/JF/JFdocs/Clock/ The Clock Mini-HOWTO] ''コンピュータに正確な時間を設定して、時計が狂わないようにする方法。'' | * [http://www.linux.or.jp/JF/JFdocs/Clock/ The Clock Mini-HOWTO] ''コンピュータに正確な時間を設定して、時計が狂わないようにする方法。'' | ||
行10: | 行16: | ||
* [http://wiki.nothing.sh/page/NTP NTP - wiki@nothing] NTP を使うだけの人はここを見るべき。 | * [http://wiki.nothing.sh/page/NTP NTP - wiki@nothing] NTP を使うだけの人はここを見るべき。 | ||
* [http://ja.wikipedia.org/wiki/Network_Time_Protocol Network Time Protocol - Wikipedia] 概要を思い出したいときに見る。 | * [http://ja.wikipedia.org/wiki/Network_Time_Protocol Network Time Protocol - Wikipedia] 概要を思い出したいときに見る。 | ||
+ | * [http://itpro.nikkeibp.co.jp/article/COLUMN/20081015/316880/ NTPの秘密を探る - ITpro] ntpd の動作の説明が正確。 | ||
+ | |||
=== うるう秒関連 === | === うるう秒関連 === | ||
* [http://www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-0019DB89 Linux at IBM |【Technical Notes】Linux システムクロックの『うるう秒』調整] | * [http://www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-0019DB89 Linux at IBM |【Technical Notes】Linux システムクロックの『うるう秒』調整] | ||
+ | |||
+ | == メモ == | ||
+ | * ntpd はサーバでもクライアントでも UDP 123 番ポートを用いる。 | ||
+ | |||
+ | === ntpd の動作について === | ||
+ | ==== 処理の流れ ==== | ||
+ | 主に、ntp_proto.c および ntp_loopfilter.c まわり。 | ||
+ | <toggledisplay> | ||
+ | --- init_proto | ||
+ | --- default_get_precision | ||
+ | --- proto_clr_stats | ||
+ | --- init_loopfilter | ||
+ | --- rstclock | ||
+ | --- loop_config | ||
+ | --- peer_clear | ||
+ | --- loop_config | ||
+ | --- rstclock | ||
+ | --- adj_host_clock | ||
+ | --- transmit | ||
+ | --- clock_filter | ||
+ | --- peer_xmit | ||
+ | --- poll_update | ||
+ | --- receive | ||
+ | --- process_packet | ||
+ | --- poll_update | ||
+ | --- clock_filter | ||
+ | --- clock_select | ||
+ | --- peer_unfit | ||
+ | --- root_distance 7.959930 | ||
+ | --- adj_host_clock | ||
+ | --- adj_host_clock ★ 1 秒間隔 | ||
+ | : | ||
+ | --- adj_host_clock | ||
+ | --- transmit | ||
+ | --- peer_xmit | ||
+ | --- poll_update | ||
+ | --- receive | ||
+ | --- process_packet | ||
+ | --- poll_update | ||
+ | --- clock_filter | ||
+ | --- clock_select | ||
+ | --- peer_unfit | ||
+ | --- root_distance 3.961535 | ||
+ | --- adj_host_clock | ||
+ | : | ||
+ | --- adj_host_clock | ||
+ | --- adj_host_clock | ||
+ | --- transmit | ||
+ | --- peer_xmit | ||
+ | --- poll_update | ||
+ | --- receive | ||
+ | --- process_packet | ||
+ | --- poll_update | ||
+ | --- clock_filter | ||
+ | --- clock_select | ||
+ | --- peer_unfit | ||
+ | --- root_distance 0.965042 | ||
+ | --- root_distance 0.965042 | ||
+ | --- root_distance 0.965042 | ||
+ | --- clock_combine | ||
+ | --- root_distance 0.965042 | ||
+ | --- clock_update ★ここまでいくと同期成功 | ||
+ | --- poll_update | ||
+ | --- local_clock | ||
+ | --- rstclock | ||
+ | --- adj_host_clock | ||
+ | --- adj_host_clock | ||
+ | </toggledisplay> | ||
+ | |||
+ | == ツール等 == | ||
+ | |||
+ | === ntpq コマンド === | ||
+ | NTP の情報を得るのに最もポピュラーなコマンド。 | ||
+ | |||
+ | $ ntpq -pn | ||
+ | remote refid st t when poll reach delay offset jitter | ||
+ | ============================================================================== | ||
+ | -202.224.32.4 210.171.225.76 2 u 975 256 370 5.759 -1.264 0.162 | ||
+ | -133.243.232.68 210.171.226.40 2 u 30 256 377 9.018 -1.209 0.386 | ||
+ | +210.173.160.27 210.173.160.86 2 u 209 256 377 5.452 0.021 0.123 | ||
+ | +210.173.160.57 133.243.236.18 2 u 215 256 377 5.741 0.272 0.111 | ||
+ | *210.173.160.87 210.173.176.4 2 u 38 256 377 5.817 -0.100 0.222 | ||
+ | |||
+ | $ ntpq -c as | ||
+ | |||
+ | ind assID status conf reach auth condition last_event cnt | ||
+ | =========================================================== | ||
+ | 1 59668 9314 yes yes none outlyer reachable 1 | ||
+ | 2 59669 9314 yes yes none outlyer reachable 1 | ||
+ | 3 59670 9414 yes yes none candidat reachable 1 | ||
+ | 4 59671 9414 yes yes none candidat reachable 1 | ||
+ | 5 59672 9614 yes yes none sys.peer reachable 1 | ||
+ | |||
+ | $ ntpq -c rl | ||
+ | assID=0 status=06c4 leap_none, sync_ntp, 12 events, event_peer/strat_chg, | ||
+ | version="ntpd 4.2.2p1@1.1570-o Tue Jun 10 00:07:18 UTC 2008 (1)", | ||
+ | processor="i686", system="Linux/2.6.18-194.el5PAE", leap=00, stratum=3, | ||
+ | precision=-20, rootdelay=6.168, rootdispersion=25.945, peer=59672, | ||
+ | refid=210.173.160.87, | ||
+ | reftime=cff96bee.64899eac Tue, Jul 27 2010 23:30:06.392, poll=8, | ||
+ | clock=cff96dc6.30334e8f Tue, Jul 27 2010 23:37:58.188, state=4, | ||
+ | offset=0.057, frequency=44.983, jitter=0.321, noise=0.254, | ||
+ | stability=0.060, tai=0 | ||
+ | |||
+ | $ ntpq -c "pstatus 59670" | ||
+ | assID=59670 status=9414 reach, conf, sel_candidat, 1 event, event_reach, | ||
+ | srcadr=ntp1.jst.mfeed.ad.jp, srcport=123, dstadr=118.243.85.16, | ||
+ | dstport=123, leap=00, stratum=2, precision=-19, rootdelay=0.427, | ||
+ | rootdispersion=12.009, refid=210.173.160.86, reach=377, unreach=0, | ||
+ | hmode=3, pmode=4, hpoll=10, ppoll=10, flash=00 ok, keyid=0, ttl=0, | ||
+ | offset=0.040, delay=6.133, dispersion=15.059, jitter=0.120, | ||
+ | reftime=cff981d4.b4092641 Wed, Jul 28 2010 1:03:32.703, | ||
+ | org=cff98349.637b8c15 Wed, Jul 28 2010 1:09:45.388, | ||
+ | rec=cff98349.6442e24e Wed, Jul 28 2010 1:09:45.391, | ||
+ | xmt=cff98349.629de6de Wed, Jul 28 2010 1:09:45.385, | ||
+ | filtdelay= 6.40 6.13 6.04 6.70 6.37 8.75 6.04 6.54, | ||
+ | filtoffset= 0.16 0.04 -0.18 0.13 0.03 -1.28 -0.29 -0.09, | ||
+ | filtdisp= 0.00 15.36 23.03 30.69 38.39 46.08 53.79 61.47 | ||
+ | |||
+ | === ntptime コマンド === | ||
+ | カーネルの時計関連の情報を表示・設定することができる。 | ||
+ | |||
+ | $ ntptime | ||
+ | ntp_gettime() returns code 0 (OK) | ||
+ | time cd8dcff1.8d374000 Mon, Apr 13 2009 23:51:29.551, (.551624), | ||
+ | maximum error 20085 us, estimated error 0 us | ||
+ | ntp_adjtime() returns code 0 (OK) | ||
+ | modes 0x0 (), | ||
+ | offset 0.000 us, frequency 77.335 ppm, interval 1 s, | ||
+ | maximum error 20085 us, estimated error 0 us, | ||
+ | status 0x1 (PLL), | ||
+ | time constant 6, precision 1.000 us, tolerance 512 ppm, | ||
+ | それぞれの値の意味は…難しいんだこれが。誰か解説本書いてくれないかなあ。 | ||
+ | |||
+ | <code>ntp_adjtime()</code> から返っている status 値は、/usr/include/linux/timex.h で定義されている以下の値を取る。 | ||
+ | /* | ||
+ | * Status codes (timex.status) | ||
+ | */ | ||
+ | #define STA_PLL 0x0001 /* enable PLL updates (rw) */ | ||
+ | #define STA_PPSFREQ 0x0002 /* enable PPS freq discipline (rw) */ | ||
+ | #define STA_PPSTIME 0x0004 /* enable PPS time discipline (rw) */ | ||
+ | #define STA_FLL 0x0008 /* select frequency-lock mode (rw) */ | ||
+ | |||
+ | #define STA_INS 0x0010 /* insert leap (rw) */ | ||
+ | #define STA_DEL 0x0020 /* delete leap (rw) */ | ||
+ | #define STA_UNSYNC 0x0040 /* clock unsynchronized (rw) */ ★いわゆる 11 分モードのとき、0 になる | ||
+ | #define STA_FREQHOLD 0x0080 /* hold frequency (rw) */ | ||
+ | |||
+ | #define STA_PPSSIGNAL 0x0100 /* PPS signal present (ro) */ | ||
+ | #define STA_PPSJITTER 0x0200 /* PPS signal jitter exceeded (ro) */ | ||
+ | #define STA_PPSWANDER 0x0400 /* PPS signal wander exceeded (ro) */ | ||
+ | #define STA_PPSERROR 0x0800 /* PPS signal calibration error (ro) */ | ||
+ | |||
+ | #define STA_CLOCKERR 0x1000 /* clock hardware fault (ro) */ | ||
+ | |||
+ | #define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ | ||
+ | STA_PPSERROR | STA_CLOCKERR) /* read-only bits */ | ||
+ | |||
+ | === ntpdc コマンド === | ||
+ | |||
+ | ちょっとマイナーだけど様々な情報が得られる。 | ||
+ | |||
+ | $ ntpdc -pn | ||
+ | remote local st poll reach delay offset disp | ||
+ | ======================================================================= | ||
+ | *210.173.160.87 118.243.85.16 2 256 377 0.00552 -0.000084 0.07770 | ||
+ | =202.224.32.4 118.243.85.16 2 256 360 0.00575 -0.001264 0.45509 | ||
+ | =133.243.232.68 118.243.85.16 2 256 377 0.00900 -0.001209 0.08156 | ||
+ | =210.173.160.27 118.243.85.16 2 256 377 0.00545 0.000021 0.12018 | ||
+ | =210.173.160.57 118.243.85.16 2 256 377 0.00574 0.000272 0.09195 | ||
+ | |||
+ | $ ntpdc -l | ||
+ | client ntp3.jst.mfeed.ad.jp | ||
+ | client orion.asahi-net.or.jp | ||
+ | client udon.nict.go.jp | ||
+ | client ntp1.jst.mfeed.ad.jp | ||
+ | client ntp2.jst.mfeed.ad.jp | ||
+ | |||
+ | $ ntpdc -c "showpeer 210.173.160.27" | ||
+ | remote 210.173.160.27, local 118.243.85.16 | ||
+ | hmode client, pmode unspec, stratum 2, precision -19 | ||
+ | leap 00, refid [210.173.160.86], rootdistance 0.03963, rootdispersion 0.00789 | ||
+ | ppoll 10, hpoll 10, keyid 0, version 4, association 59670 | ||
+ | reach 377, unreach 0, flash 0x0000, boffset 0.00400, ttl/mode 0 | ||
+ | timer 0s, flags config, bclient | ||
+ | reference time: cff97e87.bdfef6dd Wed, Jul 28 2010 0:49:27.742 | ||
+ | originate timestamp: cff97f49.6383079f Wed, Jul 28 2010 0:52:41.388 | ||
+ | receive timestamp: cff97f49.64496620 Wed, Jul 28 2010 0:52:41.391 | ||
+ | transmit timestamp: cff97f49.62b5a175 Wed, Jul 28 2010 0:52:41.385 | ||
+ | filter delay: 0.00612 0.00604 0.00668 0.00636 | ||
+ | 0.00874 0.00603 0.00653 0.00629 | ||
+ | filter offset: 0.000040 -0.00017 0.000134 0.000033 | ||
+ | -0.00128 -0.00029 -0.00009 0.000085 | ||
+ | filter order: 1 0 2 3 | ||
+ | 4 5 6 7 | ||
+ | offset -0.000177, delay 0.00604, error bound 0.09654, filter error 0.01637 | ||
+ | |||
+ | $ ntpdc -c "pstats 210.173.160.27" | ||
+ | remote host: ntp1.jst.mfeed.ad.jp | ||
+ | local interface: 118.243.85.16 | ||
+ | time last received: 550s | ||
+ | time until next send: 474s | ||
+ | reachability change: 11597s | ||
+ | packets sent: 73 | ||
+ | packets received: 73 | ||
+ | bad authentication: 0 | ||
+ | bogus origin: 0 | ||
+ | duplicate: 0 | ||
+ | bad dispersion: 0 | ||
+ | bad reference time: 14 | ||
+ | candidate order: 4 | ||
+ | flags: config, bclient, iburst | ||
+ | |||
+ | $ ntpdc -c kerninfo | ||
+ | pll offset: 5.2e-05 s | ||
+ | pll frequency: 44.985 ppm | ||
+ | maximum error: 0.138157 s | ||
+ | estimated error: 0.000237 s | ||
+ | status: 0001 pll | ||
+ | pll time constant: 4 | ||
+ | precision: 1e-06 s | ||
+ | frequency tolerance: 512 ppm | ||
+ | |||
+ | $ ntpdc -c loopinfo | ||
+ | offset: 0.000065 s | ||
+ | frequency: 44.985 ppm | ||
+ | poll adjust: 0 | ||
+ | watchdog timer: 235 s | ||
+ | |||
+ | $ ntpdc -c sysinfo | ||
+ | system peer: ntp3.jst.mfeed.ad.jp | ||
+ | system peer mode: client | ||
+ | leap indicator: 00 | ||
+ | stratum: 3 | ||
+ | precision: -20 | ||
+ | root distance: 0.00620 s | ||
+ | root dispersion: 0.02278 s | ||
+ | reference ID: [210.173.160.87] | ||
+ | reference time: cff96dec.641c9286 Tue, Jul 27 2010 23:38:36.391 | ||
+ | system flags: auth monitor ntp kernel stats | ||
+ | jitter: 0.000275 s | ||
+ | stability: 0.000 ppm | ||
+ | broadcastdelay: 0.003998 s | ||
+ | authdelay: 0.000000 s | ||
+ | |||
+ | $ ntpdc -c sysstats | ||
+ | time since restart: 6980 | ||
+ | time since reset: 6980 | ||
+ | packets received: 1415 | ||
+ | packets processed: 319 | ||
+ | current version: 532 | ||
+ | previous version: 0 | ||
+ | bad version: 0 | ||
+ | access denied: 0 | ||
+ | bad length or format: 0 | ||
+ | bad authentication: 0 | ||
+ | rate exceeded: 0 | ||
+ | |||
+ | $ ntpdc -c memstats | ||
+ | time since reset: 7007 | ||
+ | total peer memory: 15 | ||
+ | free peer memory: 10 | ||
+ | calls to findpeer: 533 | ||
+ | new peer allocations: 0 | ||
+ | peer demobilizations: 0 | ||
+ | hash table counts: 0 0 0 0 0 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | 2 0 0 0 0 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | 0 0 1 0 0 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | 0 0 0 0 1 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | 0 0 1 0 0 0 0 0 | ||
+ | 0 0 0 0 0 0 0 0 | ||
+ | |||
+ | $ ntpdc -c iostats | ||
+ | time since reset: 7116 | ||
+ | receive buffers: 10 | ||
+ | free receive buffers: 9 | ||
+ | used receive buffers: 0 | ||
+ | low water refills: 1 | ||
+ | dropped packets: 0 | ||
+ | ignored packets: 0 | ||
+ | received packets: 1432 | ||
+ | packets sent: 2151 | ||
+ | packets not sent: 0 | ||
+ | interrupts handled: 1414 | ||
+ | received by int: 1414 | ||
+ | |||
+ | $ ntpdc -c timerstats | ||
+ | time since reset: 7133 | ||
+ | alarms handled: 0 | ||
+ | alarm overruns: 0 | ||
+ | calls to transmit: 0 | ||
+ | |||
+ | $ ntpdc -c reslist | ||
+ | address mask count flags | ||
+ | ===================================================================== | ||
+ | 0.0.0.0 0.0.0.0 320 noquery, nomodify, nopeer, notrap, kod | ||
+ | y085016.dynamic 255.255.255.255 0 ntpport, interface, ignore | ||
+ | localhost.local 255.255.255.255 911 none | ||
+ | localhost.local 255.255.255.255 0 ntpport, interface, ignore | ||
+ | 192.168.1.0 255.255.255.0 44 nomodify, notrap | ||
+ | lab.hagio.org 255.255.255.255 0 ntpport, interface, ignore | ||
+ | 192.168.8.0 255.255.255.0 167 nomodify, notrap | ||
+ | 192.168.8.1 255.255.255.255 0 ntpport, interface, ignore | ||
+ | 192.168.10.1 255.255.255.255 0 ntpport, interface, ignore | ||
+ | :: :: 0 none | ||
+ | localhost6.loca ffff:ffff:ffff: 0 ntpport, interface, ignore | ||
+ | fe80::20a:79ff: ffff:ffff:ffff: 0 ntpport, interface, ignore | ||
+ | fe80::21f:d0ff: ffff:ffff:ffff: 0 ntpport, interface, ignore | ||
+ | fe80::250:56ff: ffff:ffff:ffff: 0 ntpport, interface, ignore | ||
+ | fe80::250:56ff: ffff:ffff:ffff: 0 ntpport, interface, ignore | ||
+ | |||
+ | $ ntpdc -c monlist | ||
+ | remote address port local address count m ver code avgint lstint | ||
+ | =============================================================================== | ||
+ | localhost.localdomain 40435 127.0.0.1 923 7 2 0 6 0 | ||
+ | 192.168.8.60 123 192.168.8.1 22 3 4 180 290 32 | ||
+ | 192.168.8.47 123 192.168.8.1 146 3 4 180 96 111 | ||
+ | 192.168.1.10 123 192.168.1.1 44 3 4 180 230 170 | ||
+ | orion.asahi-net.or.jp 123 118.243.85.16 62 4 4 5d0 317 284 | ||
+ | ntp1.jst.mfeed.ad.jp 123 118.243.85.16 65 4 4 5d0 225 293 | ||
+ | ntp2.jst.mfeed.ad.jp 123 118.243.85.16 64 4 4 5d0 227 299 | ||
+ | udon.nict.go.jp 123 118.243.85.16 65 4 4 5d0 225 371 | ||
+ | ntp3.jst.mfeed.ad.jp 123 118.243.85.16 64 4 4 5d0 225 380 | ||
+ | |||
+ | == その他 == | ||
+ | * 最近の携帯電話に搭載されている自動時刻合わせ機能は、基地局からの制御情報に含まれる時刻情報を利用している。したがって、i-mode などを用いた NTP でもなければ、標準電波を利用した、いわゆる電波時計でもない。電波っちゃ電波だけど。 |
2010年10月22日 (金) 00:54時点における最新版
Network Time Protocol
やってることは単に時刻を合わせて、時計の進み方を正確にするだけなのに、異様に奥が深い NTP について。 ちなみに、ntp 付属文書の 日本語訳 やってます。いつまでかかることやら。 これ Expert Network Time Protocol: An Experience in Time with NTP (Expert) 誰か翻訳して…。
目次
参考文献
- ntp.org NTP Project のサイト。
- Network Time Synchronization Research Project NTP Project の David Mills 先生のサイト。
- Network Time Protocol Version 4: Protocol and Algorithms Specification RFC-5905
- Network Time Protocol (Version 3) Specification, Implementation and Analysis RFC-1305
- NTPメモ おそらく日本語で書かれた NTP 関連ドキュメントとしては最強。
- Managing Accurate Date and Time Linux での時刻管理に関する JF ドキュメント。
- The Clock Mini-HOWTO コンピュータに正確な時間を設定して、時計が狂わないようにする方法。
- Stray Penguin - Linux Memo (ntpd) 日本語の情報の中では信頼性が高いと思われるページ。
- NTP - wiki@nothing NTP を使うだけの人はここを見るべき。
- Network Time Protocol - Wikipedia 概要を思い出したいときに見る。
- NTPの秘密を探る - ITpro ntpd の動作の説明が正確。
うるう秒関連
メモ
- ntpd はサーバでもクライアントでも UDP 123 番ポートを用いる。
ntpd の動作について
処理の流れ
主に、ntp_proto.c および ntp_loopfilter.c まわり。 <toggledisplay>
--- init_proto --- default_get_precision --- proto_clr_stats --- init_loopfilter --- rstclock --- loop_config --- peer_clear --- loop_config --- rstclock --- adj_host_clock --- transmit --- clock_filter --- peer_xmit --- poll_update --- receive --- process_packet --- poll_update --- clock_filter --- clock_select --- peer_unfit --- root_distance 7.959930 --- adj_host_clock --- adj_host_clock ★ 1 秒間隔 : --- adj_host_clock --- transmit --- peer_xmit --- poll_update --- receive --- process_packet --- poll_update --- clock_filter --- clock_select --- peer_unfit --- root_distance 3.961535 --- adj_host_clock : --- adj_host_clock --- adj_host_clock --- transmit --- peer_xmit --- poll_update --- receive --- process_packet --- poll_update --- clock_filter --- clock_select --- peer_unfit --- root_distance 0.965042 --- root_distance 0.965042 --- root_distance 0.965042 --- clock_combine --- root_distance 0.965042 --- clock_update ★ここまでいくと同期成功 --- poll_update --- local_clock --- rstclock --- adj_host_clock --- adj_host_clock
</toggledisplay>
ツール等
ntpq コマンド
NTP の情報を得るのに最もポピュラーなコマンド。
$ ntpq -pn remote refid st t when poll reach delay offset jitter ============================================================================== -202.224.32.4 210.171.225.76 2 u 975 256 370 5.759 -1.264 0.162 -133.243.232.68 210.171.226.40 2 u 30 256 377 9.018 -1.209 0.386 +210.173.160.27 210.173.160.86 2 u 209 256 377 5.452 0.021 0.123 +210.173.160.57 133.243.236.18 2 u 215 256 377 5.741 0.272 0.111 *210.173.160.87 210.173.176.4 2 u 38 256 377 5.817 -0.100 0.222
$ ntpq -c as ind assID status conf reach auth condition last_event cnt =========================================================== 1 59668 9314 yes yes none outlyer reachable 1 2 59669 9314 yes yes none outlyer reachable 1 3 59670 9414 yes yes none candidat reachable 1 4 59671 9414 yes yes none candidat reachable 1 5 59672 9614 yes yes none sys.peer reachable 1
$ ntpq -c rl assID=0 status=06c4 leap_none, sync_ntp, 12 events, event_peer/strat_chg, version="ntpd 4.2.2p1@1.1570-o Tue Jun 10 00:07:18 UTC 2008 (1)", processor="i686", system="Linux/2.6.18-194.el5PAE", leap=00, stratum=3, precision=-20, rootdelay=6.168, rootdispersion=25.945, peer=59672, refid=210.173.160.87, reftime=cff96bee.64899eac Tue, Jul 27 2010 23:30:06.392, poll=8, clock=cff96dc6.30334e8f Tue, Jul 27 2010 23:37:58.188, state=4, offset=0.057, frequency=44.983, jitter=0.321, noise=0.254, stability=0.060, tai=0
$ ntpq -c "pstatus 59670" assID=59670 status=9414 reach, conf, sel_candidat, 1 event, event_reach, srcadr=ntp1.jst.mfeed.ad.jp, srcport=123, dstadr=118.243.85.16, dstport=123, leap=00, stratum=2, precision=-19, rootdelay=0.427, rootdispersion=12.009, refid=210.173.160.86, reach=377, unreach=0, hmode=3, pmode=4, hpoll=10, ppoll=10, flash=00 ok, keyid=0, ttl=0, offset=0.040, delay=6.133, dispersion=15.059, jitter=0.120, reftime=cff981d4.b4092641 Wed, Jul 28 2010 1:03:32.703, org=cff98349.637b8c15 Wed, Jul 28 2010 1:09:45.388, rec=cff98349.6442e24e Wed, Jul 28 2010 1:09:45.391, xmt=cff98349.629de6de Wed, Jul 28 2010 1:09:45.385, filtdelay= 6.40 6.13 6.04 6.70 6.37 8.75 6.04 6.54, filtoffset= 0.16 0.04 -0.18 0.13 0.03 -1.28 -0.29 -0.09, filtdisp= 0.00 15.36 23.03 30.69 38.39 46.08 53.79 61.47
ntptime コマンド
カーネルの時計関連の情報を表示・設定することができる。
$ ntptime ntp_gettime() returns code 0 (OK) time cd8dcff1.8d374000 Mon, Apr 13 2009 23:51:29.551, (.551624), maximum error 20085 us, estimated error 0 us ntp_adjtime() returns code 0 (OK) modes 0x0 (), offset 0.000 us, frequency 77.335 ppm, interval 1 s, maximum error 20085 us, estimated error 0 us, status 0x1 (PLL), time constant 6, precision 1.000 us, tolerance 512 ppm,
それぞれの値の意味は…難しいんだこれが。誰か解説本書いてくれないかなあ。
ntp_adjtime()
から返っている status 値は、/usr/include/linux/timex.h で定義されている以下の値を取る。
/* * Status codes (timex.status) */ #define STA_PLL 0x0001 /* enable PLL updates (rw) */ #define STA_PPSFREQ 0x0002 /* enable PPS freq discipline (rw) */ #define STA_PPSTIME 0x0004 /* enable PPS time discipline (rw) */ #define STA_FLL 0x0008 /* select frequency-lock mode (rw) */ #define STA_INS 0x0010 /* insert leap (rw) */ #define STA_DEL 0x0020 /* delete leap (rw) */ #define STA_UNSYNC 0x0040 /* clock unsynchronized (rw) */ ★いわゆる 11 分モードのとき、0 になる #define STA_FREQHOLD 0x0080 /* hold frequency (rw) */ #define STA_PPSSIGNAL 0x0100 /* PPS signal present (ro) */ #define STA_PPSJITTER 0x0200 /* PPS signal jitter exceeded (ro) */ #define STA_PPSWANDER 0x0400 /* PPS signal wander exceeded (ro) */ #define STA_PPSERROR 0x0800 /* PPS signal calibration error (ro) */ #define STA_CLOCKERR 0x1000 /* clock hardware fault (ro) */ #define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ STA_PPSERROR | STA_CLOCKERR) /* read-only bits */
ntpdc コマンド
ちょっとマイナーだけど様々な情報が得られる。
$ ntpdc -pn remote local st poll reach delay offset disp ======================================================================= *210.173.160.87 118.243.85.16 2 256 377 0.00552 -0.000084 0.07770 =202.224.32.4 118.243.85.16 2 256 360 0.00575 -0.001264 0.45509 =133.243.232.68 118.243.85.16 2 256 377 0.00900 -0.001209 0.08156 =210.173.160.27 118.243.85.16 2 256 377 0.00545 0.000021 0.12018 =210.173.160.57 118.243.85.16 2 256 377 0.00574 0.000272 0.09195
$ ntpdc -l client ntp3.jst.mfeed.ad.jp client orion.asahi-net.or.jp client udon.nict.go.jp client ntp1.jst.mfeed.ad.jp client ntp2.jst.mfeed.ad.jp
$ ntpdc -c "showpeer 210.173.160.27" remote 210.173.160.27, local 118.243.85.16 hmode client, pmode unspec, stratum 2, precision -19 leap 00, refid [210.173.160.86], rootdistance 0.03963, rootdispersion 0.00789 ppoll 10, hpoll 10, keyid 0, version 4, association 59670 reach 377, unreach 0, flash 0x0000, boffset 0.00400, ttl/mode 0 timer 0s, flags config, bclient reference time: cff97e87.bdfef6dd Wed, Jul 28 2010 0:49:27.742 originate timestamp: cff97f49.6383079f Wed, Jul 28 2010 0:52:41.388 receive timestamp: cff97f49.64496620 Wed, Jul 28 2010 0:52:41.391 transmit timestamp: cff97f49.62b5a175 Wed, Jul 28 2010 0:52:41.385 filter delay: 0.00612 0.00604 0.00668 0.00636 0.00874 0.00603 0.00653 0.00629 filter offset: 0.000040 -0.00017 0.000134 0.000033 -0.00128 -0.00029 -0.00009 0.000085 filter order: 1 0 2 3 4 5 6 7 offset -0.000177, delay 0.00604, error bound 0.09654, filter error 0.01637
$ ntpdc -c "pstats 210.173.160.27" remote host: ntp1.jst.mfeed.ad.jp local interface: 118.243.85.16 time last received: 550s time until next send: 474s reachability change: 11597s packets sent: 73 packets received: 73 bad authentication: 0 bogus origin: 0 duplicate: 0 bad dispersion: 0 bad reference time: 14 candidate order: 4 flags: config, bclient, iburst
$ ntpdc -c kerninfo pll offset: 5.2e-05 s pll frequency: 44.985 ppm maximum error: 0.138157 s estimated error: 0.000237 s status: 0001 pll pll time constant: 4 precision: 1e-06 s frequency tolerance: 512 ppm
$ ntpdc -c loopinfo offset: 0.000065 s frequency: 44.985 ppm poll adjust: 0 watchdog timer: 235 s
$ ntpdc -c sysinfo system peer: ntp3.jst.mfeed.ad.jp system peer mode: client leap indicator: 00 stratum: 3 precision: -20 root distance: 0.00620 s root dispersion: 0.02278 s reference ID: [210.173.160.87] reference time: cff96dec.641c9286 Tue, Jul 27 2010 23:38:36.391 system flags: auth monitor ntp kernel stats jitter: 0.000275 s stability: 0.000 ppm broadcastdelay: 0.003998 s authdelay: 0.000000 s
$ ntpdc -c sysstats time since restart: 6980 time since reset: 6980 packets received: 1415 packets processed: 319 current version: 532 previous version: 0 bad version: 0 access denied: 0 bad length or format: 0 bad authentication: 0 rate exceeded: 0
$ ntpdc -c memstats time since reset: 7007 total peer memory: 15 free peer memory: 10 calls to findpeer: 533 new peer allocations: 0 peer demobilizations: 0 hash table counts: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
$ ntpdc -c iostats time since reset: 7116 receive buffers: 10 free receive buffers: 9 used receive buffers: 0 low water refills: 1 dropped packets: 0 ignored packets: 0 received packets: 1432 packets sent: 2151 packets not sent: 0 interrupts handled: 1414 received by int: 1414
$ ntpdc -c timerstats time since reset: 7133 alarms handled: 0 alarm overruns: 0 calls to transmit: 0
$ ntpdc -c reslist address mask count flags ===================================================================== 0.0.0.0 0.0.0.0 320 noquery, nomodify, nopeer, notrap, kod y085016.dynamic 255.255.255.255 0 ntpport, interface, ignore localhost.local 255.255.255.255 911 none localhost.local 255.255.255.255 0 ntpport, interface, ignore 192.168.1.0 255.255.255.0 44 nomodify, notrap lab.hagio.org 255.255.255.255 0 ntpport, interface, ignore 192.168.8.0 255.255.255.0 167 nomodify, notrap 192.168.8.1 255.255.255.255 0 ntpport, interface, ignore 192.168.10.1 255.255.255.255 0 ntpport, interface, ignore :: :: 0 none localhost6.loca ffff:ffff:ffff: 0 ntpport, interface, ignore fe80::20a:79ff: ffff:ffff:ffff: 0 ntpport, interface, ignore fe80::21f:d0ff: ffff:ffff:ffff: 0 ntpport, interface, ignore fe80::250:56ff: ffff:ffff:ffff: 0 ntpport, interface, ignore fe80::250:56ff: ffff:ffff:ffff: 0 ntpport, interface, ignore
$ ntpdc -c monlist remote address port local address count m ver code avgint lstint =============================================================================== localhost.localdomain 40435 127.0.0.1 923 7 2 0 6 0 192.168.8.60 123 192.168.8.1 22 3 4 180 290 32 192.168.8.47 123 192.168.8.1 146 3 4 180 96 111 192.168.1.10 123 192.168.1.1 44 3 4 180 230 170 orion.asahi-net.or.jp 123 118.243.85.16 62 4 4 5d0 317 284 ntp1.jst.mfeed.ad.jp 123 118.243.85.16 65 4 4 5d0 225 293 ntp2.jst.mfeed.ad.jp 123 118.243.85.16 64 4 4 5d0 227 299 udon.nict.go.jp 123 118.243.85.16 65 4 4 5d0 225 371 ntp3.jst.mfeed.ad.jp 123 118.243.85.16 64 4 4 5d0 225 380
その他
- 最近の携帯電話に搭載されている自動時刻合わせ機能は、基地局からの制御情報に含まれる時刻情報を利用している。したがって、i-mode などを用いた NTP でもなければ、標準電波を利用した、いわゆる電波時計でもない。電波っちゃ電波だけど。