TCP/IP-viitemalli

**TCP/IP-viitemalli** on Internetin arkkitehtuurin kuvaamisessa käytetty tietoliikenneverkkojen viitemalli. Nimensä se on saanut kahden keskeisen protokollan eli TCP:n ja IP:n mukaan. Toisin kuin OSI-viitemallissa, TCP/IP protokollat kehitettiin ensin ja malli vasta niiden jälkeen. TCP/IP-viitemalli ei sovellukaan kovin hyvin muiden protokollapinojen kuin TCP/IP:n mallintamiseen. Mallia kutsutaan myös "tiimalasimalliksi", koska tiimalasin pohjan muodostaa suuri määrä fyysiseen mediaan sidottuja peruskerroksen protokollia, vyötärön muodostaa IP, sen yllä on UDP ja TCP ja näiden yllä on suuri määrä sovellusprotokollia.

TCP/IP-viitemalli koostuu neljästä portaasta, joista kolmella on suorat vastineet OSI-viitemallissa. 

## Historia
TCP/IP-pinon malli perustuu ARPANETin referenssimalliin (, ARM). TCP/IP-malli on yksinkertaisempi kuin OSI-malli, mutta varsinaiset toteutukset sisältävät muutamia erikoistuneita protokollia.

## Sovelluskerros (''Application Layer'')

TCP/IP-viitemalli ei määrittele sovelluskerroksen rakennetta tarkemmin. Usein sovellus toteuttaa viestintänsä tällä kerroksella käyttäen yhtä protokollaa, jossa on sovelluksen tarvitsemat ominaisuudet (yhdistäen OSI-mallin sovellus-, esitystapa- ja istuntokerrosten ominaisuuksia). Sovelluksen tietoliikenne saattaa kuitenkin edellyttää useampiakin protokollia, esim. pankkiyhteyksiin käytetty salattu HTTP-protokolla toteutetaan tunneloimalla normaalia HTTP-protokollaa salauksen ja palvelimen todennuksen (autentikoinnin) tarjoavan SSL-protokollan päällä. Sovelluskerrokseen kuuluvat korkeamman tason protokollat, kuten telnet, FTP, SMTP, DNS, NNTP, NTP ja HTTP.

TCP/IP-malli painottaa tehtävien siirtämistä sovellukselle. Erillistä *istunto*- tai *esitystapakerrosta* ei ole, vaan sovellus pitää huolen istuntojen muodostamisesta ja purkamisesta samoin kuin tarvittavista tiedon esitystavan muunnoksista.

## Kuljetuskerros (''Transport Layer'')

Kuljetuskerroksen tarkoitus on sallia tietojenvälitys lähde- ja kohdekoneiden välillä. TCP/IP-viitemallin kuljetuskerros on sama kuin OSI-mallin kuljetuskerros. TCP/IP-viitemallissa tällä kerroksella ovat yleisimmässä käytössä TCP ja UDP. TCP tarjoaa luotettavan tavuvuon sovellusten välille, korjaten tiedonsiirtovirheet ja toimittaen tietoliikenteen perille samassa järjestyksessä kuin data on lähetetty. Lisäksi TCP toteuttaa ruuhkanhallinnan *(congestion control)*. UDP välittää yksittäisiä viestejä sovellusten välillä ilman virheenkorjausta ja perillemenon varmistusta. UDP:tä käyttävät sovellukset joutuvat toteuttamaan itse luotettavuuden ja ruuhkanhallinnan, mutta hyötyvät tiedonsiirron nopeudesta ja uudelleenlähetyksien aiheuttaman viiveen poistumisesta.

## Verkkokerros (''Internet Layer'')

Internet-protokolla (IP) välittää tietoliikennepaketteja verkon tietokoneiden välillä, *parhaansa mukaan*. IP ei takaa yksittäisen paketin perillepääsyä; paketit saattavat kadota, vaihtaa järjestystä tai kopioitua matkalla. Näiden tapahtumien käsitteleminen on ylempien kerrosten tehtävä. Etenkin on huomattava että tungos verkossa on täysin luvallinen syy verkolle tuhota tietoliikennepaketteja IP-tasolla.

Internet-teknologiaa käytettäessä verkossa on verkon osia yhdistäviä reitittimiä, joilla on tietoa verkon topologiasta, ja jotka ottavat eri segmenteistä IP-paketteja vastaan ja ohjaavat ne eteenpäin. Reititys ja uudelleenlähetys ovat verkkokerroksen määrittävä tekijä. Verkkokerros ei ole tietoinen ylempien kerroksien tapahtumista ja mallin puitteissa jokainen IP-paketti käsitellään erillisenä tapahtumana eikä verkkokerros ole tietoinen sovelluksia yhdistävästä TCP-yhteydestä. TCP/IP-viitemallin verkkokerros vastaa varsin hyvin OSI-mallin verkkokerrosta.

## Peruskerros (''Link Layer'')

TCP/IP-malli ei määritä tarkkaan mitä tapahtuu verkkokerroksen alapuolella. Se olettaa että IP:n alla on jokin protokolla, joka pystyy välittämään IP-paketteja tietokoneen muistista toiselle tietokoneelle. IP-protokolla ei ota mitenkään kantaa fyysiseen mediaan tai pakettien kehystykseen, vaan olettaa saavansa käyttöön alemman kerroksen palveluita jonkin rajapinnan kautta, niin että se voi lähettää paketteja reitittimille (yhdyskäytäville). Tyypillisiä peruskerroksia ovat lähiverkkojen Ethernet, matkapuhelimien GPRS ja 3G ja digitaalisten tilaajaliittymien ADSL fyysiseen kerrokseen ja ATM, PPP, Ethernet tms. linkkikerrokseen perustuvat tekniikat. Peruskerros saattaa myös olla toinen TCP/IP-protokollapino, IP IP:n päällä muutaman lisäprotokollan kera ei ole mitenkään harvinainen ratkaisu.

## TCP/IP- ja OSI-mallit

TCP/IP-viitemalli eroaa OSI-mallista jonkin verran. Molempien voidaan katsoa koostuvan kerroksista, joista osa on samanlaisia. Selkeitä erojakin on. OSI-mallissa *palvelut*, *rajapinnat* ja *protokollat* on pidetty erillään. OSI-malli on ns. kerrosmalli jossa alemmat kerrokset on piilotettu ylemmiltä, kun taas TCP/IP muodostaa hierarkian, jossa sekä verkkokerros että kuljetuskerros ovat näkyvissä sovelluksille. OSI-mallissa voidaan periaattessa vaihtaa eri kerroksilla käytettäviä protokollia. 

TCP/IP-arkkitehtuuri lähtee siitä, että on yksi kaikille yhteinen protokolla, IP.
Keskellä oleva IP eristää peruskerroksen ylemmän portaan protokollista, samoin kuin ylemmän kerroksen protokolla peruskerroksesta.
IP-paketteja voidaan lähettää minkä tahansa peruskerroksen protokollan päällä, ja kaikki muut palvelut, sovellukset ja protokollat käyttävät IP:tä.
Kaikki verkon solmut voivat viestiä toistensa kanssa käyttäen IP:tä.

Tämä *tiimalasimalli* on ollut erittäin menestyksekäs rakennettaessa laajoja verkkoja.
Periaate on viety vieläkin pidemmälle IPv6:ta suunniteltaessa.

OSI-malli (mahdollisesti ilman istunto- ja esitystapakerrosta) soveltuu paremmin apuvälineeksi tietoliikenneverkoista puhuttaessa ja niitä opetettaessa.
Sen sijaan OSI-mallin mukaan rakennetut protokollat eivät ole saaneet suosiota. 

*Portaattainen* TCP/IP-malli soveltuu hyvin protokollien käytännön toteuttamiseen, kun eri kerroksille kuuluva prosessointi voidaan haluttaessa yhdistää suorituskyvyn parantamiseksi.

## Katso myös

* RINA, kehitteillä oleva rekursiivinen verkkoarkkitehtuuri

## Lähteet