Universaalne isehäälestumine

**Universaalne isehäälestumine** (*Universal Plug and Play*; **UPnP**) on tehnoloogia, mis võimaldab võrku ühendatud seadmetel (näiteks arvutid, Wi-Fi-seadmed, nutikad kodumasinad) automaatselt tuvastada üksteise olemasolu selles võrgus ning seejärel vahetada omavahel käske ja andmeid. UPnP lihtsustab lõppkasutaja jaoks oluliselt koduvõrku seadmete lisamist – kogu häälestusprotsess on automaatne ning seade on kohe kasutusvalmis. Peamiselt ongi see tehnoloogia mõeldud kasutamiseks väiksemates kohtvõrkudes.

## Ajalugu

UPnP standardi 1.0 andis välja 2000. aastal organisatsioon UPnP Forum. Versioon 1.1 avaldati 2008. aastal – sellega lisati IPv6 tugi ja tehti muid väiksemaid parandusi. UPnP Forum moodustati 1999. aasta lõpul, 2013. aasta lõpu seisuga üle 1000 liikme kõikjalt maailmast – juhtivad ettevõtted arvutitehnika, printerite, võrgutehnoloogia, koduelektroonika jm vallas. Foorum tegeleb aktiivselt UPnP-tehnoloogia edasi arendamisega. Seadmete sertifitseerimisega tegeleb foorumi liikmetest moodustatud UPnP Implementers Corporation (UIC).

UPnP on varasema isehäälestumistehnoloogia laiendus võrku ühendatud seadmetele. UPnP-ühilduv seade ühendub automaatselt võrguga, saab IP-aadressi, annab teistele seadmetele teada oma olemasolust ning pakutavatest teenustest, saab ise teavet teiste seadmete kohta. Samuti saab seadet võrgust eemaldada nii, et teised seadmed sellest aru saavad. Kui võrgus asuvad DHCP- ja/või DNS-serverid, kasutatakse nende teenuseid, aga nende olemasolu ei ole kohustuslik.

### UPnP põhimõtted

* Avalikud internetiprotokollid – UPnP-arhitektuuris on kasutusel IP, TCP, UDP, HTTP, XML.
* Sõltumatus seadmetest ja võrgutehnoloogiast – UPnP töötab kõigi tehnoloogiatega, mis toetavad Internetiprotokolli: Wi-Fi, Ethernet, Firewire jne.
* Sõltumatus kasutatavast platvormist – UPnP ei piira operatsioonisüsteemi või programmeerimiskeele valikut.
* Kontroll kasutajaliidese üle – UPnP võimaldab tootjal kujundada endale sobiv kasutajaliides ning lubada seda kasutada brauseri vahendusel.
* Laiendatavus – tootja saab lisaks UPnP-standardiga defineeritud teenustele lisada enda poolel lisafunktsioone.

### Rakenduskohtade näiteid

* Digitaalne meelelahutus – koduvõrgus saab muusikat, filme ja pilte kasutada suvalise sobiva seadmega hoolimata sellest, kus reaalselt andmed asuvad. Samuti hoolitseb UPnP selle eest, et mängukonsooliga Interneti vahendusel mitme mängijaga mängu mängimisel oleksid sobivad pordid ruuteris avatud. 
* Nutikad (kodu)masinad – võrguühendusega sensorid, külmkapid, küttesüsteemid jne suudavad edastada infot kesksesse kontrollsüsteemi (tavaliselt arvuti) ning täita keskusest tulnud juhtsignaale.

## UPnP-arhitektuur
Järgnev kirjeldus käib versiooni 1.1 kohta, aga on üldjoontes sama ka versioon 1.0 jaoks.

UPnP-arhitektuuris (*UPnP Device Architecture*, UDA) eristatakse kahte tüüpi seadmeid:
* juhtimispunkt (ingl *control point*) – seade, mis saadab juhitava(te)le seadme(te)le käske ja päringuid. Enamasti tarkvaraline (töötab arvutis).
* juhitav seade (ka lihtsalt "seade") – täidab juhtimispunktilt tulnud päringuid. Enamasti riistvaraline.
Võrgus võib korraga olla mitu juhtimispunkti kui ka juhitavat seadet.

UPnP osadeks on adresseerimine, avastamine, kirjeldus, juhtimine, sündmuste teavitus (ingl *eventing*) ja esitus.
Avastamine (*discovery*) kasutab andmete transpordiks UDP-protokolli. Ülejäänud osad kasutavad HTTP-protokolli.
Seadme ühendamisel võrku peab esmalt toimuma järjekorras: adresseerimine, avastamine ja kirjeldus. Seejärel võivad ülejäänud osad (juhtimine, sündmuste teavitus ning esitlus) juba aset leida paralleelselt ning üksteisest sõltumatult.

### Adresseerimine
UPnP toimimise eelduseks on, et iga seade ja juhtimispunkt saab endale IP-aadressi. Mõlemal peab olema DHCP klientrakendus ning võrku ühendades peavad nad esmalt otsima DHCP-serverit. Kui võrgus on DHCP-server olemas, peavad seadmed kasutama serveri määratud IP-aadressi. Kui DHCP-server puudub, peab iga seade endale ise määrama IP-aadressi, kasutades selleks Auto IP protsessi. Kui seadmele määrati DHCP-tehingu käigus domeeninimi, siis peaks seade kasutama järgnevates operatsioonides seda nime.

### Avastamine
Juhitava seadme lisamisel võrku annab ta oma võimalikest teenustest teada kõikidele juhtimispunktidele. Analoogselt, kui juhtimispunkt lisatakse võrku, siis saab ta otsida võrgust teda huvitavat teenust pakkuvaid seadmeid. Selles faasis vahetatavad teated on lühikesed, sisaldades ainult seadme või teenuse peamist infot (liik, nimi, URL täpsema kirjelduse asukohale).
UPnP kasutatav avastamisprotokoll on SSDP (*Simple Service Discovery Protocol*).

### Kirjeldus
Pärast seda, kui eelmise punkti käigus on juhtimispunkt teada saanud juhitava seadme olemasolust võrgus, on tal vaja selle seadme võimaluste kohta rohkem informatsiooni. Selle info saab juhtimispunkt seadme poolt avastamise teates kirjeldatud URL-ilt.

Seadme kirjeldus on XML-vormingus dokument, mis on jagatud kaheks loogiliseks osaks: 
# seadme kirjeldus (füüsiliste ja loogiliste konteinerite kirjeldus) ja iga pakutava teenuse jaoks; 
# teenuse kirjeldus (missugust võimekust seade võimaldab kasutada).

*Seadme kirjeldus* sisaldab täpset tootja ning mudeli infot, aga lisaks ka seadme pakutavate teenuste nimekirja ning iga teenuse jaoks: teenuse liik, teenuse nimi, URL teenuse kirjelduse jaoks, URL juhtimise jaoks, URL sündmuste teavituse jaoks, URL esitluse jaoks.

*Teenuse kirjeldus* sisaldab käskude nimekirja, millele teenus reageerib, ning parameetreid iga käsu tarbeks. Samuti teenuse seisundimuutujate nimekirja. Seisundimuutujate väärtused mingil ajahetkel kirjeldavad teenuse seisundit sellel ajahetkel.

### Juhtimine
Kui juhtimispunkt on saanud informatsiooni seadme ning selle pakutavate teenuste kohta, on tal võimalik neid teenuseid välja kutsuda ning teenustele juhtimiskäske saata – samuti saada tagasisidet käsu täitmise kohta.
Seadme juhtimiseks peab juhtimispunkt saatma sobival kujul teate seadme kirjelduses (eelmine punkt) toodud URL-il. Sarnaselt saab juhtimispunkt küsida seadmelt seisundimuutujate hetkeväärtusi.
Teated peavad olema vormistatud XML-dokumendina kasutades SOAP- (*Simple Object Access Protocol*) protokolli.

### Sündmuste teavitus
Seadme kirjelduses on kirjas teenused, mida seade pakub, ning teenuste hetkeseisu kirjeldavad seisundimuutujad. Kui mõne muutuja väärtus muutub (näiteks juhtimiskäsu täitmise tulemusena), siis teavitab seade sellest automaatselt kõiki juhtimispunkte, mis on tellinud temalt vastava info. Tellimiseks peab juhtimispunkt eelnevalt saatma tellimisteate, samuti peab ta tellimust vajadusel uuendama (seade informeeris eelnevalt, kui kaua tellimus kestab). Kõikidele tellijatele saadetakse info kõikide seisundimuutujate muutuse kohta (s.t ei saa tellida ainult mõne muutuja kohta infot).
Muutuste infot edastavad teated sisaldavad uue väärtuse saanud muutujate nimesid ja väärtusi.

### Esitlus
Kui seadme kirjelduses oli toodud URL kirjelduse jaoks, siis saab juhtimispunkt sellel aadressil asuva lehe kuvada brauseris ning sõltuvalt lehel kirjeldatud funktsioonidest lubada ka kasutajal seadet juhtida selle lehe kaudu. Mingeid standardeid ega reegleid siinkohal sellele lehele ei ole (peale selle, et peab kasutama HTML-i), seega on see tootja suva, missuguseid funktsioone ta lubab kasutada.

### Protokollipinu

## Seadmejuhtimisprotokollid
Eri liiki seadmete jaoks on välja töötatud ka täpsemad standardid, mida tootjad võivad oma seadmetes kasutada. Kaetud on audio/video esitus, koduautomaatika, ruuterid, printerid, kaugjuhtimine, skannerid, sensorid ja telefonid.

## Probleemid
UPnP spetsifikatsioon  ise ei sisalda autentimise protseduuri (igal võrku lisatud seadmel on õigus saata teateid teistele ning paluda neilt mingi juhtimiskäsu täitmist). Seega peavad seadmete valmistajad ise implementeerima autentimise reeglid või kasutama UPnP Forumi kirjeldatud teenust Device Security Service.
Kahjuks tootjad tihtipeale aga ei ole rakendanud mingisugust autentimisprotokolli ning seadmed eeldavad, et ülejäänud samas võrgus asuvad seadmed on täiesti usaldusväärsed.

2013. aasta jaanuaris avaldas Bostonis asuv ettevõte Rapid7 pool aastat kestnud uuringu tulemused. Nad skannisid üle maailma arvutivõrkudes asuvaid UPnP-võimalusega seadmeid (peamiselt siiski ruutereid) ning tuvastasid nendes seadmetes turvavigu (UPnP-ga seotud). Ligi 2% (81 miljonit seadet, 6900 mudelit) kõikidest seadmetest oli internetist (s.t väljastpoolt kohtvõrku) tulevatele UPnP-teadetele avatud. Samuti leiti muid väiksemaid ja suuremaid probleeme, mis kujutavad seadmete omanikele suurt turvariski.

## Vaata ka
* XML
* NAT

## Viited

## Välislingid
* UPnP sertiftseeritud seadmete nimekiri
* Security Now 389: Unplug UPnP
* Ruuteri turvalise test (kas UPnP on avatud välisvõrgule)
* http://www.dlna.org/