Časovno usklajevanje računalnikov v omrežju Linux

Objavljeno: 31.3.2005 08:37 | Avtor: Dalibor Kranjčič | Kategorija: Programer | Revija: September 2004

Protokol omrežnega časa (NTP - Network Time Protocol) je sistem za usklajevanje računalniških ur v krajevnem omrežju. Protokol je začel razvijati Dave L. Mills leta 1980 in postavil temelj prvih algoritmov za časovno usklajevanje računalnikov. Trenutno sta na voljo dve osnovni različici: NTPv4 (različica 4) in poenostavljena različica protokola omrežnega časa SNTP (Simple Network Time Protocol).

Osnove protokola omrežnega časa

Protokol NTP izvaja statistično obdelavo zakasnitev in drugih podatkov, potrebnih za izračun vrednosti odmika od usklajenega univerzalnega časa UTC (Universal Coordinated Time).

Praktično usklajevanje računalniških ur se izvaja s pomočjo spletnih (internetnih) strežnikov omrežnega časa (NTP strežnikov). Seznam teh najdete na spletni strani http://www.eecis.udel.edu/~mills/ntp/servers.html .

Celotna hierarhija strežnikov NTP je porazdeljena glede na točnost referenčne ure na plasti, poimenovane stratum. Manjša vrednost številke pri ključni besedi stratum pomeni višjo raven v hierarhični strukturi in večjo časovno točnost. Največje število plasti je 16.

Primarni strežniki so strežniki z največjo časovno točnostjo. So v plasti stratum1. Kot časovni vir uporabljajo referenčne radijske ure oziroma sprejemnike vrste DCF77 ali GPS (Global Positioning System). DCF77 je dolgovalovni radijski oddajnik, ki stoji v Mainflingenu pri Frankfurtu, in oddaja uradno časovno referenco v Nemčiji.

Čas ene sekunde je določen kot interval 9192631770 ciklov prehoda med dvema hiperfinima nivojema atoma Cezija 133 v osnovnem stanju. Oddajniki GPS in DCF77 signalov so neposredno vezani na atomske (Cezijeve) ure. Sprejemniki takega oddajanja torej sodijo v najvišji razred točnosti stratum0.

Skratka, na voljo so javno dostopni strežniki plasti startum0 in stratum1, ki se lahko uporabijo za časovno usklajevanje omrežja, vendar so zaradi vse večjega prometa na primarnih strežnikih določene omejitve.

Pogoji za sekundarni (stratum2) strežnik so naslednji:

  • sekundarni strežnik omogoča sinhronizacijo številne populacije drugih strežnikov velikosti 100 ali več;
  • strežnik deluje v kombinaciji z dvema ali po možnosti tremi sekundarnimi strežniki v skupnem časovno usklajenem podomrežju, načrtovanem za izvedbo zanesljive storitve tudi ob izpadu določenih strežnikov;
  • upravitelj, zadolžen za upravljanje sekundarnih strežnikov, je odgovoren za usklajevanje drugih strežnikov v regiji z namenom zmanjševanja potrebnih virov zunaj te regije.
  • Za zagotavljanje zanesljivosti delovanja je potrebna časovna usklajenost odjemalcev na različne strežnike - praviloma od 3 do 5 strežnikov iz različnih omrežij.

    Alternativa časovnemu usklajevanju na javno dostopne strežnike je nakup lastnega sprejemnika DCF77 ali GPS in njegova priključitev na krajevni strežnik v omrežju. Glede na izvedbo razlikujemo nekaj osnovnih vrst sprejemnikov DCF77 in GPS:

  • samostojne enote, ki jih ponavadi srečujemo na industrijskih objektih v modularni izvedbi;
  • elektronska vezja velikosti plačilne kartice;
  • kartice "vstavi in poženi" (plug&play) z vmesnikom ISA ali PCI.
  • Omenjene radijsko usklajene ure se priključijo na zunanje okolje (računalnik) prek zaporednih vrat (COM). Izhodni signal radijske ure je pravzaprav niz, sestavljen iz 32 znakov ASCII, ki se periodično ponavljajo vsako sekundo.

    Izhodno sporočilo radijske ure ima naslednjo obliko:

    <STX>D:dd.mm.yy;T:w;U:hh.mm.ss;uvxy<ETX>

    <STX> - Začetek sporočila (Start Of Text) (koda ASCII 02h)

    dd.mm.yy - trenutni datum:

    dd - dan v mesecu (01..31)

    mm - mesec (01..12)

    yy - leto v stoletju (00..99)

    w - dn v tednu (1..7, 1 = ponedeljek)

    hh.mm.ss - trenutni čas:

    hh - ura (00..23)

    mm - minute (00..59)

    ss - sekunde (00..59)

    uv - znaki stanja:

    u - '#' - Sinhronizacija še ni bila izvedena po zadnji prekinitvi

    u - ' ' - (presledek, 20h) izvedena sinhronizacija po zadnji prekinitvi

    v - '*' - Uro DCF77 trenutno poganja oscilator na podlagi kvarčnega kristala (XTAL)

    v - ' ' - (presledek, 20h) ura DCF77 je usklajena z oddajnikom.

    x - oznaka časovnega pasu:

    'U' - UTC - usklajeni univerzalni čas

    ' ' - MEZ - srednjeevropski časovni pas (Mittel Europäische Zeit)

    'S' - MESZ - srednjeevropski poletni čas (Mitteleuropäische Sommerzeit)

    y - sporočilo o časovni prekinitvi, aktivirano zadnjo uro pred prekinitvijo

    '!' - napoved začetka ali konca poletnega časa

    'A' - napoved časovne korekcije standardne minute z vstavljanjem dodatnih sekund (leap seconds)

    ' ' - (presledek, 20h) ni napovedi

    <ETX> - Konec sporočila (End Of Text) (koda ASCII 03h)

    Notranje računalniške ure

    Razlikujemo dve računalniški uri: strojno (hardware CMOS clock) in sistemsko (system clock). Strojna ura je del strojne opreme in ima svoj vir energije (baterijo) neodvisno od napajanja računalnika. Vrednost strojne ure se obdrži tudi ko računalnik ugasnemo. Strojno uro se lahko nastavi tudi pri zagonu računalnika s preklopom (tipki F1 ali DEL) v BIOS (Basic Input Output System).

    Sistemska ura je del operacijskega sistema, ki pri zagonu prevzame vrednost strojne ure za svojo lastno vrednost.

    Izbira krajevnega časa ali časa UTC

    Linux pri zagonu požene program /sbin/hwclock, ki preslika trenutni čas strojne ure v sistemsko uro. Možna je izbira časa UTC ali krajevnega časa. Izbiri se omogoči z urejanjem nastavitev v datoteki /etc/sysconfig/clock ali pa "ročno" z dodajanjem izbire --utc pri zagonu programa hwclock.

    Nastavitev sistemske in strojne ure

    Sistemski čas in datum se določi s pomočjo ukaza date.

    Zgled:

    Za nastavitev trenutnega datuma na 07. 06. 2004 in časa na 14:56 v ukazni lupini se vtipka:

    # date 060714562004

    Strojno uro se nastavi s pomočjo sistemske ure, in sicer tako, da se preslika predhodno nastavljeno vrednost sistemske ure v strojno uro. To se naredi z ukazom hwclock:

    # hwclock --systohc --utc

    Stikalo --utc določa, da je strojna ura nastavljena na čas UTC.

    Trenutno vrednost strojne ure se odčita na naslednji način:

    # hwclock -show

    Mon 7 Jun 2004 05:23:55 PM CST -0.864036 seconds

    Nastavitev časovnega pasu

    V Linuxu se izbira časovnega pasa izvede s pomočjo simbolične povezave /etc/localtime na datoteko v mapi /usr/share/zoneinfo, ki ustreza našemu časovnemu pasu.

    Zgled: v Sloveniji se izvede simbolična povezava na datoteko /usr/share/zoneinfo/Europe/Ljubljana:

    # ln -s /usr/share/zoneinfo/Europe/Ljubljana /etc/localtime

    Demon NTP

    je sistemski program v Linuxu, ki teče v ozadju in izvaja časovno usklajevanje računalnika po protokolu NTP. Srečevali ga boste pod imeni ntpd ali xntpd, odvisno od distribucije. Skladno s tem bodo načini njegovega zagona, zaustavitve in vnovičnega zagona prav tako različni:

    Red Hat Linux:

    # service ntpd start     

    # service ntpd stop

    # service ntpd restart

    ali pa

    # /etc/rc.d/init.d/xntpd start

    # /etc/rc.d/init.d/xntpd stop

    # /etc/rc.d/init.d/xntpd restart

    SuSE Linux:

    # rcxntpd start

    #/etc/rc.d/xntpd start

    Druge distribucije Linuxa:

    # /etc/init.d/ntpd start

    Konfiguracija demona NTP se ureja s pomočjo datoteke /etc/ntp.conf. Ključna beseda datoteke ntp.conf je server (strežnik), sledi ji računalnik oziroma referenčni časovni vir, ki je podan z naslovom IP ali gostiteljskim imenom (host name). V tem računalniku prav tako deluje demon NTP.

    Posebni viri časovnega signala na primer ure DCF77 ali GPS nimajo običajnih naslovov IP, temveč navidezne naslove IP:

    127.127.8.n - navidezni naslov IP sprejemnika DCF77 ali GPS

    172.127.1.0 - navidezni naslov krajevne ure

    Nastavitve dostopa do ure DCF77 ali GPS (ntp.conf)

    Sistem se nastavi na referenčni signal radijskih ur s simbolično povezavo /dev/refclock-n na datotečno napravo (device file), ki ustreza zaporednim vratom (COM), na katera je radijska ura priključena.

    Priklop na radijsko uro se definira v datoteki ntp.conf s pomočjo ključne besede server in navideznega naslova IP 127.127.8.n. Pri tem je n indeks zaporednih vrat v razponu od 0 do 3, ki se ujema z indeksno številko simbolične povezave /dev/refclock-n. Temu sledi ključna beseda mode in številka, ki določa vrsto radijske ure:

    mode 0 - Meinberg PZF535 (FM /TCXO)

    mode 1 - Meinberg PZF535 sprejemnik (FM/OCXO)

    mode 2 - Meinberg PZF535 sprejemnik (FM/OCXO)

    mode 3 - ELV DCF7000 (AM)

    mode 4 - Walter Schmid DCF (AM)

    mode 5 - Conrad DCF77 modul

    mode 6 - TimeBrick DCF77 modul

    mode 7 - Meinberg GPS166

    mode 8 - IGEL

    mode 9 - Trimble SV6 GPS, protokol TAIP

    mode 10 - Trimble SV6 GPS, protokol TSIP

    mode 11 - RCC 8000

    mode 12 - HOPF Funkuhr 6021

    Postopek je naslednji:

    Če je radijska ura npr. priključena na prva zaporedna vrata (COM1), ki ustrezajo datotečni napravi /dev/ttyS0, se najprej ustvari simbolična povezava /dev/refclock-0:

    # ln -s /dev/ttyS0 /dev/refclock-0

    Nato se, odvisno od vrste radijske ure, ustrezno spremeni vrstica datoteke /etc/ntp.conf , ki vsebuje ključno besedo server, ter navidezni naslov, namenjen radijskim napravam:

    server 127.127.8.0 mode 5 prefer # Conrad DCF77 modul

    Ključna beseda prefer označuje zaželen referenčni vir signala, če bi se na primer poleg radijske ure sklicevali še na strežnike v omrežju ali zunaj njega, ki predstavljajo rezervne vire.

    Nastavitve krajevnega časa in drugih strežnikov

    Kot vir referenčnega signala za demon NTP se lahko nastavi poljuben strežnik v omrežju ali pa krajevni čas lastnega računalnika v datoteki ntp.conf .

    Zgled:

    server 127.127.1.0 # krajevni čas (local clock - LCL)

    fudge 127.127.1.0 stratum 12 # krajevni čas ni usklajen

    server strežnik 1

    server strežnik 2

    server ...

    Ključna beseda fudge omogoča izbiro dodatnih opcij za krajevno uro (local clock). Z vrednostjo stratum12 se poudari manjša točnost krajevne ure.

    Pridobivanje začetne vrednosti časa (ntpdate)

    Tako, nastavitve v datoteki ntp.conf in simbolična povezava na datotečno napravo so urejene. Načeloma se lahko požene demon NTP, vendar bo časovno usklajevanje neuspešno, če se sistemski čas razlikuje od referenčnega za več kot nekaj minut.

    Potrebna je točna vrednost časa že pred zagonom demona NTP. V tem smislu se za pridobivanje začetnega časa uporabi ukaz ntpdate. Ta bo popravil odmik od sistemskega časa in prevzel vrednost časa iz podanega strežnika:

    # ntpdate ime_strežnika_začetnega_časa

    Priporočljivo je, da se ukaz ntpdate požene ob zagonu računalnika s pomočjo opcije -b (boot), in sicer vedno pred zagonom demona NTP:

    # ntpdate -b ime_strežnika_začetnega_časa

    Preverjanje časovne usklajenosti (ntpq)

    Kot pomoč pri preverjanju statusa demona NTP ter usklajenosti računalnika na določen časovni vir se uporabi ukaz ntpq:

    # ntpq -p

    remote refid st t when poll reach delay offset jitter

    =======================================================================

    LOCAL(0) LOCAL(0) 12 l 30 64 377 0.000 0.000 0.000

    *GENERIC(0) .DCFa. 0 - 24 64 377 0.000 0.050 0.003

    +172.16.3.105 .PPS. 1 u 36 64 377 1.306 -0.019 0.043

    Zgornja tabela je izhodni izpis ukaza ntpq, iz katerega je razvidno, da demon NTP deluje in ima tri različne časovne vire: lastni čas (LOCAL), radijsko uro vrste DCF77 ter računalnik, podan z naslovom IP.

    Pomen znakov, kratic in polj v izhodnem izpisu ukaza ntpq:

    *

    Znak * pred nazivom časovnega vira označuje primarni oziroma zaželeni (prefer) časovni vir.

    +

    Znak + pred nazivom časovnega vira označuje druge zanesljive časovne vire.

    .LCL

    Krajevni čas računalnika.

    .DCF

    Časovni vir vrste DCF77.

    .PPS

    Referenčna ura je usklajena s pulzi strojne ure.

    st

    Vrednost številke stratum referenčne ure.

    when

    Števec, s katerim je zagotovljena kakovost in dosegljivost časovnega vira: V trenutku, ko števec when doseže vrednost poll, podano v isti vrstici, demon NTP izvede povpraševanje po vrednosti trenutnega časa iz časovnega vira. Nato demon NTP ponastavi števec when na vrednost 0.

    poll

    Glej razlago, podano v zgornjem polju.

    reach

    Vrednost 8-bitnega pomičnega (shift) registra:

    Demon NTP mora večkrat doseči vrednost referenčne ure, preden bo izbral zaželeni časovni vir in ga označil z zvezdico. Pogoj za to je vrednost v registru reach, različna od 0, in določeno število uspešnih povpraševanj časovnega vira. Ob vsakem uspešnem povpraševanju časovnega vira se v registru reach izvede premik vrednosti "1" z desne na levo. To pomeni, da se celotna vrednosti registra spreminja v naslednjem zaporedju: 0, 1, 3, 7, 17, 37, 77, 177 in 377. Maksimalna vrednost 377 se doseže, ko je vseh 8 zadnjih povpraševanj časovnega vira uspešnih.

    delay

    Zakasnitev v ms.

    offset

    Razlika med referenčnim in sistemskim časom.

    jitter

    Velikost trepetanja (jitter) med posameznimi časovnimi povpraševanji. Sprememba v časovnem usklajevanju ali času prihoda sprejetega signala.

    Naroči se na redna tedenska ali mesečna obvestila o novih prispevkih na naši spletni strani!
    Prijava

    Komentirajo lahko le prijavljeni uporabniki