Internet ja tietoverkot 2015 Harjoitus 5: (ISO/OSI-malli: Verkkokerros, TCP/IP-malli: internet-kerros) Tämän harjoituksen tarkoituksena on tutustua IP-protokollaan. Kertausta - Harjoitus 4: Erään sovelluksen verkkoliikennettä - tehtävä Tehtävä 1 - IPv4 Tehtävä 2 - IPv6 - paketti. Tämä vielä ehdolla. Tehtävä 3 - ICMP Tehtävä 4 - NAT Kertausta - Harjoitus 4: Erään sovelluksen verkkoliikennettä - tehtävä (Erään sovelluksen verkkoliikennettä + Vastaanottoikkunan maksimikoko) Lataa Optimasta ITV-kurssin työtilasta tiedosto sendwin-bound.pcapng. Tiedosto sisältää erään sovelluksen verkkoliikennettä. Sovelluksen on tarkoitus lähettää dataa 128kt:n lohkoissa, mutta sovelluksessa on kaksi bugia, joiden vuoksi tiedonsiirto ei toimi oikein. - Tunnista bugien aiheuttamat häiriöt tiedonsiirtoon, tarkkailemalla kaapattua liikennettä joko graafeilla tai ilman. Selosta mitä bugit tekevät verkkoliikenteelle. Vastaus Katso Kuva1 Graafeilla tcptrace tai stevens, on nähtävissä että sovellus ei lähetä dataa 128kt:n, eli 131072 tavun lohkoissa (esim. 89kpl TCP-segmenttiä joiden pituus 1460tavua + yksi missä pituus 1132tavua), vaan niin että tapahtuu: 1) yksi 131070 tavun lähetys (88 TCP-segmenttiä joiden koko 1460tavua + 2kpl segmenttejä joiden pituus 1295tavua) ja tämän jälkeen lähetetään yksi 2 tavua tietosisältöä sisältävä TCP-segmentti. 2) kaksi 65535 tavun lähetystä (44 TCP-segmenttiä, joissa pituus on 1460tavua + 1kpl jossa pituus on 1295tavua) ja tämän jälkeen yksi 2 tavua tietosisältöä sisältävä TCP-segmentti. Nämä molemmat tulkitaan bugeiksi, vaikka huono kuljetuskerroksen toteutus voisi aivan yhtä hyvin aiheuttaa tällaisen tilanteen. Ilmeisesti kaappauksessa olevat 64kt lähetykset johtuvatkin nimenomaan huonosta tai huonosti konfiguroidusta kuljetuskerrostoteutuksesta käyttöjärjestelmässä.
Kuva 1: Sovelluksen tulisi lähettää yksi 128kt suuruinen purske (burst) segmenttejä. Välistä sovellus lähettää yhden 128kt-2t suuruisen purskeen segmenttejä ja joskus kaksi kpl 64kt-2t suuruisia purskeita. Sovellus lähettää em. lisäksi aina yhden 2 tavun mittaisen segmentin. Tehtävä 1 - IPv4 IPv4-datagrammin otsikossa on ns. TTL-kenttä (Time-to-live), jonka pituus on 8 bittiä. Kentälle annetaan jokin nollasta poikkeava arvo, kun datagrammi lähetetään. Joka kerran, kun datagrammi saapuu reitittimelle, sen arvoa vähennetään yhdellä. Jos kentän arvo muuttuu nollaksi, datagrammia ei enää välitetä eteenpäin ja datagrammin alun perin lähettäneelle koneelle lähetetään ICMP-viesti, jossa kerrotaan tapahtumasta (TTL exceeded). Tätä ominaisuutta käytetään tavallisesti hyväksi Traceroute-ohjelmassa, jonka avulla voidaan selvittää reitti kohdekoneelle. Traceroute lähettää ensimmäiseksi kohdekoneelle viestin, jossa TTL-kentän arvo on 1. Tämä viesti hylätään jo ensimmäisessä reitittimessä, joka lähettää virheilmoituksen lähdekoneelle. Seuraavaksi lähetetään viesti, jossa TTL-kentän arvo on 2 jne., kunnes viesti pääsee perille kohteeseen. Reitittimien viesteistä nähdään niiden IP-osoitteet, joten reitti kohteeseen voidaan päätellä reitittimien lähettämistä TTL Exceeded -viesteistä. (IPv6-datagrammissa TTL-kenttää vastaa kenttä nimeltä Hop limit.)
Kuva 2: Traceroute lähetää ICMP-reply requested -pyyntöjä. Jokainen reititin vähentää TTL-arvoa yhdellä. Reitittimet lähettävät TTL Exceeded -viestin kun viestin TTL-arvo menee nollaan. Linux/Unix-koneissa ohjelma voidaan suorittaa komentoriviltä komennolla traceroute ja Windowsissa tracert. Ohjelman parametrivalikoima on Linuxissa hieman monipuolisempi kuin Windowsissa. Alla olevassa esimerkissä on haettu reitti Windows-koneelta osoitteeseen www.google.fi (ensimmäiset IP-osoitteet on jätetty pois): Kuva 3: Reitinselvitys Traceroute-ohjelmalla osoitteen www.google.fi isäntäkoneelle. Kuvassa traceroute-ohjelma on lähettänyt 16 kappaletta kolmen paketin sarjoja. Jokaisella tiettyyn sarjaan kuuluvalla paketille on ollut sama TTL-kentän arvo (esim. ensimmäiset 3kpl ovat luultavasti olleet arvolla TTL=1). Paluuviestin (TTL-Exceeded) saapumiseen kuluneet ajat näkyvät tulostuksessa. Toiseksi viimeisestä reitin osoitteesta ei saada aikarajan puitteissa vastausta. Voit kokeilla traceroute ohjelmistoa myös itse. Harjoitusluokissa homma hoituu suorittamalla tracert-komento komentoriviltä esimerkiksi arvolla www.icann.org. (Komento: tracert www.icann.org )
Tässä tehtävässä tarkastellaan Tracerouten aiheuttamaa IPv4-liikennettä. Avaa Wiresharkissa http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip -paketista purettu tiedosto ipethereal-trace-1. Tiedosto sisältää kaappauksen liikenteestä, jossa tehdään kolme Traceroutekutsua samaan kohdeosoitteeseen: ensimmäisessä lähetettävän viestin koko on 56 tavua, toisessa 2000 tavua ja kolmannessa 3500 tavua. Kaappauksessa näkyy asiakaskoneelta lähteviä ICMP Echo Request (eli ping)-viestejä ja reitin varrella olevien reitittimien ICMP TTL exceeded-viestejä. A. Mikä on asiakaskoneen IP-osoite? B. Valitse ensimmäinen ICMP Echo Request viesti ja avaa otsikkotiedoista IP-osa. Mitä kenttiä IP-otsikkotiedot sisältävät? C. Vastaa edellä olevien kenttien arvojen perusteella seuraaviin kysymyksiin: - Mikä on IP-otsikon koko? - Mikä on datagrammin tietosisällön koko? - Onko IP-datagrammi sirpaloitu? D. Järjestä Wiresharkin näkymässä paketit lähdeosoitteen mukaan. Etsi taas asiakaskoneelta lähtevä ensimmäinen ICMP Echo Request viesti ja tutki IP-otsikon kenttiä seuraavissa vastaavissa viesteissä. Mitkä otsikon kentät säilyvät muuttumattomina ja mitkä muuttuvat viestistä toiseen? E. Mikä on lähimmän reitittimen IP-osoite? Tutki tämän reitittimen lähettämiä vastauspaketteja. Miten niiden TTL-kenttä muuttuu? Miksi? F. Järjestä nyt paketit ajan mukaan. Etsi ensimmäinen asiakaskoneelta lähtevä viesti, jossa tracerouten ICMP Echo Request viestin pituudeksi on muutettu 2000 tavua. Huomioi että viestiä kuljettava datagrammi on sirpaloitunut. - Moneenko sirpaleeseen datagrammi sirpaloitunut? - Minkä kokoisia sirpaleet ovat? - Mitkä ovat sirpaleita kuljettavien pakettien järjestysnumerot (Wireshark:in listauksen järjestysnumero) ja minkä kokoisia nämä paketit ovat? G. Etsi vielä ensimmäinen asiakaskoneelta lähtevä viesti, jossa tracerouten lähettämän viestin kooksi on muutettu 3500 tavua. - Moneenko datagrammiin viesti on sirpaloitu? - Mitkä ovat sirpaleita kuljettavien pakettien järjestysnumerot (Wiresharkin listauksen järjestysnumero) ja minkä kokoisia nämä paketit ovat? - Mitkä otsikkokentät muuttuvat sirpaleissa ja mitkä ovat datagrammien koot? - Jos tracerouten lähettämän viestin pituus on 3500 tavua, niin miksi viestiä kuljettavien datagrammien yhteenlaskettu koko on 3568 tavua? (ts. miksi datagrammien yhteenlaskettu koko ei ole 3500 tavua?)
Tehtävä 2 - IPv6 - paketti. Lataa Optimasta ITV-kurssin työtilasta tiedosto ipv6-mcasts.pcapng. Tiedosto sisältää IPv6- protokollaa internet-kerroksessa käyttävää verkkoliikennettä. Voit vapaasti valita kaappauksesta paketin joka sisältää IPv6-otsikkotiedot. Tutustu IPv6-otsikkotietoihin. - Mikä on IPv6-protokollan tärkein parannus verrattuna IPv4-protokollaan? - Miksi Paketti listaus -näkymässä esitetyt pakettien kohdeosoitteet ovat lyhempiä kuin lähdeosoitteet? Ovatko ne oikeasti edes lyhempiä? Tehtävä 3 - ICMP Tässä tehtävässä tarkastellaan taas Tracerouten aiheuttamaa IPv4-liikennettä, tällä kertaa ICMP-protokollan kannalta. Avaa Wiresharkissa http://gaia.cs.umass.edu/wiresharklabs/wireshark-traces.zip -paketista purettu tiedosto icmp-ethereal-trace-2. Tiedosto sisältää kaappauksen liikenteestä, jossa tehdään Traceroute-kutsu kolmella lähetettävällä paketilla samaan kohdeosoitteeseen. Kaappauksessa näkyy asiakaskoneelta lähteviä ICMP Echo Request (eli ping)-viestejä ja reitin varrella olevien reitittimien ICMP TTL exceeded-viestejä, sekä lopullisen kohdekoneen ICMP Echo reply-viestejä. A. Mikä on asiakaskoneen IP-osoite ja mikä on sen koneen IP-osoite johon asiakaskone yrittää reittiä selvittää? B. Valitse listauksen loppupuolelta ensimmäinen ICMP Echo Request-viesti, johon saadaan kohteesta vastaukseksi ICMP Echo reply-viesti. - Mitä kenttiä ICMP-viesti sisältää? - Mitkä ovat kenttien type ja code arvot tässä viestissä? - Wireshark raportoi sekä Identifier - että Sequence number -kentät kahteen kertaan, vaikka Paketin tavut -näkymästä on selkeästi nähtävillä että vain toinen Identifier - kentistä ja toinen Sequence number -kentistä esittää niitä arvoja joita paketti oikeasti pitää sisällään. Miten Identifier - että Sequence number -kenttien arvot poikkeavat toisistaan? (Voit tarvittaessa verrata kenttien arvoja myös toisissa paketeissa) C. Tutki edellisen tehtävän viestiä vastaavaa ICMP Echo reply-viestiä. Miten sen kenttien arvot poikkeavat edellisen tehtävän vastaavista? D. Valitse jokin ICMP Time-to-live-exceeded-viesti ja vertaa sitä edellä tarkasteltuun ICMP Echo reply-viestiin. - Miten viestit eroavat toisistaan? - Miksi code-kentän arvo on molemmissa viesteissä 0? - Mitä code-kentällä voidaan kuvata?
Tehtävä 4 - NAT (Porttiohjaus) Perehdytään lopuksi NAT-protokollan (Network Address Translation) toimintaan. Protokollaa käytetään tyypillisesti kotien laajakaistayhteyksissä, joissa Internetiin yhteydessä oleva modeemi / reititin jakaa ns. paikalliset IP-osoitteet kotiverkon (ts. sisäverkon) koneille ja nämä koneet ovat yhteydessä Internetiin NAT-reitittimenä toimivan modeemin / reitittimen kautta. Modeemi / reititin on ainoa laite, joka näkyy suoraan ulkoverkkoon, joten ainoastaan sen IPosoitteeseen voidaan kommunikoida ulkoa päin. (ts. Reitittimen IP-osoite on aina kohdeosoitteena kaikessa ulkoverkosta tulevassa liikenteessä vaikka paketti sisältäisikin esim. viestin vastauksena kotiverkon koneen lähettämään HTTP-pyyntöön) NAT-protokollan tapauksessa on varsin hankalaa määrittää mihin TCP/IP-mallin kerrokseen protokolla kuuluu, sillä se tarjoaa sovelluskerrokseen kuuluvan kaltaista palvelua, kuljetuskerroksen kuuluvan kaltaista toimintaa, mutta toimii silti internet-kerroksessa. NAT-protokollaa voidaan käyttää myös muihin kuin edellä mainittuun tarkoitukseen (esim. eräänlaisena palomuurina), mutta näitä muita käyttötarkoituksia ei tarkastella tässä tehtävässä. Kuva 4: Liikenteen kaappaus NAT-reitittimen koti- ja ulkoverkon puolelta Paketissa http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip on kaksi tiedostoa NAT_home_side.pcap ja NAT_ISP_side.pcap. Edellä mainittuihin tiedostoihin on tallennettu kotiverkon liikennettä samoista tapahtumista NAT-laitteen kotiverkon ja ulkoverkon puolelta (Kuva 3). Tutki näitä tiedostoja Wiresharkilla ja vastaa seuraaviin kysymyksiin. HUOM! Anna määrittämäsi tehtävässä määrittämäsi arvot taulukoituna kuten edellisen harjoituksen tehtävässä, jossa laskettiin uudelleenlähetysajastimen (RTO; Retransmission Timeout) arvoa. Esimerkki vastaustaulukosta löytyy tehtävän lopusta.
Tutkitaan asiakkaan ensimmäistä HTTP-pyyntöä Googlen IP-osoitteeseen 64.233.169.104 tiedostosta NAT_home_side.pcap, ts. kotiverkon puolelta. A. Mitkä ovat Wiresharkin listauksessa seuraavien pakettien järjestysnumerot: - Pyyntöön liittyvän TCP-yhteyden SYN-segmentti - Palvelimelta tuleva SYN ACK-segmentti - Asiakkaan HTTP-pyyntö - Palvelimen vastaus B. Määritä kaikkien edellä mainittujen viestien lähde- ja kohdeosoitteet sekä lähde- ja kohdeportit. Etsi nyt tehtävän A viestit tiedostosta NAT_ISP_side.pcap. C. Mitkä ovat Wiresharkin listauksessa pakettien järjestysnumerot? D. Määritä kaikkien edellä mainittujen viestien lähde- ja kohdeosoitteet sekä lähde- ja kohdeportit. Viesti Tiedosto Paketti # Lähdeosoite Lähdeportti Kohdeosoite Kohde portti TCP SYN TCP SYN TCP SYNACK home_side 32 123.456.789.011 854 245.203.123.012 783 ISP_side 23 80.229.112.34 1042 245.203.123.012 783 home_side ---- ---- ---- ---- ---- jne. ---- ---- ---- ---- ---- ---- Taulukko 1: Esimerkki vastaustaulukosta. E. Vertaa A ja C kohdissa mainittujen viestien lähde-ja kohde osoitteita ja lähde- ja kohdeportteja. Päättele näiden perusteella, miten NAT tekee osoitteenmuunnoksen tutkittavalle HTTP-yhteydelle. Toisin sanoen, miksi ns. kotiverkon puolella otetussa kaappauksessa on eri kohdeosoitteet kuin ulkoverkon puolelta otetuissa? Millä tavalla NAT tekee linkityksen koti- ja ulkoverkon IP-osoitteille ja porteille?