Chapter 3 Transport Layer. Kuljetuskerros

Samankaltaiset tiedostot
Chapter 3 Transport Layer. Kuljetuskerros

Kuljetuskerros. Chapter 3 Transport Layer. Kuljetuspalvelut ja -protokollat. Kuljetuskerros. Kuljetuskerros vs. verkkokerros

Kuljetuskerros. Chapter 3 Transport Layer. Kuljetuskerros. Kuljetuspalvelut ja -protokollat. Kuljetuskerros vs. verkkokerros

Kuljetuspalvelu. Tietoliikenteen perusteet. Sisältöä. Kuljetuskerros. Kuljetuskerros. Kuljetuskerros. Internetin kuljetusprotokollat

Chapter 3 Transport Layer. Kuljetuskerros

Kuljetuskerros. Tietokoneverkot. Matti Siekkinen Pasi Sarolahti

Tietoliikenteen perusteet. Kuljetuskerros

Luento 5: Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

Kappale 3, Siirto Taso. Luento-osuus 1 Käännös Mirja Hosionaho 100% Tietoverkot: ylhäältä alas lähestyminen

Tietoliikenteen perusteet. Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

Luento 6: Kuljetuskerros UDP & TCP TCP:n ruuhkanhallinta

Kuljetuspalvelu. Tietoliikenteen perusteet. Sisältöä. Kuljetuskerros. Kuljetuskerros. Kuljetuskerros. Internetin kuljetusprotokollat

Luento 6: Kuljetuskerros UDP & TCP TCP:n ruuhkanhallinta

Tietoliikenne II. Syksy 2005 Markku Kojo. Tietoliikenne II (2 ov,, 4 op) Page1. Markku Kojo Helsingin yliopisto Tietojenkäsittelytieteen laitos

Luento 5: Kuljetuskerros luotettavan tiedonsiirron periaatteet. Syksy 2014, Tiina Niklander

Tietoliikenteen perusteet. Kuljetuskerros

Luento 6: Kuljetuskerros UDP & TCP TCP:n ruuhkanhallinta. Syksy 2014, Tiina Niklander Kurose&Ross: Ch3

ELEC-C7241 Tietokoneverkot Kuljetuskerros

Chapter 3: Transport Layer

100 % Kaisu Keskinen 3-1

kynnysarvo (threshold)

kynnysarvo (threshold) varoitusarvo = tästä lähtien syytä varoa ruuhkaa aluksi 64 K RTT

Kappale 3 Kuljetustaso

Tietoliikenteen perusteet

kynnysarvo (threshold)

3. Kuljetuskerros 3.1. Kuljetuspalvelu

Tietoliikenteen perusteet

Kuljetuskerros. Matti Siekkinen. T Johdatus tietoliikenteeseen kevät 2011

Tietoliikenteen perusteet

Monimutkaisempi stop and wait -protokolla

3. Kuljetuskerros 3.1. Kuljetuspalvelu End- to- end

Internet ja tietoverkot. 3 Kuljetusprotokollat Luotettava ja epäluotettava tiedonsiirto

Kuljetuskerros. Kirja sivut: ,

Monimutkaisempi stop and wait -protokolla

Monimutkaisempi stop and wait -protokolla

Chapter 1 Introduction

TCP/IP-protokollapino. Kuljetuskerros. Tämän luennon jälkeen. Sisältö. Matti Siekkinen. Ymmärrätte:

3. Kuljetuskerros 3.1.

TCP. TCP:n peruspiirteiden toiminta tarkemmin. TCP:n uusia piirteitä. osin vain harjoitustehtävissä

TCP:n peruspiirteiden toiminta tarkemmin. osin vain harjoitustehtävissä. TCP:n uusia piirteitä

TCP. TCP-optiot. Erilaisia suorituskykyongelmia. Aikaleima (timestamp) TCP:n peruspiirteiden toiminta tarkemmin. TCP:n uusia piirteitä.

Kuljetuskerroksen protokollat. Luotettava vai epäluotettava? Kuljetuskerroksen tarkoitus. Tietosähkeen kapselointi. Portit ja (de)multipleksaus

OSI ja Protokollapino

Miksi? Miksi? Kaksisuuntainen liikenne TCP-protokolla. Ikkunankoko. Valikoiva toisto: ikkuna 5, numeroavaruus 8

Kuljetuskerros. CSE-C2400 Tietokoneverkot (osa 1) (osa 2) Matti Siekkinen. Tietokoneverkot 2014

Kappale 3, Siirto Taso. Osa 2 Käännös Mirja Hosionaho 100% Tietoverkot: ylhäältä alas lähestyminen

on yksi keskeisimpiä toimintoja Internetin toiminnan varmistamiseksi Internetin ruuhkanhallinta pitkälti

3. Kuljetuskerros 3.1. Kuljetuspalvelu

Kuljetuskerros. Matti Siekkinen. T Johdatus tietoliikenteeseen kevät 2013

Siirron optimointi. Optimointi on usein tarpeen: Silly window syndrome

11/20/ Siirron optimointi

Kuljetuskerros. CSE-C2400 Tietokoneverkot (osa 1) (osa 2) Matti Siekkinen. Tietokoneverkot 2014

Siirron optimointi. Optimointi on usein tarpeen: Silly window syndrome. Esimerkki jatkuu

Esimerkki jatkuu. <seq = 6, data = m6> <ack = 4, buf = 0> <ack = 4, buf = 1> <ack = 4, buf = 2> <ack = 6, buf = 0> <ack = 6, buf = 4> 1/31/

Kuljetuskerroksen tehtävä. Kuljetuskerros UDP. UDP-kaappaus (DNS) DNS-haku, Ethernet-kehys <#>

Ikkunankoko. Kun käytetty numeroavaruus on 0, 1,.. n ja eri numeroita siis käytettävissä n+1

Ikkunankoko. Kun käytetty numeroavaruus on 0, 1,.. n ja eri numeroita siis käytettävissä n+1

Tietoliikenne II (2 ov)

Tietoliikenne II (2 ov)

Esimerkki jatkuu. ajastin laukeaa, uudelleen sanoma 2. <seq = 6, data = m6>

Kuljetuskerroksen protokollat

Kuljetuskerroksen protokollat. Kuljetuskerroksen tarkoitus. Luotettava vai epäluotettava?

Kuljetuskerroksen protokollat

Kuittaukset ACK. NAK-kuittaus. kumulatiivinen ACK. yksittäinen ACK. sanoma virheellinen tai puuttuu. tähän saakka kaikki ok!

Kuittaukset. Miksi? Miksi? Negatiiviset kuittaukset NAK-kuittauksilla voidaan nopeuttaa uudelleenlähettämistä. Ikkunankoko ACK

Kuittaukset. tähän saakka kaikki ok! Go-Back N. sanoma virheellinen tai puuttuu

Tietoliikenne II (2 ov) Tietoliikenne II. Sisällysluettelo jatkuu. Alustava sisällysluettelo. Suoritus. Täydennystä Tietoliikenne I -kurssin asioihin

TCP:n vuonohjaus (flow control)

Kuljetuskerroksen protokollat

Tietoliikenne II (2 ov)

Chapter 5 Link Layer and LANs

S Tietoliikennetekniikan perusteet. Pakettikytkentäiset verkot. Helsinki University of Technology Networking Laboratory

Tietoliikenne II (2 ov) Sisällysluettelo jatkuu. Tietoliikenne II. Alustava sisällysluettelo. Suoritus

Tietoliikenne II Kurssikoe

Tehtävä 2: Tietoliikenneprotokolla

TCP. TCP-optiot. Erilaisia suorituskykyongelmia. Aikaleima (timestamp) TCP:n peruspiirteiden toiminta tarkemmin. TCP:n uusia piirteitä.

S Teletekniikan perusteet

Kuljetuskerros. CSE-C2400 Tietokoneverkot (osa 1) (osa 2) Matti Siekkinen. Tietokoneverkot 2014

Kuljetuskerros. CSE-C2400 Tietokoneverkot (osa 1) (osa 2) Matti Siekkinen. Tietokoneverkot 2016

Selektiiviset kuittaukset (RFC 2018, RFC 3517)

Miten selain muodostaa TCP- tai UDP-yhteyden? TCP-osoite = IP-osoite + porttinumero ( tässä 80) SOCKET BIND (80) LISTEN ACCEPT. Connection Request

Kuljetuskerros. CSE-C2400 Tietokoneverkot (osa 1) (osa 2) Matti Siekkinen. Tietokoneverkot 2014

6. Kuljetuskerros 6.1. Kuljetuspalvelu End- to- end

Nopea uudelleenlähetys (Fast retransmit)

Nopea uudelleenlähetys (Fast retransmit)

Ongelma 1: Ei saada kolmea toistokuittausta

6. Kuljetuskerros 6.1. Kuljetuspalvelu

Internet Protocol version 6. IPv6

6. Kuljetuskerros 6.1. Kuljetuspalvelu End- to- end. kuljetuspalvelut parantavat verkkopalveluja Kuljetuskerroksen toiminta

Chapter 2 Application Layer

3. Kuljetuskerros 3.1. Kuljetuspalvelu

Miten Internet toimii?

Ruuhkanvalvonta on hankalaa!

Ruuhkanvalvonta on hankalaa!

Ruuhkanvalvonta on hankalaa!

Miten selain muodostaa TCP- tai UDP-yhteyden? TCP-osoite = IP-osoite + porttinumero ( tässä 80) SOCKET BIND (80) LISTEN ACCEPT. Connection Request

ITKP104 Tietoverkot - Teoria 3

Transkriptio:

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 (2/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 (2/3) 2 1

Rdt3.0: kanava jossa bittivirheitä ja viestien katoamisia Uusi oletus: alapuolella oleva kanava voi myös kadottaa paketteja (dataa tai ACKviestejä) tarkistussumma, sekvenssinumerot, ACK-viestit ja uudelleenlähetykset auttavat, mutta eivät riitä Lähestymistapa: lähettäjä odottaa järkevän ajan ACKviestiä uudelleenlähettää, jos ACKviestiä ei saada tänä aikana jos paketti (tai ACK) on vain myöhässä (ei kadonnut): uudelleenlähetys aiheuttaa duplikaatin, mutta siitä selvitään sekvenssinumeroilla vastaanottajan täytyy ilmoittaa kuitattavan paketin sekvenssinumero vaatii ajastimen Kuljetuskerros (2/3) 3 Rtd3.0: suorituskyky rdt3.0 toimii, mutta suorituskyky on surkea esimerkki: 1 Gbps linkki, 15 ms päästä-päähän etenemisviive, 1 kb (kilotavu) paketti: T transmit = L (packet length in bits) R (transmission rate, bps) = 8 kb 1 Gb/s = 0.008 ms L / R U 0.008 sender = = = 30.008 RTT + L / R 0.00027 U sender : käyttöaste kuinka suuren osan ajasta lähettäjä lähettää 1 kb paketti kerran 30 ms -> 33 kb/s nopeus 1 Gbps linkillä verkon protokolla rajoittaa fyysisten resurssien käyttöä! Kuljetuskerros (2/3) 4 2

Rdt3.0: stop-and-wait-operaatio first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R sender receiver RTT first packet bit arrives last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R L / R U 0.008 sender = = = 30.008 RTT + L / R 0.00027 Kuljetuskerros (2/3) 5 Putkitetut protokollat Putkitus (pipelining): lähettäjä sallii useita matkalla olevia, vielä kuittaamattomia paketteja sekvenssinumeroiden määrää täytyy lisätä tarvitaan puskurointi lähettäjällä ja/tai vastaanottajalla Kaksi yleistä menetelmää putkitetuille protokollille: go-back-n, selective repeat Kuljetuskerros (2/3) 6 3

Putkitus: käyttöaste kasvaa first packet bit transmitted, t = 0 last bit transmitted, t = L / R sender receiver RTT ACK arrives, send next packet, t = RTT + L / R first packet bit arrives last packet bit arrives, send ACK last bit of 2 nd packet arrives, send ACK last bit of 3 rd packet arrives, send ACK Käyttöaste kasvaa kolminkertaiseksi! 3*L / R U 0.024 sender = = = 30.008 RTT + L / R 0.0008 Kuljetuskerros (2/3) 7 Go-Back-N Lähettäjä: k bittinen sekvenssinumero paketin otsikossa ikkuna jonka koko N, eli sallitaan N peräkkäistä kuittaamatonta pakettia ACK(n): kuittaa kaikki paketit sekvenssinumeroon n saakka (mukaanlukien numero n) - kumulatiivinen ACK voi tulla duplikaattikuittauksia (katso vastaanottaja) yksi ajastin kuittaamattomille paketeille ( vanhimmalle ) timeout(n): uudelleenlähetetään paketti n sekä ikkunan kaikki suuremman sekvenssinumeron paketit Kuljetuskerros (2/3) 8 4

GBN: lähettäjä, laajennettu tilakone L send_base=1 nextseqnum=1 rdt_rcv(rcvpkt) && corrupt(rcvpkt) L rdt_send(data) if (nextseqnum < send_base+n) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (send_base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) Wait timeout rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) if (getacknum(rcvpkt) >= send_base) { send_base = getacknum(rcvpkt)+1 if (send_base == nextseqnum) stop_timer else start_timer } start_timer udt_send(sndpkt[send_base]) udt_send(sndpkt[send_base+1]) udt_send(sndpkt[nextseqnum-1]) Kuljetuskerros (2/3) 9 GBN: vastaanottaja, laajennettu tilakone L default expectedseqnum=1 sndpkt = make_pkt(0,ack,chksum) udt_send(sndpkt) Wait rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ack,chksum) udt_send(sndpkt) expectedseqnum++ Vain ACK-viesti: lähetetään aina ACK oikein vastaanotetusta paketista, jolla on suurin oikeassa järjestyksessä oleva sekvenssinumero voi generoida duplikaattikuittauksia täytyy muistaa ainoastaan expectedseqnum Paketti, joka tulee väärässä järjestyksessä: hylätään (ei puskuroida) -> ei tarvita puskurointia vastaanottajalla! kuitataan uudestaan paketti, jolla suurin oikeassa järjestyksessä oleva sekvenssinumero Kuljetuskerros (2/3) 10 5

GBN toiminnassa Kuljetuskerros (2/3) 11 Selective Repeat Vastaanottaja kuittaa yksittäin kaikki oikein vastaanotetut paketit vastaanottaja puskuroi paketteja tarpeen mukaan, jotta voi välittää ne ylemmälle kerrokselle oikeassa järjestyksessä Lähettäjä uudelleenlähettää vain paketit, joista ei ole saanut kuittausta lähettäjällä eri ajastin jokaiselle kuittaamattomalle paketille Lähettäjän ikkuna N peräkkäistä sekvenssinumeroa rajoittaa lähetettyjen mutta kuittaamattomien pakettien sekvenssinumeroita Kuljetuskerros (2/3) 12 6

Selective Repeat: lähettäjän ja vastaanottajan ikkunat Kuljetuskerros (2/3) 13 Selective Repeat lähettäjä dataa yläpuolelta: jos seuraava vapaa sekvenssinumero ikkunassa, lähetä paketti timeout(n): uudelleenlähetä paketti n, käynnistä ajastin uudelleen ACK(n) välillä [send_base,send_base+n]: merkitse paketti n kuitatuksi jos n oli vanhin kuittaamaton paketti, siirrä ikkunan alaraja (send_base) seuraavan kuittaamattoman paketin kohdalle vastaanottaja paketti n välillä [rcv_base, rcv_base+n-1]: lähetä ACK(n) out-of-order: puskuroi in-order: välitä ylöspäin (myös puskuroidut in-order-paketit), siirrä ikkunan alaraja (rcv_base) seuraavan ei vielä vastaanotetun paketin kohdalle paketti n välillä [rcv_base-n,rcv_base-1]: lähetä ACK(n) muuten: älä tee mitään Kuljetuskerros (2/3) 14 7

Selective Repeat toiminnassa Kuljetuskerros (2/3) 15 Selective Repeat: dilemma Esimerkki: sekvenssinumerot: 0, 1, 2, 3 ikkunan koko = 3 vastaanottaja ei näe eroa tapausten välillä! kohdassa (a) välittää duplikaattidatan virheellisesti uutena datana Q: Mikä pitäisi olla sekvenssinumeroiden ja ikkunan koon välinen suhde? Kuljetuskerros (2/3) 16 8

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 (2/3) 17 TCP: yleiskatsaus [RFC: 793, 1122, 1323, 2018, 2581] socket door pisteestä pisteeseen: yksi lähettäjä, yksi vastaanottaja luotettava, järjestyksen säilyttävä tavuvirta: ei viestirajoja putkitettu: TCP:n ruuhkanhallinta ja vuonvalvonta määrittävät ikkunoiden koot puskurointi lähettäjällä ja vastaanottajalla application writes data TCP send buffer segment application reads data TCP receive buffer full duplex data: kaksisuuntainen tiedonsiirto samassa yhteydessä datan suurin määrä yhdessä paketissa: MSS (maximum segment size) yhteydellinen: kättely (kontrolliviestien vaihto), alustaa lähettäjän ja vastaanottajan tilat ennen tiedonsiirtoa vuonvalvonta: lähettäjä ei tukahduta vastaanottajaa socket door Kuljetuskerros (2/3) 18 9

TCP: segmentin rakenne URG: urgent data (generally not used) ACK: ACK # valid PSH: push data now (generally not used) RST, SYN, FIN: connection estab (setup, teardown commands) Internet checksum (as in UDP) 32 bits source port # dest port # head len sequence number acknowledgement number not used UAP R S F checksum receive window urg data pnter options (variable length) application data (variable length) counting by bytes of data (not segments!) # of bytes rcvr willing to accept Kuljetuskerros (2/3) 19 TCP: sekvenssinumerot ja ACK-viestit Sekvenssinumerot: segmentin datakentässä olevan tavuvirran ensimmäisen tavun numero ACK-viestit: seuraavana odotettavan tavun sekvenssinumero kumulatiivinen ACK Q: Kuinka vastaanottaja käsittelee out-oforder-segmentit? A: TCP ei määrittele - riippuu toteutuksesta User types C host ACKs receipt of echoed C Host A Host B simple telnet scenario host ACKs receipt of C, echoes back C time Kuljetuskerros (2/3) 20 10

TCP: Round Trip Time ja Timeout Q: Miten määritellään TCP:n timeout-arvo? pidempi kuin RTT mutta RTT vaihtelee liian lyhyt: ennenaikainen timeout tarpeettomia uudelleenlähetyksiä liian pitkä: hidas reagointi segmentien katoamiseen Q: Miten arvioidaan RTT:tä? SampleRTT: mitattu aika segmentin lähettämisestä ACKviestin vastaanottamiseen ei huomioida uudelleenlähetyksiä SampleRTT vaihtelee, joten halutaan pehmeämpi arvio RTT:lle ei pelkästään viimeisin SampleRTT, vaan keskiarvo useammasta viimeaikaisesta mittauksesta Kuljetuskerros (2/3) 21 TCP: Round Trip Time ja Timeout RTT:n arviointi EstimatedRTT = (1 - )*EstimatedRTT + *SampleRTT eksponentialinen painotettu liukuva keskiarvo edellisten näytteiden vaikutus pienene eksponentiaalisella nopeudella tyypillinen arvo: = 0.125 Kuljetuskerros (2/3) 22 11

RTT (milliseconds) Esimerkki: RTT:n arviointi RTT: gaia.cs.umass.edu to fantasia.eurecom.fr 350 300 250 200 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (seconnds) SampleRTT Estimated RTT Kuljetuskerros (2/3) 23 TCP: Round Trip Time ja Timeout Timeout-arvon asettaminen EstimatedRTT plus turvaväli suuri vaihtelu EstimatedRTT-arvossa -> suurempi turvaväli ensin arvio sille, miten paljon SampleRTT eroaa EstimatedRTT-arvosta: DevRTT = (1 - )*DevRTT + * SampleRTT - EstimatedRTT (tyypillisesti, = 0.25) Sitten asetetaan timeout-arvo: TimeoutInterval = EstimatedRTT + 4*DevRTT Kuljetuskerros (2/3) 24 12

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 (2/3) 25 TCP:n luotettava tiedonsiirto TCP luo luotettavan tiedonsiirtopalvelun IP:n epäluotettavan palvelun päälle Putkitetut segmentit Kumulatiiviset kuittaukset TCP käyttää yhtä uudelleenlähetysajastinta Uudelleenlähetykset johtuvat: ajastimen laukeamisista (timeout) duplikaattikuittauksista Tarkastellaan aluksi yksinkertaistettua TCP-lähettäjää: jätetään huomiotta duplikaattikuittaukset jätetään huomiotta vuonvalvonta ja ruuhkanhallinta Kuljetuskerros (2/3) 26 13

TCP: lähettäjän tapahtumia dataa sovellukselta: luodaan segmentti ja sekvenssinumero sekvenssinumero on segmentissä olevan tavuvirran ensimmäisen datatavun numero käynnistetään ajastin, jos se ei jo ole käynnissä (vanhin kuittaamaton segmentti) asetetaan arvo ajastimen laukeamiselle: TimeOutInterval timeout: uudelleenlähetetään segmentti, joka aiheutti ajastimen laukeamisen käynnistetään ajastin uudelleen ack-viesti: jos kuittaa ennestään kuittaamattomia segmenttejä päivitetään tiedot kuitatuista segmenteistä käynnistetään ajastin, jos on vielä kuittaamattomia segmenttejä Kuljetuskerros (2/3) 27 NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) { switch(event) event: data received from application above create TCP segment with sequence number NextSeqNum if (timer currently not running) start timer pass segment to IP NextSeqNum = NextSeqNum + length(data) event: timer timeout retransmit not-yet-acknowledged segment with smallest sequence number start timer event: ACK received, with ACK field value of y if (y > SendBase) { SendBase = y if (there are currently not-yet-acknowledged segments) start timer } } /* end of loop forever */ TCP: lähettäjä (yksinkertaistettu) Kommentti: SendBase-1 on viimeisin kumulatiivisesti kuitattu tavu Esimerkki: SendBase-1 = 71; y = 73, joten vastaanottaja haluaa 73+; y > SendBase, joten uutta dataa kuitataan (tavu 72) Kuljetuskerros (2/3) 28 14

Seq=92 timeout Seq=92 timeout timeout TCP: uudelleenlähetykset Host A Host B X loss SendBase = 100 time Lost ACK scenario Kuljetuskerros (2/3) 29 TCP: uudelleenlähetykset Host A Host B Sendbase = 100 SendBase = 120 SendBase = 120 time Premature timeout Kuljetuskerros (2/3) 30 15

timeout TCP: uudelleenlähetykset Host A Host B X loss SendBase = 120 time Cumulative ACK scenario Kuljetuskerros (2/3) 31 TCP: ACK-generointi [RFC: 1122, 2581] Event at Receiver Arrival of in-order segment with expected seq #. All data up to expected seq # already ACKed. Arrival of in-order segment with expected seq #. One other segment has ACK pending. Arrival of out-of-order segment higher-than-expect seq #. Gap detected. Arrival of segment that partially or completely fills gap. TCP Receiver action Delayed ACK. Wait up to 500 ms for next segment. If no next segment, send ACK. Immediately send single cumulative ACK, ACKing both in-order segments. Immediately send duplicate ACK, indicating seq # of next expected byte. Immediately send ACK, provided that segment starts at lower end of gap. Kuljetuskerros (2/3) 32 16

Fast Retransmit -menetelmä Timeout-aika on usein suhteellisen pitkä: pitkä viive ennen uudelleenlähetystä Segmenttien häviäminen voidaan havaita duplikaattikuittausten avulla: lähettäjä lähettää usein monta segmenttiä peräkkäin jos segmentti häviää, tulee todennäköisesti useita duplikaattikuittauksia Jos lähettäjä saa 3 duplikaattikuittausta, se olettaa, että kaikki kuitatun segmentin jälkeiset segmentit ovat hävinneet: fast retransmit: uudelleenlähetetään segmentti ennen ajastimen laukeamista Kuljetuskerros (2/3) 33 Fast Retransmit -algoritmi event: ACK received, with ACK field value of y if (y > SendBase) { SendBase = y if (there are currently not-yet-acknowledged segments) start timer } else { increment count of dup ACKs received for y if (count of dup ACKs received for y = 3) { resend segment with sequence number y } a duplicate ACK for already ACKed segment fast retransmit Kuljetuskerros (2/3) 34 17

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 (2/3) 35 TCP:n vuonvalvonta TCP-yhteyden vastaanottajalla on vastaanottopuskuri: vuonvalvonta lähettäjä ei tukahduta vastaanottajan puskuria lähettämällä liian paljon, liian nopeasti Sovellusprosessi voi olla hidas lukemaan dataa puskurista Nopeudensovituspalvelu: sovitetaan lähetysnopeus vastaanottavan sovelluksen mukaan Kuljetuskerros (2/3) 36 18

TCP:n vuonvalvonta: näin se toimii (Oletetaan, että TCPvastaanottaja hylkää out-of-order-segmentit) vapaata tilaa puskurissa Vastaanottaja mainostaa vapaata tilaa asettamalla RcvWindow-arvon segmentteihin Lähettäjä rajoittaa kuittaamattomien segmenttien määrän RcvWindow-arvoon takaa sen, että vastaanottajan puskuri ei vuoda yli = RcvWindow = RcvBuffer [LastByteRcvd - LastByteRead] Kuljetuskerros (2/3) 37 19