Tietoliikenneohjelmointi v. 0.01
Kurssin suoritus ja tavoitteet Kurssin suoritus kerrotaan erikseen. Tavoitteet: Oppilas osaa suunnitella ja toteuttaa verkossa toimivia asiakas/palvelin sovelluksia.
Protokollat Verkkoprotokolla (yhteyskäytäntö, protocol) sisältää säännöt sovellusten väliseen kommunikaatioon. Protokolla sisältää seuraavat osat: Tietopakettien muoto (format): Määrittelee, mitä tietopaketti sisältää ja missä kohden. Tietopakettien semantiikka (semantics): Mitä mikäkin paketti merkitsee ja miten siihen vastataan Virhetilanteiden käsittely (error behaviour): Määritellään, mitä tehdään, jos vastaanotetaan paketti, joka ei ole oikean muotoinen.
Protokollat Eri protokollat toimivat päällekkäin, jolloin ylemmän tason protokolla käyttää aina alempaa tasoa hyväkseen. Tätä sanotaan protokollapinoksi. Ylemmälle tasolle siirryttäessä mennään erikoistuneempaan sovellukseen ja alemmalla tasolla ollaan aina yleisemmällä tasolla. Internetin perusprotokolla on nimeltään IP ja sen päälle on rakennettu tavallisimmat protokollat TCP ja UDP (käytetään nimityksiä TCP/IP ja UDP/IP)
Internet Protocol (IP) Internet Protocol (IP) on perusta, jonka päälle kaikki muut internetprotokollat raketuvat IP on yksinkertainen paketisuuntautunut protokolla, eli se määrittelee, miten pisteestä A lähetetään paketteja pisteeseen B. Paketille voi matkalla sattua vaikka mitä. Se voi joutua reitittimeen, joka kaatuu ja paketti katoaa tai se voi reitittyä hidasta siirtotietä pitkin, jolloin seuraavaksi lähettetty paketti saapuu perille ennen aikaisemmin lähetettyä. Ts. paketteja katoaa tai ne saapuvat epäjärjestyksessä perille.
Internet Protocol (IP) Jokaisella IP-verkon tietokoneella on yksilöivä IP-osoite. Se on neljän luvun yhdistelmä. Esimerkiksi 192.168.1.2 on IPosoite. Jokainen neljästä luvusta voi olla välillä 0-255 (8- bittinen binääriluku) Jokainen IP-osoite koostuu kahdesta osasta: verkkoosoittesta ja koneosoitteesta. Verkko-osoite edustaa koko tietokoneverkkoa ja koneosoite edustaa verkon yhtä konetta. Verkkopeitteen avulla määritellään, mikä osa osoitteesta on verkko- ja mikä koneosoitetta. Esimerkiksi 192.168.1.2 verkkopeite on tyyppllisesti 255.255.0.0, jos em luvut ajatellaan binääriluvuiksi ja tehdää niiden (IP-os ja verkkopeiteen) välillä AND-operaatio bitti bitiltä saadaan verkko-osoitteeksi 192.168.0.0
Transmission Conrol Protocol (TCP) Transmission Control Protocol, TCP, on yleisimmin käytetty protokolla Internetissä. Kun sitä käytetään IP:n päällä, siitä käytetään nimeä TCP/IP. TCP/IP tarjoaa sovellukselle yksinkertaisen ja luotettavan yhteyden verkon yli toisessa koneessa olevaan toiseen sovellukseen ilman huolta kadonneista paketeista tai pakettijärjestyksestä. Se voi tehdä seuraavia asioita Koota paketit oikeaan järjestykseen, jos saapumisjärjestys on virheellinen Jos paketti katoaa se pyyttää paketin uudelleen lähetystä TCP tarkistaa myös pakettien sisältämän datan oikeellisuuden käyttämällä automaattisesti tarkistussummaa jokaisessa paketissa. Lisäksi TCP huomaa vastapään katoamisen linjalta tai yhteyden katkaisemisen Kuittausten lähettäminen ja tiedon uudelleenlähettäminen tapahtuvat taustalla niin, että TCP:tä käyttävä ohjelma ei edes huomaa sitä.. Ohjelmoijan kannalta TCP-yhteys vastaa esim. puhelua ensin yhteys muodostetaan, sitten tietoa siirretään edes ja takaisin, lopuksi yhteys suljetaan.
Transmission Conrol Protocol (TCP) TCP on helppo käyttää ja se tarjoaa luotettavan siirtoyhteyden. Tästä täytyy kuitenkin maksaa; TCP lähettää paljon tietoa, jolla ylläpidetään pakettien järjestystä, siirretään kuittauksia, tarkistussummia ja yksi välistä puuttuva paketti viivästyttää myös seuraavia paketteja niin kauan, että puuttuva paketti saadaan vastaanotetuksi. Useille sovelluksia tämä on juuri oikea tapa toimia, mutta taas toisille nopeutta vaativille sovelluksille taas ei. Miten voidaan yhden verkkokortin avulla hoidella useita samanaikaisia yhteyksiä. Esimerkikisi www- ja ftp-palvelimen samanaikainen toimita. Tämä tapahtuu porttien avulla. Portti ei ole fyysinen laite vaan IP-osoitteen laajennus. Näin esimerkiksi samalla tietokoneella oleva www-palvelin kuuntelee porttinumeroa 80 ja ftp-palvelin kuuntelee porttinumeroa 21. TCP yhteys muodostetaan siis tiettyyn IP-osoitteeseen ja siinä olevaan porttiin esim. 192.168.1.2 porttiin 80 (tässä koneessa oleva wwwpalvelin kuuntelee tätä porttia) TCP-yhteys voidaan muodostaa vain sellaiseen portiin, jossa on kuuntelija (palvelin ohjelma kuuntelee)
User Datagram Protocol (UDP) User Datagram Protocol (UDP), on yksinkertainen yhteydetön (ts. asiakkaan ja palvelimen välillä ei ole pysyvää yhteyttä) pakettisuuntautunut protokolla. IP:n päällä käytettynä nimenä käytetään UDP/IP. UDP:ssä tieto lähetään erillisinä paketteina UDP ei tarkista saapuvan paketin muuttumattomuutta, ei takaa paketin saapumista perille eikä edes takaa pakettien saapumista vastaanottajalle lähetetyssä järjestyksessä. Sen voima onkin sen yksinkertaisuudessa. Se ei sisällä ylimääräistä tietoa ja sen prosessoiminen on huomattavasti kevyempää. TCP/IP yhteyksien määrälle käyttöjärjestelmät asettavat rajoituksia mutta ei UDP yhteyksien määrälle. Mikäli sovelluksesi tarvitsee luotettavaa siirtoyhteyttä käytä TCP/IP:tä
User Datagram Protocol (UDP) Mikä on sopiva UDP-paketin koko? Teoreettinen maksimi käyttäjädatan osalta on 65507 tavua (+ IP otsikko 20 tavua+udp otsikko 8 tavua =65535) Tälläinen iso UDP paketti pilkotaan (fragmentodaan) IP-kerroksella useaksi IP-paketiksi (noin 1000 tavu/paketti) vastaanottopäässä pilkotut paketit kootaan IP-kerroksen toimesta isoksi UDP-paketiksi. Mikäli yksikin IP-paketti hävitetään tiedonsiirrossa koko UDP-paketti menetetään. Toinene rajoittava tekijä on se, että jotkin käyttöjärjestelmät rajoittavat UDP-paketin puskurin koon 8198 tavuun Eräs lähde (myös jotkin muut lähteet ovat likimain samoilla linjoilla) suosittava paketin maksimikooksi 1100 tavua
Socket Kun uusi tietoliikennesovellus käynnistetään, niin se pyytää käyttöjärjestelmältä socketin. Tämän kautta hoidetaan tiedonsiirto. Socket on ohjelmakomponetti ja se sisältää seuraavat tiedot, jotka lisätään lähetettävään tietoon protokolla (protocol): Kertoo mitä protokollaa tämän soketin kautta aiotaan käyttää esim TCP tai UDP. vastaanottajan osoite (Destination host address):kertoo mille tietokoneelle Internetissä tietoa lähetetään tämän soketin kautta. Osoite on IP-osoite. vastaanottajan portin numero (Destination application port): Kertoo mikä on vastaanottavan sovelluksen portin numero. Portin numeron on oltava välillä 1-65535. Porttinumerot 1-1024 ovat varattuja ja yleisesti tunnettujen sovellusten käytössä esim www-palvelin yleensä kuuntelee porttia 80, joten omien sovellusten tulisi käyttää suurempia (>1024) portin numeroita. lähettäjän osoite (Source host address): Oman tietokoneen IP-osoite. lähettäjän portin numero (Source application port): Kertoo mikä on lähettävän sovelluksen portin numero. Tämän tiedon avulla tietopaketin vastaanottava tietokone osaa vastata lähettäjälle oikeaan porttinumeroon.
UDP yleislähetys (broadcast) UDP:lla lähetetään tietopaketti yhdelle vastaanottajalle. Mikäli sama paketti pitää lähettää usealle vastaanottajalle, niin tämä toteutetaan silmukassa, jossa paketti lähetetään kaikille vastaanottajille erikseen => vastaanottajien määrän kasvaessa verkon kuorma kasvaa turhaan. Samaa tietopakettia lähetetään verkkoon yhä uudelleen. UDP yleislähetys (broadcast) lähettää tietopaketin koko lähiverkkoon kaikille koneille yhtäaikaisesti (vertaa radio- ja televisiolähetykset), jolloin verkkoa ei kuormiteta toistuvilla saman informaation lähetyksillä. Ei myöskään tarvitse ylläpitää listaa vastaanottajista, koska tieto lähetetään kaikille. Yleislähetyksen ongelma on, että kaikki vastaanottavat tietokoneet joutuvat käyttöjärjestelmätasolla tarkistamaan, onko paketti kiinnostava jonkun sovelluksen kannalta. Mikäli lähiverkossa on kymmeniä tietokoneita ja yleislähetyksellä lähetetty paketti on kiinnostava vain muutamalle niistä, niin kuormitetaan turhaan kaikkia loppuja koneita.
UDP yleislähetys (broadcast) Ohjelmallisesti ei saada selville, kuinka laajalle yleislähetyksellä lähetetyt paketit leviävät. Monet reitittimet eivät välitä niitä eteenpäin, jolloin yleislähetys ei saavutakaan kuin muutaman lähimmän koneen. Joskus verkoissa yleislähetys voi saavuttaa satojakin koneita vaikka näin ei haluta. Tätä voidaan käyttää sovelluksissa jotka kommunikoivat vain lähiverkon alueella ja melkein kaikki lähiverkossa olevat koneet ovat kiinnostuneita kommunikaation sisällöstä. Tätä voi käyttää myös satunnaisesti muutaman paketin lähettämiseen, jolloin verkon tietokoneet eivät kuormitu kovin paljon. Esim. sovellus voi ilmoittaa olemassaolostaan yleislähetystä käyttäen lähiverkon koneille, johon kiinnostuneet sovellukset voivat vastata esim TCP:tä tai UDP:tä käyttäen (ei ylislähetyksellä).
UDP yleislähetys (broadcast) Ohjelmallisesti ei saada selville, kuinka laajalle yleislähetyksellä lähetetyt paketit leviävät. Monet reitittimet eivät välitä niitä eteenpäin, jolloin yleislähetys ei saavutakaan kuin muutaman lähimmän koneen. Joskus verkoissa yleislähetys voi saavuttaa satojakin koneita vaikka näin ei haluta. Tätä voidaan käyttää sovelluksissa jotka kommunikoivat vain lähiverkon alueella ja melkein kaikki lähiverkossa olevat koneet ovat kiinnostuneita kommunikaation sisällöstä. Tätä voi käyttää myös satunnaisesti muutaman paketin lähettämiseen, jolloin verkon tietokoneet eivät kuormitu kovin paljon. Esim. sovellus voi ilmoittaa olemassaolostaan yleislähetystä käyttäen lähiverkon koneille, johon kiinnostuneet sovellukset voivat vastata esim TCP:tä tai UDP:tä käyttäen (ei ylislähetyksellä).
UDP yleislähetys (broadcast) Tietokoneverkkojen yhteydessä broadcast-osoite on IP-osoite jonka kautta IPpaketti kyetään lähettämään jokaiselle samassa aliverkossa olevalle laitteelle ilman että sen osoitetta tiedetään. Osoitteen tarkka määrittely on esityksessä RFC 919. Tiettyä aliverkkoa vastaava broadcast-osoite saadaan kun tiedossa on laitteelle määritelty IP-osoite sekä aliverkon peite (englanniksi subnet mask tai netmask). IP-osoitteen ja aliverkon peitteen komplementin kesken tehdään looginen OR operaatio jonka tuloksena saadaan broadcast-osoite. Esimerkki tämän selventämiseksi: Laite haluaa tehdä broadcast-lähetyksen omaan aliverkkoonsa. Laitteen tietää että sen IP-osoite on 130.230.10.30 sekä aliverkon peitteen joka on 255.255.255.0. Verkon peitteen komplementti on 0.0.0.255. Tällöin broadcast-osoitteeksi saadaan 130.230.10.30 0.0.0.255 = 130.230.10.255. Tähän osoitteeseen lähetetty paketti tavoittaa kaikki saman aliverkon laitteet.
UDP yleislähetys (broadcast) Tietokoneverkkojen yhteydessä broadcast-osoite on IP-osoite jonka kautta IPpaketti kyetään lähettämään jokaiselle samassa aliverkossa olevalle laitteelle ilman että sen osoitetta tiedetään. Osoitteen tarkka määrittely on esityksessä RFC 919. Tiettyä aliverkkoa vastaava broadcast-osoite saadaan kun tiedossa on laitteelle määritelty IP-osoite sekä aliverkon peite (englanniksi subnet mask tai netmask). IP-osoitteen ja aliverkon peitteen komplementin kesken tehdään looginen OR operaatio jonka tuloksena saadaan broadcast-osoite. Esimerkki tämän selventämiseksi: Laite haluaa tehdä broadcast-lähetyksen omaan aliverkkoonsa. Laitteen tietää että sen IP-osoite on 130.230.10.30 sekä aliverkon peitteen joka on 255.255.255.0. Verkon peitteen komplementti on 0.0.0.255. Tällöin broadcast-osoitteeksi saadaan 130.230.10.30 0.0.0.255 = 130.230.10.255. Tähän osoitteeseen lähetetty paketti tavoittaa kaikki saman aliverkon laitteet. Ratol:n PC:luokissa aliverkon peite 255.255.252.0, jos koneen IP esim. 10.4.0.0 => broadcast-osoite: 10.4.0.0 0.0.3.255=10.4.3.255. (Osoitetta 255.255.255.255 ei tulisi käyttää vaikka paikallisreitittimen tulisi pysäyttää ne)
Ryhmälähetys (multicast) Ryhmälähetys (multicast) mahdollistaa tietopaketin lähettämisen kaikille kiinnostuneille sovelluksille. Kaikki kiinnostuneet sovellukset rekisteröityvät kuuntelijoiksi ryhmäosoitteeseen, jolloin ne vastaanottavat tähän osoitteeseen lähetetyt tietopaketit. Kuka tahansa voi lähettää tietopaketteja tähän ryhmäosoitteeseen, mutta vain rekisteröityneet kuuntelijat vastaanottavat paketit. Rekisteröimättömät kuuntelijat eivät vastaanota paketteja, kuten yleislähetyksessä tapahtuu. Ryhmälähetys toimii Internetin laajuisesti (tietyin rajoituksin). Kaikki (vanhat) reitittimet Internetissä eivät välitä ryhmäviestejä, joten viestit eivät välttämättä pääse kaikkiin paikkoihin. Ohjelmoija voi tehokkaasti säädellä, kuinka laajalle ryhmäviesti leviää. Reitittimet tarkkailevat ryhmäviestin TTL kenttää (Time-To-Live) ja päättelevät sen perusteella, lähettävätkö viestin eteenpäin laajemmalle. Samassakin koneessa monta sovellusta voi kuunnella samaa lähetystä tietystä portista. Jotta ohjelma voisi ottaa vastaan multicast-lähetyksiä, sen tulee rekisteröityä multicastryhmän kuuntelijaksi. Multicast-ryhmät ovat tiettyjä IP-osoitteita ja osa IPosoiteavaruudesta on varattu tähän tarkoitukseen. Omissa ohjelmissa on turvallista käyttää esimerkiksi IP-osoitetta 239.0.0.1. Tästä huomaammekin, että Multicastia käytettäessä "vakavampiin" tarkoituksiin on syytä ottaa huomioon viestit, jotka ovat muiden kuin omien ohjelmien käyttämiä - et voi tietää, jos joku muukin saa päähänsä käyttää samaa ryhmää ja porttia. Voit välttää viestien sekoittumisen laittamalla jokaisen lähetetyn paketin alkuun jonkin tunnisteen, josta erotat oman protokollasi mukaiset paketit.
Ryhmälähetys (multicast) Jotta ohjelma voisi ottaa vastaan multicast-lähetyksiä, sen tulee rekisteröityä multicast-ryhmän kuuntelijaksi. Multicast-ryhmät ovat tiettyjä IP-osoitteita ja osa IP-osoiteavaruudesta on varattu tähän tarkoitukseen. Omissa ohjelmissa voidaan käyttää esimerkiksi IP-osoitetta 239.0.0.1. Käytännössä tulee ottaa huomioon viestit, jotka ovat muiden kuin omien ohjelmien käyttämiä, koska et voi tietää, jos joku muukin saa päähänsä käyttää samaa ryhmää ja porttia. Voit välttää viestien sekoittumisen laittamalla jokaisen lähetetyn paketin alkuun jonkin tunnisteen, josta erotat sinun sovelluksellesi kuulvat paketit. Multicast-lähetyksien ryhmille on käytössä IP-osoitteet 224.0.0.0-239.255.255.255. Kuitenkin alue 224.0.0.0-224.0.0.255 on varattu, jota ei saa käyttää sovelluksissa. Seuraavista linkeistä löytyy lisätietoja ryhmälähetyksistä ja käytössä olevista osoitteista. http://java.sun.com/docs/books/tutorial/networking/datagrams/broadcas ting.html http://www.csc.fi/suomi/funet/multicast/
HTTP-protokolla 1/5 HTTP (Hypertext Transfer Protocol) on protokolla, jota selaimet ja WWW-palvelimet käyttävät tiedonsiirtoon. Protokolla perustuu siihen, että asiakasohjelma (esim. selain) avaa TCPyhteyden palvelimelle (yleensä porttiin 80) ja lähettää pyynnön. Palvelin vastaa lähettämällä vastauksen, tavallisimmin HTML-sivun tai binääridataa esim. kuvia, ohjelmia tai ääntä.
HTTP-protokolla 2/5 HTTP on Yhteydetön. Pyynnön jälkeen asiakas lopettaa yhteyden palvelimeen ja odottaa vastausta Media riippumaton. Välitettävä tieto voi olla mitä tyyppiä tahansa kunhan asiakas ja palvelin osaavat sitä käsitellä ( Internet media type eli MIME-tyyppi). Palvelin kertoo yleensä siirrettävän datan tyypin ContentType-otsakkeessa. Tilaton. Peräkkäisten siirtotapahtumien välillä ei ole mahdollista pitää tilatietoa. Jokainen HTTPsiirtotapahtuma on aloitettava aivan alusta.
HTTP-protokolla 3/ Yleisiä mediatyyppejä image/png - PNG-muotoinen kuva text/plain - tekstiä, joka on tarkoitettu esitettäväksi sellaisenaan; käytetty merkistö määritellään charsetparametrillä, oletusarvo on US-ASCII text/xml - XML-muotoista rakenteellista tekstiä text/html - HTML-sivu audio/mpeg - MP3-muotoista ääntä application/vnd.stardivision.calc - StarOffice-taulukkolaskin (sovelluskohtaista vnd=vendor specific tietoa) application/octet-stream - mitä tahansa määrittelemätöntä binääridataa (tätä tyyppiä käytetään, jos tyyppi tai koodaus ei ole ohjelman tiedossa)
HTTP-protokolla 4/5 HTTP:n metodeita GET - käytetään resurssin hakua varten (esimerkiksi verkkosivun hakuun) POST - esimerkiksi täytetyn lomakkeen tietojen lähettäminen palveluun OPTIONS - kysely palvelimen tai resurssin ominaisuuksista HEAD - pyydä vain sivun otsikkotiedot (esimerkiksi hakukone selvittää onko sivu muuttunut) PUT - sivun tallettaminen (käytetään harvoin ilman WebDAVlaajennuksia) DELETE - sivun poistaminen (käytetään harvoin ilman WebDAVlaajennuksia) TRACE - palauttaa pyynnön sellaisenaan (vikojen jäljitykseen) CONNECT - pyydetään yhteyttä, joka jää päälle
HTTP-protokolla 5/5 Palvelimen vastauskoodeista Palvelin palauttaa onnistuneeseen sivunhakuun vastauksena ensimmäisenä "HTTP/1.x 200 OK". Ensin on protokollan versionumero ja koodi "200" kertoo pyynnön onnistuneen (selväkielisenä "OK"). 2xx-alkuiset statuskoodit kertovat onnistuneesta pyynnöstä. 3xx-alkuiset koodit ilmoittavat sisällön löytyvän jostain muualta kuin selain pyysi. Koodi 301 "Moved Permanently" ilmoittaa sivun siirtyneen pysyvästi ja 302 "Moved Temporarily" väliaikaisesti toiseen paikkaan. 4xx-alkuiset koodit kertovat asiakasohjelman (esim. selaimen) tekemästä virheestä. Esimerkiksi 404 "Not Found", jos haetaan sivua, jota palvelimella ei ole ja 403 "Forbidden eli hakijalla ei ole oikeutta dokumenttiin pääsyyn. 5xx-alkuiset koodit kertovat palvelimen tekemistä virheistä
SMTP-protokolla SMTP (Simple Mail Transport Protocol) sähköpostiprotokolla on tekstipohjainen ja käyttää TCP:tä. Näin ollen SMTP sessio voidaan luoda telnet-komennolla. Se käyttää yleensä porttia 25 Kun lähetään SMTP:n kautta sähköpostia tarvitaan ainakin neljää komentoa HELO, kertoo sähköpostipalvelimelle sähköpostiohjelman identiteetin MAIL FROM, lähettäjä RCPT TO, vastaanottaja DATA, viestin sisältö. Huomaa, että viestin aihe ja muut otsikkokentät ovat osa viestiä
Muuta asiaan liittyvää POP3 (Post Office Protocol version 3) protokolla mahdollistaa sähköpostin lukemisen verkon yli. Se on myös tekstipohjainen protokolla, joten sen kanssa voidaan kommunikoida telnet-komennolla. IMAP4 (Internet Message Access Protocol 4) on POP3:n kaltainen protokolla mutta kehittyneempi. POP3 mahdollistaa yhdessä postilaatikossa käynnit, kun taas IMAP4 mahdollistaa käynnit useammassa sähköpostilaatikossa Java Mail API on geneerinen sähköpostikehys, joka tukee sähköpostiviestien lähetystä ja vastaanottamista. Tukee useita sähköpostiprotokollia