RINA (lyhenne sanoista Recursive InterNetwork Architecture eli rekursiivinen internet-arkkitehtuuri) on kehitteillä oleva uusi tietoverkkojen arkkitehtuuri. Se on radikaalisti erilainen kuin Internetin tiedonsiirrossa nykyisin käytettävä TCP/IP-arkkitehtuuri. RINA pohjautuu ajatusmalliin, että kaikki tiedonsiirto tietoverkoissa on pohjimmiltaan ohjelmaprosessien välistä kommunikaatiota (Inter-Process Communication, IPC).

Perinteisestä, eri tehtäviin erikoistuneisiin kerroksiin (siirtokerros, verkkokerros, kuljetuskerros jne.) pohjautuvasta verkkomallista poiketen RINA lähtee ajatuksesta, että tarvitaan vain yksi toiminnallinen kerros, joka sisältää kaikki verkossa tarvittavat protokollat. Tätä yhtä "rakennuspalikkaa", josta käytetään nimitystä DIF (Distributed IPC Facility), päällekkäin pinoamalla rakennetaan verkkoon niin monta kerrosta, kuin ylläpidollisesti katsotaan tarpeelliseksi. Kaikki kerrokset sisältävät periaatteessa saman toiminnallisuuden, vain niiden näkyvyysalue (scope) on erilainen. Alimpana oleva kerros voi hoitaa esimerkiksi kahden reitittimen välistä fyysistä linkkiä, kun taas ylin kerros voi olla vaikka maailmanlaajuinen ("Public Internet DIF"). Kutakin kerrosta voidaan säätää erikseen erilaisten käytäntöjen (policy) avulla. Käytännöillä säädellään esimerkiksi käytettävää tiedon salausta, laatuasetuksia (QoS) ja kerroksen käyttöön vaadittavaa autentikointia.

Historia ja motivaatio RINA-arkkitehtuurin idean kehitti alun perin Bostonin yliopistolla työskentelevä John Day, joka on toiminut tietoliikenneprotokollien kehityksessä 1970-luvulta lähtien ja oli mukana muun muassa ARPANETin ja OSI-viitemallin kehitystyössä. Dayn mukaan tarve täysin uudelle verkkoarkkitehtuurille johtuu TCP/IP-arkkitehtuurin perustavanlaatuisista vioista ja puutteista, joiden korjaaminen lisäominaisuuksien ja uusien protokollien avulla on vaikeaa tai jopa mahdotonta. Näitä ovat esimerkiksi: IP-verkko reitittää dataa tietokoneiden verkkoliityntöjen välillä, ei sovellusohjelmien välillä. Ohjelmat tarvitsevat tietoliikennepalveluita, eivät verkkoliitynnät. Sovellusohjelmilla ei ole mahdollisuutta kertoa verkolle toivomaansa palvelun laatutasoa, ne voivat ainoastaan valita luotettavan (TCP) tai epäluotettavan (UDP) siirtotien välillä. Verkon kannalta kaikki ohjelmat ovat tiedonsiirtotarpeidensa osalta samanlaisia, kun oikeasti esim. VoIP-puheluyhteydellä on tiedonsiirrolle hyvin erilaiset laatuvaatimukset kuin vaikkapa www-sivun siirrolla HTTP-protokollan avulla. Verkolla ei ole mitään tietoa kommunikoivien sovellusten nimistä, vaan se käyttää verkkoliitynnän osoitteen (IP-osoite) ja kuljetuskerroksen porttinumeron muodostamaa paria tunnistamaan tiedon kulkutien päissä olevat sovellukset. Verkko käyttää siis tietoa missä tunnistamaan sen mikä kommunikoi. Joka kerran, kun sovellus vaihtaa liityntäpistettään verkkoon, se näyttää verkon kannalta eri sovellukselta. Tämä vaikeuttaa suuresti useamman verkkoliitynnän käyttöä sekä laitteen liikkuvuutta verkossa. Internet-verkko ei ole luonteeltaan hierarkkinen useiden verkkojen muodostama kokonaisuus, vaan yksi maailmanlaajuinen "litteä" verkko jossa eri toimijoiden aliverkot on liitetty yhteen peräkkäin ilman hierarkiaa, ja jossa on yksi yhteinen osoiteavaruus. Tämän seurauksena verkon reititys tapahtuu monimutkaisella järjestelmällä, jossa sekä toimijan oman verkon sisäinen reititys, että sen ulkopuolelle menevän liikenteen reititys tapahtuu samassa kerroksessa, tai jossa joudutaan käyttämään verkko-osoitteen muunnosta (NAT) mahdollistamaan muusta verkosta riippumattoman osoiteavaruuden käyttö.

Alun perin 1970-luvulla kehitettyä TCP/IP-arkkitehtuuria on kuluneiden vuosikymmenten aikana paranneltu ja korjailtu eri tavoin, kehittämällä uusia protokollia ja uudistamalla vanhoja sen verran kuin on ollut mahdollista. Se käsittää nykyään useita kymmeniä protokollia (vaikka sovelluskerroksen protokollia ei lasketa mukaan), joista kaikki eivät asetu kunnolla mihinkään tiettyyn TCP/IP-mallin kerrokseen (kuten esim. ARP tai MPLS). Täysin "puhtaalta pöydältä" kehitetty RINA taas lupaa suoriutua kaikista nykyisen TCP/IP-arkkitehtuurin tehtävistä, sekä myös tulevaisuuden tarpeista, käyttäen ainoastaan kahta protokollaa.

Käsitteitä Seuraavassa esitellään joitakin RINA-arkkitehtuurin keskeisiä käsitteitä.

Distributed Application Process (DAP). Hajautettu ohjelmaprosessi, prosessi joka kommunikoi toisen vastaavan prosessin kanssa IPCn avulla. Distributed Application Facility (DAF). Kahden tai useamman ohjelmaprosessin (DAP) muodostama kokonaisuus, joka kommunikoi IPCn avulla ja ylläpitää jaettua tilakuvaa. Prosessit voivat sijaita samassa laitteessa, tai useammassa RINA-verkkoon kytketyssä laitteessa. DAFeiksi lasketaan niin RINAn avulla kommunikoivat käyttäjäsovellukset, kuin myös pelkästään IPC-palveluja tarjoamaan erikoistuneet DIFit. Distributed IPC Facility (DIF). Pelkästään IPC-palvelujen tarjoamiseen erikoistunut DAF, koostuu kahdesta tai useammasta IPC-prosessista (IPCP). Sovellukset käyttävät DIFin palveluja kommunikoidakseen toisen sovellusprosessin kanssa. DIF on RINA-arkkitehtuurin kerros, joita päällekkäin pinoamalla verkon rakenne muodostetaan. IPC Process (IPCP). Ohjelmaprosessi joka hoitaa IPC-kommunikaatiota. IPCP on jäsenenä yhdessä ja vain yhdessä DIFissä. Error and Flow Control Protocol (EFCP). Protokolla jota käytetään tiedonsiirtoon DIFin jäseninä toimivien IPC-prosessien välillä. EFCP huolehtii siirrettävän tiedon luotettavuudesta, oikeasta järjestyksestä ja vuonvalvonnasta tarpeen mukaan. Se on jaettu kahteen aliprotokollaan (DTP ja DTCP). Data Transfer Protocol (DTP). EFCPn varsinainen tiedonsiirtoprotokolla, joka huolehtii tiedon paketoimisesta ja välittämisestä oikealle vastaanottajalle. Yksinään käytettynä tarjoaa vain epäluotettavan siirtotien, vastaten toiminnallisuudeltaan suunnilleen IP- ja UDP-protokollien yhdistelmää. Data Transfer Control Protocol (DTCP). EFCPn valinnainen osa, jota voidaan käyttää vain yhdessä DTP-protokollan kanssa. Huolehtii tiedonsiirron takaisinkytkentämekanismeista, kuten uudelleenlähetyksestä ja vuonvalvonnasta. DTP- ja DTCP-protokollien käyttäminen yhdessä tarjoaa luotettavan siirtotien, vastaten suunnilleen TCP-protokollan tarjoamaa toiminnallisuutta. Common Distributed Application Protocol (CDAP). Protokolla, joka tarjoaa oliopohjaisen IPC-kommunikaation sitä käyttävien sovellusten välille, vähän samaan tapaan kuin vaikkapa CORBA tai DCOM. Käyttää EFCP-protokollaa tiedon siirtämiseen. RINA-verkon hallinta tapahtuu CDAP-protokollan avulla, hallintaan käytettävät prosessit siirtävät sen avulla erilaista verkon hallinnassa tarvittavaa tietoa (esim. reititystauluja) toistensa välillä. Myös käyttäjäsovellukset voivat kommunikoida keskenään CDAPin avulla, jolloin niiden ei tarvitse itse huolehtia tiedon sarjallistamisesta tai I/O-operaatioista. CDAPin käyttö ei kuitenkaan ole pakollista, vaan sovellukset voivat valintansa mukaan käyttää myös suoraan EFCP-protokollaa, mikä mahdollistaa kaikkien olemassa olevien sovellusprotokollien (HTTP, FTP, SMTP jne.) käyttämisen myös RINA-arkkitehtuurissa. Connection. Kahden EFCP-protokollalla kommunikoivan tehtävän (EFCP-instanssin) välinen yhteys. Yhteys on aina kahden saman DIFin jäsenen välinen jaettu tilakuva. Eri DIFien (kerrosten) välillä tietoa ei välitetä protokollien avulla, vaan ohjelmallisten rajapintojen avulla yhden laitteen sisällä. Yhteyden avaaminen ja sulkeminen ei perustu kättelyihin (vrt. TCP-protokollan kolmoiskättelyt SYN- ja FIN-lippuineen) vaan ajastimiin. Yhteys avataan kun liikenne alkaa kulkea ja suljetaan (eli tilakuvan ylläpitämiseen varatut resurssit vapautetaan) taas määrätyn ajan kuluttua liikenteen loppumisesta. Yhteyden olemassaolo tai puuttuminen ei näy sovellukselle. Flow. Palvelu jonka EFCP-protokollan instanssi tarjoaa sitä käyttävälle sovellukselle, "tietovirta". Tietovirran tarjoavan EFCP-instanssin ja sitä käyttävän sovelluksen välistä sidosta kutsutaan portiksi. Vastaa periaatteessa TCP- tai UDP-protokollan tarjoamaa palvelua sovellukselle. Tietovirta aloitetaan ja päätetään sovelluksen niin pyytäessä, ja sen olemassaolo on erotettu itse yhteyden (ks. Connection edellä) olemassaolosta.

Toimintaperiaate pienoiskuva|kuva 1: Hajautettu ohjelmapalvelu (DAF) RINA pohjautuu periaatteeseen, että kaikki tietokoneiden tiedonsiirto on pohjimmiltaan aina ohjelmaprosessien välistä kommunikointia. Tämän IPC-mallin perusrakenne on hajautettu ohjelmapalvelu (Distributed Application Facility eli DAF), jonka rakenne esitetään kuvassa 1. Se koostuu kahdesta tai useammasta ohjelmaprosessista (Distributed Application Process, DAP) jotka yhteistyössä suorittavat jotakin tehtävää. Nämä prosessit kommunikoivat käyttäen sovellusprotokollaa (Common Distributed Application Protocol, CDAP), joka mahdollistaa kahden prosessin vaihtaa keskenään rakenteellista tietoa olioiden muodossa. CDAP tarjoaa prosesseille kuusi eri toimintoa etäprosessin olioiden käsittelemiseen (create, delete, read, write, start ja stop).

Voidakseen kommunikoida, DAF tarvitsee alleen kommunikaatiopalvelua tarjoavan ohjelmiston. Tämän palvelun tarjoaa toinen DAF, joka on erikoistunut IPC-palvelujen tarjoamiseen; siksi tätä erikoistunutta DAFiä kutsutaan nimellä DIF (Distributed IPC Facility, hajautettu IPC-palvelu). DIFin avulla DAP voi avata tietovirran (flow) toiseen DAPiin.

pienoiskuva|kuva 2: Esimerkki RINA-verkon kerrosrakenteesta DIF voi kommunikoida suoraan laitteiston kautta, tai se voi käyttää siirtotienä toista, alemman tason DIFiä. Koska jokainen DIF sisältää saman toiminnallisuuden, ei arkkitehtuuri sanele sitä, montako kerrosta verkossa on. Kerrosten määrän valitsee verkon rakentaja, joka voi pinota päällekkäin niin monta kerrosta kuin tarvitsee. Tästä saman kerroksen käyttämisestä useampaan kertaan johtuu termi "rekursiivinen arkkitehtuuri". Alimman kerroksen DIFit kommunikoivat suoraan fyysisen laitteiston kautta, kaikki niiden yläpuolella olevat kerrokset käyttävät siirtotienä allaan olevia DIFejä. Yksi mahdollinen esimerkki RINA-verkon kerrosrakenteesta esitetään kuvassa 2, jossa näkyvät myös IPC-prosessin eri toiminnallisuudet.

Koska jokainen kerros liittyy ylä- ja alapuolellaan oleviin kerroksiin identtisten rajapintojen kautta, ei minkään kerroksen tarvitse olla tietoinen verkon koko rakenteesta. Yksi kerros näkee vain suoraan ylä- ja alapuolellaan olevat kerrokset. RINA-arkkitehtuurissa käytetään kolmenlaisia osoitteita: sovellusnimiä (Application Name), solmuosoitteita (Node Address) ja liityntäosoitteita (Point of Attachment Address). Kukin kerros osoittaa yläpuolellaan olevaa kerrosta sovellusnimellä, toisia saman kerroksen jäseniä solmuosoitteella ja alapuolella olevaa kerrosta liityntäosoitteella. Tietylle kerrokselle sen yläpuolella oleva kerros on siis aina sovellus, riippumatta siitä onko kyseessä käyttäjäsovellus vai toinen DIF. Alapuolella oleva kerros taas on aina liityntäpiste verkkoon, oli kyseessä sitten fyysinen liityntä tai alemman kerroksen DIF.

Käyttäjäsovelluksen pyytäessä tietovirtaa toiseen sovellukseen, kohde valitaan käyttämällä halutun kohdeprosessin sovellusnimeä, ei osoitetta kuten TCP/IP-verkossa. Osoitteet ja portit ovat DIFin sisäistä tietoa, jotka eivät näy sovellusohjelmalle. Uuden IPC-prosessin liittyessä DIFin jäseneksi, sille allokoidaan yleensä dynaaminen osoite. Myös staattisten osoitteiden käyttäminen on mahdollista, mutta se ei ole välttämätöntä edes palvelinkoneiden kohdalla. Portit puolestaan allokoidaan dynaamisesti tietovirran alustuksen yhteydessä. RINA-arkkitehtuurissa ei siis ole globaaleja osoitteita, eikä niin kutsuttuja "hyvin tunnettuja portteja". Ainoa tarvittava tieto yhteyden saamiseen on sovellusnimi, eikä senkään tarvitse olla globaali. Sovellusnimi voidaan julkaista rajoitetulla näkyvyysalueella, jos sovellus ei ole tarkoitettu kaikkien verkon käyttäjien käyttöön.