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).

TCPIPINO

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ä.

Kapselointi2

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.

Soketit drawio

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.

Nat drawio

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/8on 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).