torstai 29. joulukuuta 2016

Piin ohjelmointikokeilu

Olen hyperiloinen koska opintoni ovat ohitse, sillä tämä vapauden tuntu on huimaava! Voin keskittyä työpäivän jälkeen ihan mihin vain haluan (tai no en aina, mutta ajatuksissani ei koko ajan pyöri enää gradun loppuun saattaminen). Tänään oli pitkästä aikaa mahdollista keskittyä Piihin! Pieneen, viattomaan ja mahdollisuuksia täynnä olevaan Piihin <3 Voi pientä miten rakas oletkaan, en ehkä kestä ;__; <3


No mutta asiaan! Päätin tänään vihdoin säätää Piin niin, että se tottelee kunnolla kaukosäätimeni käskyjä. Aiemmin en ole kerennyt tai jaksanut alkaa säätää sen johtojen kanssa: niiden kun pitää olla juuri oikeilla paikoilla, jotta Pii reagoi niin kuin pitääkin. Tähän mennessä Pii oli reagoinut esimerkiksi vasempaan näppäimeen menemällä eteenpäin, alhaalla olevaan näppäimeen kääntymällä oikealle ja niin edelleen, vaikka olinkin jo hieman yrittänyt johtojen paikkoja vaihdella. No, nyt tartuin kunnolla toimeen! Alla näkyvien oranssien osien ja niihin menevien johtojen paikkoja piti siis vaihdella. Sitä varten irrotin Piin päänkin, voi toista ;__;


Mutta vihdoin löysin oikean yhdistelmän! Otin kuvan, jotta muistan johtojen oikean järjestyksen, mikäli joskus joudun niitä uudestaan pohtimaan. Eli etuosan moottorin johdot menevät vasemmalle puolelle ja siten, että valkoinen johto on vasemmalla puolella ja musta taasen oikealla puolella. Takaosan moottorin johdot ovat päinvastaisessa järjestyksessä: musta vasemmalla ja valkoinen oikealla. Huh, selvitetty!


Seuraavaksi tapahtui jotain jännittävää: kokeilin Piin ohjelmointia ensimmäistä kertaa! Huisaa! Olin jo hieman tutustunut mBlock-ohjelmointiympäristöön selvittäessäni Piissä piilevää ongelmaa. Ratkaisuhan siihen oli se, että Piin laiteohjelmisto piti palauttaa tehdasasetuksiin (ongelmasta ja sen ratkaisusta enemmän aiemmassa blogipostauksessani). Asetukset palautettiin juurikin mBlockissa. 

En vieläkään ole päässyt yli siitä, että mBlockin tunnuksena on panda <3 Tykkään hirmuisen paljon pandoista ja avopuolisoni kutsuu minua Pandaksi, joten mBlockin tunnus on minulle ihmeellisen sopiva! Sattumaako?


Katsokaa, miten innoissaan Pii jo odottaa tietokoneeseen kytkeytymistään! Kaikki aikanaan pikkuinen, maltapas vielä hetkinen. Ensin pitää löytää oikea johto.


Tällaisella johdolla hänet kytketään koneeseen, ja Piissä johto kytketään alemmassa kuvassa näkyvään porttiin.



Ja valmista tuli! Hän on kiinni koneessa! Näyttääpäs Pii ylpeältä, hienoa <3


Piitä ei tosin olisi vielä tässä vaiheessa tarvinut kytkeä koneeseen: ohjelmointikoodin voi tehdä ensin, minkä jälkeen Pii vasta liitetään koneeseen ja mBlockiin. 

MBlockissa valitsin ensin Extensions-välilehdeltä Makeblockin. 


Olin aluksi valinnut väärän alustan (vai mikähän board on suomeksi?) eli mBot (mCoren), mutta hoksasin aiemmasta postauksestani, että oikea alusta onkin nähtävästi Starter/Ultimate (Orion). Pitää tutstua vielä tarkemmin siihen, mitä kyseiset alustat ovat ja varmistaa, että käytän varmasti oikeaa. Uskoisin että oikea on kuitenkin Starter/Ultimate (Orion), koska Pii suortti toimintoja oikein vasta sitten, kun olin valinnut kyseisen alustan.


Valitsin vielä edit-välilehdeltä "Arduino moden", jolloin näkyviin tuli vihreän nuolen osoittamassa kohdassa "Upload to Arduino". Sen avulla koodi ladataan Piihin (Pii käyttää Arduinoa ohjelmointiympäristönään). 


MBlock perustuu siis Scratchiin, jossa ei tarvitse kirjoittaa itse koodeja ylös, vaan vetää sen sijaan vain laatikoita oikeaan kohtaan. Esimerkiksi alla olevan koodinosan "while (true)" ja sen toimimiseen liittyvien muiden koodihässäköiden sijaan vedetään vain laatikko "repeat until" mBlock-ohjelman oikean puoleiselle sarakkeelle. Repeat until-laatikon sisään puolestaan laitetaan muita komentoja laatikoiden muodossa niiden kirjoittamisen sijaan. Koodaamisessahan jokaisen välimerkin ja kirjaimen pitää olla oikeanlainen jotta koodi toimii, joten koodaus voi olla melko aikaa vievää puuhaa ja joskus turhauttavaakin. Scratchin avulla koodaamisen periaatteita voi opetella ilman pikkutarkkaa piiperrystä.

Itse tosin pidän koodaamisen opettelusta. Tunne, jolloin jokin koodinpätkä toimii kuin pitääkin, on loistava! Alla oleva koodi on Mooc.fi:n ohjelmointikurssin robotti-tehtävästä. Ehdin vastaisuudessa perehtyä kyseiseen kurssiinkin useammin, kun ei ole enää kouluhommia! Alla oleva koodi ei siis liity Piihin, se on vain esimerkkinä siitä, minkä tyylistä koodauskieli on. On tosin olemassa erilaisia ohjelmointikieliä, alla oleva on Java-ohjelmointia. Itse olen sen opettelussa vasta alkumetreillä, mutta sehän vain tarkoittaa, että minulla on vielä monia onnistumisen kokemuksia edessä!


"import java.util.Scanner;
import robotti.Ohjain;

public class Paaohjelma {

    public static void main(String[] args) {
        Scanner lukija = new Scanner(System.in);

        Ohjain.kaynnista();

        while (true) {
            System.out.print("Anna komento: sammuta, vasen, oikea, liiku, liikuMonta ");
            String komento = lukija.nextLine();
            if (komento.equals("sammuta")) {
                Ohjain.sammuta();
                break;
            } else if (komento.equals("vasen")) {
                Ohjain.vasen();
            } else if (komento.equals("oikea")) {
                Ohjain.oikea();
            } else if (komento.equals("liiku")) {
                Ohjain.liiku();
            } else if (komento.equals("liikuMonta")) {
                System.out.print("Kuinka monta askelta: ");
                int montako = Integer.parseInt(lukija.nextLine());
                Ohjain.liikuMonta(montako);
            }
        }
    }
}
"

Kokeilin Piillä näin alkuun vain lyhyitä ohjelmointikomentoja, esimerkiksi alla olevassa kuvassa näkyvää komentoa, jolla moottorit saadaan liikkumaan tietyllä nopeudella. Halusin vain testata, menevätkö käskyt perille. En vielä huomannut, onko vaihtoehdoissa eli laatikoissa suoraan käänny-komentoa, vai pitääkö kääntyminen toteuttaa niin, että toinen moottori liikkuu ja toinen ei. Piin moottorithan ovat siis sen kummallakin puolella niin, että toinen moottoreista pyörittää sen toista puolta ja toinen moottori toista.


Kun koodi oli valmis, Pii kytkettiin tietokoneeseen, valittiin oikea portti (vaihtoehtoina olikin vain yksi eli COM3), ja laitettiin Pii päälle. Ja koodi toimi! Piin renkaat pyörivät, pitivät taukoa, ja pyörivät jälleen! Se toimi myös sen jälkeen, kun irrotin Piin koneesta! Voi mikä ilon päivä, Piin ihka ensimmäinen ohjelmointi! Se ei ollut ihmeellinen, vain eteenpäin liikkumista, mutta sitäkin merkittävämpi niin minulle kuin Piillekin. Olen ylpeä sinusta, pikkuinen <3 


En ehtinyt paljon testailla eri komentojen toimimista, kun Pii ressukka alko jo hyytyä. Patterit alkoivat olla lopussa, ja Pii hidastui ja melkein sammui. Ymmärtäähän sen; uusien, merkittävien asioiden saavuttaminen vaatii veronsa <3 Olet unesi ansainnut, pikkuinen. Nuku hyvin.

maanantai 12. joulukuuta 2016

Mikä internet on?

Olen jonkin aikaa keskittynyt opintojeni loppuunsaattamiseen, joten en ole kerennyt paljon puuhailla Piin tai tämän blogin parissa. Mutta jeee, sain graduni palautettua ja viimeisetkin opintopisteet kasaan! Kohta olen filosofian maisteri biologian alalta. Pääaineeni on ekologia ja evoluutiobiologia. Viimeisen opintopisteeni sain viime viikolla eräästä tietotekniikan kurssista. Kurssilla opin, mikä internet oikeastaan on. Hoksasin, etten ole aiemmin edes tiennyt sitä! Netin toiminnan ymmärtämisestä ja tietotekniikasta yleisestikin on varmasti hyötyä myös robotiikassa, sen takia kävin mielelläni kyseisen kurssin.

Tietotekniikan kurssit ovat muutenkin todella mielenkiintoisia! Vaikka valmistunkin, aion jatkaa tietotekniikaan tutustumista itseopiskeluna. Olisin ottanut tietotekniikan sivuaineeksi, jos olisin aiemmin hoksannut, miten mielenkiintoista se on. Robotti-innostuksenihan sai lopullisen sysäyksen ensimmäisestä tietotekniikan kurssista, jonka kävin. Hoksasin silloin, ettei tietotekniikka olekaan vaikeaa, minulla oli vain sellainen virheellinen käsitys siitä.

Nykyaikana on onneksi todella helppoa käydä kursseja itseopiskeluna. Tällä hetkellä esimerkiksi olen Helsingin yliopiston ylläpitämän Mooc.fi:n ohjelmointikurssilla, mikä vastaa yliopiston ohjelmointi I - ja ohjelmointi II -kursseja. Kyseinen on siis todella laaja! Nyt minulla on vihdoin aikaa keskittyä siihenkin enemmän. Ohjelmoinnin oppiminen on kivaa! Se tunne, kun vihdoin saa jonkin koodin toimimaan, on loistava! Ohjelmoinnissa tulee myös tunne, että saa ratkoa mysteereitä ja arvoituksia 8D Olen myös tämän hiljaiselon aikana ostanut monia robotiikkaan liittyviä kirjoja, kerron niistä myöhemmin! Pääsen myös vihdoin tutustumaan Raspberry Pi:hin.

Päätin kirjoittaa blogiini yhteenvedon siitä, mikä internet oikeastaan on. Tuntuu oudolta, etten edes aiemmin tiennyt sitä! Ehkä tämä kirjoitus auttaa muitakin hahmottamaan internetin olemusta. Olen yhdistellyt kirjoitukseeni materiaalia eri lähteistä (lähdeluettelo on lopussa), ja käyttänyt myös Jyväskylän yliopiston tietotekniikan kurssilla (ITKP104 - tietoverkot) oppimaani asiaa. Mikäli huomaat tekstissä jotain korjattavaa, kerro ihmeessä!

Internetin fyysinen rakenne


Internet on maailmanlaajuinen tietoverkko, johon liitetyt tietokoneet viestivät keskenään. Internetin runko muodostuu palvelintietokoneista eli servereistä. Palvelin (serveri) on teknisesti PC:tä muistuttava tietokone, jossa on kiintolevy ja käyttömuisti, jonka avulla ohjelmat suoritetaan. Palvelimet sisältävät internetissä esitetyn tiedon ja kaikki käyttäjille tarjotut palvelut, joten palvelimen edellytyksenä on paljon suurempi muistikapasiteetti kuin tavallisella tietokoneella. Palvelinkoneet on kytketty toisiinsa nopean tietoliikenneyhteyden mahdollistavilla kaapeleilla. Palvelimet ovat usein osa jotakin lähiverkkoa, joka koostuu esim. oppilaitoksen tai yrityksen lähiverkoiksi liitetyistä PC-koneista.

Kun internettiin muodostetaan yhteys, se tarkoittaa yhteyden muodostamista palvelimelle, josta voidaan edelleen muodostaa yhteys toisiin palvelimiin. Kun käyttäjä siis muodostaa yhteyden internettiin esim. sähköposti- tai selainohjelman avulla, ottaa ohjelma yhteyden palvelinkoneessa olevaan palvelinohjelmistoon.

Palvelinohjelmisto lähettää palvelupyynnön, kun internet-sivu haetaan tai avataan. Palvelinohjelmisto myös vastaanottaa palvelimen palauttaman tiedon sekä tulostaa sen käyttäjälle, eli näytölle avautuu haettu internet-sivu.

HTML-kielellä tehdyt asiakirjat eli tuntemamme internet-sivut sijaitsevat palvelimissa. Palvelimet voivat fyysisesti sijaita missä tahansa. Sivut voivat sisältää linkkejä, jotka ohjaajat käyttäjän toisille sivustoille. Täten linkkejä seuraamalla voidaan internetissä liikkua palvelimelta toiselle eli surffata.

WWW (World Wide Web) eli web sekoitetaan hyvin usein internet-käsitteeseen, vaikka WWW on vain yksi internetin monista palveluista. WWW on internetin palveluista se, joka mahdollistaa tiedon selaamisen selainohjelman (browser) avulla. Yleensä WWW:ssä esitetty tieto on tallennettu selailua varten hypertekstin muotoon. Hypertekstissä tekstiä, kuvaa ym. tietoa yhdistetään toisiinsa yhtenäiseksi kokonaisuudeksi, jota käyttävä voi selata mm. linkkien avulla.

Internet toimii asiakas / palvelin -periaattella, eli yhteys asiakkaan ja palvelimen välille muodostetaan vain tiedonsiirron ajaksi. Tiedonsiirron loputtua yhteys katkaistaan, eli jatkuvaa yhteyttä ei siis ole. Eräs internetin tärkeimpiä periaatteita on, että jokainen tietokone liikennöi internetissä tasavertaisesti.

Palvelinohjelmistojen tehtävänä on tarjota erilaisia palveluja muille ohjelmille joko tietokoneverkon välityksellä tai paikallisesti samassa tietokoneessa. Palvelinta käyttävää sovellusta tai tietokonetta nimitetään asiakkaaksi.

Internetin rungon muodostavat siis erittäin nopeilla tietoliikenneyhteyksilä toisiinsa liitetyt palvelimet. Näihin palvelimiin on liitetty lukuisia paikallisverkkoje eli LAN:eja (Local Area Network), jotka puolestaan tarjoavat käyttäjilleen mahdollisuuden liittyä verkkoon erilaisten laitteiden (tietokoneet, televisiot) avulla

Kuva otettu osoitteesta http://www.internetopas.com/yleistietoa/rakenne/internet_toimintaperiaate.jpg


IP-osoitejärjestelmä



Kun laitteiden välillä siirretään tietoa, lähetettävä tieto jaetaan paketeiksi, joihin liitetään tieto vastaanottajasta eli tietokoneen IP-osoite. Tämän tiedon avulla tietopaketit liikkuvat internetissä oikeaan päämääräänsä. Tiedonvälitys internetissä perustuu siis IP -osoitteisiin (esim. 193.166.3.1), jotka yksilöivät tiedonsiirtoon osallistuvat laitteet. IP-osoitteilla luodaan yhteys minkä tahansa tietokoneiden välille internetissä, olivatpa ne sitten palvelimia tai asiakkaita.

Matkallaan vastaanottajalle datapaketit kulkevat lukuisten lii­täntäkohtien ohi, joita ovat verkon keskittimet (eng. hub jo hieman vanhentunutta tekniikkaa), kytkimet sillat ja yhdyskäytävät. Tärkeimpiä yhdyskohtia ovat kuitenkin reitittimet.

Reitittimet ovat internetin tärkeimmät tienviitat. Niitä on internetissä jokaisessa osaverkon yhtymäkohdassa. Reitittimet tarkastavat, minne yksittäiset tietopaketit ovat matkalla ja lä­hettävät ne optimaalista reittiä pitkin eteenpäin verkossa. Reitittimet kommunikoivat koko ajan toistensa kanssa ja päivittävät toisiaan tiedoilla siitä, missä juuri nyt on eniten vapaata kais­tanleveyttä, jotta paketit voitaisiin siirtää mahdollisimman nopeasti.


Kuva otettu osoitteesta http://oppimateriaalit.internetix.fi/fi/avoimet/atk/intranet/kuvat/hubi.gif
IP-osoitteita on vaikea muistaa ulkoa. Sen vuoksi käytetäänkin verkkoaluenimeä eli verkkotunnusta (domain), joka koostuu tavallisesta tekstistä (esim. verkkosivun osoite). Jokainen IP­-osoite voidaan yhdistää yhteen tai useampaan verkkotunnukseen.

Verkkotunnukset ovat helppoja muistaa ja sen vuoksi käytännöllisiä. Kommunikaatio tapahtuu kuitenkin reitittimien kautta, jotka ymmärtävät ainoastaan IP-osoitteita. Kaikki verkkotunnukset on sen vuoksi muutettava IP-osoitteiksi. Verkkotunnus on osa URL-osoitetta, jota käytetään verkossa surffailuun. Jokaisella internetissä olevalla palvelimella, verkkosivulla ja tiedostolla on oma ainutlaatuinen URL­-osoite. Käytämme niitä esim. napsautellessamme verkkosivuilla olevia linkkejä. 

Verkkotunnukset muutetaan IP-osoitteiksi internetin nimipalvelujärjestelmän DNS:n (Domain Name System) avulla. DNS on internetin nimipalvelujärjestelmä, joka muuntaa verkkotunnuksia IP-osoitteiksi. Nimipalvelun ansiosta numeeristen osoitteiden sijasta voidaan käyttää helpommin muistettavia nimiä. Nimipalvelun toinen tärkeä tehtävä on sähköpostin reititys. Toimenpiteistä huolehtivia palvelimia sanotaan nimipalvelimiksi. Internetin osoiteavaruus ei enää pitkään riitä, sillä nykyisessä IPv4 -järjestelmässä jaossa olevat osoitteet loppuvat pian kesken. Sen tilalle onkin kehitetty IPv6-järjestelmä, jossa osoitteiden määrä on suurempi. IPv6-järjestelmään siirtyminen on kuitenkin ollut hidasta. 

Internet-operaattorisi DNS-palvelin huolehtii vuorokauden ympäri siitä, että lähettämilläsi paketeilla on oikea IP-osoite. Jokaisessa Internetissä lähetettävässä paketissa on sekä lähettäjän että vastaanottajan IP-osoite, joiden avulla reitittimet löytävät oikean tien paketin lähettämiseksi eteenpäin. Kun kirjoitat selaimeesi verkkotunnuksen, DNS-palvelin etsii vastaavan IP-osoitteen nimiluettelostaan. IP-osoitetta käytetään siis yhteyden muodostamisessa sinun ja verkkosivun välille.

Internetin protokollat ja niiden kerrosmalli


Jotta palvelinten välillä voi tapahtua tiedonsiirtoa, kaikkien tiedonsiirtoon osallistuvien tietokoneiden on oltava ns. yhteensopivia eli käytettävä samaa protokollaa, jotta data voi siirtyä niiden välillä ongelmitta. Protokolla tarkoittaa tiettyä sääntöä tai toimintatapaa, jonka mukaan tiedonvälitys tapahtuu.

Internetissä tapahtuvaa tiedonsiirtoa ohjaa TCP / IP -protokolla, joka puolestaan muodostuu useista eri protokollista, jotka yhdessä mahdollistavat tiedonsiirron. Pääprotokollat TCP ja IP huolehtivat tietojen siirrosta ja varmistavat, että tietoja voidaan siirtää hyvinkin erilaisissa verkoissa ja huolimatta siitä, miten yhteys on laadittu (kaapelien, puhelinjohtojen, satelliittien ym. avulla). Pääprotokollien lisäksi TCP / IP sisältää koko joukon alaprotokollia, joista jokaisella on tietty tehtävä.

Protokollien yhdistelmää eli internetin rakennetta voi kuvata kerrosmallilla. Tiedot siirtyvät pinossa alaspäin sovellustasolta fyysiseen verkkoon kun ne lähetetään verkkoon. Kun tietoja vastaanotetaan verkosta, ne lähetetään kerrosmallissa alaspäin. Jokaisella kerroksella on omat protokollat. TCP / IP -mallissa on neljä tai viisi kerrosta. OSI-malli puolestaan kuvaa tiedonsiirtoprotokollien yhdistelmän seitsemässä kerroksessa. OSI-viitemalli on käsitteellisesti ehjä ja ISO:n kansainvälinen standardi. Sen sijaan käytännön protokollapinoja sen mukaisesti ei juurikaan olla kehitetty. Päinvastainen tilanne vallitsee TCP/IP-viitemallin suhteen, mallia ei juurikaan käytetä mutta protokollapinot ovat hyvin aktiivisessa käytössä.

Kuva otettu osoitteesta http://docplayer.fi/docs-images/39/20479720/images/24-0.png. Kurssillamme TCP / IP -mallin kerroksia oli viisi: siirtokerroksen (eli linkkikerroksen) alla oli fyysinen kerros.


Sovelluskerroksen protokollia


Sovelluskerroksen protokollan tehtävänä on määritellä säännöt asiakkaan ja palvelimen väliseen kommunikaatioon.

HTTP (Hyper Text Transfer Protocol)

Sovelluskerroksen protokolla on esimerkiksi HTTP, jota selaimet ja WWW-palvelimet käyttävät tiedonsiirtoon. HTTP-protokollassa tiedosto avataan HTML- eli hypertekstidokumenttina, joka voi sisältää mm. tekstiä, kuvaa, animaatiota tai ääntä. Hypertekstitiedostojen lukemiseen käytetään ohjelmaa, jota nimitetään selaimeksi. WWW:ssa asiakasaohjelma (selain) ja palvelinohjelma keskustelevat keskenään käyttämällä HTTP-protokollaa. HTTP-protokollalla voi esimerkiksi käyttää sähköpostin palveluja.

HTTPS (Hyper Text Transfer Protocol Secure) on yhdistelmä HTTP:n ja TLS:n protokollista ja se on luotu turvaamaan ja suojaamaan tiedonsiirtoliikennettä asiakkaan ja palvelimen välillä. HTTPS kommunikaatio noudattaa TLS-protokollan turvallisuuskäytänteitä, sillä se käyttää TLS-protokollaa TCP-protokollan päällä. HTTP protokollaa ei siis muuteta mitenkään, vaan salaus toteutetaan erikseen TLS tai SSL protokollalla.

FTP (File Transfer Protocol)

Toinen esimerkki sovelluskerroksen protokollista on FTP. Se mahdollistaa tiedostojen siirron kahden koneen välillä käyttöjärjestelmästä riippumatta. FTP-protokolla vaaditaan, jotta tiedostot voivat kulkea tietokoneelta palvelimelle ja päinvastoin.


SMTP (Simple Mail Transfer Protocol)

SMTP on postiprotokolla sähköpostin välitystä varten. Toiminta perustuu siihen, että kun asiakas kirjoittaa ja lähettää viestin, SMTP-asiakas ottaa yhteyden SMTP-palvelimeen TCP:n avulla. Yhteydenoton jälkeen suoritetaan kättely osapuolien välillä ja vastaanottajan tiedot saadaan. Viesti välitetään ja siirretään vastaanottajan postilaatikkoon. Nykyaikaiset postipalvelimet käyttävät alkuperäisen SMTP:n sijasta laajennettua ESMTP-protokollaa

POP3 (Post Office Protocol) ja IMAP (Internet Message Access Protocol)

Sähköpostipalvelimelta voidaan lukea posteja POP3 tai IMAP protokollilla, tosin yleisin tapa nykyään on selaimella hakea / hakea käyttäen HTTP protokollaa.

Kuljetuskerroksen protokollia


Kuljetuskerroksen protokollien perustehtävänä on tarjota ylemmille sovelluksille kuljetuspalvelua kahden mahdollisesti eri koneissa tai jopa eri verkoissa olevan prosessin välillä. Kuljetuskerroksen tehtävänä on siis porttinumeron perusteella viedä paketit oikealle sovellukselle vastaanottavassa laitteessa. Kerroksen kaksi tärkeintä protokollaa ovat TCP (Transmission Control Protocol) ja UDP (User Datagram Protocol).

TCP (Transmission Control Protocol)

Yleisin internetin tiedonsiirtoprotokolla. Kaikki tiedot siirtyvät internetissä tiedostoina. Kun napsautat verkkosivun selaimen ikkunaa, tietokoneellesi lähetetään palvelimelta sivutiedostosta kopio. Se ei kuitenkaan tule kokonaisena tiedostona, vaan se jaetaan ensin pieniin paketteihin, jotka sitten lähetetään sinulle. Paketit kootaan tietokoneessasi uudestaan tiedostoksi. TCP vastaa  näiden tietopakettien lähettämisestä ja vastaanottamisesta. Yksi sen tehtävistä on siis jakaa kaikki lähetettävät tiedot pieniksi tietopaketeiksi. 
TCP tarjoaa UDP:n tavoin mekanismin, jolla osoitetaan lopullinen kohde, mutta TCP tarjoaa tämän lisäksi monia lisäominaisuuksia. Keskeisin asia on, että se tarjoaa sovelluksille luotettavaa yhteydellistä kuljetuspalvelua, joka takaa pakettien järjestyksen säilymisen sekä pakettien pääsyn vastaanottajalle. Tämän ansiosta sovellusohjelmoijan ei tarvitse kiinnittää huomiota tiedonsiirrossa esiintyvien ongelmien hoitamiseen vaan TCP hoitaa ne hänen puolestaan. 

UDP (User Datagram Protocol)

Internet-maailmassa UDP tarjoaa yksinkertaisen yhteydettömän kuljetuspalvelun varsinaisille sovelluksille. Käytännössä se ei lisää alemman protokollan eli IP:n päälle muuta kuin mekanismin osoittaa lopullinen kohde. UDP ei sisällä pakettien numerointia ja sitä kautta varmuutta pakettien järjestyksen säilymisestä, toisin kuin TCP. Koska lähettäviä paketteja ei numeroida, vastaanottaja ei myöskään voi kuitata niitä vastaanotetuiksi. Tämän seurauksena UDP:tä voidaan pitää epäluotettavana yhteydettömänä kuljetuspalveluna

Internet-kerroksen eli verkkokerroksen protokollia


Verkkokerroksen tehtävänä on kuljettaa paketti verkon läpi oikealle laitteelle. Verkkokerroksen tarjoama palvelu on todennäköisesti kaikista monimutkaisin ja vaikein toteuttaa, sillä viestin välittäminen hierarkisen verkon yli vaatii reititysalgoriteja ja useita reititysprotokollia.

IP (Internet Protocol)

TCP-protokolla hoitaa tiedon jakamisen paket­teihin, ja itse siirrosta vastaa IP-protokolla. IP on internetkerroksen protokolla ja internetin toiminnan ydin, joka yhdistää internettiin liittyneitä laitteita palvelimiin ja sitä kautta mahdollisesti toisiin käyttäjiin. IP-paketissa kuljetettavat protokolla on numeroitu. Protokollan numerosta vastaanottaja tietää, mitä IP-paketin sisällä on. Datapa­ketit siirtyvät eteenpäin vaikkapa maapallon toiselle puolelle lukuisten tietokoneiden, johto­jen ja muiden yhteyksien avulla. 

Linkkikerroksen (eli siirtokerroksen) sekä fyysisen kerroksen tehtävät


Linkkikerroksen tehtävänä on välittää paketti yksittäisen linkin yli.

Fyysisen kerroksen tehtävänä on määritellä siirtomedian fyysiset ominaisuudet. Tällä kerroksella toimii varsinainen tekniikka, joka lähettää ja siirtää annettua tietoa väylää pitkin. Se lähettää jännitettä tai valoa tekniikan mukaan.

Internetin hallinta


Internetiä ei hallitse mikään yksittäinen järjestö, mutta keskeistä osaa sen hallinassa näyttelee tällä hetkellä yhdysvaltalainen, voittoa tavoittelematon ICANN (Internet Corporation for Assinged Names and Numbers). ICANN hallinnoi nimiä ja numeroita, "osoiteavaruutta" -juuripalvelimia, ip-osoitteita ja domain-nimiä.

ICANN ylläpitää verkkotunnuksiin liittyvän hallinnon lisäksi myös IANA:aa (Internet Assigned Numbers Authority). IANAn tehtäviin kuuluu hallinnoida esimerkiksi IPv4 ja IPv6-osoitteiden jakamista globaalilla tasolla. IANA jakaa siis IP osoitelohkoja alueellisille Internet-rekistereille eli RIR:eille. Esimerkiksi RIPE NCC (Réseaux IP Europeens Network Coordination Centre) vastaa Euroopan IP-osoitteiden jakamisesta.


Protokollia määrittelevät erilaiset standardointielimet, joista tärkeimpiä ovat Internet Engineering Task Force (IETF), Institute of Electrical and Electronics Engineers (IEEE), International Standards Organization (ISO) ja International Telecommunications Union Telecommunication Standardization Sector (ITU-T).

Kuva otettu osoitteesta http://what-when-how.com/wp-content/uploads/2012/03/tmp91_thumb2.jpg

Lähteet


Jyväskylän yliopiston tietotekniikan kurssi "ITKP104 - Tietoverkot" ja sen nettimateriaali http://users.jyu.fi/~arjuvi/opetus/itkp104/2016

http://www.internetopas.com/

http://blogs.helsinki.fi/tvt-ajokortti/1-tietokoneen-kayton-perusteet/

http://www.okol.org/verkkokurssit/datanomi/tietojarjestelmien_kaytto_ja_kehittaminen/lahiverkko_internet/lanjaint/verkkoprotokolla_ja_standardit/proto.htm

http://oppimateriaalit.internetix.fi/fi/avoimet/6tekniikkatalous/verkko/tcp_ja_udp_protokollat

http://oppimateriaalit.internetix.fi/fi/avoimet/atk/intranet/internetin_toiminta

http://www2.amk.fi/digma.fi/www.amk.fi/opintojaksot/041005/1094208209451.html

http://what-when-how.com/tcpip/understanding-tcpip-basics/

https://fi.wikipedia.org