Network Time Protocol

Сүлжээ болон рөүтерүүдийн үйл ажиллагаанд цаг хугацаа чухал байр суурь эзэлдэг.  Энэ нь сүлжээ дэх бүх төхөөрөмжүүдийн хооронд харилцан хамаарлын хүрээг хангадаг. Үүнийг хийхэд цагийг синхрончлох нь хамгийн чухал. Синхрончлогдоогүй цаг нь төхөөрөмж хоорондын нарийвчлалтай харьцуулалтыг илэрхийлэх боломжгүй юм. Сүлжээний түвшинд бүх компьютерүүд синхрончлогдсоноор түүн дээр хийгдэх бүх үйл ажиллагаанууд зохион байгуулалттай болж хохиролгүй үлдэх юм.

**Network Time Protocol** (**NTP**) нь төхөөрөмжийн цагийг синхрончлоход хэрэглэгддэг сүлжээний протокол юм. NTP-г анх Делавэрийн их сургуулийн профессор Дэвид Л. Миллс санаачлан хөгжүүлсэн бөгөөд 1985 он гэхэд хэрэглээнд нэвтэрсэн тус протокол нь одоо хэрэглэгдэж буй хамгийн анхны интернэт протоколуудын нэг юм. NTP нь оролцож буй бүх компьютеруудыг UTC (Coordinated Universal Time) миллисекундээр синхрончлодог. Энэ нь Марзуллогын алгоритмын хувилбарыг нарийвчлалтай цаг гаргах мөн сүлжээний хэд хэдэн алдааны нөлөөллийг багасгахад ашигладаг. Маш тааламжтай нөхцөлд LAN-г нэг миллисекундээс илүүгүй яг нарийвчлан тогтоодог. Тэгш хэмгүй замчлал болон сүлжээний хэт ачааллаас болж сүлжээнд 100 миллисекундийн зөрүү гарах шалтгаан болдог. Энэ протокол нь өөр өөр цагийн түвшинд байгаа хэрэглэгчдийн харилцан хамаарлыг бий болгодог. 123 портын дугаар дээр UPD (User Datagram Protocol)-г ашиглан гүйцэтгэлүүд нь timestamp-г хүлээн авч илгээдэг. Энэ протокол нь Broadcast болон Multicast-г ашигладаг. Гэхдээ NTP нь цагийн бүс эсвэл зуны цагт шилжих хувиарын тухай мэдээлэл дамжуулдаггүй. Одоогийн NTPv4 нь  дээр стандарт нь баталгаажсан. Харин өмнөх үеийн NTPv3 нь  дээр гарсан.

## Протоколын түүх
1979 онд сүлжээний цагийн синхрончлолын технологийг Нью-Йорк хотын үндэсний компьютерийн холбоо Транс-Атлантик хиймэл дагуулын сүлжээнд ашиглаж байсан баримт байдаг. NTP нь хамгийн анх 1980-аад оны үед зөвхөн хэдэн зуун миллисекундын нарийвчлалтайгаар хэрэгжүүлж эхэлсэн. Хамгийн анхны хэрэгжилт нь  Interner Engineering Note [IEN-173]-д баримтжуулагдсан байдаг. Дараа нь [] аар эхний үзүүлэлт нь гарч ирсэн. Гэхдээ одоо ч үүнийг Internet clock service гэж нэрлэдэг. Тэр үед цаг синхрончлол нь HELLO routing protocol-д хэрэгтэй байсан.  NTP-г хамгийн анх [] нэвтрүүлсэн. Голдуу сүлжээгээр дамжиж буй пакетуудыг зарим үндсэн тооцоон дээр тулгуурлан тодорхойлдог.  NTP-н эртний хувилбарууд нь ямар ч давтамжийн алдааг засдаггүй байсан. NTP хувилбар 1 протокол болон дагалдан яваа алгоритмын анхны бүрэн тодорхойлолтыг 1988 онд []-с гаргасан. Энэ хувилбар нь аль хэдийн client-server горим шиг симетрик ажиллагааны горимтой байсан. Хамгийн анхны NTP-г Internet Engiinering Note баталгаажуулсан. ( IEN173 ) 

NTP эхний хувилбар нь 1988 онд  RFC1059 гаргасан. Энэ нь удаан хэрэглэгдээгүй. 

NTP 2дахь хувилбар нь 1989 онд  RFC 1119 гаргасан. 

NTP 3дахь хувилбар нь 1992 онд  RFC 1305 гаргасан. 

Харин 1994 онд RFC 1589 гаргасан. Энэ хамгийн нарийн цаг бүртгэлийн kernel загвар. 1994 оноос шинэ NTP хувилбар дээр ажиллаж байна. Шинэ хувилбар эхний хэсэг нь RFC 2030 юм. 1999 онд гадаад импульс тохируулга мөн үйлдлийн системийг тохируулахад RFC 2783 ашиглаж эхэлсэн. 4 дэх хувилбар нь нээлтээ хийгээгүй байгаа. Нээлтээ хийгээгүй ч гэсэн өргөн ашиглагдаж байгаа. 

## Гол стандартууд
NTP-н 4 гол стандартууд байдаг. Эдгээр нь хамгийн чухал стандартууд юм.

1.RFC5905 NTP 4 хувилбар  Протокол ба алгоритмын тодорхойлолтууд

2.RFC5906 NTP 4 хувилбар Autokey тодорхойлолтууд

3.RFC5907 NTPv4 дахь зохион байгуулагдсан объектын тайлбар

4.RFC5908 NTPv4 DHCPv6 дахь NTP- н серверийн нэмэлт сонголтууд

## Протоколын цагийн шатлал
Цаг хугацаа өнгөрөхөд компьютерийн цаг зөрөх хандлагатай байдаг. Network Time Protocol буюу Сүлжээний Цагийн Протоколыг(NTP) цагийг зөв байлгах, зөв ажиллуулахад хэрэглэдэг. NTP-г David L. Mills зохиож одоог хүртэл хөгжүүлсээр байгаа.

NTP нь цагийн шаталсан тогтолцоог ашигладаг. Түвшин нь 0-с эхэлдэг , n+1 үеээр сервер нь синхрончлогддог. Түвшингын тоо нь тогтмол цагийн зайг харуулна. Түвшин 3 байгаа цаг нь түвшин 2 байгаа цагаас илүү нарийвчлалтай цагаар хангаж чаддаг.

Түвшин 0 : атомын цаг ,  GPS цагаас бүрдэнэ.

Түвшин 1 : Анхдагч цагийн сервер. Түвшин 0-н төхөөрөмжүүдтэй холбогдоно. Түвшин 2-с хүсэлт хүлээн авна.

Түвшин 2 : Компьютерийн NTP-н хүсэлтийг түвшин 1 цагийн серверлүү явуулна. Энэ түвшинд хэд хэдэн цагийн сервер цагаа синхрончилдог. Түвшин 2 байгаа компьютерууд илүү баталгаатай цагаар түвшин 2-н төхөөрөмжүүдийг хангана.

Түвшин 3 : Түвшин 2 адил NTP-н бүтцэд ашигладаг. Түвшин 2-н серверүүдтэй синхрончлогддог. Энэ түвшингүүд нь 15 хүртэл байдаг бөгөөд 16 нь төхөөрөмж синхрончлогдоогүйг илтгэдэг.

## Timestamp тухай
NTP-гээр хандсан 64-битийн timestamps нь тус бүр 32 бит секунд, 32 бит хагас секунд бүрдэх бөгөөд 136 жил болон 233 пикосекундын эргэлдэх байдлаар цагийн хэмжүүрийг гаргадаг. NTP нь 1900.01.01 цагийн ашигладаг тэгэхээр хамгийн анхны эргэлт нь 2036 онд байх болно. Магадгүй NTP-н ирээдүйн хувилбар нь цагийн илэрхийллийг 128 бит хүртэл ихэсгэж болох юм. Давид Милл 64 бит нь орчлон ертөнц харанхуй болох хүртэл хангалттай зөв цагийг илэрхийлж чадна гэж үздэг.

## Програм хангамжийн боловсруулалт
NTP–г боловсруулалт нь 20 гаруй жил хөгжсөөр байна.  Энэхүү хугацаанд шинэ онцлог чанрууд нэмэгдсээр байсан. Жишээ нь үүнд хэд хэдэн тооцоолол сайтай алгоритмууд багтах бөгөөд ялангуяа өөр өөр алгоритмыг хэрэглэхэд серверүүдийг синхрончилж цагийг тогтоодог. Програм нь бараг бүх тооцооллын platform-д агуулагддаг. Жишээ нь  персинал компьютер.

#### **SNTP** 
Simple network time protocol гэсэн үг бөгөөд ерөнхийдөө NTP нь олон системүүдэд бүрэн хэрэгжүүлэх нь хэтэрхий төвөгтэй байсан учир энэхүү протоколын хялбаршуулсан хувилбар болох SNTP гарч ирсэн юм. Гэхдээ энэ нь зарим дотоод алгоритмгүй учир серверийн олон төрлүүдэд хэрэглэгдэдгүй.SNTP, NTP хоёулаа ижилхэн протокол  ашигладаг. SNTP нь зарим тодорхой төхөөрөмж болон application-д өндөр нарийвчлалтай цаг шаардлагагүй тохиолдолд хэрэглэдэг.

Яагаад цагийг синхрончлох хэрэгтэй вэ?

Цаг нь ихэвчлэн дэвшилтэт байдаг. Хэрэв та өөр өөр компьютер дээр холболтын програм байгаа ба нэг компьютерээс нөгөөгийн цагийг өөрчлөхөөр бол цаг ч адил урагшлах ёстой. 

#### **Windows Time Service** 
Windows 2000-c хойшхи хувилбарууд нь windows time service  (“W32Time”) -тэй бөгөөд энэ нь NTP серверт компьютерийн цагийг синхрончлох чадвартай байдаг. Эхэндээ Windows Server 2003 болон windows vista нь бүрэн хэмжээний NTP-н боловруулалттай байсан. Microsoft windows хэлснээр (“W32Time”) service нь хангалттай цагийн зөв тохируулж чаддаггүй. Хэрэв өндөр нарийвчлал шаардлагатай бол өөр NTP-н боловсруулалт хийхийг санал болгож байна.

#### **Ntimed** 
NTP-н шинэ клиент нь ntimed 2014 онд  Поул-Хеннинг кампаар эхлүүлэгдсэн. Шинэ боловсруулалт нь LINUX сангаар ивээн тэтгэгдсэн ба энэ нь тодорхой багахан хэсгээс илүү оршин буй асуудлуудын шийдлүүдээс шинэ боловсруулалтын бичиж тодорхойлсон байна. 2015 оны 6 сарын байдлаар ямар нэгэн албан ёсны зарлал гараагүй бөгөөд гэхдээ цагийн найдвартай синхрончилж чадна. Ntimed нь Debain GNU/Linux and FreeBSD дор ажилдагч Windows болон Mac OS агуулагдаж байдаг.

## Аюулгүй байдлын асуудлууд
Судлаачид NTP серверт халдах боломжтой гэдгийг ойлгосон. NTP түүхэнд маш цөөхөн аюулгүй байдлын асуудал гарч байсан. 2011 оны 1 сард NTP төхөөрөмжийн тухай ямарч халдлага илрээгүй. Аюулгүй байдлын хэд хэдэн эх үүсвэрүүдийг шалгасан боловч өндөр эрсдэлтэй асуудал програмд үүсээгүй байна харин NTP-г буруу ашигласнаар NTP-н серверт гэмтэл гарах шалтгаан болдог.

## Үндсэн шинж чанар
Компьютерийн цагийг синхрончлох хэд хэдэн протокол байдаг ба тэдээр нь тус бүртээ ялгаатай шинж чанартай. 

NTP –н шинж чанарууд
* ·NTP зөв хэрэгжүүлэхийн тулд зарим зөв жишиг цаг хэрэгтэй. Бүх цаг нь тэрхүү зөв цагаар тодорхойлогддог. NTP-н хувьд энэ нь UTC жишиг цагийг ашигладаг.
* ·NTP нь алдаанд тэсвэртэй протокол ба энэ нь хамгийн сайн гэсэн хэд хэдэн боломжит цагийн эх үүсвэрүүдийг автоматаар сонгож синхрончлолыг хийдэг. Энэхүү сонгогдсон эх үүсвэрүүд нь хуримтлагдсан алдааг багасгахын тулд нэгтгэгдэж болдог. Түр болон байнгын буруу ажиллагаатай үеийг эх үүсвэрээс илрүүлж зайлсхийдэг.
* ·NTP нь өргөтгөх боломжтой протокол юм. Синхрончлогдсон сүлжээ нь хэд хэдэн жишиг цагуудаас бүрдэн болдог. Ийм сүлжээний зангилаа бүр нь цагийн мэдээллээ нэг эсвэл 2 талт чиглэлээр солилцдог. Нэг зангилаанаас бусад руугаа цагийн мэдээллээ тараахдаа шаталсан хэлбэрээр тараах ба хамгийн дээр нь жишиг цаг нь байрлана.
* · NTP нь боломжит хэд хэдэн эх үүсвэртэй ба хамгийн сайн эх үүсвэрийг сонгож энэ нь одоо цагийн дүгнэлтэд хүрдэг. Протокол нь өндөр нарийвчлалтай ба наносекундээс бага бол (2^-32) resolution-р илэрхийлнэ.

Сүлжээний холболт түр хугацаанд тасалдсан үед NTP нь өнгөрсөн болон одоогийн цагийг тооцоолж хэмжилтийг хийж чаддаг.

## Протоколын ажиллагаа, ашиглалт
### (Network Time Protocol - NTP) зохион байгуулалт 
Харилцаа холбооны зохицуулах хороо нь сүлжээний цагийн (Network Time server - NTP) серверийг интернет хэрэглэгчид болон үйлчилгээ эрхлэгчиддээ зориулан зохион байгуулсан.  Уг сүлжээний цагийн сервер нь Stratum 1 түвшинд ажиллахаар зохион байгуулсан ба Монгол Улсын Стандартчилал, хэмжилзүйн газрын Цаг, давтамжийн эталон цагтай шууд холбогдож, интернэт орчинд цаг түгээх анхны сүлжээний цагийн сервер болж байна. Уг сүлжээний цагийн сервер нь Цаг, давтамжийн эталон лабораторт мэргэжилтэнүүдийн тогтмол хяналт шалгалтад байх ба бусад GPS ашигладаг сүлжээний цагийн серверээс илүү өндөр нарийвчлалтай, алдааны залруулгыг цаг алдахгүй хийх зэрэг олон давуу талтай юм. 

Интернэтэд холбогдсон NTP протокол дэмждэг хэрэглэгчийн болон үйлчилгээ эрхлэгчийн төхөөрөмжүүд энэхүү сүлжээний цагийн сервертэй холбогдож системүүдийн цагаа тохируулах боломж нээгдэж байна. Ингэснээр холбогдсон хэрэглэгч болон үйлчилгээ эрхлэгчдийн цагийн зөрүү нэг секундын ч зөрүүгүй болно.

Энэхүү цагийн серверийг интернэтийн сүлжээнд холбогдсон байгууллагууд тухайн салбартаа өргөнөөр ашиглах боломжтой юм. Жишээлбэл:
* Хөрөнгийн зах зээлд хувьцаа худалдан авах, зарах, нээлт хаалтыг зохион байгуулахад
* Агаарын тээврийн нислэгийн хуваарь, хяналт, зохицуулалтад
* ТВ хөтөлбөр ба түүний хяналтад
* Системийн алдаа, тайлан бүртгэлийн цагийн зөрүү арилгахад
* Сүлжээний мониторинг, гэмтэл, хэмжилт, хяналтын цагийн зөрүү арилгахад
* Сүлжээгээр компьютер тоглоом тоглох, теле-хурал, онлайн сургалтын оролцогчид цагаас болж хоцрох зэрэг цаг буруу байдгаас амьдрал дээр үүдэн гардаг жижиг мөртөлөө нийтлэг алдаанууд засагдах юм.

### Сүлжээний цагийн сервертэй холбогдох, ашиглах заавар 
Хэрэв та интернэт хэрэглэгч бол дараах зааврын дагуу цагаа тохируулан ашиглаарай.

**"Windows" үйлдлийн системтэй хэрэглэгчид тохируулах**
* Дэлгэцийн баруун доод талд байрлах цаг дээр очиж хоёр дарна.
* Гарч ирэх цонхны "Internet Time" гэсэн таб уруу орно.
* "Automatically synchronize with an Internet time server" гэсэн сонгох хэсгийг сонгоно.
* Цагийн серверийн хаяг оруулах хэсэгт master.ntp.mn гэж өгөөд "Update Now" товчийг дарна.
Хэрэв та дээрхи дөрвөн алхамыг амжилттай хийсэн тохиолдолд хэсэг хугацааны дараа дараах текст бүхий мессежийг харах болно "Your time has been successfully synchronized" Зурагт харуулав.
#### **"Mac OS" үйлдлийн системтэй хэрэглэгчид тохируулах**
Администратор эрхээр хандаж орох хэрэгтэй бөгөөд

Terminal программ ашиглан (located at /Applications/Utilities/).

Доорх командыг оруулж өгнө: (шинэ тохиргооны файлаа үүсгэж байгаа хэсэг) sudo cp /etc/ntp.conf /etc/newntp.conf

Асуух үед таны администратор нууц үгээ оруулна. Доорх командыг оруулж өгнө: (үүсгэсэн файлаа засварлах) sudo pico /etc/newntp.conf

Сумтай товчоор сонгож их minpoll болон maxpoll утгыг олох, дараа нь устга.

Серверийн хаягууд дээрээ "iburst" нэм. Таны засварлах файл доорх мөрийг агуулсан байх ёстой: server  master.ntp.mn iburst

"Control+O" товч дарж хадгалаад "Control+X" товч дарж засвар хийсэн хэсгээс гарна. Доорх командыг оруулж өгнө:  

sudo pico /System/Library/StartupItems/NetworkTime/NetworkTime

Доорх мөрийг солих "ntpd -f":     ntpd -f /var/run/ntp.drift -p /var/run/ntpd.pid -c /etc/newntp.conf

"Control+O" товч дарж хадгалаад "Control+X" товч дарж засвар хийсэн хэсгээс гарна.

To restart the Network Time service, execute this command:

доорх командыг хийж хийсэн өөрчлөлтүүдээ ажиллуулна:  sudo SystemStarter -d restart "Network Time"

Хэрэв та үйлчилгээ эрхлэгч бол дараах мэдээллийг ашиглан сүлжээний төхөөрөмжүүд болон бусад серверүүдийн цагаа NTP сервер үрүү зааж өгнө. Жишээ зааварыг Cisco router, Cisco switch дээр дараах байдлаар харуулав.

#### **"Cisco router" дээр тохиргоо хийх заавар**
Cisco-router> enable

password: *********

ciscorouter# config t

ciscorouter(config)# ntp update-calendar

ciscorouter(config)# ntp server master.ntp.mn

ciscorouter(config)# ntp server slave.ntp.mn

ciscorouter(config)# exit

ciscorouter# wr mem

#### **"Cisco switch" дээр тохиргоо хийх заавар**
cisco-switch> enable

password: *********

ciscoswitch# set ntp client enable

ciscoswitch# ntp server master.ntp.mn

ciscoswitch# ntp server slave.ntp.mn

ciscoswitch# exit

## Хэрэгтэй холбоосууд
* Allan variance
* International Atomic Time
* NITZ
* NTP pool
* Ntpdate
* OpenNTPD
* Precision Time Protocol

## Цааш унших
* RFC 1361, RFC 1769, RFC 2030, RFC 4330, RFC 5906, RFC 5907, RFC 5908

## Цахим холбоос 
* Official website
* IETF NTP working group
* Time and NTP paper
* NTP Survey 2005
* [ftp://time.nist.gov/pub/leap-seconds.list Current NIST leap seconds file compatible with ntpd]
* David L. Mills, A Brief History of NTP Time: Confessions of an Internet Timekeeper
* Keith Marzullo's homepage
* NTP Server Test Online Tool

## Ашигласан материал
https://web.archive.org/web/20171027211533/http://crc.gov.mn/k/4l/2B

Ангилал:Интернэт хэрэглээний протокол
Ангилал:Сүлжээний цаг дамжуулалт