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

Samankaltaiset tiedostot
Chapter 3 Transport Layer. Kuljetuskerros

Chapter 3: Transport Layer

100 % Kaisu Keskinen 3-1

Luento 5: Kuljetuskerros

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

Kappale 3 Kuljetustaso

Chapter 3 Transport Layer. Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

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

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

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

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

Tietoliikenteen perusteet

Kuljetuskerros. Tietokoneverkot. Matti Siekkinen Pasi Sarolahti

Tietoliikenteen perusteet. Kuljetuskerros

ELEC-C7241 Tietokoneverkot Kuljetuskerros

3. Kuljetuskerros 3.1. Kuljetuspalvelu

3. Kuljetuskerros 3.1. Kuljetuspalvelu End- to- end

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

OSI ja Protokollapino

Monimutkaisempi stop and wait -protokolla

Monimutkaisempi stop and wait -protokolla

3. Kuljetuskerros 3.1.

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

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

Monimutkaisempi stop and wait -protokolla

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

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

3. Kuljetuskerros 3.1. Kuljetuspalvelu

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

kynnysarvo (threshold)

kynnysarvo (threshold)

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

Tehtävä 2: Tietoliikenneprotokolla

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

S Teletekniikan perusteet

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

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

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

Kuljetuskerros. Kirja sivut: ,

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

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

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ä

Pertti Pennanen OSI 1 (4) EDUPOLI ICTPro

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

ITKP104 Tietoverkot - Teoria 3

Siltojen haitat. Yleisesti edut selvästi suuremmat kuin haitat 2/19/ Kytkin (switch) Erittäin suorituskykyisiä, moniporttisia siltoja

Chapter 3 Transport Layer. Kuljetuskerros

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

11/20/ Siirron optimointi

Verkkoliikennettä Java[ssa lla] Jouni Smed

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/

Chapter 1 Introduction

Siirron optimointi. Optimointi on usein tarpeen: Silly window syndrome

Kuljetuskerroksen protokollat

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

Kuljetuskerroksen protokollat

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

Salausmenetelmät (ei käsitellä tällä kurssilla)

Tietoliikenteen perusteet. Vähän kertausta. Tietoliikenteen perusteet /2009/ Liisa Marttinen 1

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

Luento 14: Kertausta. Syksy 2014, Tiina Niklander

3. Kuljetuskerros 3.1. Kuljetuspalvelu

Laitteessa tulee olla ohjelmisto tai uudempi, tarvittaessa päivitä laite

Tietoliikenteen perusteet. Vähän kertausta

3. Kuljetuskerros 3.1. Kuljetuspalvelu. Internetin kuljetuskerros. kuljetuspalvelut parantavat verkkopalveluja

5. Siirtoyhteyskerros linkkikerros (Data Link Layer)

Luento 6: Kuljetuskerros UDP & TCP TCP:n ruuhkanhallinta

5. Siirtoyhteyskerros linkkikerros (Data Link Layer)

Tietoliikenne II (2 ov)

1.4. Tietoliikenneohjelmistot eli protokollat

1.4. Tietoliikenneohjelmistot eli protokollat

1.4. Tietoliikenneohjelmistot eli protokollat. Protokollien kerrosrakenne. Mitä monimutkaisuutta?

Siltojen haitat Yleisesti edut selvästi suuremmat kuin haitat

peittää verkkokerroksen puutteet

3. Kuljetuskerros 3.1. Kuljetuspalvelu

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

Tietokone. Tietokone ja ylläpito. Tietokone. Tietokone. Tietokone. Tietokone

3. Kuljetuskerros 3.1. Kuljetuspalvelu

ICMP-sanomia. 3. IP-kerroksen muita protokollia ja mekanismeja ICMP (Internet Control Message Protocol)

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

3. IP-kerroksen muita protokollia ja

Turvallisuus verkkokerroksella

Turvallisuus verkkokerroksella

AH-otsake. Turvallisuus verkkokerroksella. AH-otsake. AH-otsake. ESP-otsake. IP-otsake

R R R RR. Kaikkien. pakettien. siirto yhden linkin yli. always on. Viimeisen siirto muiden linkkien yli. Sovellus: Kuljetus: Verkko: Linkki:

Internet Protocol version 6. IPv6

Luento 6: Kuljetuskerros UDP & TCP TCP:n ruuhkanhallinta

TeleWell TW-EA711 ADSL modeemi & reititin ja palomuuri. Pikaohje

Tietoliikenteen perusteet. Vähän kertausta

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

Transkriptio:

Kappale 3 Siirto Taso Kappale 3, Luento-osuus 1 Käännös Mirja Hosionaho 100% Tietoverkot: ylhäältä alas lähestyminen 6 painos Jim Kurose, Keith Ross Addison-Wesley Maaliskuu 2012 Transport Layer 3-1

Kappale 3 Siirto Taso Huomautus näiden ppt kalvojen käytöstä: Nämä kalvot ovat vapaasti käytettävissä (osastoille, oppilaille ja lukijoille). Ne ovat powerpoint muodossa jotta animaatiot toimivat; jotta voit lisätä, poistaa ja muokata kalvoja ja sisältöä vastaamaan tarpeitasi(mukaan lukien tätä kalvoa). Niihin on kulunut paljon aikaa meidän puoleltamme, joten vastapalveluksena pyydämme: jos käytät kalvoja (esim luokassa) mainitsethan niiden lähteen (koska haluamme että ihmiset käyttävät kirjaamme!) Jos julkaiset dioja missään internetissä mainitsethan miltä osin ne ovat muokatut, tai identtiset, meidän kalvoihin. Lisäksi liitä copyright tiedot mukaan julkaisuun. Kiitos ja Hyviä lukuhetkiä! JFK/KWR All material copyright 1996-2012 J.F Kurose and K.W. Ross, Kaikki oikeudet pidätetään Tietoverkot: ylhäältä alas lähestyminen 6 painos Jim Kurose, Keith Ross Addison-Wesley Maaliskuu 2012 Transport Layer 3-2

Kappale 3: Siirtokerros tavoitteemme: ymmärrä siirtokerroksen palveluiden takana olevat periaatteet: multipleksaus, demultipleksaus luotettava tiedonsiirto virtauksen hallinta ruuhkanhallinta opi verkkokerroksen protokollista: UDP: yhteydetön siirto TCP: yhteysorientoitunut luotettava siirto TCP ruuhkanhallinta Transport Layer 3-3

Kappale 3 hahmotelma 3.1 siirtokerroksen palvelut 3.2 multipleksaus ja demultipleksaus 3.3 yhteydetön siirto: UDP 3.4 Luotettavan tiedonsiirron periaatteet 3.5 yhteys-orientoitunut siirto: TCP segmenttirakenne luotettava tiedonsiirto virtauksen hallinta yhteyden hallinta 3.6 ruuhkanhallinnan periaatteet 3.7 TCP:n ruuhkanhallinta Transport Layer 3-4

Siirtopalvelut ja -protokollat tarjoa looginen kommunikaatio appsien ja eri koneissa pyörivien prosessien välille siirtoprotokollat pyörivät loppusysteemeissä lähetyspuoli: murra appsin viestit segmentteihin, anna verkkokerrokselle rcv side: reassembles segments into messages, passes to app layer useita tiedonsiirtoprotokollia Internet: TCP ja UDP application siirto network data link physical application siirto network data link physical Transport Layer 3-5

Siirto vastaan verkkokerros verkkokerros: looginen kommunikaatio hostien välillä siirtokerros: looginen kommunikaatio prosessien välillä on riippuvainen ja parantaa verkkokerroksen palveluita talovertaus 12 lasta Annin talossa vievät lähettävät kirjeitä 12 lapselle Villen talossa: hostit = talot prosessit = lapset appsin viestit = kirjaimet kirjeissä siirtoprotokolal = Anni ja Ville jotka demuksaavat sisaruksilleen verkkokerroksen protokolla: postipalvelu Transport Layer 3-6

Internetin siirtokerroksen protokollat luotettava, järjestyksessä tapahtuva toimitus ruuhkanhallinta virtauksen hallinta yhteyden rakentaminen epäluotettava, järjestelemätön toimitus: UDP riisutttu paras yritys IP application transport network data link physical network data link physical network data link physical network data link physical palveluita ei saatavilla viiveen vakuudet kaistan vakuudet network data link physical network data link physical network data link physical network data link physical application transport network data link physical Transport Layer 3-7

Kappale 3 hahmotelma 3.1 siirtokerroksen palvelut 3.2 multipleksaus ja demultipleksaus 3.3 yhteydetön siirto: UDP 3.4 Luotettavan tiedonsiirron periaatteet 3.5 yhteys-orientoitunut siirto: TCP segmenttirakenne luotettava tiedonsiirto virtauksen hallinta yhteyden hallinta 3.6 ruuhkanhallinnan periaatteet 3.7 TCP:n ruuhkanhallinta Transport Layer 3-8

Multipleksaus / demultipleksaus multipleksaus lähettäjällä: käsittele dataa useista socketeista, lisää siirtotunniste (käytetään myöhemmin demultipleksaukseen demultipleksaus vastaanottajalla käytä ylätunnistetta segmenttien toimittamiseen oikeassa järjestyksessä sovellus sovellus P3 transport network link P1 P2 transport network link physical sovellus P4 transport network link socket ti prosess i physical physical Transport Layer 3-9

Kuinka demultipleksaus toimii hosti vastaanottaa IP datagrammeja jokainen datagrammi omaa lähde IP osoitteen, määränpää IP osoitteen jokainen datagrammi kantaa yhtä siirtokerroksen segmenttiä jokaisella segmentillä on lähde, määränpää porttinumero hosti käyttää IP osoitteita & porttinumeroita ohjaamaan segmentin oikeaan sockettiin 32 bittiä lähdeportti # mrp # muut tunnistekentät sovellusda ta TCP/UDP segmenttiformaatti Transport Layer 3-10

Yhteydetön demultipleksaus takaisinkutsu: luotu portti omaa hosti-paikallinen portti # takaisinkutsu: kun luodaan datagrammi UDP DatagramSocket mysocket1 = new DatagramSocket(12534); sockettiin lähetettäväksi, on spesifoitava määränpää IP osoite määränpää portti # Kun hosti vastaanottaa UDP segmentin: tarkistaa määränpääportin # segmentissä osoittaa UDP segmentin sockettiin jolla on tuo portti # IP datagrammit samalla määränpääporttinumerolla mutta eri lähde-ip:llä ja / tai lähdeportti numerolla tullaan ohjaamaan samaan sockettiin määränpäässä Transport Layer 3-11

Yhteydetön demuksaus: esimerkki DatagramSocket mysocket2 = new DatagramSocket (9157); application P 3 transport network link physical DatagramSocket serversocket = new DatagramSocket (6428); application P 1 transport network link physical DatagramSocket mysocket1 = new DatagramSocket (5775); application P 4 transport network link physical lähdeportti: 6428 määränpää portti: 9157 lähdeportti:? määränpääportti:? lähdeportti: 9157 määränpääportti: 6428 lähdeportti:? määränpää portti:? Transport Layer 3-12

Yhteys-orientoitunut demuksaus TCP socketti tunnistetaan nelikosta: lähteen IP osoite lähteen porttinumero määränpään IP osoite määränpään porttinumero demuksaus: vastaanottaja käyttää kaikkia neljää arvoa ohjaamaan segmentin oikeaan sockettiin serverin hosti voi tukea useita samanaikaisia TCP socketteja: jokainen socketti tunnistetaan omasta nelikostaan verkkopalvelimilla on eri socketteja jokaiselle yhdistävälle asiakkaalle ei-pysyvä HTTP omaa eri socketin jokaiselle pyynnölle Transport Layer 3-13

Yhteys-orientoitunut demuksaus : esimerkki applikaatio P 3 kuljetus verkko linkki fyysinen P 4 applikaatio P P applikaatio 5 6 P P 2 3 kuljetus verkko linkki fyysinen palvelin: IP-osoite B kuljetus verkko linkki fyysinen isäntä: IP osoite A lähde IP,portti: B,80 osoite IP,portti: A,9157 lähde IP,portti: A,9157 osoite IP, portti: B,80 kolme segmenttiä, kaikki osoitettu IPosoite: B, osoiteportti: 80 demultipleksataan eri soketteihin lähde IP-portti: C,5775 osoite IP,port: B,80 lähde IP,portti: C,9157 osoite IP,portit: B,80 isäntä: IP osoite C Transport Layer 3-14

Yhteys-orientoitunut demuksaus : esimerkki host: IP address A application P 3 transport network link physical source IP,port: B,80 dest IP,port: A,9157 source IP,port: A,9157 dest IP, port: B,80 application P4 transport network link physical rinnakkainen palvelin server: IP address B P 2 application transport network link physical source IP,port: C,5775 dest IP,port: B,80 source IP,port: C,9157 dest IP,port: B,80 P 3 host: IP address C Transport Layer 3-15

Kappale 3 hahmotelma 3.1 siirtokerroksen palvelut 3.2 multipleksaus ja demultipleksaus 3.3 yhteydetön siirto: UDP 3.4 Luotettavan tiedonsiirron periaatteet 3.5 yhteys-orientoitunut siirto: TCP segmenttirakenne luotettava tiedonsiirto virtauksen hallinta yhteyden hallinta 3.6 ruuhkanhallinnan periaatteet 3.7 TCP:n ruuhkanhallinta Transport Layer 3-16

UDP: User Datagram Protocol [RFC 768] ei leluja, karu Internet siirtoprotokolla hyvä yritys palvelu, UDP osiot voivat: hukkua tulla perille väärässä järjestyksessä yhteudetöm: ei kättelyä UDP lähettäjänvastaanottajan välillä jokainen UDP osio käsitellään yksitellen UDP käyttö: median striimausohjelmat (hukkuminen ei haittaa, nopeudesta riippuvainen) DNS SNMP(verkkohallinta) luotettava tiedonsiirto UDP:lla: lisää luotettavuutta ohjelmatasolla ohjelmakohtainen hukatun datanpalautus Transport Layer 3-17

UDP: segmentin headeri 32 bittiä lähetysportti # vast.ott.portti # pituus ohjelmada ta (lasti) UDP segmentin formaatti tarkistussumma UDP segmentin pituus tavuina, sisältäen headerin Miksi on olemassa UDP? ei yhteydenmuodostusta (viive) yksinkertainen: ei yhteystiloja kummassakaan päädyssä pieni headerinkoko ei ruuhkanhallintaa: UDP voi viilettää täysiä. Aina. Transport Layer 3-18

UDP tarkistussumma Tavoite: Huomaa virheet (bitit väärinpäin) lähetetystä segmentistä lähettäjä: Kohtele segmentin (sis. headerin) 16-bittisten kokonaislukujen sekvenssinä tarkistussumma: sekvenssin ynnäys lähettäjä laittaa tarkistussumman UDP:n headeriin ennen lähetystä vastaanottaja: laske tarkistussumma tarkista jos itse laskettu tarkistussumma vastaa headerissä olevaa: EI - virheellinen KYLLÄ - Ei havaittuja virheitä. Mutta ehkä virheitä kuitenkin? Lisää myöhemmin. Transport Layer 3-19

Internet tarkistussumma: esim. esim: ynnää kaksi 16-bit kokonaislukua jämä siirretään alkuun summa tarkistus summa 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 Huom: Kun summataan lukuja, yli 16bitin menevät luvut pitää summata takaisin 16bit lukuun. Transport Layer 3-20

Chapter 3 hahmotelma 3.1 siirtokerroksen palvelut 3.2 multipleksaus ja demultipleksaus 3.3 yhteydetön siirto: UDP 3.4 Luotettavan tiedonsiirron periaatteet 3.5 yhteys-orientoitunut siirto: TCP segmenttirakenne luotettava tiedonsiirto virtauksen hallinta yhteyden hallinta 3.6 ruuhkanhallinnan periaatteet 3.7 TCP:n ruuhkanhallinta Transport Layer 3-21

Luotettavan tiedonsiirron perusteet tärkeää ohjelma, kuljetus ja linkki tasoilla top-10 listalla tärkeitä tietoliikenneaiheita! ei-luotettavan kanavan ominaisuudet määrävät rdt:n eli luotettavan tiedonsiirron protokollan kompleksisuuden Transport Layer 3-22

Luotettavan tiedonsiirron perusteet important in application, transport, link layers top-10 list of important networking topics! characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt) Transport Layer 3-23

Luotettavan tiedonsiirron perusteet important in application, transport, link layers top-10 list of important networking topics! characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt) Transport Layer 3-24

Luotettava tiedonsiirto: alkuun pääseminen rdt_send(): Kutsutaan ylhäältä, (esim ohjelma). Annetaan vastaanottajan ylätasolle vietävä data deliver_data(): rdt kutsuu datan viemiseksi ylemmälle tasollle lähetyspuoli receive side udt_send(): rdt kutsuu jotta siirretään paketti epäluotettavan kanavan yli vastaanottajalle rdt_rcv(): kutsutaan kun paketti vastaanotetaan perillä Transport Layer 3-25

Luotettava datasiirto: alkuun pääseminen teemme näin: kehitämme vähitellen lähettäjän ja vastaanottajan puolet luotettavassa datasiirtoprotokollassa (reliable data transfer protocol (rdt)) keskitytään vain yksisuuntaiseen datasiirtoon mutta kontrollitietoja virtaa molempiin suuntiin! käytetään tilakoneita (FSM) lähettäjän ja vastaanottajan määrittelyyn tila: kun ollaan tässä tilassa, seuraava tila määräytyy yksiselitteisesti seuraavan tapahtuman seurauksena tila 1 tapahtuma joka aiheuttaa tilanmuutoksen toiminta tilanmuutoksessa tapahtuma toiminta tila 2 Transport Layer 3-26

rdt1.0: luotettava datasiirto luotettavassa väylässä käytetty väylä täysin luotettava ei bittivirheitä ei pakettihäviöitä erilliset tilakoneet lähettäjälle ja vastaanottajalle: lähettäjä lähettää datan väylään vastaanottaja lukee datan väylästä odota kutsua ylhäältä rdt_send(data) packet = make_pkt(data) udt_send(packet) odota kutsua alhaalta rdt_rcv(packet) extract (packet,data) deliver_data(data) lähettäjä vastaanottaja Transport Layer 3-27

rdt2.0: väylässä bittivirheitä käytetty väylä saattaa vaihtaa bittejä paketissa tarkistussummalla havaitaan bittivirheet the question: how to recover from errors: acknowledgements (ACKs): receiver explicitly tells sender that pkt received OK negative acknowledgements (NAKs): receiver explicitly tells sender that pkt had errors sender retransmits pkt on receipt of NAK Kuinka ihmiset selviävät virheistä keskustelun aikana? new mechanisms in rdt2.0 (beyond rdt1.0): error detection receiver feedback: control msgs (ACK,NAK) rcvr- >sender Transport Layer 3-28

rdt2.0: väylässä bittivirheitä käytetty väylä saattaa vaihtaa bittejä paketissa tarkistussummalla havaitaan bittivirheet Kysymys: kuinka toivutaan virheistä: kuittaukset (ACKs): vastaanottaja kertoo lähettäjälle, että paketin vastaanotto OK negatiiviset kuittaukset (NAKs): vastaanottaja kertoo lähettäjälle, että paketissa oli virheitä lähettäjä uudelleenlähettää paketin saadessaan NAK:n rdt2.0 uudet toiminnot (verrattuna rdt1.0): virheen havaitseminen palaute: kontrolliviestit (ACK,NAK) vastaanottajalta lähettäjälle Transport Layer 3-29

rdt2.0: tilakoneen määrittely rdt_send(data) sndpkt = make_pkt(data, checksum) udt_send(sndpkt) odota kutsua ylhäältä rdt_rcv(rcvpkt) && isack(rcvpkt) Λ lähettäjä odota ACK tai NAK rdt_rcv(rcvpkt) && isnak(rcvpkt) udt_send(sndpkt) vastaanottaja rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(nak) odota kutsua alhaalta rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack) Transport Layer 3-30

rdt2.0: toiminta ilman virheitä rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) Wait for call from above rdt_rcv(rcvpkt) && isack(rcvpkt) Λ Wait for ACK or NAK rdt_rcv(rcvpkt) && isnak(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(nak) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack) Transport Layer 3-31

rdt2.0: virhe skenaario rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) Wait for call from above rdt_rcv(rcvpkt) && isack(rcvpkt) Λ Wait for ACK or NAK rdt_rcv(rcvpkt) && isnak(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(nak) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack) Transport Layer 3-32

rdt2.0 sisältää kohtalokkaan virheen! mitä tapahtuu jos ACK/NAK korruptoituu? lähettäjä ei tiedä mitä tapahtui vastaaottajalla! uudelleenlähetys ei käy: mahdollinen viestin duplikointi pysähdy ja odota lähettäjä lähettää yhden paketin, sitten odottaa vastaanottajan vastausta duplikaattien käsittely: lähettäjä uudelleenlähettää senhetkisen paketin jos ACK/NAK korruptoitunut lähettäjä lisää järjestysnumeron jokaiseen pakettiin vastaanottaja hylkää (ei lähetä eteenpäin) duplikoidut paketit Transport Layer 3-33

rdt2.1: lähettäjä käsittelee rikkinäisen ACK:n/NAK:n rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt) Λ rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isnak(rcvpkt) ) udt_send(sndpkt) rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) Wait for call 0 from above Wait for ACK or NAK 1 rdt_send(data) Wait for ACK or NAK 0 Wait for call 1 from above rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isnak(rcvpkt) ) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) Λ Transport Layer 3-34

rdt2.1: vastaanottaja käsittelee rikkinäisen ACK:n/NAK:n rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) Wait for 0 from below Wait for 1 from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) Transport Layer 3-35

rdt2.1: keskustelua lähettäjä: seq # lisätty pakettiin kaksi seq. #:a (0,1) riittää. Miksi? täytyy tarkistaa, onko ACK/NAK korruptoitunut kaksinkertainen määrä tiloja tilan täytyy muistaa pitäisikö odotettavan paketin seq # olla 0 vai 1 vastaanottaja: täytyy tarkistaa onko vastaanotettu paketti duplikaatti tila osoittaa, onko 0 vai 1 odotettu paketin seq # huomaa: vastaanottaja ei voi tietää saiko lähettäjä ACK:n/NAK:n Transport Layer 3-36

rdt2.2: protokolla ilman NAK:ia samat toiminnot kuin rdt2.1:ssa, käyttäen vain ACK instead of NAK:n sijasta vastaanottaja lähettää ACK:n viimeisenä ehjänä vastaanotetulle paketille vastaanottajan täytyy tarkasti sisällyttää seq # paketille jota ollaan kuittaamassa duplikoitunut ACK saa lähettäjän toimimaan samoin kuin NAK: uudelleenlähetä viimeisin paketti Transport Layer 3-37

rdt2.2: lähettäjä, vastaanottaja palat rdt_rcv(rcvpkt) && (corrupt(rcvpkt) has_seq1(rcvpkt)) udt_send(sndpkt) rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) Odota kutsua 0 ylhäältä Odota 0 alhaalta lähettäjä FSM pala lähettäjä FSM pala Odota ACK 0 rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,1) ) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0) Λ rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack1, chksum) udt_send(sndpkt) Transport Layer 3-38

rdt3.0: kanavat virheillä ja häviöillä uusi oletus: taustalla oleva kanava voi myös menettää paketteja (data, ACKs) tarkistussumma, seq. #, ACKs, uudelleenlähetykset auttavat mutta eivät tarpeeksi lähestymistapa: lähettäjä odottaa kohtuullisen ajan ACK:ia uudelleenlähettää jos ACK:ia ei oteta vastaan tässä ajassa jos paketti (tai ACK) vain viiveellinen (ei kadotettu): uudelleenlähetys on kaksoiskappale mutta seq. # pitää tästä jo huolen vastaanottajan täytyy määrittää paketin seq # jolle ACK lähetetään vaatii ajastimen Transport Layer 3-39

rdt3.0 lähettäjä Odota kutsua 0 ylhäältä rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,1) stop_timer timeout rdt_rcv(rcvpkt) Λ udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,0) ) Λ odota ACK1 rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) odota ACK0 Odota kutsua 1 ylhäältä sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,1) ) timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0) stop_timer Λ rdt_rcv(rcvpkt) Λ Transport Layer 3-40

rdt3.0 toiminnassa lähettäjä vst.ottaja lähettäjä vst.ottaja send pkt0 rcv ack0 send pkt1 rcv ack1 send pkt0 pkt0 ack0 pkt1 ack1 pkt0 ack0 (a) ei häviöitä rcv pkt0 send ack0 rcv pkt1 send ack1 rcv pkt0 send ack0 send pkt0 rcv ack0 send pkt1 timeout resend pkt1 rcv ack1 send pkt0 pkt0 ack0 pkt1 X häviö pkt1 ack1 pkt0 ack0 rcv pkt0 send ack0 rcv pkt1 send ack1 rcv pkt0 send ack0 (b) paketti häviö Transport Layer 3-41

rdt3.0 toiminnassa lähettäjä send pkt0 rcv ack0 send pkt1 timeout resend pkt1 rcv ack1 send pkt0 pkt0 ack0 pkt1 ack1 X häviö pkt1 ack1 pkt0 ack0 vst.ottaja rcv pkt0 send ack0 rcv pkt1 send ack1 rcv pkt1 (detect duplicate) send ack1 rcv pkt0 send ack0 lähettäjä send pkt0 rcv ack0 send pkt1 timeout resend pkt1 rcv ack1 send pkt0 rcv ack1 send pkt0 pkt0 ack0 pkt1 ack1 pkt1 pkt0 ack1 ack0 pkt0 ack0 vst.ottaja rcv pkt0 send ack0 rcv pkt1 send ack1 rcv pkt1 (detect duplicate) send ack1 rcv pkt0 send ack0 rcv pkt0 (detect duplicate) send ack0 (c) ACK häviö (d) etuaikainen timeout/ viiveinen ACK Transport Layer 3-42

dt3.0 suorituskyky rdt3.0 on korrekti, mutta suorituskyky haisee esim.: 1 Gbps linkki, 15 ms prop. viive, 8000 bit paketti: 8000 bits D trans = L R = 10 9 = 8 microsecs bits/sec U sender : hyödyntäminen osuus ajasta jonka lähettäjä käyttää lähettämiseen jos RTT=30 msec, 1KB pkt joka 30 msec: 33kB/sec teho yli 1 Gbps linkillä verkko protokolla rajoittaa fyysisien resurssien käyttöä! Transport Layer 3-43

rdt3.0: pysähdy-ja-odota operaatio ensimmäinen paketti bitti lähetetty, t = 0 viimeinen pkt bitti lähetetty, t = L / R RTT lähettäjä vst.ottaja ensimmäinen pkt bitti saapuu viimeinen pkt bitti saapuu, lähetä ACK ACK saapuu, lähetä seuraava paketti, t = RTT + L / R Transport Layer 3-44

Kanavoitu protokolla kanavointi: lähettäjä sallii useita, matkalla olevia, ei vielä tiedostettuja (ACK) paketteja sarja numeroiden (sequence #) aluetta laajennettava puskurointi lähettäjällä ja/tai vastaanottajalla kaksi yleismuotoa kanavoiduille protokollille: go- Back-N, valikoikva toisto (selective repeat) Transport Layer 3-45

Kanavointi: suurempi hyödyntäminen ensimmäinen pkt bitti lähetetty, t = 0 viimeinen pkt bitti lähetetty, t = L / R RTT ACK saapuu, lähetä seuraava pkt, t = RTT + L / R lähettäjä vst.ottaja ensimmäinen pkt bitti saapuu viimeinen pkt bitti saapuu, lähetä ACK viimeinen 2. pkt bitti saapuu, lähetä ACK viimeinen 3. pkt bitti saapuu, lähetä ACK 3-paketin kanavointi lisää hyödyntämistä 3 kertaisesti! Transport Layer 3-46

Kanavoitu protokolla: yleiskatsaus Go-back-N: lähettäjällä voi olla N kpl tiedostamattomia (ei ACK) paketteja kanavassa vastaanottaja lähettää vain koottu ack:in ei ack paketteja jos niissä on väli lähettäjällä on ajastin vanhimmalle tiedostamattomalle paketille kun ajastin vanhenee, uudelleenlähetä kaikki tiedostamattomat paketit Valikoiva toisto: lähettäjällä voi olla N kpl tiedostamattomia (ei ACK) paketteja kanavassa rcvr lähettää yksittäiset ACK jokaista pakettia kohden lähettäjä ylläpitää ajastinta jokaista tiedostamatonta pakettia kohden kun ajastin vanhenee, uudelleenlähettää vain tiedostamattomat paketit Transport Layer 3-47

Go-Back-N: lähettäjä k-bit seq # paketin otsikossa ikkuna N määrä, peräkkäisiä tiedostamattomia paketteja sallittu ACK(n): ACK kaikki paketit, sisältäen seq # n - koottu ACK voi vastaanottaa ACK kaksoiskappaleita (katso vastaanottaja) ajastin vanhimmalle matkalla olevalle paketille timeout(n): uudelleenlähettää paketit n ja kaikki korkeamman seq # paketit ikkunassa Transport Layer 3-48

GBN: lähettäjä laajennettu FSM rdt_send(data) Λ base=1 nextseqnum=1 rdt_rcv(rcvpkt) && corrupt(rcvpkt) if (nextseqnum < base+n) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) Odota rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer timeout start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) udt_send(sndpkt[nextseqnum-1]) Transport Layer 3-49

GBN: Vastaanotin pidennetty FSM Λ default udt_send(sndpkt) Wait expectedseqnum=1 sndpkt = make_pkt(expectedseqnum,ack,chksum) rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ack,chksum) udt_send(sndpkt) expectedseqnum++ ACK-only: Lähettää aina ACK oikeinvastaanotetulle pkt korkeimmalla in-order seq # Voi luoda kaksoiskappale- ACK pitää vain muistaa expectedseqnum epäkunnossa pkt: hylkää (älä puskuroi): ei vastaanotin-puskurointia! re-ack pkt korkeimmalla in-order seq # Transport Layer 3-50

GBN toiminnassa lähettäjän ikkuna (N=4) 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 lähettäjä lähetä pkt0 lähetä pkt1 lähetä pkt2 lähetä pkt3 (wait) rcv ack0, lähetä pkt4 rcv ack1, lähetä pkt5 sivuuta kaksoiskappaleet ACK pkt 2 aikakatkaisu lähetä pkt2 lähetä pkt3 lähetä pkt4 lähetä pkt5 X häviö vastaanottaja vastaanota pkt0, lähetä ack0 vastaanota pkt1, lähetä ack1 vastaanota pkt3, hylkää, (uudelleen)lähetä ack1 vastaanota pkt4, hylkää, (uudelleen)lähetä ack1 vastaanota pkt5, hylkää (uudelleen)lähetä ack1 rcv pkt2, toimita, lähetä ack2 rcv pkt3, toimita, lähetä ack3 rcv pkt4, toimita, lähetä ack4 rcv pkt5, toimita, lähetä ack5 Transport Layer 3-51

Valikoiva toisto vastaanottaja tunnustaa yksittäin kaikki oikein vastaanotetut pkt puskuri pkt, tarvittaessa, lopullista järjestystä toimitusta ylempään kerrokseen lähettäjä vain uudelleenlähettää pkt mitkä ACK ei vastaanottanut lähettäjän ajastis jokaista epä-ack: tua pkt lähettäjän ikkuna N peräkkäistä seq # s rajoittaa seq #s lähetettyjä, epä-ack: tua pkts Transport Layer 3-52

valikoiva toisto: lähettäjä, vastaanottoikkuna Transport Layer 3-53

Valikoiva toisto lähettäjä data ylempää: jos seuraava saatavilla oleva seq # on ikkunassa, lähetä pkt aikakatkaisu(n): uudelleenlähetä pkt n, resetoi ajastin ACK(n) [sendbase,sendbase+n]: merkkaa pkt n vastaanotetuksi jos n pienin epä-ack: tu pkt, edistä ikkunakanta seuraavaan epä-ack: vastaanottaj pkt n [rcvbase, a rcvbase+n-1] lähetä ACK(n) epäkunnossa: puskuri järjestyksessä: toimita(toimita myös puskuroitu, järjestyksessä olevat pkt), edistä ikkuna seuraavaan ei-vielävastaanotettu pkt pkt n [rcvbase-n,rcvbase-1] ACK(n) otherwise: sivuuta Transport Layer 3-54

Valikoiva toisto toiminnassa lähettäjän ikkuna(n=4) 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 lähettäjä lähetä pkt0 lähetä pkt1 lähetä pkt2 lähetä pkt3 (wait) rcv ack0, lähetä pkt4 rcv ack1, lähetä pkt5 tallenna ack3 saapui pkt 2 aikakatkaisu lähetä pkt2 tallenna ack4 saapui tallenna ack5 saapui X häviö vastaanottaja vastaanota pkt0, lähetä ack0 vastaanota pkt1, lähetä ack1 vastaanota pkt3, puskuroi, lähetä ack3 vastaanota pkt4, puskuroi, lähetä ack4 vastaanota pkt5, puskuroi, lähetä ack5 rcv pkt2; toimita pkt2, pkt3, pkt4, pkt5; lähetä ack2 Q: mitä tapahtuu, kun ack2 saapuu? Transport Layer 3-55

Valikoiva toisto: ongelma esimerkki: seq # s: 0, 1, 2, 3 ikkunan koko=3 vastaanottaja ei näe kahden tapauksen eroja! kaksoiskappaledata hyväksytty uutena (b): ssä Q: mikä yhteys seq # koon ja ikkunan koon kesken välttääkseen ongelmilta (b): llä? lähettäjän ikkuna (kuitin jälkeen) 0 1 2 3 0 1 2 0 1 2 3 0 1 2 0 1 2 3 0 1 2 0 1 2 3 0 1 2 0 1 2 3 0 1 2 0 1 2 3 0 1 2 0 1 2 3 0 1 2 pkt0 pkt1 pkt2 X X aikakatkaisu uudelleenlähetys pkt0 X 0 1 2 3 0 1 2 pkt0 (b) oho! pkt0 pkt1 pkt2 0 1 2 3 0 1 2 pkt3 pkt0 (a) ei ongelmaa X vastaanottajan ikkuna (kuitin jälkeen) 0 1 2 3 0 1 2 0 1 2 3 0 1 2 0 1 2 3 0 1 2 hyväksyy paketit seq numerolla 0 Vastaanottaja ei näe lähettäjän puolta. Vastaanottajan toiminta samanlaisia molemmissa tapauksissa jotain on (todella) väärin! 0 1 2 3 0 1 2 0 1 2 3 0 1 2 0 1 2 3 0 1 2 hyväksyy paketit seq numerolla 0 Transport Layer 3-56