# Network Time Protocol
Ağ Zaman Protokolü (NTP), paket anahtarlamalı, değişken gecikmeli veri ağları üzerinden bilgisayar sistemleri arasında saat senkronizasyonu için bir ağ protokolüdür. 1985'ten beri kullanımda olan NTP, şu anda kullanımda olan en eski İnternet protokollerinden biridir. NTP, Delaware Üniversitesi'nden David L. Mills tarafından tasarlanmıştır.
NTP, hala kullanılan en eski Internet protokollerinden biridir. (1985'ten beri). İlk olarak gönüllü bir ekip ile bu konuda destek sağlamaya devam eden Delaware Üniversitesinden David L. Mills tarafından tasarımlanmıştır.
NTP, 123 no'lu port üzerinden, Kullanıcı Datagram Protokolü (UDP)'nü kullanır.
NTP ayarları hangi dağıtımın kullanıldığına bağlı olarak ya /etc/ntp.conf ya da /etc/xntp.conf dosyasından yapılır.
NTP, katılan tüm bilgisayarları Eşgüdümlü Evrensel Zaman'ın (UTC) birkaç milisaniye içinde senkronize etmeyi amaçlamaktadır. Doğru zaman sunucularını seçmek için Marzullo'nun algoritmasının değiştirilmiş bir versiyonu olan kesişme algoritmasını kullanır ve değişken ağ gecikmesinin etkilerini azaltmak için tasarlanmıştır. NTP genellikle halka açık İnternet üzerinden onlarca milisaniye içinde zaman tutabilir ve ideal koşullar altında yerel alan ağlarında bir milisaniyeden daha iyi doğruluk elde edebilir. Asimetrik rotalar ve ağ tıkanıklığı 100 ms veya daha fazla hatalara neden olabilir.
Protokol genellikle bir istemci-sunucu modeli olarak tanımlanır, ancak her iki eşin diğerini potansiyel bir zaman kaynağı olarak gördüğü eşler arası ilişkilerde de kolaylıkla kullanılabilir. Uygulama, 123 numaralı bağlantı noktasında Kullanıcı Datagram Protokolü'nü (UDP) kullanarak zaman damgaları gönderir ve alır. Ayrıca, istemcilerin bir ilk turdan sonra zaman güncellemelerini pasif olarak dinlediği yayın veya çoklu yayın kullanabilirler. -yol kalibrasyon değişimi. NTP, yaklaşan herhangi bir artık saniye için bir uyarı sağlar ayarı yapılır, ancak yerel saat dilimleri veya yaz saati uygulaması hakkında hiçbir bilgi iletilmez.
Geçerli protokol sürüm 4'tür (NTPv4), sürüm 3 ile geriye dönük uyumludur.


## NTP konfigürasyon dosyaları.
NTP konfigürasyon dosyası /ect/ntp.conf, xntpd “daemon” unun başlangıçta kullandığı şu bilgileri içerir:
 * Olası senkronizasyon sunucularının listesi
 * Hangi kriterlere göre senkronizasyon sunucunun seçileceği 
 * Sunucunun ana makineye bağlanırken içerdiği kısıtlamalar
 * NTP paketlerinin ağda yayınlanıp yayınlanmayacağı
 * Broadcast (tüme gönderim) NTP paketlerinin dinlenip dinlenmeyeceği
 * Multicast (çoğa gönderim) NTP paketlerinin dinlenip dinlenmeyeceği
 * Driftfile dosyasının yeri
 * NTP bağlantılarının görüntülenip görüntülenmeyeceği
 * Ana makineye konfigürasyon yenileme izninin verilip verilmeyeceği
İstemci modunda sunucu diğer sunuculara o anki zamanı almak için kontrol eder. Tüm sunucular kontrol edildikten sonra ana makine hangi sunucuya senkronize edileceğini seçer. Sunucuyu istemci modda yapılandırmak için NTP konfigürasyonunda kontrol edilecek sunucuların adının ve ip adresinin bulunduğu bir sunucu cümlesi olmalıdır.


## NTP çalışma modları.
Sistem xntpd “daemon” u ve aşağıdaki metotlar kullanılarak diğer sunucularla senkronize edilebilir:
 * İstemci modu
 * Broadcast ya da multicast istemci modu
 * Simetrik aktif mod
İstemci modu: Bu modda sunucu diğer sunuculardan o anki zamanı almak için kontrol yapar. Tüm sunucular kontrol edildikten sonra yerel ana makine hangi sunucuyla senkronize edileceğini seçer. Sunucuyu istemci modda yapılandırmak için NTP konfigürasyonunda kontrol edilecek adının ve ip adresinin bulunduğu bir sunucu cümlesi olmalıdır.
NTP referans uygulaması, protokolle birlikte 20 yılı aşkın bir süredir sürekli olarak geliştirilmiştir. Yeni özellikler eklendikçe geriye dönük uyumluluk sağlanmıştır. Farklı algoritmalar kullanan sunucularla senkronize edildiğinde yanlış davranabilen, özellikle saati disipline etmek için birkaç hassas algoritma içerir. Yazılım, kişisel bilgisayarlar da dahil olmak üzere hemen hemen her bilgi işlem platformuna taşınmıştır. Unix altında ntpd adlı bir arka plan programı olarak veya Windows altında bir hizmet olarak çalışır. Referans saatler desteklenir ve ofsetleri, genellikle daha sık sorgulanmalarına rağmen, uzak sunucularla aynı şekilde filtrelenir ve analiz edilir. Bu uygulama 2017'de denetlendi ve 14 olası güvenlik sorunu bulundu.
NTP, eski Zaman Protokolü kullanımının yerini aldığından, bazı kullanım durumları yine de tam protokolü çok karmaşık bulmaktadır. 1992 yılında, bu boşluğu doldurmak için Basit Ağ Zaman Protokolü (SNTP) tanımlandı. SNTPv3 standardı, NTPv3'ü kullanmanın bir yolunu açıklar, böylece uzun süreler boyunca durum depolaması gerekmez. Topoloji, yalnızca bir sunucu kullanıldığından, esas olarak Zaman Protokolü ile aynı hale gelir. 1995'te SNTP, o zamanlar geliştirilmekte olan NTPv4'ün bazı özellikleriyle SNTPv4 olarak güncellendi; mevcut en son sürüm, SNTPv4'ün 2010 revizyonu olan ve onu ana NTPv4 standardıyla birleştiren RFC 5905'tir. SNTP, yeni bir protokol tanımlamadığından NTP ile tamamen birlikte çalışabilir. Bununla birlikte, basit algoritmalar, azaltılmış doğruluk süreleri sağlar ve bu nedenle, bir SNTP kaynağından zamanın senkronize edilmesi tavsiye edilmez.


### Windows Saati.
Broadcast ve multicast modları: Bu modda sunucu yoklama yapmaz, yerel ağdaki tüme gönderim ve çoğa gönderim NTP paketlerini dinler.
Bir sunucuyu bu modlardan birinde yapılandırmak için NTP konfigürasyon dosyasının “broadcast yes” ya da “multicast yes” cümleciğini içermesi gerekir. Yerel zaman sunucuları tüme gönderim modu tüme gönderim konfigürasyon cümleciğiyle yapılandırılmalıdır, çoğa gönderim modu ise çoğa gönderim konfigürasyon cümlesiyle yapılandırılmalıdır. Bir sunucunun NTP istemcisi olarak yapılandırılması için istemci yöneticisi kullanılabilir.


## NTP paylaşılan bilgisayarlarda kimlik doğrulama.
NTP paylaşılan bilgisayarlardan gelen senkronizasyon isteklerinde kimlik doğrulama için şu ayarlar yapılır:
1. Öncelikle kimlik doğrulama isteklerinde kullanılmak için bir grup anahtar yaratılmalıdır. Kimlik doğrulama tanımlaması yapılandırmak istediğimiz her sunucu için /etc/inet/ntp.conf dosyasına aşağıdaki satırlar eklenmelidir:
 authenticate yes
 keys /etc/inet/ntp.keys
2. Aşağıdaki satır /etc/ntp.conf dosyasına eklenir:
 trustedkey ID1 ID2 ... IDn
 Bu satır kimlik doğrulamada kullanılacak anahtarların listesidir.
3. ntpd'nin konfigürasyon dosyasını tekrar okuması için aşağıdakiler yapılmalıdır. Bu sayede yapılan değişiklikler geçerli olacaktır:
  - İşlem id'si ps komutuyla işlemlerden bulunduktan sonra kill komutuyla servisin çalışması kapatılır ve sonra tekrar başlatılır.
  - Çalışan konfigürasyon dosyasında izin verilmeyi bekleyen yeni bir anahtar varsa ntpd çalıştırılıp readkeys komutu çalıştırılır.


## Driftfile.
Driftfile (yığılım dosyası) /etc/ntp.conf içerisindedir ve bu ntpd'yi söyler ki bu saat yığılmasının yani sistem saatinin frekans hatasının nerede bulunabileceğini gösterir. Eğer dosya başlangıçta varsa, okunur ve bunun değeri ntpd nin frekans hatasının değerini başlatır. Saat başı ntpd tarafından güncellenir. Ntpd sunucusuna iyi bir şekilde bağlanması hesaplandığı için bir yığılım dosyası mutlaka olmalıdır.