Chapter 3 Transport Layer A note on the use of these ppt slides: We re making these slides freely available to all (faculty, students, readers). They re in PowerPoint form so you can add, modify, and delete slides (including this one) and slide content to suit your needs. They obviously represent a lot of work on our part. In return for use, we only ask the following: If you use these slides (e.g., in a class) in substantially unaltered form, that you mention their source (after all, we d like people to use our book!) If you post any slides in substantially unaltered form on a www site, that you note that they are adapted from (or perhaps identical to) our slides, and note our copyright of this material. Thanks and enjoy! JFK/KWR All material copyright 1996-2004 J.F Kurose and K.W. Ross, All Rights Reserved Computer Networking: A Top Down Approach Featuring the Internet, 3 rd edition. Jim Kurose, Keith Ross Addison-Wesley, July 2004. Kuljetuskerros (3/3) 1 Kuljetuskerros Kuljetuskerroksen palvelut Kanavointi (multipleksointi) Yhteydetön kuljetus: UDP Luotettavan tiedonsiirron periaatteet Yhteydellinen kuljetus: TCP segmentin rakenne luotettava tiedonsiirto vuonvalvonta yhteydenhallinta Ruuhkanhallinnan periaatteet TCP:n ruuhkanhallinta Kuljetuskerros (3/3) 2 1
TCP:n yhteydenhallinta Yhteys: lähettäjä ja vastaanottaja muodostavat yhteyden ennen datan lähettämistä alustetaan TCP-muuttujat: sekvenssinumerot puskurit, vuonvalvonta-info (esim. RcvWindow) asiakas: yhteydenoton aloittaja Socket clientsocket = newsocket("hostname","portnumber"); palvelin: yhteydenoton kohde Socket connectionsocket = welcomesocket.accept(); Kuljetuskerros (3/3) 3 TCP: yhteyden aloitus Kolmitiekättely: Step 1: asiakas lähettää SYNsegmentin palvelimelle määrittelee asiakkaan aloitussekvenssinumeron ei dataa Step 2: palvelin vastaanottaa SYNviestin, vastaa SYNACKsegmentillä palvelin alustaa puskurit määrittelee palvelimen aloitussekvenssinumeron Step 3: asiakas vastaanottaa SYNACK-viestin, vastaa ACKsegmentillä voi sisältää dataa client server Kuljetuskerros (3/3) 4 2
timed wait TCP: yhteyden lopetus Yhteyden sulkeminen: client server asiakas sulkee soketin: clientsocket.close(); close Step 1: asiakas lähettää FIN-segmentin palvelimelle close Step 2: palvelin vastaanottaa FIN-viestin, vastaa ACK-segmentillä, lähettää FIN-segmentin Kuljetuskerros (3/3) 5 TCP: yhteyden lopetus (jatkuu) Step 3: asiakas vastaanottaa FIN-viestin, vastaa ACK-segmentillä closing client server menee timed wait tilaan kuittaa ACK-viesteillä mahdolliset FIN-viestit sulkee yhteyden closing Step 4: palvelin vastaanottaa ACK-viestin, sulkee yhteyden closed Huom: pienillä muutoksilla voidaan käsitellä samanaikaiset FIN-viestit closed Kuljetuskerros (3/3) 6 3
TCP:n yhteydenhallinta TCP server lifecycle TCP client lifecycle Kuljetuskerros (3/3) 7 Kuljetuskerros Kuljetuskerroksen palvelut Kanavointi (multipleksointi) Yhteydetön kuljetus: UDP Luotettavan tiedonsiirron periaatteet Yhteydellinen kuljetus: TCP segmentin rakenne luotettava tiedonsiirto vuonvalvonta yhteydenhallinta Ruuhkanhallinnan periaatteet TCP:n ruuhkanhallinta Kuljetuskerros (3/3) 8 4
Ruuhkanhallinnan periaatteet Ruuhka: Epämuodollisesti: liian monta lähdettä lähettää liian paljon dataa liian nopeasti, jotta verkko pystyisi käsittelemään kaiken Eri asia kuin vuonvalvonta! Ilmenemismuodot: kadonneet paketit (ylivuoto reitittimien puskureissa) pitkät viiveet (jonotus reitittimien puskureissa) Top 10 -ongelma! Kuljetuskerros (3/3) 9 Ruuhkan syyt ja seuraukset: tapaus 1 kaksi lähettäjää, kaksi vastaanottajaa yksi reititin, äärettömät puskurit Host B Host A l in : original data unlimited shared output link buffers l out ei uudelleenlähetyksiä suuret viiveet, kun on ruuhkaa maksimaalinen suoritusteho (throughput) Kuljetuskerros (3/3) 10 5
Ruuhkan syyt ja seuraukset: tapaus 2 yksi reititin, äärelliset puskurit lähettäjä uudelleenlähettää kadonneet paketit Host A l in : original data l' in : original data, plus retransmitted data l out Host B finite shared output link buffers Kuljetuskerros (3/3) 11 Ruuhkan syyt ja seuraukset: tapaus 2 a: ei hävikkiä, ei uudelleenlähetyksiä: l = = l in l in out b: täydellinen uudelleenlähetys vain, jos hävikkiä: l > l in out c: viivästyneiden (ei kadonneiden) pakettien uudelleenlähetys johtaa suurempaan l (kuin täydellinen tapaus) samalle l in out C/2 C/2 C/2 C/3 l out l out l out C/4 l in C/2 l in C/2 l in C/2 a b c Ruuhkan hinta : lisää työtä (uudelleenlähetykset) turhia uudelleenlähetyksiä: linkillä useita paketin kopioita Kuljetuskerros (3/3) 12 6
Ruuhkan syyt ja seuraukset: tapaus 3 neljä lähettäjää monen hypyn polkuja timeout -> uudelleenlähetys Q: Mitä tapahtuu, kun ja kasvavat? l in l in l in : original data l' in : original data, plus retransmitted data finite shared output link buffers l out Kuljetuskerros (3/3) 13 Ruuhkan syyt ja seuraukset: tapaus 3 Vielä yksi ruuhkan hinta : kun paketti pudotetaan, kaikki siihen mennessä käytetty upstream tiedonsiirtokapasiteetti kyseiselle paketille menee hukkaan! Kuljetuskerros (3/3) 14 7
Lähestymistapoja ruuhkanhallintaan Kaksi yleistä lähestymistapaa: Päästä-päähänruuhkanhallinta: ei eksplisiittistä palautetta verkolta ruuhka päätellään päätelaitteen havaitsemasta hävikistä ja viiveestä TCP:n lähestymistapa Verkkoavusteinen ruuhkanhallinta: reitittimet antavat palautetta päätelaitteille tietyt bitit paketissa kertovat ruuhkasta (esim. TCP/IP:n ECN-laajennus) eksplisiittinen nopeus, jolla lähettäjän pitäisi lähettää Kuljetuskerros (3/3) 15 Kuljetuskerros Kuljetuskerroksen palvelut Kanavointi (multipleksointi) Yhteydetön kuljetus: UDP Luotettavan tiedonsiirron periaatteet Yhteydellinen kuljetus: TCP segmentin rakenne luotettava tiedonsiirto vuonvalvonta yhteydenhallinta Ruuhkanhallinnan periaatteet TCP:n ruuhkanhallinta Kuljetuskerros (3/3) 16 8
TCP:n ruuhkanhallinta Päästä-päähän-kontrolli (ei avustusta verkolta) Lähettäjä rajoittaa lähetystä: LastByteSent-LastByteAcked CongWin Arviolta, rate = CongWin RTT Bytes/sec CongWin on dynaaminen: muuttuu havaitun ruuhkautumisen mukaan Miten lähettäjä havaitsee ruuhkan? loss event = timeout tai 3 duplikaattikuittausta lähettäjä pienentää nopeutta (CongWin) loss event tapahtuman jälkeen Kolme mekanismia: AIMD (additive increase, multiplicative decrease) slow start conservative after timeout events Kuljetuskerros (3/3) 17 TCP: AIMD additive increase: lisätään CongWin-arvoa yhdellä MSS:llä jokaista RTT:tä kohden, ellei tule loss eventejä multiplicative decrease: pienennetään CongWinarvo puoleen jokaisen loss eventin jälkeen 24 Kbytes congestion window 16 Kbytes 8 Kbytes time Pitkäaikainen TCP-yhteys Kuljetuskerros (3/3) 18 9
RTT TCP: Slow Start Aluksi CongWin = 1 MSS esimerkiksi: MSS = 500 tavua ja RTT = 200 ms, jolloin aloitusnopeus = 20 kbps mutta kaistanleveys voi olla paljon suurempi kuin MSS/RTT Nopeutta kasvatetaan eksponentiaalisesti kunnes tulee ensimmäinen loss event: kaksinkertaistetaan CongWin jokaisella RTT toteutetaan kasvattamalla CongWin-arvoa yhdellä MSS:llä jokaista ACK-viestiä kohden Yhteenveto: alussa hidas, mutta kiihtyy eksponentiaalisesti Host A Host B time Kuljetuskerros (3/3) 19 Parannus Kolmen duplikaattikuittauksen jälkeen: CongWin puolitetaan sen jälkeen kasvaa lineaarisesti Mutta timeoutin jälkeen: CongWin asetetaan arvoon 1 MSS sen jälkeen kasvaa eksponentiaalisesti rajaarvoon (threshold) saakka minkä jälkeen taas lineaarisesti Filosofia: 3 duplikaattikuittausta merkitsee, että verkko kykenee kuljettamaan joitain segmenttejä timeout ennen kolmea duplikaattikuittausta on enemmän huolestuttavaa Kuljetuskerros (3/3) 20 10
Parannus (jatkuu) Q: Milloin pitäisi vaihtaa eksponentiaalisesta kasvusta lineaariseen? A: Kun CongWin saavuttaa puolet arvostaan ennen timeoutia Toteutus: muuttuva threshold kun loss event, uudeksi threshold-arvoksi asetetaan puolet juuri ennen loss eventiä olleesta CongWin-arvosta Kuljetuskerros (3/3) 21 TCP:n ruuhkanhallinta: yhteenveto Kun CongWin on alle Threshold-arvon, lähettäjä on slow-start-vaiheessa ja ikkuna kasvaa eksponentiaalisesti Kun CongWin on yli Threshold-arvon, lähettäjä on congestion-avoidance-vaiheessa ja ikkuna kasvaa lineaarisesti Kun kolmas duplikaattikuittaus tulee, Threshold asetetaan arvoon CongWin/2 ja CongWin asetetaan arvoon Threshold Kun timeout tapahtuu, Threshold asetetaan arvoon CongWin/2 ja CongWin asetetaan arvoon 1 MSS Kuljetuskerros (3/3) 22 11
TCP: lähettäjän ruuhkanhallinta Event State TCP Sender Action Commentary ACK receipt for previously unacked data ACK receipt for previously unacked data Loss event detected by triple duplicate ACK Slow Start (SS) Congestion Avoidance (CA) SS or CA CongWin = CongWin + MSS, If (CongWin > Threshold) set state to Congestion Avoidance CongWin = CongWin + MSS * (MSS/CongWin) Threshold = CongWin/2, CongWin = Threshold, Set state to Congestion Avoidance Timeout SS or CA Threshold = CongWin/2, CongWin = 1 MSS, Set state to Slow Start Duplicate ACK SS or CA Increment duplicate ACK count for segment being acked Resulting in a doubling of CongWin every RTT Additive increase, resulting in increase of CongWin by 1 MSS every RTT Fast recovery, implementing multiplicative decrease (CongWin will not drop below 1 MSS) Enter slow start CongWin and Threshold not changed Kuljetuskerros (3/3) 23 TCP:n suoritusteho Mikä on TCP:n keskimääräinen suoritusteho (throughput) ikkunan koon ja RTT:n funktiona? ei oteta huomioon slow start -vaihetta Olkoon W ikkunan koko, kun paketti katoaa Ennen katoamista ikkunan koko on W, suoritusteho on W*MSS/RTT Katoamisen jälkeen ikkunan koko on W/2, suoritusteho on 0.5*W*MSS/RTT Keskimääräinen suoritusteho: 0.75*W*MSS/RTT Kuljetuskerros (3/3) 24 12
TCP:n tulevaisuudesta Suoritusteho: W*MSS/RTT Esimerkki: 1500 tavun segmentit (MSS), 100 ms RTT, halutaan 10 Gbps suoritusteho Vaatii ikkunan koon W = 83 333 matkalla oleville segmenteille Suoritusteho hävikin L (prosentteina) avulla ilmaistuna: 1.22 MSS RTT L = 2 10-10 Wow Tarvitaan TCP:n uusia versioita suurille nopeuksille! L Kuljetuskerros (3/3) 25 TCP: reiluus Tavoite: jos K eri TCP-yhteyttä jakaa saman pullonkaulalinkin, jonka kaistanleveys on R, jokaisen keskimääräinen tiedonsiirtonopeus tulisi olla R/K TCP connection 1 TCP connection 2 bottleneck router capacity R Kuljetuskerros (3/3) 26 13
Miksi TCP on reilu? Kaksi kilpailevaa yhteyttä: Additive increase: kasvattaa lähetysnopeutta saman verran Multiplicative decrease: pienentää lähetysnopeutta suhteellisesti R equal bandwidth share loss: decrease window by factor of 2 congestion avoidance: additive increase loss: decrease window by factor of 2 congestion avoidance: additive increase Connection 1 throughput R Kuljetuskerros (3/3) 27 Reiluus Reiluus ja UDP Multimediasovellukset käyttävät harvoin TCP:tä eivät halua, että ruuhkanhallinta rajoittaa lähetysnopeutta Sen sijaan käyttävät UDP:tä lähetetään audio/videodataa vakionopeudella siedetään pakettien katoamisia Tutkimusalue: miten UDP:stä TCP friendly Reiluus ja rinnakkaiset TCPyhteydet Mikään ei estä sovellusta avaamasta rinnakkaisia yhteyksiä kahden päätelaitteen välille WWW-selaimet tekevät näin Esimerkki: linkin nopeus R, käytössä 9 yhteyttä uusi sovellus pyytää yhden TCPyhteyden, saa nopeuden R/10 uusi sovellus pyytää 11 TCPyhteyttä, saa nopeuden R/2! Kuljetuskerros (3/3) 28 14
Viiveen mallinnus Q: Kuinka kauan kestää pyydetyn objektin saaminen WWWpalvelimelta? Jos jätetään ruuhka huomioimatta,viiveeseen vaikuttaa: TCP-yhteyden muodostus lähetysviive slow start -vaihe initiate TCP connection request object object delivered RTT time at client time at server first window = S/R second window = 2S/R third window = 4S/R fourth window = 8S/R complete transmission Kuljetuskerros (3/3) 29 HTTP: mallinnus Oletetaan, että WWW-sivulla on: 1 perus HTML-sivu (koko O bittiä) M kuvaa (jokaisen koko O bittiä) Non-persistent HTTP: M+1 TCP-yhteyttä sarjassa Vasteaika = (M+1)O/R + (M+1)2RTT + idle-aikojen summa Persistent HTTP: 2 RTT perus HTML-tiedoston pyytämiseen ja saantiin 1 RTT kaikkien kuvien pyytämiseen ja saantiin Vasteaika = (M+1)O/R + 3RTT + idle-aikojen summa Non-persistent HTTP ja X rinnakkaista yhteyttä: Oletetaan, että M/X on kokonaisluku 1 TCP-yhteys perus HTML-tiedostolle M/X rinnakkaistatcp-yhteyttä kuville Vasteaika = (M+1)O/R + (M/X+1)2RTT + idle-aikojen summa Kuljetuskerros (3/3) 30 15
HTTP: vasteaika RTT = 100 ms, O = 5 KB, M = 10 ja X = 5 20 18 16 14 12 10 8 6 4 2 0 28 Kbps 100 Kbps 1 Mbps 10 Mbps non-persistent persistent parallel nonpersistent Pienellä kaistanleveydellä vasteaikaa dominoi lähetysaika. Persistentyhteydet ovat vain hieman parempia kuin rinnakkaiset yhteydet. Kuljetuskerros (3/3) 31 HTTP: vasteaika RTT = 1 s, O = 5 KB, M = 10 ja X = 5 70 60 50 40 30 20 10 0 28 Kbps 100 Kbps 1 Mbps 10 Mbps non-persistent persistent parallel nonpersistent Suuremmalla RTT vasteaikaa dominoi TCP-yhteyden luominen ja slow start -vaihe. Persistent-yhteyksillä saadaan nyt merkittävä parannus. Kuljetuskerros (3/3) 32 16
Kuljetuskerros: Yhteenveto Kuljetuskerroksen palvelujen periaatteet: kanavointi (multiplexing, demultiplexing) luotettava tiedonsiirto vuonvalvonta ruuhkanhallinta Toteutus Internetissä: UDP TCP Seuraavaksi: lähdetään verkon reunalta ja siirrytään verkon runkoon Kuljetuskerros (3/3) 33 17