Kapselointi - miasjoberg/A253Verkko GitHub Wiki
Kapselointi
Tietoliikenteessä käytetään samanaikaisesti useita eri tiedonsiirtoon liittyviä sääntöjä ja menetelmiä, joita kutsutaan protokolliksi. MAC-osoitteet Ethernet-protokollaan, osoitteet IP-protokollaan. Usein puhutaan protokollapinoista (protocol stack). Internet-liikenne perustuu TCP/IP-protokollapinoon. PInossa on useita eri protokollia, jotka hoitavat vain niille kuuluvia tehtäviä ottamatta kantaa muiden protokollien tietoihin. Toinen tapa kuvata protokollien toimintaa on kuvata niitä sisäkkäisinä kapseleina (encapsule).
Edellisessä kuvassa näkyy TCP/IP protokollapinon rakenne. Ylin kerros on ns. sovelluskerros, jossa toimivat palvelinohjelmistojen protokolla, kuten web:n http (HyperText Transfer Protocol) ja https (Secure HyperText Transfer Protocol). Tukihenkilö ei joudu ottamaan kantaa näiden protokollien toimintaan muuten kuin palomuurisääntöjen yhteydessä.
Kuljetuskerroksella toimi kaksi protokollaa TCP (Transmission Control Protocol) ja UDP (User Datagram Protocol). Niiden tehtävänä on pilkkoa asiakkaan ja palvelimien välinen datavirta järkevän kokoisiin tiedonsiirtoyksiköihin(protocol data unit) eli ns. paketteihin (packet). Kupljetuskerroksen tiesoita tärkein on porttinumero ( port number) , joka kertoo pakettia lähettävän ja vastaanottavan ohjelman.
TCP on tarkoitettu suurempien ja luotettavuuttaa vaativien datasiirto-operaatioiden suorittamiseen UDP taas suunniteltu lyhyiden viestien lähettämiseen.
Internet-kerros huolehtii reitityksestä IP-osoitteiden verkko osan perusteella. ICMP (Internet Cotrol Message Protocol) mahdollistaa verkon aktiivilaitteiden ja tarvittaessa tietokoneiden asetusten muuttamisen tai muutoksista ilmoittamisen. **PING-sovellus ( Packet Internet Grapher) käyttää ICMP-protokollaa. **IGMP(INternet Group Management Protocol) mahdollistaa ryhmäosoitteiden ylläpidon(D-luokan osoitteet) **GRE Generic Routin Encapsulation) mahdollistaa erilaisten VPN-ratkaisujen (Virtual Private Network) toiminnan.
Kuljetuskerroksen porttinumero ja IP-osoite muodostavat yhdessä ns. soketin (socket)**, joka yksilöi asiaakkaan ja palvelimen välisen yhteyden. Liityntäkerrosten Ethernet-protokolla tarjoaa fyysiset MAC-osoitteet lähiverkkokäyttöön ja sen avlla varmistetaan että vastaanotetut datapaketit ovat ehjiä.
Kuvassa näkyy kapseloinnin periaate. Ethenet-kehys kuljettaa sisällään IP-pakettia, jonka sisällä on TCP-paketti, jonka sisällä taas sovelluksen protokolla, esim, http tai https. Jokainen kerros lisää dataan omat otsakkeensa (header TCP porttinumeron, IP IP-osoitteen ja verkkokortti MAC-osoitteesee. Terminä kapselointi tarkoittaa sitä, että verkkokortti tutkii vain MAC-osotteita, eikä ota kansaa IP-osoitteeseen tai porttinumeroihin. Tietokoneen ta aktiivilaitteen reititys tutkii vain IP-osotteita jne.
Porttinumerot ja socketit
Soketti (socket) tarkoittaa sanamukaisesti pistotulppaa. Töpseissä on kaksi nastaa. Samoin tiekoliikenneyhteys muodostuu kahden tiedon IP-osoitteen ja porttinumeron perusteella. Palvelinsovelluksilla on aina tietty kiinteä porttinumero. Esim. Web-sovellusten http:n porttinumero on 80, SQL Serverin 1433. Asiakasohjelma , kuten selain käyttää dynaamisia porttinumeroita, eli jotain vapaata numeroa, joka ei ole käytössä. Kun selsin muodostaa yhteyden web-palvelimeen sen IP-osooitteen ja TCP-porttinumeron 80
perusteella. Samalla se ilmoittaa oman IP-osoitteensa IP-datagrammissa ja sen portin numero, johon halaa ladata sivun TCP.segmentin lähettäjän porttinumeron avulla.
Porttinumeroita voi tarkastella komennolla netstat
. Se kertoo, mitä soketteja on käytössä. Palvelimen portit eli ns. kuuntelevat portit voi selvittää komennolla netstat
-a`
TCP 0.0.0.0:49665 A253-06:0 LISTENING
TCP 0.0.0.0:49668 A253-06:0 LISTENING
TCP 0.0.0.0:49669 A253-06:0 LISTENING
TCP 0.0.0.0:49670 A253-06:0 LISTENING
TCP 0.0.0.0:49684 A253-06:0 LISTENING
TCP 0.0.0.0:49685 A253-06:0 LISTENING
TCP 0.0.0.0:49736 A253-06:0 LISTENING
TCP 0.0.0.0:49757 A253-06:0 LISTENING
TCP 127.0.0.1:49732 A253-06:49733 ESTABLISHED
TCP 127.0.0.1:49733 A253-06:49732 ESTABLISHED
TCP 127.0.0.1:63990 A253-06:0 LISTENING
TCP 172.27.32.1:139 A253-06:0 LISTENING
TCP 192.168.253.106:139 A253-06:0 LISTENING
TCP 192.168.253.106:7680 A251-00:51741 TIME_WAIT
TCP 192.168.253.106:7680 A251-10:63835 TIME_WAIT
- Jos tilanne on
ESTABLISHED
koneesta on aktiivinen yhteys toiseen koneeseen. - Jos tilanne on
TIME_WAIT
niin se kertoo, että yhteyttä ollaan lopettamassa, mutta ootetaan vielä mahdollisia puuttuvia paketteja. - Jos tilanne on
CLOSE_WAIT
niin yhteyden aloittaja on ilmoittanut katkaisevansa yhteyden, mutta odottaa toisen pään ilmoittavan myös yhteyden katkaisemisesta. - Jos tilanne on
LISTENING
niin se kertoo, että koneessa on palvelinsovellus, joka käyttää porttia ja ottaa vastaan yhteyksiä ulkopuolelta.
Työaseman täytyy tietää palvelimien IP-osoite ja palvelinohjelmien käyttämä kuljetusprotokolla (TCP TA UDP) ja porttinumero. Ensimmäisen viestin yhteydessä palvelin saa tietää, mihin porttiin ja IP-osoitteeseen työasemalle vastataan (return socket). Työaseman porttinumerot ovat dynaamisia, joka tarkoittaa sitä, etetä portiksi valitaan jokin yli 1024 oleva portti, joka ei ole muussa käytössä sillä hetkellä. Käytännössä numerot ovat Windows-koneissa yli 10 000. Soketit esitetään usein muodossa IPosoite':'_porttinumero
Osoitteenkääntöpalvelu
Edellisessä kuvassa työaseat käyttävät intranet-osoitteita, joista ei voi todellisuudessa käysä suoraan internet-liikennettä. Työsaeman IP-osoite pitää vaihtaa julkiseksi IP-osoitteeksi ennen reititystä internettiin. IPv4-toteutuksisa tämä tehdään yleensä reitittimeen asennetun NAT-palvelimen (Network Address Translation) avulla.
Alkuperäinen NAT, toimii siten, että organisaatiolla on esim. 100 kpl julkisia IP-osoitteita, jotka asennetaan koneille silloin, ku ne liikennöivät internettiin. Nykyisin kuitenkin käytetään NAPT (Network Address an Port Translation), jossa kaikki sisäverkon koneet käyttävät intener-liikenteessä reitittimen julkista IP-osoitetta ja muutettua porttinumeroa. Tästä saatetaan käyttää myös lyhennettä PAT (Port Address Translation) Arkikielessä termi on yleensä pelkkä NAT.
Kuvassa Napt-palvelu luo uudet soketit paluupaketteja varten. Niissä vastaanottajana on Reititin-NAPT-palvelimen julkinen IP-osoite ja jokainen yhteys saa uuden porttinumeron, esim 10 000 eteenpäin. Yhteyksien ylläpito perustuu yksinkertaiseen taulukkoon:
Alkuperäinen Lähettäjä | Alkuperäinen Vastaaja | Muutettu Lähetttäjä (dynaaminen) | Muutettu Vastaanottaja |
---|---|---|---|
192.168.253.100 : 32101 | 135.181.140.230 : 447 | 83.138.13.2 : 10001 | 135.181.140.230 : 447 |
192.168.253.150 : 12550 | 135.181.140.230 : 447 | 83.138.13.2 : 10002 | 135.181.140.230 : 447 |
Taulukossa ei todellisuudessa muuteta vastaanottajan sokettia. Protokolla mahsollistaa kuitenkin myös sen muuttamisen, jolloin lähettäjän IP-sooitteet ja portit voidaan piilottaa käyttäjältä. Tätä ominaisuutta ei juurikaannykyaikana enää käytetä. Tämä esimerkki ns. dynaamisesta osoitteen käännöstä, jolla mahdollistetaan asiakkaiden (työasemien) käyttäminen yksityisistä (intranet) osoitteista. Tarvittaessa voidaan myös tehdä ns. staattinen osoitteenkääntö, jossa palvelin on sisäverkossa ja käyttää intranet-osoitetta.
Alkuperäinen Lähettäjä | Alkuperäinen Vastaaja | Muutettu Lähetttäjä (staattinen ) | Muutettu Vastaanottaja |
---|---|---|---|
0.0.0.0 : 0 | 83.138.183.2 : 80 | 0.0.0.0 : 0 | 292.168.253.10 : 8080 |
0.0.0.0 : 0 | 83.138.183.2 : 447 | 0.0.0.0 : 0 | 292.168.253.10 : 447 |
Edellisessä erimerkissä sisäverkon koneeseen 192.168.253.10
on asennettu web-palvelin, joka käyttää http-porttina TCP-porttia 8080
ja https-porttia vakiporttina 447
. Merkintä 0.0.0.0.
tarkoittaa mitä tahansa IP-osoitetta. Samoin portti 0
tarkoittaa mitä tahansa porttia. Merkintä 255.255.255.255
taas tarkoittaa kaikkia IP-osoitteita. Lisäksi on hyvä muistaa, että A-luokan osoitesarja 127.0.0.0/8
on tarkoitettu tietokoneen sisäiseen käyttöön, vaikka siitä käytetään vain loopback-osoitetta 123.0.0.1
:warning: Sovellukset, jotka eivät käytä porttinumeroita eivät välttämättä toimi NAPT-järjestelmissä oikein. Esim. PING (Packet Internet Groper) käyttää ICMP-protokollaa, jossa ei ole kuljetuskerroksen protokollaa lainkaan. Ainoastaan IP-osoitetta voidaan käyttää. Jos NAPT-palvelimessa on vain yksi julkinen IP-osoite, vain ensimmäinen pingaaja saa vastaukset ( ICMP Echo Repply).