Apa itu dispersi NTP dan bagaimana cara mengontrolnya?

20

Kami meluncurkan server Ubuntu 14.04 pada jaringan terisolasi, menjalankan ntpd 4.2.6p5, dikonfigurasi untuk menggunakan beberapa server NTP seperti yang disediakan oleh pelanggan (tidak ada akses ke pool.ntp.org). Perangkat klien terminal bodoh kami menjalankan versi lama BusyBox (1.00-rc2) dan ntpclient 2010 dari Larry Doolittle.

Penyiapan ini telah berhasil selama bertahun-tahun, tetapi baru-baru ini kami telah menemukan penghalang dengan pelanggan baru. Mereka memberi kami 5 alamat server NTP in-house yang tampaknya bekerja dengan baik sendiri, sejauh ntpdate-debianmenyangkut server Linux. Di sisi BusyBox bagaimanapun, ntpclientmengeluh dengan "Dispersi terlalu tinggi". Dari hasil debug, ntpclientdapatkan "1217163.1" dari server NTP tetapi nilai maks yang didukungnya absolut (65536).

$ /usr/sbin/ntpclient -s -i 15 -h 10.17.162.250 -d
Configuration:
  -c probe_count 1
  -d (debug)     1
  -g goodness    0
  -h hostname    10.17.162.250
  -i interval    15
  -l live        0
  -p local_port  0
  -q min_delay   800.000000
  -s set_clock   1
  -x cross_check 1
Listening...
Sending ...
recvfrom
packet of length 48 received
Source: INET Port 123 host 10.17.162.250
LI=0  VN=3  Mode=4  Stratum=4  Poll=4  Precision=-20
Delay=60745.2  Dispersion=1346801.8  Refid=10.31.10.21
Reference 3668859928.942079
(sent)    3668859928.708371
Originate 3668859928.708371
Receive   3668859928.963271
Transmit  3668859928.963369
Our recv  3668859928.708371
Total elapsed:      0.00
Server stall:      93.09
Slop:             -93.09
Skew:          255443.94
Frequency:             0
 day   second     elapsed    stall     skew  dispersion  freq
42463 56728.708  rejected packet: abs(DISP)>65536

Ini semua adalah perangkat di LAN yang sama jadi terus terang saya terperangah. Bahkan hebat.

Inilah ntpq -pnoutput dari server Ubuntu 14.04:

user@host:~$ ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 127.127.1.0     .LOCL.          10 l 1025   64    0    0.000    0.000   0.000
 10.17.162.249   10.17.6.10       5 u   23 1024   37    0.865  1381.07 697.260
 10.31.10.22     .LOCL.           1 u 1044 1024   17   29.586  -838.06 397.342
 10.17.6.10      10.31.10.21      4 u 1065 1024   17    0.366  105.245 402.999
*10.31.10.21     132.246.11.238   3 u    5 1024   37   29.418  794.292 616.796
 10.17.6.11      10.31.10.21      4 u 1038 1024   17    0.408  120.030 381.058

Pertanyaan saya adalah:

  1. Apa itu dispersi dan apa yang dapat mengubah nilainya?
  2. Perintah apa yang bisa saya jalankan untuk mendapatkan rincian lebih lanjut dari server NTP?
  3. Mungkinkah kesalahan terletak pada sisi server Ubuntu, dengan yang tidak tepat ntp.conf? Tidak ada yang istimewa di sana benar-benar.
  4. Akankah beralih ke chrony mengubah sesuatu dalam kasus ini?
Jeff
sumber
Hanya dengan asumsi - apakah jam dari lima server NTP yang disediakan bagus? Bisakah Anda mengeluarkan yang terburuk dari konfigurasi Anda?
Criggie
1
Offset dan kegugupan Anda terlalu tinggi. Dapatkan setidaknya satu sumber yang tepat.
Pasang kembali Monica - M. Schröder

Jawaban:

21

Saya melihat beberapa kebingungan terjadi dalam jawaban di sini. Sebagai permulaan, ntpclientsetidaknya dalam -smode, tidak bertindak sebagai klien NTP penuh, itu hanya mengirim dan menerima satu paket , jadi tidak ada "8 paket terakhir yang diterima". Itu sebenarnya tidak memperkirakan dispersinya sendiri sama sekali.

Sebaliknya, nilai yang dicetaknya adalah nilai yang disebut "root dispersi" (rootdisp) dalam paket yang dikembalikan oleh server, yang merupakan perkiraan jumlah total kesalahan / varians antara server itu dan waktu yang tepat. Cara ini dihitung cukup sederhana: setiap server NTP mendapatkan waktunya dari jam eksternal (misalnya penerima radio atau GPS), atau dari server NTP lain. Jika server mendapatkan waktunya dari jam eksternal, dispersi akarnya adalah estimasi kesalahan maksimum jam itu. Jika mendapat waktu dari server NTP lain, dispersi root-nya adalah dispersi root server plus dispersi yang ditambahkan oleh tautan jaringan di antara mereka.

Satu hal yang membingungkan di sini adalah bahwa sementara ntpq dan chrony menampilkan dispersi dan dispersi root dalam hitungan detik, yang biasa digunakan orang untuk mencari, ntpclient menampilkannya dalam mikrodetik . Terlepas dari itu, nilai 1217163 masih cukup tinggi. Server NTP yang baik mengetahui waktu dalam beberapa milidetik; yang buruk dalam beberapa puluh atau ratusan milidetik. Anda memberi tahu Anda bahwa waktunya hanya dapat dipercaya dalam +/- 1,2 detik.

Anda sebenarnya bisa mendapatkan ntpclient untuk melakukan sinkronisasi ke server ini dengan meneruskan opsi -x 0atau -t(tergantung pada versi ntpclient), yang menonaktifkan pemeriksaan kewarasan NTP. Jika Anda hanya membutuhkan waktu yang akurat (dalam beberapa detik), itu mungkin cukup bagus. Namun, ntpclient cukup masuk akal dalam menolak untuk melakukan sinkronisasi ke server yang buruk. ntpqOutput Anda pada mesin ubuntu menunjukkan kegugupan ratusan milidetik untuk semua servernya, meskipun mereka memiliki penundaan rendah, yang menunjukkan jaringan yang sangat tidak dapat diandalkan, konspirasi semua server untuk memberikan waktu yang tidak menentu, atau dasar masalah ketepatan waktu di server itu sendiri.

Saya juga khawatir bahwa server 10.31.10.22 mengiklankan refid LOCL(jam lokal yang tidak disiplin) tetapi memiliki strata 1. Biasanya jam lokal dikaburkan pada strata 10 sehingga hanya digunakan sebagai sumber sinkronisasi pilihan terakhir. untuk menjaga kawanan agar tidak terpisah. Entah 10.31.10.22 salah konfigurasi dan memberikan waktu yang buruk ke seluruh jaringan, atau sedang didisiplinkan ke waktu yang baik oleh beberapa program di luar kendali NTP, dalam hal ini kesalahan konfigurasi hanya karena mengiklankan LOCLrefid; itu harus ditimpa misalnya GPSatau apa pun yang menyediakan waktu.

hobbs
sumber
Jawaban yang fantastis. Saya akan mencoba -x 0atau -tmelaporkan kembali. Mengenai 10.31.10.22, saya mungkin mengeluarkannya dari daftar server. Tangkapan yang bagus. Saya tidak benar-benar memiliki informasi mengenai server ini, apakah ada perintah debug lain untuk mendapatkan detail dari server NTP atau cukup banyak ntpq -p?
Jeff
Seperti yang Anda katakan, -tswitch mempercayai server NTP in-house meskipun dispersi tinggi. Kami masih tidak dapat menjelaskan mengapa ini secara acak memuncak seperti itu, tapi itu untuk pos lain mungkin. Terima kasih.
Jeff
@ Jeff senang membantu :)
hobbs
12

Hanya sebagian jawaban untuk "Apa itu dispersi?":

Perjalanan pulang-pergi NTP yang khas:

client |        | server
    t1 |------->| t2
    t3 |<-------| t4

Ini menghasilkan dua nilai, offset (perbedaan waktu antara klien dan server), dan penundaan (penting waktu tempuh jaringan) dengan rumus berikut:

offset= ((t4 - t3) + (t1 - t2)) / 2
delay = (t4 - t1) - (t3 - t2)

Klien memilih offset saat ini dari 8 paket terakhir yang diterima, memilih yang dengan penundaan terkecil.

8 paket yang sama digunakan untuk menghitung dispersi dengan melakukan rata-rata tertimbang dari perbedaan 8 offset ini dengan yang dipilih pada langkah terakhir, di mana penundaan digunakan sebagai faktor pembobotan, memberikan bobot lebih besar untuk penundaan yang lebih kecil. Ini adalah ukuran untuk "spread" dari nilai-nilai dan digunakan untuk menghitung kualitas server waktu, terutama jika Anda memiliki banyak pilihan.

Sven
sumber
Yakin tentang formula? Bagaimanapun, hanya t4-t2 dan t3-t1 yang dapat diketahui oleh pihak-pihak yang terlibat
Hagen von Eitzen
@HagenvonEitzen Waktu dapat dimasukkan dalam paket
Thomas
@ Bahkan saya juga percaya ada masalah dengan formula; lihat halaman 28 di sini dan juga Buku Putih ini , keduanya oleh Mills. Ngomong-ngomong Anda meletakkan t Anda, itu seharusnya offset = 1/2 * [(T2-T1) + (T4-T3)]dan `delay = (T3-T1) - (T4-T2) '
Ian Riley
Sven, apakah Anda ada t3/t4di tempat yang tepat dalam perjalanan pulang-pergi Anda yang khas? Aliran lalu lintas dan perhitungan keterlambatan tampaknya menunjukkan bahwa mereka harus sebaliknya: t4 -t1harus total RTT, t3-t2harus menjadi waktu yang dihabiskan di dalam server.
7

Dispersi dan kemiringan Anda sangat besar, ada offset yang sangat besar dari jam lokal ke rekan itu. Anda harus membandingkan offset dengan lokal datedan mengatur jam secara manual.

Dapatkan ntpd berjalan dan tunjukkan ntpq -pdari host menggunakan semua peer. Ini akan memilih yang lebih baik.

John Mahowald
sumber
Menambahkan ntpq -pnoutput ke pertanyaan saya. Terima kasih telah melihat ini.
Jeff
4
Mengimbangi dan jitter dalam ratusan? Itu tidak terlalu bagus. Anda menyebutkan tidak ada akses ke sumber-sumber Internet seperti pool.ntp.org tetapi yang berkinerja jauh lebih baik. Pertimbangkan untuk menambahkan jam referensi seperti GPS, sumber radio, input PPS atau yang serupa. Atau pilih host dengan jam lokal yang tidak semuanya.
John Mahowald
5

Menurut dokumentasi cisco ini , " dispersi , dilaporkan dalam detik, adalah perbedaan waktu jam maksimum yang pernah diamati antara jam lokal dan jam server". Dengan server ntp yang tidak sepenuhnya rusak, dispersi tinggi seharusnya tidak pernah terjadi. Satu-satunya skenario yang layak adalah ketika klien Anda masuk ke ntp dan sejauh ini hanya memiliki jam lokal yang tersedia. Dan bahkan kemudian, dispersi setinggi yang Anda laporkan berkorespondensi dengan jam yang mati lebih dari dua minggu .

Harus cukup untuk memastikan bahwa jam lokal tidak terlalu jauh di awal (bahkan beberapa jam masih dapat diterima), baik dengan menyesuaikan jam (dan bahkan tanggal!) Di BIOS atau dengan mengeluarkan ntpdatesatu kali sebelum memulai ntpdpada klien.

Hagen von Eitzen
sumber
1
ntpclient melaporkan nilai dalam mikrodetik, jadi dispersi yang tercantum sebenarnya ~ 1,2 detik, bukan minggu :) Juga, interpretasi dalam dokumentasi Cisco itu tidak berlaku untuk nilai ini.
hobbs