Network Time Protocol

**Network Time Protocol** (NTP) adalah sebuah protokol yang digunakan untuk pengsinkronan waktu di dalam sebuah jaringan bisa pada jaringan LAN (Local Area Network) maupun pada jaringan internet dan untuk sinkronisasi jam-jam sistem komputer di atas paket-switching, variabel-latency jaringan data. Proses sinkronisasi ini dilakukan didalam jalur komunikasi data yang biasanya menggunakan protokol komunikasi TCP/IP. Sehingga proses ini sendiri dapat dilihat sebagai proses komunikasi data yang hanya melakukan pertukaran paket-paket data saja.

NTP menggunakan port komunikasi UDP nomor 123.

NTP (Network Time Protocol) merupakan sebuah protokol yang digunakan untuk mengsingkronkan waktu antar komputer. Singkronisasi waktu yang dilakukan oleh protokol ini sangat akurat dapat mencapai 10 milidetik untuk jaringan internet dan dapat mencapai 200 milidetik dalam jaringan lokal. NTP sendiri berada di 2 sisi yaitu sisi klien dan sisi server, kegunaan layanan di ntp adalah untuk mempaskan atau menyesuaikan waktu yang ada sesuai regional di mana mesin komputer itu berada.

NTP server pun tidak berdiri sendiri, tetapi ntp server juga saling bersikronisasi dengan server ntp lain nya, setiap server berada di level tertentu yang sering disebut dengan istilah stratum .Terdapat 15 stratum, semakin kecil nilai stratum semakin tinggi kedudukan atau level nya . Level stratum di hitung dari angka 0 hingga 14, dan stratum 0 bukan server tetapi stratum ini adalah peralatan waktu yang sangat presisi seperti jam atom yang terhubung langsung dengan server stratum 1.

## Sejarah
NTP merupakan sebuah aplikasi yang berbasiskan *Internet protocol* yang paling lama, paling tua dan paling terdistribusi yang berjalan dalam Internet tanpa berhenti sedikitpun. NTP ditemukan pada tahun 1984 oleh seseorang bernama Dave Mills yang berasal dari Universitas Delaware.

Pada tahun 1979, jaringan sinkronisasi waktu teknologi yang digunakan dalam apa yang mungkin demonstrasi publik pertama dari internet layanan yang berjalan melalui jaringan satelit trans-Atlantik, di konferensi komputer di New York. Teknologi ini kemudian dijelaskan dalam 1981 Internet Engineering Catatan (IEN) 173 dan protokol umum dikembangkan dari itu yang didokumentasikan dalam 

Teknologi ini pertama kali digunakan dalam jaringan lokal sebagai bagian dari Hello protokol routing dan diimplementasikan dalam fuzzball, sistem operasi eksperimental digunakan dalam prototyping jaringan, di mana ia berjalan selama bertahun-tahun.

Alat jaringan terkait lainnya yang tersedia baik dulu dan sekarang. Mereka termasuk Daytime dan Waktu protokol untuk merekam waktu kejadian, serta ICMP Timestamp pilihan dan IP Timestamp (). Sistem sinkronisasi yang lebih lengkap, meskipun kurang analisis data NTP dan jam mendisiplinkan algoritma, termasuk daemon Unix waktunya, yang menggunakan algoritma pemilihan untuk menunjuk server untuk semua klien; dan Digital Waktu sinkronisasi layanan (DTSS), yang menggunakan hierarki server mirip dengan model strata NTP.

Pada tahun 1985, NTPv0 dilaksanakan di kedua fuzzball dan Unix, dan NTP header paket dan round-trip delay dan offset perhitungan, yang telah bertahan dalam NTPv4, didokumentasikan dalam . Meskipun komputer yang relatif lambat dan jaringan yang tersedia pada saat itu, akurasi yang lebih baik dari 100 milidetik biasanya diperoleh pada Atlantic link mencakup, dengan akurasi 10s milidetik pada Ethernet jaringan.

Pada tahun 1988, spesifikasi jauh lebih lengkap dari protokol NTPv1, dengan algoritma yang terkait, diterbitkan dalam RFC Ini menarik pada hasil eksperimen dan algoritma jam penyaring didokumentasikan di  dan adalah versi pertama untuk menggambarkan client-server dan rekan -untuk-peer mode.

Pada tahun 1991, NTPv1 arsitektur, protokol dan algoritma dibawa ke perhatian audiens yang lebih luas rekayasa dengan penerbitan sebuah artikel oleh David L. Mills di IEEE Transaksi pada Komunikasi.

Pada tahun 1989,  diterbitkan mendefinisikan NTPv2 dengan cara mesin negara, dengan *pseudocode* untuk menggambarkan operasinya. Memperkenalkan protokol manajemen dan otentikasi kriptografi skema yang memiliki kedua selamat ke NTPv4. Desain NTP dikritik karena kurang prinsip kebenaran formal oleh masyarakat DTSS. Alternatif desain mereka termasuk algoritma Marzullo ini, versi modifikasi dari yang segera ditambahkan ke NTP. Sebagian besar algoritma dari era ini juga sebagian besar selamat ke NTPv4.

Pada tahun 1992,  didefinisikan NTPv3. RFC termasuk analisis semua sumber kesalahan, dari jam referensi ke klien akhir, yang memungkinkan perhitungan metrik yang membantu memilih server terbaik di mana beberapa kandidat muncul untuk tidak setuju. Modus Broadcast diperkenalkan.
Dalam tahun-tahun berikutnya, sebagai fitur baru yang ditambahkan dan perbaikan algoritma yang dibuat, menjadi jelas bahwa versi protokol baru yang diperlukan.

Pada tahun 2010,  diterbitkan mengandung spesifikasi yang diusulkan untuk NTPv4, tetapi protokol secara signifikan telah pindah sejak saat itu, dan pada 2014, RFC diperbarui belum dipublikasikan. Setelah pensiun dari Mills dari University of Delaware, implementasi referensi saat ini dikelola sebagai open source proyek yang dipimpin oleh Harlan Stenn.

NTP sampai saat ini sudah tercipta sebanyak empat versi.
•	NTP versi 0 atau cikal-bakal NTP protokol berawal pada tahun 1985. Versi percobaan ini akhirnya di dokumentasikan menjadi
•	NTP versi 1 tiga tahun kemudian dalam RFC-1059.
•	NTP versi 2 muncul pada tahun 1989 yang di dalamnya terdapat cukup banyak fasilitas yang baru.
•	NTP versi 3 muncul pada tahun 1992 ke dunia Internet dengan konsep konsep baru terhadap penanganan error dan analisisnya untuk membuat perhitungan waktu lebih akurat. Namun, versi ini tidak bertahan lama karena setelah dilakukan evaluasi dan revisi yang teliti, dalam tahun yang sama juga, para peneliti merasa membutuhkan sebuah nomor versi baru untuk revisinya tersebut.
•	NTP versi 4 yang lebih baik dan lebih banyak fasilitasnya daripada versi 3 nya. Salah satu fasilitasnya adalah adanya versi tambahan yang dibuat sangat ringan yang diberi nama SNTP.

## Prinsip kerja
NTP bekerja dengan menggunakan algoritma Marzullo dengan menggunakan referensi skala waktu UTC. Sebuah jaringan NTP biasanya mendapatkan perhitungan waktunya dari sumber waktu yang tepercaya seperti misalnya radio clock atau atomic clock yang terhubung dengan sebuah time server. Kemudian jaringan NTP ini akan mendistribusikan perhitungan waktu akurat ini ke dalam jaringan lain.

Sebuah NTP client akan melakukan sinkronisasi dengan NTP server dalam sebuah interval pooling yang biasanya berkisar antara 64 sampai 1024 detik. Namun, waktu sinkronisasi ini biasa berubah secara dramatis bergantung kepada kondisi dan keadaan jaringan yang akan digunakannya.

NTP menggunakan sistem hierarki dalam bekerja dan melakukan sinkronisasinya. Sistem hierarki ini menggunakan istilah Clock stratum atau strata untuk menggambarkan tingkatan-tingkatannya. Di mana clock strata tingkat pertama merupakan perangkat komputer yang melakukan sinkronisasi dengan penghitung waktu eksternal seperti misalnya GPS clock, atomic clock atau radio clock yang sangat akurat. Perangkat berstatus stratum 2 merupakan perangkat yang dikirimi perhitungan waktu oleh stratum 1 secara langsung dengan menggunakan protokol NTP. Begitu seterusnya sistem hierarki berjalan. Batas atas untuk strata adalah 15; stratum 16 digunakan untuk menunjukkan bahwa suatu perangkat tidak tersinkronisasi.
 
Parameter kedua, NTP akan melakukan proses komparasi terhadap beberapa perhitungan waktu dari beberapa server. Sebuah perangkat NTP yang memiliki pencatatan waktu yang paling berbeda dengan yang lainnya pasti akan dihindari oleh perangkat-perangkat lainnya, meskipun nilai stratumnya paling rendah daripada mesin yang lain.

NTP versi 4 biasanya dapat menjaga ketepatan waktu hingga 10 millisecond 1/100 detik dalam media komunikasi publik atau Internet. Di dalam jaringan lokal yang kondisinya ideal, NTP dapat menjaga ketepatan perhitungannya hingga 20 microsecond atau 1/5000 detik.

Timestamp atau pencatatan waktu yang digunakan oleh protokol NTP adalah sepanjang 64-bit yang terdiri dari 32-bit pertama untuk perhitungan detik, dan 32-bit berikutnya untuk perhitungan pecahan dari satuan detik. Dari spesifikasi ini, maka NTP akan memiliki skala waktu sebesar 2/32 detik atau sebesar 136 tahun dengan berdasarkan perhitungan menggunakan teori resolusi 2 -32 detik (sekitar 0.233 nanosecond).
 
Meskipun perhitungan waktu NTP akan kembali berulang ketika sudah mencapai 2 32, implementasinya dibuat sedemikian rupa sehingga waktu NTP tidak akan terganggu dengan programprogram penyesuai waktu lainnya. Lagi pula fasilitas NTP pada perangkat-perangkat komputer juga paling lama digunakan selama beberapa decade saja, jadi jika berjalan dengan baik maka aplikasi NTP tidak akan mengalami masalah berarti.

## Konfigurasi NTP

### mengkonfigurasi NTP pada Debian
Install paket ntp di Debian dengan perintah berikut:

***<big>apt-get install ntp</big>***

Pastikan proses instalasi selesai dengan sukses. Setelah instalasi paket ntp berhasil, kita akan melajutkan proses konfigurasi NTP server

Buka file tersebur dengan menggunakan *text editor* untuk membuka dan melakukan konfigurasi. Masukkan perintah berikut untuk membuka file tersebut dengan menggunakan text editor nano:

***<big>nano /etc/ntp.conf</big>***

Kemudian file “ntp.conf” akan terbuka dengan menggunakan *text editor* nano. Kemudian cari *script* pada file tersebut yang kurang lebih seperti berikut:

***<big>…</big>***

***<big>server 0.debian.pool.ntp.org iburst dynamic</big>***

***<big>server 1.debian.pool.ntp.org iburst dynamic</big>***

***<big>server 2.debian.pool.ntp.org iburst dynamic</big>***

***<big>server 3.debian.pool.ntp.org iburst dynamic</big>***

***<big>…</big>***

Kemudian jadikan *comment script* yang dimulai oleh kata “server” tersebut, dengan menambahkan karakter “#” (pagar) pada awal kalimat setiap *script* tersebut. Kemudian tambahkan *script* berikut di bawahnya, hingga menjadi seperti berikut:

***<big>…</big>***

***<big># server 0.debian.pool.ntp.org iburst dynamic</big>***

***<big># server 1.debian.pool.ntp.org iburst dynamic</big>***

***<big># server 2.debian.pool.ntp.org iburst dynamic</big>***

***<big># server 3.debian.pool.ntp.org iburst dynamic</big>***

***<big>server 127.127.1.0</big>***

***<big>fudge 127.127.1.0 stratum 1</big>***

***<big>…</big>***

Kemudian jika sudah. Cari lagi *script* seperti berikut, letaknya sedikit lebih ke bawah dari *script* sebelumnya:

***<big>…</big>***

***<big># Clients from this (example!) subnet have unlimited access, but only if</big>***

***<big># cryptographically authenticated.</big>***

***<big>#restrict 192.168.123.0 mask 255.255.255.0 notrust</big>***

***<big>…</big>***

Hapus tanda pagar (*uncomment*) pada baris *script* “#restrict ..”, kemudian ganti “192.168.123.0” dan “255.255.255.0” dengan network dan netmask yang kamu gunakan pada komputer server tersebut, serta ganti kata ”notrust” dengan “nomodify notrap” sehingga seperti berikut:

***<big>…</big>***

***<big># Clients from this (example!) subnet have unlimited access, but only if</big>***

***<big># cryptographically authenticated.</big>***

***<big>restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap</big>***

***<big>…</big>***

Jika sudah, simpan konfigurasi yang telah kamu lakukan pada file tersebut dengan menekan kombinasi *keyboard* / *shortcut* **CTRL + O**, kemudian tekan **Enter.** Untuk keluar dari t*ext editor* nano atau file tersebut, tekan kombinasi *keyboard* / *shortcut***CTRL + X**.

Sejauh ini konfigurasi NTP server sudah selesai. Kemudian lakukan *restart service* ntp dengan perintah berikut:

***<big>service ntp restart</big>***

Setelah *service* berhasil *restart.* Kemudian periksa apakah konfigurasi NTP server sudah berhasil atau belum dengan menggunakan perintah berikut:

***<big>ntpq –pn</big>***

Jika berhasil, maka akan keluar output seperti berikut:

***<big>remote refid st t when poll reach delay offset jitter</big>***

***<big>============================================================</big>***

***<big>*127.127.1.0 .LOCL. 1 1 34 64 3 0.000 0.000 0.001</big>***

Tetapi jika outputnya adalah seperti berikut:

***<big>No association ID's returned</big>***

Berarti konfigurasi NTP server masih belum berjalan. Masukkan perintah berikut agar paket ntp di-*configure* ulang:

***<big>dpkg-reconfigure ntp</big>***

Kemudian cek kembali apakah NTP server sudah berjalan dengan baik dengan menggunakan perintah sebelumnya.

Jika masih terdapat *error,* coba periksa kembali konfigurasi-konfigurasi NTP server yang sudah kamu kerjakan, periksa dengan baik satu persatu apakah ada kesalahan yang terjadi.

### <u>cara mengkonfigurasi NTP pada server CentOS 6.4</u>
langsung saja sebelumnya kita login sebagai *root* lalu install aplikasi NTP:

***<big>[root@server1 ~]# yum -y install ntp</big>***

Tunggu sampe proses selesei dan sekarang kita konfigurasi pada file berikut:

***<big>[root@server1 ~]# mcedit /etc/ntp.conf</big>***

oke sekarang cari pada line 19, seperti kutipan berikut:

***<big>#Hosts on local network are less restricted.</big>***

***<big>#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap</big>***

dan sekarang kita sesuaikan dengan IP server kita dan prefix Netmasknya:

***<big>#Hosts on local network are less restricted.</big>***

***<big>#restrict 192.168.12.10 mask 255.255.255.0 nomodify notrap</big>***

setelah itu kita pindah pada line 22, secara default terdapat data seperti ini:

***<big>server 0.centos.pool.ntp.org</big>***

***<big>server 1.centos.pool.ntp.org</big>***

***<big>server 2.centos.pool.ntp.org</big>***

Sekarang kita ubah dan kita sesuaikan dengan tempat kita berada, karena saya di indonesia saya menggunakan NTP Indonesia yang saya dapat datanya di sini, kalo sudah dapat kita ganti ntp tersebut dengan ntp Indonesia:

***<big>server 0.id.pool.ntp.org</big>***

***<big>server 1.id.pool.ntp.org</big>***

***<big>server 2.id.pool.ntp.org</big>***

***<big>server 3.id.pool.ntp.org</big>***

setelah itu kita save, lalu jalankan ntp tersebut dengan perintah berikut:

***<big>[root@server1 ~]# /etc/rc.d/init.d/ntpd start</big>***

***<big>[root@server1 ~]# /etc/rc.d/init.d/ntpd start</big>***

***<big>Starting ntpd: [OK]</big>***

***<big>[root@server1 ~]#</big>***

Jika sudah muncul OK lalu sekarang kita konfigurasi NTP tersebut untuk automatis berjalan jika komputer di restart:

***<big>[root@server1 ~]# chkconfig ntpd on</big>***

Dan sekarang kita check NTPnya dengan perintah berikut:

***<big>[root@server1 ~]# ntpq -p</big>***

dan akan muncul daftar NTP yang ada di Indonesia.

## Referensi