581333-1 Tietoliikenne I

Erilliskuulustelu 15.4.2003


1. TCP-protokolla (20 p)

Postipalvelin siirtää TCP-protokollaa käyttäen suuren, kuvia sisältävän sähköpostisanoman

vastaanottajan postipalvelimelle.

a) Mitä palveluja kuljetuskerros tällöin tarjoaa postisovellukselle? (6 p)

b) Esitä, esim. kaaviokuvana, mitä TCP-segmenttejä, missä järjestyksessä ja milloin siirretään

näiden postipalvelimien välillä. (14 p)


a) Kuljetuskerros (sähköpostilähetyksessä siis TCP) tarjoaa luotettavan tiedonsiirron ('tavuvirtaa') prosessilta prosessille (tässä lähettäjän postisovellukselta vastaanottajan postisovellukselle) verkon topologiasta (lähettäjän ja vastaanottajan sijainnista) riippumatta.

Luotettava tarkoittaa sitä, että vastaanottava prosessi saa datan juuri sellaisena kuin se on lähetetty, oikeassa järjestyksessä ja mahdolliset siirtovirheet korjattuna. Jopa mahdollisiin prosessien käsittelykapasiteetin eroihin on varauduttu, jotta ne eivät sotke siirtoa.


TCP ei kuitenkaan takaa, että siirto suoritetaan tietyssä ajassa.


TCP on yhteydellinen palvelu, jotta pystyy varmistamaan tämän luotettavuuden.


Lisäksi TCP tarjoaa koko Internet-verkon kaikille sovelluksille ruuhkanvalvontapalvelun eli pyrkii pitämään verkon maksimaalisessa käytössä ja kuitenkin estämään pahat verkon tukkivat ruuhkat.


Kurose&Ross (2.): 188-189.


(Tehtävässä ei kysytty, miten TCP toteuttaa nämä palvelut eli mitä mekanismeja se käyttää luotettavuuden ja virheettömyyden aikaansaamiseksi.)


Arvostelu:

Tehtävä osoittautui yllättävän hankalaksi:

jotkut sekoittivat sovelluskerroksen ja kuljetuskerroksen ja selittivät postiprotokollien toimintaa

jotkut taas kertoivat enemmän TCP:n käyttämistä mekanismeista.


Täydet pisteet sai jos kertoi suunnilleen yllä olevat asiat. Jos jätti jotain pois sai 5 tai 4 pistettä. Jos mainitsi luotettavuuden ja/tai virheettömyyden sai yhden pisteen; samoin prosessilta prosessille tai (päästä päähän) toi yhden pisteen.

Noin 3 pistettä sai, jos selitti järkevää asiaa TCP mekanismeista ja toiminnasta tai pistokkeiden käytöstä. (Vaikka juuri tätä ei tässä kysyttykään.)


b) Tehtävän vastauksen pisteytys jakautui kolmeen pääosaan seuraavasti:

Lisäksi sai yhden pisteen, jos joitakin perusyksityiskohtia oli osattu (yhteys IP-osoite/portti -parien välillä, TCP jakaa datavirran segmentteihin, jotka vastaanottajan tulee kuitata (1p).


Yhteyden muodostus:

Lähettävän sähköpostisovelluksen pyynnöstä TCP-kerros muodostaa TCP-yhteyden vastaanottajan TCP-kerroksen kanssa käyttäen kolminkertaista kättelyä.


Lähettäjä vast.ottaja

SYN, Seq=x

------------------------------------>


SYN, Seq=y, ACK=x+1

<------------------------------------


Seq=y, ACK=y+1

------------------------------------>


Lähettäjä lähettää SYN-segmentin (yhteydenmuodostuspyyntö) vastaanottajan IP-osoitteseen kohteena TCP-portti 25. SYN- lipuke on asetettuna, ACK ei. Aloitusjärjestysnumeroksi (Seq) valittu arvo (x) kulkee järjestysnumerokentässä.


Jos vastaanottavassa järjestelmässä on sovellus kuuntelemassa porttia 25, TCP-kerros hyväksyy pyynnön ja lähettää takaisin SYN-segmentin ja siinä mukana oman aloitusjärjestysnumeronsa (y) sekä kuittaa lähettäjän SYN-segmentin kertomalla seuraavaksi odotettavan oktetin numeron (ACK=x+1). Saadessaan vastaanottajan SYN-segmentin (ja kuittauksen omalle SYN-segmentille)

lähettäjä vielä kuittaa vastaanottajan SYN-segmentin (ACK=y+1).


Lisäksi lähettäjä ja vastanottaja ilmoittavat SYN-segmentien vaihdon yhteydessä maksimi segmentin koon, jonka ovat valmiita vastaanottamaan (MSS, Maximum Segment Size). TCP-kerros jakaa sovellukselta saatavan datavirran maksimissaan MSS:n kokoisiin segmentteihin.


Kun yhteys on muodostettu, lähettäjä aloittaa sovellukselta saatavan (ison) sähköpostiviestin sisältävän datavirran lähettämisen vastaanottajalle. Aloitus tapahtuu hidasta aloitusta (Slow Start) noudattaen: lähettäjä asettaa ruuhkaikkunansa aluksi yhden /tai kahden) MSS:n kokoiseksi ja lähettää ensin yhden segmentin (tai kaksi) ja jää odottamaan kuittausta. Kun kuittaus tulee, se

kasvattaa ruuhkaikkunaa yhdellä MSS:llä/vastaanotettu kuittaus. Näin ruuhkaikkuna kasvaa eksponentiaalisesti kunkin "kierroksen" (Round-trip time, RTT) aikana, siten että lähettäjä voi lähettää toisella kierroksella 2, seuraavalla 4, ja sitten 8, jne. segmenttiä.


Näin jatketaan kunnes ruuhkaikkuna saavuttaa vastaanottajan kunkin kuittauksen yhteydessä mainostaman vastaanottoikkunan koon (tai segmentti katoaa, jolloin ruuhkaikkunaa pienennetään; ei vaadittu tässä tehtävässä, koska oletettiin, ettei ongelmia esiinny). Nyt lähettäjä voi lähettää segmenttejä enää vain vast. ottajan salliman ikkunan rajoissa, eikä lähetystahti enää kiihdy. Näin jatketaan kunnes kaikki data lähetetty.


Kun lähettävä TCP on saanut sovellukselta kaiken datan, sovellus ilmoittaa, että yhteyden voi sulkea. Kun lähettäjä lähettää viimeisen datasegmentin, se asettaa tähän tai erilliseen segmenttiin FIN-lipukkeen, jonka avulla se kertoo vastaanottajalle, että enempää dataa ei enää ole tulossa ja yhteyden lahettäjä --> vast. ottaja suunnan voi sulkea. Vastaanottaja, kuittaa FIN-segmentin ja lähettää toisen suunnan sulkemisesta ilmoittavan vastaavanlaisen FIN-segmentin, jonka lähettäjä-TCP kuittaa.

2. Osoitteista (20 p)

a) Millaisia osoitteita on käytössä TCP/IP-pinon eri kerroksilla? (8 p)

b) Millä tavoin eri kerrokset saavat selville niille palvelua tarjoavalla alemmalla kerroksella

käytetyn osoitteen? (12 p)


a) Sovelluskerros voi periaatteessa käyttää millaisia osoitteita tahansa. Yleisesti käytössä on kuitenkin Internetin hierarkkinen tekstimuotoinen domain-osoite: sähköpostiosoite, URL-osoite, koneen nimi domain-osoitteena tai suoraan IP-soite.


TCP-kerros käyttää pistokeosoitetta = 16-bittinen porttinumero + koneen IP-osoite.


IP-kerroksella on käytössä 32-bittinen IP-osoite jokaista verkossa olevaa konetta varten (tai oikeastaan rajapintaa (interface); reitittimillä on useita IP-osoitteita).


Verkkokerroksella on käytössä verkon oma verkko-osoite kullekin koneelle = koneen valmistajan sille antama koneosoite: valmistajantunnus + koneen tunnus (verkkokortin tunnus)), Ethernet 48-bittinen osoite


Arvostelusta:

sovelluskerros 2 p

TCP:n portit + (IP) 2 p

IP-kerroksen IP-osoite = verkko + kone 2 p

MAC-kerroksen verkko-osoite 2 p



b) porttinumeron selvittäminen 2 p = miten sovellus osaa pyytää yhteyttä vastaanottajan oikeaan porttiin

- sovelluskerros kertoo: joko tunnettu portti esim. http => portti 80 tai sovelluskerros tietää muuten,

- käyttöjärjestelmä varaa kuljetusyhteyttä varten jonkun vapaana olevan portin


IP-osoitteen selvittäminen 5 p

sovellusosoite => IP-osoite, tämä liitetään jo kuljetuskerrokselle menevään lähetyspyyntöön

DNS-kysely => domain-nimestä koneen IP-osoite, joka annetaan yhteyspyynnössä TCP-kerrokselle

TCP-kerroksesta IP-kerrokselle: TCP tietää jo IP-osoitteen, johon haluaa yhteyttä


verkko-osoitteen selvittäminen 5 p

IP-kerrokselta MAC-kerrokselle: ARP-kysely, jos ei jo tiedossa lähettäjän välimuistissa



3.Vastaa seuraaviin kysymyksiin. (20 p)
a) Reititin vastaanottaa eteenpäin toimitettavaksi 4000 tavun datasähkeen, jonka numero on 123, mutta verkko, jonne paketti pitäisi lähettää hyväksyy korkeintaan 1500 tavun kokoisia datasähkeitä. Miten IPv4-protokolla toimii tässä tilanteessa? (7p)

b) Käytetään CRC-virhetarkistusta, jossa virittäjänä (generator) on bittijono 1001. Onko vastaanotettu bittijono 101110101 virheetön? Perustele vastauksesi. (6 p)

c) Miten Ethernet-verkon asema toimii halutessaan lähettää kehyksensä verkkoon? (7 p)


a. Tarkkaan ottaen vastaanotetussa datasähkeessä on 3980 tavua dataa (tämä sisältää myös TCP-otsakkeen)+ 20 tavun IP-otsake.

Datasta muodostetaan kolme uutta datasähkettä, joihin jokaiseen tulee lisäksi IP-otsake.

Kaikilla on tunnuksena 123.


tunnus offset more-bitti dataa bitteinä

123 0 1 1480

123 1480 1 1480

123 2960 0 1020

=======

3980 tavua


Vastaukseksi on kelpuutettu myös jako kolmeen segmenttiin: 1500, 1500, 1000, kunhan muut tiedot ovat ok.


Osien kokoamista ei tässä tarvinnut kertoa mitään.


Kurose& Ross (2.): 336-339


Arvostelusta: more-bitti unohtunut -1

poikkeaman tilalla jotain muuta (esim. järjestysnumero) -1

poikkeamat puuttuvat kokonaan -2 p

pilkotaan reitittimessä pienemmiksi paloiksi 1 p

pilkotaan reitittimessä kolmeen paketiksi: 1500, 1500, 1000 ja lähetetään verkkoon

= 3 p

b. Jaetaan saatu data virittäjällä (modulo 2 -jako). Jos jako menee tasan, niin OK, jos jakojäännös, niin virheellinen. Tässä tapauksessa jakojäännökseksi saatiin 110, ja vastaanotettu data on virheellinen.

1001 101110101

1001

------

-1010

1001

-------

-- 1110

1001

------

1111

1001

--------

110 koska ei ole nolla, niin vastaanotettu data on virheellistä.

Arvostelusta: pieni virhe laskussa -1, suuri virhe laskussa -2

tietää, mitä pitäisi tehdä, mutta ei osaa jakaa => 2 p


(Kurose & Ross (2): 430-432)



c) Tässä piti selittää Ethernetin MAC-kerroksen toiminta eli lähinnä kuinka CSMA/CD toimii lähettäessään MAC-kehyksen verkkoon:

- ensin lähetyskanavan kuuntelu

- jos vapaa, niin lähetetään heti

- jos joku muu lähettämässä jäädään kuuntelemaan ja lähetetään heti,

kun linja vapautuu

kuuntelu ja lähetys 3 p

- varmistetaan, ettei tullut törmäystä eli kukaan muu ei aloittanut

lähetystä samaan aikaan (=> ethernet-kehyksellä minimi pituus)

- kun törmäys havaitaan, siitä ilmoitetaan muille

törmäys ja sen havaitseminen 2 p

- törmäystilanteesta selvitään eksponentiaalisella binääriperuutuksella

ja tässä lyhyt selvitys siitä kuinka peruutus toimii. ( 2 pistettä)

(Kurose & Ross (2): 460-462)