2.
JOHDATUS YHTEYSKÄYTÄNTÖIHIN
Lähdemme
nyt tarkastelemaan, miten edellisessä luvussa esitellyn kaltaisia ja
muita,
käyttäjän omista tarpeista lähteviä tiedonsiirtoa käyttäviä sovelluksia
toteutetaan. Lähtökohtana ovat sovellukselle asetettavat vaatimukset,
joista
tärkeimpiä ovat
–
tiedonsiirron
virheettömyys
–
riittävä
siirtonopeus
–
luottamuksellisuus
–
standardien
mukaisuus,
jotta vastaanottaja kykenisi tulkitsemaan tiedot sekä
–
kaiken
tämän toteuttaminen
mahdollisimman alhaisin kustannuksin.
Vaatimukset
ovat osaksi keskenään ristiriitaisia ja etenkin mahdollisia
virhetilanteita on
lukuisia erilaisia tiedonsiirron eri vaiheissa. Lisäksi vaatimusten
painoarvo
ja keskinäinen tärkeysjärjestys vaihtelee tapauksesta toiseen. Jotta
tilanne
pysyisi hallinnassa sovellus on jaettava osiin, joista kukin ratkaisee
yhden
osaongelman.
2.1
Asiakas – palvelinperiaate
Tietoliikennettä
käyttävä sovellus (sähköposti, WWW-palvelu, jossain muualla sijaitsevan
tietokoneen
etäkäyttö, firman oma kirjanpito- tai tilaustenkäsittelysovellus…)
voidaan karkeasti
jakaa seuraaviin osiin
–
tietokone,
jonka ääressä
käyttäjä istuu, ja siinä käytössä oleva ohjelma
–
toinen
tietokone
ohjelmineen, jolta käyttäjä voi oman tietokoneensa ja
tietoliikenneyhteyden
välityksellä pyytää palveluja sekä
–
jonkinlainen
koneita
yhdistävä tietoliikenneverkko, jonka välityksellä ohjelmat
kommunikoivat
keskenään.
Ensimmäisestä,
käyttäjän kanssa kommunikoivasta ohjelmasta käytetään tavallisesti
nimitystä asiakas (client) ja toisesta
ohjelmasta nimitystä palvelin (server).
Toisinaan,
esim. pelattaessa jotakin peliä verkon yli, on kysymys kahden eri
tietokoneen
ja niiden käyttäjien välisestä kommunikoinnista ja tilanne on melko
symmetrinen
(käytetään nimityksiä peer-to-peer tai
client-client). Tällöin toiminnan
aloittaja (perinteistä puhelinterminologiaa käyttäen A-tilaaja)
on teknisessä mielessä asiakas ja toinen osapuoli (B-tilaaja)
palvelin. Jos taas on
kysymys monenkeskisestä tiedonsiirrosta yhdellä palvelimella voi olla
useita
asiakkaita tai asiakkaan ja palvelimen roolit voivat vaihdella
tilanteen mukaan
(esim. A pyytää palvelua B:ltä ja tämä puolestaan C:ltä).
2.2
Ohjelman pääosat
Sekä
asiakas- että palvelinohjelma jakautuvat edelleen pienempiin osiin.
Eräs tärkeä
rajapinta (interface) on jako varsinaiseen sovellukseen (esim.
sähköposti) ja
tietoliikenneosaan. Tietoliikenneosa on käytännössä joukko aliohjelmia
(funktioita, metodeja). Tietoliikenneohjelmisto hankitaan yleensä
valmiina.
Asiakas- ja palvelinkoneen tietoliikenneohjelmat kommunikoivat
keskenään jonkin
verkon välityksellä. Myös sovellusohjelman asiakas- ja palvelinosat
kommunikoivat (näennäisesti eli virtuaalisesti)
suoraan keskenään. Tietoliikenneohjelma ja verkko toimivat välissä
läpinäkyvästi ja huolehtivat monista tavallisista, sovelluksesta
riippumatta
samantapaisina toistuvista tietoliikenteeseen liittyvistä tehtävistä,
mm.
siirtovirheisiin varautumisesta ja niiden korjaamisesta
mahdollisuuksien
mukaan. Näitä rutiinitoimintoja ei siten tarvitse ohjelmoida joka
sovellusta
varten aina uudelleen. Tietoliikennepakkauksen käyttö on käytännössä
varsin
samantapaista kuin valmiiksi ohjelmoitujen syöttö- ja
tulostusaliohjelmien tai
tiedostojen käsittelyrutiinien käyttö.
Asiakas
Palvelin
Kuva
2.1 Tietoliikennettä käyttävän sovelluksen pääosat
Sovellusohjelmat
lähettävät toisilleen toiminnan aloittamiseen ja lopettamiseen sekä
tiedonsiirron
varsinaiseen tarkoitukseen (esim. sähköpostin välitykseen) liittyviä
viestejä.
Tietoliikennepakkauksen tarjoaman palvelun vuoksi sovellusohjelman
laatija
voi olettaa, että lähetetyt viestit myös aikanaan saapuvat
virheettöminä
perille. Tietoliikennepalvelu huolehtii myös mm. viestien pilkkomisesta
siirron
kannalta sopivan pituisiksi pätkiksi ja niiden uudelleen kokoamisesta.
Sovellusohjelmien
toisilleen lähettämien viestien on oltava tiukasti määrämuotoisia,
jotta
vastaanottaja kykenisi tulkitsemaan ne. Sen sijaan tapa, jolla
tietoliikennealiohjelmia kutsutaan, ja parametrien järjestys riippuu
käytettävästä ohjelmointikielestä ja jossain määrin myös ko.
tietokoneen
käyttöjärjestelmästä, joten ohjelmien siirtäminen uuteen ympäristöön
vaatii
enemmän tai vähemmän tapauskohtaista sovitustyötä.
2.3
Tietoliikenneprotokolla
Tietoliikenneprotokolla eli yhteyskäytäntö on kahden jonkin
tietoliikenneyhteyden välityksellä keskenään kommunikoivan ohjelman
noudattama
menettelytapasopimus, jossa on spesifioitu
–
miten
tiedonsiirto aloitetaan ja
lopetetaan ja mitä tietoja kussakin vaiheessa siirretään
–
varaudutaanko
virhetilanteisiin ja miten
virheen sattuessa menetellään sekä
–
ohjelmien
välillä välitettävien sanomien
muoto yksityiskohtaisesti.
–
Sen sijaan
protokollan käyttäjän
esittämien palvelupyyntöjen osalta riittää listata, mitä
palvelupyyntöjä on
olemassa ja mitä tietoja (parametreja) kunkin pyynnön yhteydessä
tarvitaan.
Palvelupyyntöjen yksityiskohtainen muoto ei vaadi standardointia
osapuolten
välillä.
Ohjelman toimintaa voidaan havainnollistaa esim.
digitaalitekniikasta
tuttua tilakone-esitystä käyttäen. Protokolliksi kutsutaan sekä em.
määrittelyt
sisältäviä standardeja että niiden realisaatioita, sääntöjen
mukaisesti
toimivia ohjelmia.
Esimerkki
Tietokannassa on tietoja firman
tuotteista, niiden hinnoista ja saatavuudesta. Asiakaspuolen
sovellusohjelma
kommunikoi käyttäjän kanssa ja lähettää palvelimelle sopivalla tavalla
koodattuja sanomia ja saa vastauksia, jotka liittyvät esim.
–
toiminnan
aloittamiseen ja käyttäjän
tunnistukseen
–
tuotteiden
saatavuutta ja hintoja
koskeviin kyselyihin
–
tilausten
tekemiseen tai
–
toiminnan
lopettamiseen.
┴
Tietoliikennepalvelujen käyttäjärajapintaan voi kuulua esim.
seuraavan
tapaisia funktioita (paluuparametrit on selvyyden vuoksi merkitty
tähdellä):
open(source port, destination port,
destination
URL, connection id*, error*)
waitfor_open(destination
port, connection id*, error*)
send(connection
id, data, ack, window, error*)
receive(connection
id, data*, ack*, window*, end*)
close(connection id)
Tietoliikenneohjelmiston kannalta edellä mainitut
sovellukseen liittyvät
sanomat ovat vain välitettävää tietoa, jonka sisältöön ei kiinnitetä
mitään
huomiota. Tietoliikenneohjelmiston tehtävänä on vain lähettää sanomat
luotettavasti toiselle osapuolelle.
Edellä esitetty sovelluksen ja tietoliikenneohjelmiston
välinen rajapinta
on sekä periaatteelliselta kannalta että käytännön ratkaisuissa
muodostunut
sangen keskeiseksi, koska käytännöllisesti katsoen jokaiselle
tietokoneelle on
saatavissa palvelun toteuttava aliohjelmapakkaus, joka vapauttaa
tiedonsiirtoa
käyttävän sovellusohjelman laatijan monista varsinaiseen sovellukseen
liittymättömistä ohjelmointitehtävistä.
Esimerkkinä siitä, millaisia sanomia protokolla noudattavat
osapuolet
lähettävät toisilleen, tarkastellaan joukkoa (kuvitteellisia ja
idealisoituja,
mutta mahdollisia) sanomia, joita käyttäen tietoliikenneohjelmat
voisivat
kommunikoida keskenään jonkin siirtotien välityksellä.
Kuva 2.2
Tietoliikenneohjelmien toisilleen lähettämiä kehyksiä
Sanoman ensimmäinen kenttä kertoo, minkä tyyppisestä
sanomasta on kysymys
(järjestyksessä: aloituspyyntö, vastaus siihen, tavallinen datakehys,
datan
kuittaus – onnistuiko – ja lopetuspyyntö). Yhteyttä muodostettaessa
sille
annetaan viitenumero, jota seuraavissa kehyksissä käytetään. Viimeinen
kenttä
puolestaan on tarkiste, jonka arvo voidaan laskea muiden kenttien
perusteella.
Kun laskettua arvoa ja vastaanotetussa kehyksessä olevaa tarkistetta
verrataan
toisiinsa, voidaan havaita, onko kehykseen tullut matkalla
bittivirheitä.
Kehyksen järjestysnumeroa tarvitaan mahdollisen uudelleenlähetyspyynnön
yhteydessä.
Edellä mainittu sovellustason sanoma kulkee nyt datakehyksen
sisällä eikä
sen sisällöllä ole tällä tasolla merkitystä.