Arvuti kellaaeg

Allikas: Kuutõrvaja

Arvuti ja aeg

Arvuti, nagu paljud muudki seadmed, toimib ajas. Operatsioonisüsteemil on oma 'ettekujutus' parasjagu käesolevast kellaajast ja sellest, millise kiirusega aeg liigub. Lisaks kasutajale nähtamatuks jäävatele, nö sisemistele toimingutele, mille juures arvuti aega arvestab, näiteks CD-seadmes laserkiire liigutamise tarvis, kasutatakse aega ka näiteks faili moodustamise kellaaja ülestähendamiseks. Esimesel juhul ei ole oluline mitte niivõrd see, mis kuupäev on, kuivõrd arvuti võime teatud 'rütmis' tegutseda. Teisalt on aga nimelt vajalik tagada, et arvuti kell vastaks sellele ajale, mida tädi raadios ütleb.

Lisaks failidega tegelemisele on kellaaeg oluline näiteks e-posti, veebiteenuste, autentimise ja logide tekitamise puhul.

Tänapäeval on maailmas levinud ajaskaalaks UTC (Coordinated Universal Time, lühend tuleb prantsuskeelest Temps Universel Coordonné), mis põhineb Maa pöörlemisel ümber oma telje, ja Gregoriaani kalender, mis põhineb Maa tiirlemisel ümber päikese. UTC aega levitatakse paljudel erinevatel viisidel, näiteks raadio ja satelliitide, kaasaskantavate kellade abil. Enamuse arvutikasutajate kellaaeg, nn kohalik ehk vööndiaeg, ei lange täpselt kokku etalonajaks peetava UTC ajaga, vaid on sellest täisarvu tundide võrra erinev. Kohalikku aega kasutatakse seepärast, et kell kaksteist oleks päike enamvähem oma kaare haripunktis. Eestis kasutatakse suveaega ja seega on meie aeg talvel kaks ning suvel kolm tundi UTCst taga. Näiteks kui Inglismaal on kell alles 7 hommikul, on meil kell juba 9 samal hommikul.

UTC ajaarvestus lähtub tseesiumi-133 aatomi lõhustumisest ning on praktiliseks kasutamiseks ideaalselt täpne ega sõltu Päikesesüsteemist. Klassikaliselt on pikka aega kasutatud ning tõenäoliselt kasutatakse veel kaua GMT (Greenwinch Mean Time) aega. GMT on keskmine päikeseaeg ja sõltub Maakera pöörlemisest. Kuna Maakera pöörlemine pole ühtlane ja varem või hiljem lähevad UTC ja GMT kellad üksteisest lahku, on kombeks korrigeerida UTC aega vastavaks GMT ajaga siis, kui erinevus ületab üht sekundit. Kui seda mitte teha, siis liiguksid UTC kellad päikeseajast märgatavalt eemale ning see oleks ebamugav.

Maakera pöörlemise ebaühtlus tuleneb tõusu ja mõõnaga seotud hõõrdumistest. Samuti sellest, et kevadel, mil puud lehte lähevad, kerkib märgatav mass maapinnast eemale, ja sügisel, kui lehed langevad, vastupidi. Sellega kaasneb Maa inertsimomendi muutus.

Kokkuvõttes Maa pöörlemine aeglustub, näiteks saja aastaga muutub aasta 0.8 sekundi võrra pikemaks.

Arvuti aja vaatamine ja seadmine

Personaalarvuti juures kõneldakse kahest kellast:

1. BIOSi kell ehk nn raua kell (ingl. k. hardware clock)

Enamikku tänapäeva arvutitesse on sisse ehitatud kvartsgeneraator ja riistvaraline loendur, mis katkestab protsessori töö millisekundites mõõdetavate ajaperioodide järel. Igal katkestusel suurendatakse arvuti sisemist kellaaega ühe ühiku ehk "tiksu" võrra (tick). Seda kellaaega saavad soovi korral kasutada programmid; neil on võimalus seda ka muuta. Osa operatsioonisüsteeme (enamik unixilaadseid) oskavad selle "tiksu" pikkust tarkvaraliselt suurendada või vähendada, et kompenseerida kvartsgeneraatori ebatäpsust. Biosi aega liigutab patarei, mis töötab aastaid ja tagab, et kell käiks ka siis, kui arvuti pole voolu all. BIOSi kellaaega saab näha käsuga

$ hwclock --show
Thu 29 Oct 2009 05:17:24 PM EET  -0.662560 seconds

Võimalik, et te peate selle käsu käivitamisel näitama programmi nime koos teega, näiteks /sbin/hwclock.

2. operatsioonisüsteemi kell - see kell põhineb BIOSi kellal, kuid ei pruugi näidu poolest sellega kokku langeda. Tarkvaraliselt saab süsteemiaega ka automaatselt korrigeerida, kui BIOSi kellal on omadus maha jääda. Enamus programme kasutab operatsioonisüsteemi aega.

Operatsioonisüsteemi kellaaega saab vaadata käsuga date

$ date

Kuna arvuti kella ebatäpsus tekib arvuti enda riistvara ja tarkvara viivitustest ja sisemise generaatori käigu ebaühtlusest, mille täpsus sõltub emaplaadil oleva kellakristalli täpsusest/kvaliteedist. On mitmeid tänapäevaseid arvuteid, millel BIOSi kell üsna täpne püsib ja samas leidub vanu masinaid, millel kipub kell üsna valeks minema. Samas ei pruugi kella valeks minemise probleem olla üldse arvuti riistvaralises kellas, vaid valeks läheb ainult operatsioonisüsteemi kell. Nende erinevust saab lihtsasti võrrelda käsuga hwclock. Arvuti erinevate taimerite ja operatsioonisüsteemide kellamajanduse kohta saab hea ülevaate dokumendist: http://www.vmware.com/pdf/vmware_timekeeping.pdf

Niisiis tekivad erinevate arvutite kellaaegade vahel tahes-tahtmata erinevused. Mõnda erinevust põhjustavat komponenti saab ennustada, mõni on aga juhuslik suurus ja pole ennustatav - näiteks sisemise generaatori käigu kõikumine.

Oma arvuti kahte kella saab seada juurkasutaja järgmiselt:

Operatsioonisüsteemi kell Linuxi's

# date 1105170209
Thu Nov  5 17:02:00 EET 2009

Operatsioonisüsteemi kell FreeBSD's

# date 0911051702
Thu Nov  5 17:02:00 EET 2009

BIOSi kell

# hwclock --systohc
# hwclock --set --date="12/31/2010 16:18:30"
# hwclock --hctosys
  • --systohc tähendab, et raua kell seatakse süsteemi kella järgi
  • --set --date="12/31/2010 16:18:30" tähendab, et kella seatakse real näidatud kuupäeva & kellaja järgi
  • --hctosys tähendab, et süsteemi kell seatakse raua kella järgi

Neid käske kasutades ja näiteks raadiost kellaaega kuulates saab ilmselt arvuti kellaaega paljude praktiliste vajaduste rahuldamiseks piisavalt täpselt paika seada.

Kellaaja teisendamine sekunditest

$ date -d @1312927850
Wed Aug 10 01:10:50 EEST 2011

Kellaaja teisendamine sekunditesse

$ date +%s -d "Wed Aug 10 01:10:50 EEST 2011"
1312927850

Arvuti aja seadmine NTP'ga

Selleks, et arvuti tarkvaraline kell püsiks pika aja, näiteks nädala jooksul õige tuleb selle näitu regulaarselt võrrelda etalonkella näiduga ning vajadusel korrigeerida. Tehnilistel põhjustel on võimatu varustada iga täpset aega vajavat seadet näiteks GPS (Global Positioning System) vastuvõtjaga. Küll aga on mõistlik sättida mõned arvutid Internetis tööle kesksete ajaserveritena. Nendelt saab õiget aega küsida juba suurem hulk sekundaarseid ajaservereid. Reeglina ei küsi "tavalised" arvutid ehk kliendid õiget aega otse kesksetelt ehk "primaarsetelt" serveritelt, vaid nad saavad õige aja sekundaarsetelt serveritelt.

Õige aja levitamiseks arvutite seas on välja töötatud spetsiaalne protokoll, NTP (Network Time Protocol).

Kõik kellade sünkroniseerimise levinud protokollid kasutavad oma töös sarnast mudelit. Võtnud vastu päringu, saadab ajaserver küsijale oma täpse kellaaja. Vastuse saanud klient muudab enda kella näidu vastuse saabumise hetkel. Kuid teatavasti liigub info Internetis muutuva kiirusega ja see kiirus ei võrdu enamasti valguse kiirusega ega ole ka lihtsalt arvutatav. Paketi liikumise täpse kiiruse saaks arvutada ainult siis, kui oleks teada (vähemalt) kellade erinevused - kuid seda alles püütakse kindlaks teha. Parim, mis teha annab, on mõõta kogu kulunud aeg päringu väljasaatmisest vastuse saabumiseni ja loota, et pakettide liikumise kiirus on mõlemas suunas enam-vähem sama.

NTP oluliseks iseloomujooneks on, et arvutid ei püüa oma kellasid vastastikku sünkroniseerida, vaid püüavad saavutada oma kellaaja võimalikult väikest erinevust UTC ajast. Mingi grupi NTP serverite ajad on üksteisele enamasti küllalt lähedal. See ei ole tingitud vastastikusest sünkroniseerimisest, vaid kõikide serverite püüdest saavutada võimalikult täpne UTC aeg. Seega ei sobi NTP mingi isoleeritud grupi arvutite kellade sünkroniseerimiseks, vaid eeldatakse, et kuskil leidub server, mis saab oma aja mingist välisest allikast, näiteks GPS-st.

Õiget aega levitatakse läbi ajaserverite hierarhia, kus iga server asub mingis kihis (stratum). Kihi number näitab, kui kaugel asub antud server või klient õige aja välisallikast, näiteks raadiokellast. 1. kihi serverid saavad oma aja välisallikast, 2. kihi serverid 1. kihi serverite käest ja nii edasi. Kihtide arvu maksimumiks on 15. (Madalama kihi serveriks nimetatakse seda, mille kihi number on väiksem.) Iga server valib ühe madalama kihi serveri, mille järgi ta oma kella sünkroniseerib. Üheks valiku kriteeriumiks on serveri kiht: püütakse valida välisallikale võimalikult lähedal olev server.

Ajaserveri hierarhiat kujutab järgmine skeem


               /--\
              |    | - GPS satelliit taevas
               \__/
--------------------------------------------------------------------
             --|--                --|--
1. kiht     |     |              |     |  GPS seadmega ühendatud 
stratum 1    -----                -----   arvutid
--------------------------------------------------------------------
2. kiht      -----      -----      -----      -----
startum 2   |_____|    |_____|    |_____|    |_____|     stratum 1 arvutite
                                                         kliendid          
---------------------------------------------------------------------
3. kiht     |_____|    |_____| 
startum 3

Esimese kihi masinate kellaaeg on kõige täpsem, sest nad on ühenduses etalonkellaga, näiteks GPSi seadme abil satelliitidega. Selliseid masinaid on maailmas vaid mõned sajad ning tavakasutajal ei ole viisakas otse nende kliendiks asuda.

Teise kihi NTP masin on seatud kliendiks esimese kihi masinale. Tavaliselt näidatakse iga NTP serveri jaoks ära 3 temast allapoole jäävat serverit, kusjuures töö käigus kasutatakse korraga ühte, kõige sobivamat, aeg-ajalt kontrollides, kas kasutatav on ikka kõige sobivam. Teise kihi masin on omakorda ise serveriks endast ülespoole jäävatele kolmanda kihi NTP masinatele.

Kolmanda kihi masinad asuvad ja teenindavad tüüpiliselt kohalikke võrke. Võrkudes asuvad ülejäänud arvutid, nö NTP kliendid, kuuluvad seega neljandasse kihti. Suurte kohalike võrkude puhul soovitatakse tekitada veel üks kohalik tase, viies kiht. Nii tekitatakse mõned asutusesisesed kolmanda kihi NTP serverid, mille klientideks saavad neljanda kihi NTP serverid, mis omakorda teenindavad nö lõppkliente. Kuigi NTP protokoll võimaldab kuutteist kihti, ei soovitata kasutada üle viie-kuue, kuna ülemisel kihtidel vead suurenevad.

NTP protokolli kohaselt on võimalik kellaaja hoidmine sadade pikosekundike täpsusega.

NTP serveri valik

Enne NTP kasutamist tuleb leida endale sobiv NTP server. Eesti oludes tuleks kasutada teise kihi servereid, soovitatav on valida enda interneti-teenuse pakkuja (ISP) server:

Eesti ISP'de (ehk TIX ja/või TLLIX liikmed) ajaserverid 19 august 2006 seisuga, küsida saab serverite infot käsuga ntpdate -d server

  • ntp.eenet.ee - stratum 1
  • ntp.uninet.ee - stratum 1
  • ntp.elion.ee - stratum 1
  • ntp.estpak.ee - parv, kus on ntp.elion.ee + 4 stratum 2 serverit
  • ntp.norby.ee - stratum 2
  • ntp.zeppelink.net - stratum 2
  • ntp.aso.ee - stratum 2
  • ntp.starman.ee - stratum 2, vastab ainult Starmani võrgus
  • ntp.online.ee - stratum 3

Vabu muu maailma ajaservereid leiab http://www.pool.ntp.org

pool.ntp.ee lehek kirjeldatud projekti eesmärgiks on luua lihtsalt kasutatav ja töökindel ajateenus, mis hajutaks koormust ja ei lubaks populaarsete ajaserverite üle koormamist. Praegu on selle projektiga liitunud üle 600 serveri.

.ee-domeenis (Eesti) on selle teenusega liitunud servereid vähe, vt: http://www.pool.ntp.org/zone/ee, seetõttu soovitatakse kasutada Euroopa servereid: http://www.pool.ntp.org/use.html

NTP praktiline kasutamine

Järgnevas vaatleme lihtsalt juhtu, mis kehtib nii NTP kliendi ehk lõppkasutaja, kui ka sellise arvuti jaoks, mis on omakorda teistele, endast ülespoole jääva kihi arvutite NTP serveriks.

Eeldades, et sobiv tarkvara on teie arvutisse juba installeeritud, tuleb esmalt kell panna enamvähem paika, näiteks NTP enda vahenditega, programmiga ntpdate

# ntpdate ntp1.eenet.ee

NTP konfiguratsioonifail /etc/ntp.conf on lihtsamal juhul selline

listen on ip
server ntp1.eenet.ee
server ntp2.eenet.ee

Parameetri server taga tuleb näidata madalamale jääv NTP server, kellelt teie hakkate kellaaega saama. Parameetri driftfi järel näidatakse faili nimi, mille NTP ise tekitab töö käigus ja seal olev arv on seotud teie arvuti ebarütmilisusega, mida on vaja NTP töö jätkamiseks, kui näidatud alumise kihi serverid ajutiselt ei peaks töötama. Allpool asuvad serverid tuleks valida nii, et nad on üksteisest sõltumatud, st NTP hierarhias peaksid nad viima välja erinevate GPSi seadmetega ühendatud ajaserveriteni.

NTP serveri käivitamine toimub selliselt

# ntpd -l /var/log/ntp.log

kus võtme -l taga on näidatud NTP logi faili nimi.

Kui te muudate ntpd serveri konfiguratsiooni, siis tuleks ajaserver seisata ning taas käivitada. Seiskamine toimub näiteks protsessi lõpetamisega

# killall ntpd

NTP serveril kulub peale käivitamist ivake aega (ca 8 minutit), et sünkroniseeruda endast allpool oleva serveriga.

Programmi ntpq abil saab näha, millised masinad on konfigureeritud teie jaoks NTP serveriteks ja millist neist parasjagu kasutatakse (tärniga tähistatud)

# ntpq -p ntp.eenet.ee
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 LOCAL(0)        LOCAL(0)        15 l    9   64  377    0.000    0.000   0.244
*SHM(0)          .GPS.            0 l   54   64  377    0.000    0.000   0.244
 SHM(1)          .LFa.            0 l    -   64    0    0.000    0.000 4000.00
+ntp.elisa.ee    .GPS.            1 u    7   64  377    5.528    0.447   0.289
+tt56.ripe.net   .GPS.            1 u   24   64  377    4.131    0.112   0.244

Et näha, kus te asute NTP hierarhias, kasutage programmi ntptrace

# ntptrace ntp.ut.ee
ntp.ut.ee: stratum 2, offset -0.001896, root distance 0.001425
ntp.eenet.ee: stratum 1, offset 0.000000, root distance 0.000000, refid 'GPS'

Programmi väljundist näeme, et masin ntp.ut.ee asub ise teises kihis, kusjuures ta suhtleb esimese kihi masinaga ntp.eenet.ee.

Ntpdate sarnaselt toimib ka programm rdate

# rdate -s ntp1.eenet.ee

Kui võtme -s asemel kasutada võtit -p, siis kella ei seata, vaid ainult näidatakse, kui palju kauge masin, näite puhul ntp1.eenet.ee, ütleb kella olevat.

Kui te olete üksikkasutaja, siis sellega asi piirdub. Aga kui te tekitate näiteks modemi abil ainult lühiajalisi internetti ühendumisi, mis ei kesta piisavalt pikka aega (mõni tund), et tekiks driftfail, siis on teil mõtekas piirduda üldse vaid arvuti kella seadmisega programmi ntpdate abil.

Võrguadministraatorile

Soovides hoida kohalikku arvutivõrku moodustavate arvutite kellad NTP abil õiged, peate kirjeldatud moel tööle seadma oma võrgu ühe arvuti, kohaliku NTP serveri. Ülejäänud arvutid tuleb konfigureerida kohaliku NTP serveri klientideks. See toimub sarnaselt, ülaltoodud konfiguratsioonifail sobib nii NTP serveri kui ka kliendi jaoks. Antud juhul jäävad kohalikud kliendid neljandasse kihti.

Süsteemide administraatorid peavad hooldatavate arvutite kellade seadmisel lähtuma järgmistest kaalutlustest:  

  1. Soovitav on valida täpse aja allikaks mitu ajaserverit, lähtudes nii nende usaldatavusest kui ka kaugusest. Kui ühendus ajaserveriga katkeb, ei mõju see isegi suhteliselt pika perioodi jooksul ajaarvestusele katastroofiliselt.
  2. Tavalisel tööjaamal ehk tavakasutaja arvutil ei soovitata täpset aega küsida vahetult esimese taseme serverilt, sest suure arvu klientide puhul tekib oht server üle koormata. Keelatud on oma kella sünkroniseerida serverite abil, mis ei ole selleks selgesõnaliselt lubatud. Ka avalikuks kasutamiseks mõeldud serverite puhul peetakse heaks tooniks teavitada serveri administraatorit või omanikku tema teenuse kasutamisest.
  3. Ei ole soovitav seada oma arvuti kella sellega samal tasemel oleva serveri järgi.
  4. Kui administreeritavale domeenile seatakse üles mitu ajaserverit, siis on soovitav igaühele valida erinev madalama taseme ajaserver.

Ntp serveri peegeldusrünnakud ja turvalisus 2014 aasta jaanuari seisuga.

Kui NTP serverid vastavad monlist käsule saab neid kasutada teenusetõkestusrünneteks.

Kõige lihtsam viis monlist käsu eemaldamiseks on uuendada NTP versioonile 4.2.7 (mis eemaldab monlist käsu täielikult). Kui monlist'i siiski vajatakse, saab selle asendada mrulist käsuga. Või siis startida NTP deemon noquery võtmega. This will disable access to mode 6 and 7 query packetts (which includes monlist)."

Üks näide turvalisest ntp.conf failist oleks järgnev:

server ntp.eenet.ee
server ntp1.eenet.ee
# ipv6 ntp
server ntp6.eenet.ee

# Võõrastele on lubatud ainult kella küsimine
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
restrict 193.40.133.0 255.255.255.0
restrict 193.40.0.0 255.255.255.0
restrict -6 2001:bb8:2001:: mask ffff:ffff:ffff::

Igasugu allik-IP võltsimisega seotud rünnetest pääsemiseks on soovitav rakendada BCP 38 ja BCP 84.

Lugemist NTP peegeldusrünnete kohta:

Märkused

  • Töötava arvuti kellaaega saab iseenesest suhteliselt vabalt taha või ette keerata, aga eks peab arvestama selle mõju arvutis töötavatele protsessidele, nt andmebaas, veebiserveri küpsised jne. Lisaks võib peale arvuti kellaaja muutmist järgmisel algkäivitamisel arvuti mitte täiesti käivitud ja öelda konsoolile, lahenduseks on teha nii nagu öeldakse, fsck
Checking root file system .... fsck from util-linux-ng 2.17.2
/dev/sda2: Superblock last mount time (Sun Mart 17 09:27:03 2013,     
   now = Wed Mar 13 17:04:25 2013) is in the future.

/dev/sda2: UNEXPECTED INCONSISTENCY: RUN fsck MANUALLY.
(i.e., without -a or -p options)
...

Kasulikud lisamaterjalid

Arvutikellade ning turvalisuse teemadel: