# NTP

**Network Time Protocol** (NTP) — сеткавы пратакол для сінхранізацыі ўнутранага гадзінніка камп’ютара з выкарыстоўваннем сетак са змяняльнай латэнтнасцю.
Выкарыстоўваецца з 1985 г., адзін з найстарэйшых пратаколаў. Быў распрацаваны Дэвідам Мілзам (англ.: David L. Mills) з Дэлавэрскага ўніверсітэту. Стваральнік пратаколу дасюль удасканальвае і абслугоўвае яго разам з камандай добраахвотнікаў.

## Апісанне

NTP аддае карыстальніку Ўніверсальны каардынаваны час з папраўкай на высакосную секунду. Інфармацыя пра часавыя паясы і пераход на летні час не перадаецца. Пратакол выкарыстоўвае алгарытм Марзула (англ.: Marzullo's algorithm), які дазваляе паменшыць уздзеянне змяняльнай латэнтнасці сеткі. NTP можа аддаваць час з хібнасцю ў дзесяць мілісекунд праз агульнадаступныя серверы Інтэрнэту, ці з хібнасцю да адной мілісекунды праз лакальныя сеткі ў ідэальных умовах.

Паводле стану на чэрвень 2010, дзейнае апісанне пратаколу NTP чацвёртай версіі (яна з'яўляецца цяперашнім прапанаваным стандартам) задакументаванае ў RFC5905. Існуе трэцяя версія, задакументаваная ў RFC1305.

Пратакол выкарыстоўвае UDP-порт 123.

Найпрасцейшая рэалізацыя гэтага пратаколу - *SNTP* (англ.: Simple Network Time Protocol) выкарыстоўваецца ва ўбудаваных сістэмах і тых праграмах, што не патрабуюць высокай дакладнасці.

NTP ужываецца для арганізацыі сервераў дакладнага часу, перадачы часу на камп'ютары лакальных сетак і г.д.

## Часавыя пласты

Жоўтыя стрэлкі паказваюць апаратнае злучэнне, чырвоныя — сеткавае
NTP выкарыстоўвае іерархічную сістэму крыніц часу. Кожны ўзровень гэтай іерархіі называюць пластом (англ.: stratum) і нумаруюць ад нуля ўверсе. Варта адзначыць, што нумар пласта не з'яўляецца паказчыкам якасці — крыніца трэцяга пласта можа даваць дакладнейшы час за крыніцу другога ўзроўню. Пласты ўжываюцца для размеркавання нагрузкі на сетку.

Нулявы пласт (*stratum 0*) — гэта апаратная крыніца часу: эталонны атамны, квантавы, радыёгадзіннік, GPS-прыёмнік. Звычайна гэтыя прылады не далучаныя да Інтэрнэту, але звязаныя з лакальным камп'ютарам, напр., праз COM-порт і перадаюць PPS-сігналы для сінхранізацыі.

Першы пласт (*stratum 1*) — камп'ютар, які мае непасрэднае злучэнне з апаратным гадзіннікам. Ён з'яўляецца серверам часу, адказваючы на NTP-запыты ад камп'ютараў другога ўзроўню.

Камп'ютары ў *startum 2* атрымліваюць інфармацыю праз NTP ад камп'ютараў пласта 1. Звычайна камп'ютары з пласта 2 звяртаюцца да некалькіх сервераў часу. Выкарыстоўваючы NTP-алгарытм, яны адкідаюць звесткі з відавочна няправільным часам (сервер, які не сінхранізуецца з крыніцай часу, мае статус *stratum 16*). Камп'ютары могуць параўноўваць свае значэнні часу з іншымі ЭВМ свайго пласта, каб атрымаць у выніку стабільныя звесткі. Да таго ж, камп'ютары з другога пласта з'яўляюцца серверамі часу для камп'ютараў з трэцяга пласта.

Трэці пласт (*stratum 3*) працуе гэтак жа, як і камп'ютары *startum 2*, але крыніца часу для іх — не *stratum 1*, а камп'ютары *stratum 2*. ЭВМ з трэцяга пласта могуць з'яўляцца серверамі часу для камп'ютараў з чацвёртага і г.д.

## Прыклад ужывання NTP-сінхранізацыі

Ніжэй прыведзены просты bash-скрыпт для сінхранізацыі часу ў сістэме Linux. Выкарыстоўваецца праграма-дэман ntpd:

```
:
/etc/init.d/ntp stop
ntpdate -q by.pool.ntp.org
ntpdate by.pool.ntp.org
/etc/init.d/ntp start
exit 0
```

Скрыпт спыняе ntp-кліент на камп'ютары, паказвае інфармацыю пра сервер, атрымлівае дакладны час і запускае ntp. Інфармацыя ад дэмана выглядае наступным чынам:

```
Stopping NTP server: ntpd.
server 86.57.151.18, stratum 4, offset -0.012289, delay 0.08080
server 93.84.115.2, stratum 2, offset 0.017060, delay 0.12947
server 31.130.200.2, stratum 3, offset 0.021241, delay 0.13731
server 82.209.245.153, stratum 3, offset -0.002228, delay 0.08522
30 Sep 01:09:52 ntpdate[1021]: adjust time server 93.84.115.2 offset 0.017060 sec
30 Sep 01:09:59 ntpdate[1035]: adjust time server 93.84.115.2 offset 0.017371 sec
Starting NTP server: ntpd.
```

Пасля спынення ntp-кліента, мы бачым інфармацыю пра крыніцы часу (чатыры серверы з рознымі IP і пластамі ад 2 да 4). Дэман ntpd абірае крыніцу *stratum 2* са зрухам у 0,17 с ад часу на камп'ютары карыстальніка і затрымкай каля 0,13 с. У момант паказу інфармацыі ў камандным радку зрух часу складаў 0,01706 с, а ў момант сінхранізацыі — 0,017371 с.

## Бяспека

Толькі некалькі праблем з бяспекаю пратаколу былі зафіксаваныя за яго шматгадовую гісторыю. NTP праглядаўся і аналізаваўся на працягу свайго існавання. Паводле стану на студзень 2011, пратакол не мае праблем з бяспекай. Справаздачы ад Каардынацыйнага Цэнтру CERT пра сур'ёзныя памылкі ў рэалізацыі пратаколу не зафіксаваныя. Актуальная праграмная рэалізацыя пратаколу рэгулярна зведвае аўдыт коду, які паказвае, што крытычныя памылкі, звязаныя з бяспекай, адсутнічаюць.

## Спасылкі

* Інтэрнэт кластар сервераў NTP
* Сервер NTP Test Online Tool