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

Samankaltaiset tiedostot
kynnysarvo (threshold)

kynnysarvo (threshold)

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

Siirron optimointi. Optimointi on usein tarpeen: Silly window syndrome

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

11/20/ Siirron optimointi

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/

6. Kuljetuskerros 6.1. Kuljetuspalvelu End- to- end

6. Kuljetuskerros 6.1. Kuljetuspalvelu

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

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

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

3. Kuljetuskerros 3.1. Kuljetuspalvelu

3. Kuljetuskerros 3.1.

3. Kuljetuskerros 3.1. Kuljetuspalvelu End- to- end

Monimutkaisempi stop and wait -protokolla

Monimutkaisempi stop and wait -protokolla

3. Kuljetuskerros 3.1. Kuljetuspalvelu

Monimutkaisempi stop and wait -protokolla

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

3. Kuljetuskerros 3.1. Kuljetuspalvelu

3. Kuljetuskerros 3.1. Kuljetuspalvelu

peittää verkkokerroksen puutteet

3. Kuljetuskerros 3.1. Kuljetuspalvelu

3. Kuljetuskerros 3.1. Kuljetuspalvelu End- to- end

3. Kuljetuskerros 3.1.

Kuljetuskerros. Tietokoneverkot. Matti Siekkinen Pasi Sarolahti

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

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ä.

Asiakkaan toimenpiteet

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

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

ELEC-C7241 Tietokoneverkot Kuljetuskerros

OSI ja Protokollapino

Tietoliikenteen perusteet

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

3. Kuljetuskerros 3.1. Kuljetuspalvelu End- to- end

Tietoliikenne II (2 ov)

Tietoliikenne II (2 ov)

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

Kuljetuskerroksen protokollat

Kuljetuskerros. Kirja sivut: ,

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

Kuljetuskerroksen protokollat

TCP:n vuonohjaus (flow control)

Tehtävä 2: Tietoliikenneprotokolla

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

Tietoliikenne II Kurssikoe

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

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

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

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

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

Tietoliikenne II (2 ov)

S Teletekniikan perusteet

Kuljetuskerroksen protokollat

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

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

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

Luento 6: Kuljetuskerros UDP & TCP TCP:n ruuhkanhallinta

Ongelma 1: Ei saada kolmea toistokuittausta

Nopea uudelleenlähetys (Fast retransmit)

Nopea uudelleenlähetys (Fast retransmit)

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

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

Ruuhkanvalvonta on hankalaa!

Ruuhkanvalvonta on hankalaa!

Ruuhkanvalvonta on hankalaa!

Luento 6: Kuljetuskerros UDP & TCP TCP:n ruuhkanhallinta

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

Selektiiviset kuittaukset (RFC 2018, RFC 3517)

M. Allman, H. Balakrishnan, S. Floyd. January (Status: PROPOSED STANDARD) Lähettäjä ei saa kolmea toistokuittausta =>

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

Ratkaisu: Miksi lähetetään uusi paketti? SACK (Selective Acknowledgement) Nopea toipuminen ei onnistu! Limited Transmit

M. Allman, H. Balakrishnan, S. Floyd. January Lähettäjä ei saa kolmea toistokuittausta =>

Tietoliikenteen perusteet

Tietoliikenteen perusteet

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

Tietoliikenteen perusteet. Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

Miten Internet toimii?

Tietoliikenteen perusteet. Kuljetuskerros

Tietoliikenteen perusteet. Kuljetuskerros

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

2. Sovelluksia ja sovellusprotokollia

3. IP-kerroksen muita protokollia ja

Tietoliikenteen perusteet. Kuljetuskerros

WWW-sivu. Miten Internet toimii? World Wide Web. HTML-koodi. HTTP-istunto URL <#>

Luento 5: Kuljetuskerros

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

Transkriptio:

6. Kuljetuskerros 6.1. Kuljetuspalvelu End- to- end prosessilta prosessille portti verkkokerros koneelta koneelle IP-osoite peittää verkkokerroksen puutteet jos verkkopalvelu ei ole riittävän hyvä, sitä voidaan parantaa kuljetuskerroksella kuljetuskerros huomaa verkkokerroksen kadottamat paketit ja pyytää niiden uudelleenlähetystä 18.10.2000 1 asiakas-prosesseja 3256 1024 1068 (porttinumero) kuljetusyhteys portteja palvelinprosessi HTTP 218.48.15.135 218.52.7.45 Kuljetusyhteys on looginen päästäpäähän yhteys (end-to-end) 18.10.2000 2 80 user tavuvirta user kuljetuspalvelut parantavat verkkopalveluja Sovelluksen näkemä QoS segmentti IP-datasähke IP IP kuljetuskerroksen palvelut verkkokerkoksen palvelut kuljetuskerroksen palvelut verkkokerroksen palvelut Päästä-päähän tavuvirta 18.10.2000 3 18.10.2000 4 Vaatimuksia kuljetuspalvelulle Virheetön, luotettava järjestyksen säilyttävä kaksoiskappaleet karsiva mielivaltaisen pitkiä sanomia salliva vuonvalvonnan mahdollistava Verkkokerros kuitenkin kadottaa sanomia toimittaa sanomat epäjärjestyksessä viivyttää sanomia satunnaisen pitkän ajan luovuttaa useita kopioita samasta sanomasta rajoittaa sanomien kokoa 6.2. Kuljetuskerroksen toiminta monella tavoin siirtoyhteyskerroksen kaltainen virhevalvonta vuon valvonta jne mutta siirtoyhteys: välissä fyysinen kanava kuljetusyhteys: välissä verkko 18.10.2000 5 18.10.2000 6

Siirtoyhteyskerros : Kuljetuskerros reititin isäntäkone Verkko lisää monimutkaisuutta: kohteelle aina osoite yhteyden muodostus ja purku monimutkainen verkko säilyttää sanomia sanoma voi jäädä verkkoon pitkäksi aikaa vanha paketti voi ilmaantua paljon myöhemmin yhteyksiä reitittimen kautta on paljon ja ne muuttuvat dynaamisesti vuonvalvonta ja puskurointi hankalaa ruuhka voi lamaannuttaa verkon =>ruuhkan valvonta 18.10.2000 7 18.10.2000 8 6.2.1. Osoittaminen Kuljetushteydenmuodostuksessa tiedettävä kuljetusosoite osoite on kaikkien tuntema ( hätänumero 112 ) katsotaan luettelosta tai kysytään nimipalvelijalta (name server) ( numerotiedustelu 118 ) Verkkokerroksen yhteyttä muodostettaessa tiedettävä kuljetusosoitetta vastaava verkko-osoite hierarkkinen kuljetusosoite paljastaa <maa><verkko><isäntäkone><portti> toinen nimipalvelija: kuljetusosoite => verkko-osoite 18.10.2000 9 6.3 Internetin kuljetusprotokollat UDP (User Datagram Protocol) minimaalinen kuljetuspalvelu (best effort) ei pyri parantamaan verkon tarjoamia palveluita yhteydetön kuljettaa sanomia prosessilta toiselle ei takaa mitään: virheettömyyttä, järjestystä, jne (Transmission Control Protocol) luotettava tiedonsiirto numerointi, kuittaukset, tarkistukset, ajastimet vuonvalvonta, ruuhkanvalvonta 18.10.2000 10 6.4.8. UDP UDP (User Data Protocol) voidaan lähettää sanomia ilman yhteyden muodostusta UDP-otsake Source port Destination port UDP length UDP checksum data -protokolla yhteyden muodostus ja purku luotettavan tavuvirran toteuttaminen vuonvalvonta siirron optimointi -segmentti ruuhkan valvonta -palvelun käyttö 18.10.2000 11 18.10.2000 12

6.2.2. Yhteyden muodostus ja purku :ssä käyttää yhteyden muodostamiseen ja purkuun ns. kolminkertaista kättelyä (three-way handshake) välissä oleva verkko tekee yhteyden muodostamisen ja purun hankalaksi viivästyneet sanomat => sanomille elinaika sanomien numeroinnista sopiminen Bysanttilainen ongelma (two-army problem) hyökkään, jos olen varma, että sinäkin hyökkäät symmetrinen yhteyden purku = molemmat osapuolet tietävät, että toinenkin on varmasti purkanut yhteyden 18.10.2000 13 CR CR ACK DT DT DT CLOSE CLOSE ACK CR DT CLOSE Yhteyden muodostus ruuhkaisessa verkossa Jokainen paketti lähetetään kahteen kertaan Kun yhteys on purettu, viivästyneet kaksoiskappaleet saapuvat Ne tulkitaan uudeksi yhteydeksi, ja data otetaan vastaan kahteen kertaan! 18.10.2000 14 SYN = tahdistussanoma SYN, Seqnro=x SYN+ACK,Seqnro=y, ack=x+1 ACK,Seqnro=x+1, ack=y+1 Yhteyden muodostus Kolminkertainen kättely yhteyspyynnössä pyytäjän nro x vahvistuksessa sekä pyytäjän että suostujan järj.numero ensimmäisessä datalähetyksessä molemmat numerot #2 hyökkää vain, jos tietää minun saaneen vastaussanoman. #1 #2 Hyökätään aamulla kello 5! OK, siis kello 5! OK! Loogisesti ratkeamaton ongelma. Kaikki riippuu aina viimeisestä sanomasta, jonka perillemenoa ei voida taata! Bysanttilainen ongelma (two-army problem) Entä, jos vastaus ei mene perille? Silloin #1 ei hyökkää! 18.10.2000 15 18.10.2000 16 Kone 1 Kone 2 DATA CR CA DATA DATA DR Symmetrinen yhteyden purku DATA DR CR connection request CA connection accepted DR disconnect request Kuinka kauan odotettava mahdollista dataa kone 1:ltä? Entä jos kone 1 ei purakaan yhteyttä? 18.10.2000 17 Yhteyden purku molemmat suunnat puretaan erikseen -segmentti FIN = 1 ei enää dataa lähetettävä kun saadan kuittaus => yhteys tähän suuntaan purettu yhteys kokonaan purettu, kun molemmat suunnat purettu purussa käytetään ajastimia 2 * paketin maksimaalinen elinikä 18.10.2000 18

Kone 1 FIN-lippu Kone 2 päällä lähetä DR (=lopetuspyyntö) ja aseta ajastin pura yhteys lähetä ACK DR DR ACK lähetä DR ja aseta ajastin pura yhteys Yhteyden purku kolminkertaista kättelyä käyttäen 18.10.2000 19 Virheettömyys ja järjestys Järjestysnumerot tavuvirta => tavunumerointi segmentin 1. tavun järjestysnumero yhteyden alussa satunnaiset numerot kuittaukset kumulatiivinen ACK, ei NAK-kuittausta kuittauksessa seuraavaksi odotettava tavu Go Back N virheelliset tai väärässä järjestyksessä tulleet tuhotaan myös valikoiva toisto mahdollinen 18.10.2000 20 :n vuonvalvonta joustava liukuva ikkuna (sliding window) (credit-vuonvalvonta) vastaanottaja kertoo, kuinka paljon suostuu vastaanottamaan => kuittaus irroitettu vuonvalvonnasta AdvertisedWindow-kenttä paljonko saa lähettää = paljonko vastaanottajan puskureihin mahtuu myös ruuhkan valvonta rajoittaa lähettämistä 18.10.2000 21 A puskurit käytetty, A joutuu lopettamaan Esimerkki <ehdottaa 8 puskuria > <ack =0, buf = 4> <seq = 0, data = m0 > <seq = 1, data = m1 > <seq = 2, data = m2 > <ack = 1, buf = 3> <seq = 3, data = m3 > <seq = 4, data = m4> 18.10.2000 22 B lupa vain sanomille 0-3 kuittaus sanomista 0 ja 1, lupa sanomille 2-4, A ajastin laukeaa, uudelleen sanoma 2 lähettää sanoman 5 lähettää sanoman 6 jos lupa katoaa, jää odottamaan! ==> lukkiutumistilanne Esimerkki jatkuu <seq = 2, data = m2> <ack = 4, buf = 0> <ack = 4, buf = 1> <ack = 4, buf = 2> <seq = 5, data = m5> <seq = 6, data = m6> <ack = 6, buf = 0> <ack = 6, buf = 4> B kuittaa kaikki, mutta ei anna lupaa lähettää lupa lähettää yksi sanoma (= 5) lupa lähettää kaksi sanomaa (= 5 ja 6) kuittaa, mutta ei anna lähetyslupaa lähetyslupa sanomille 7-10 jos ilmoitus lisäpuskureista katoaa, lähettäjä lukkiutuu odotustilaan vastaanottaja voi luulla, ettei ole lähetettävää lukkiutumisen estämiseksi kun ikkunankoko = 0 lähettäjä ei saa lähettää, paitsi pikadataa (URG) yhden tavun kyselyn, jonka vastaanottaja kuittaa ja samalla ilmoittaa ikkunan koon => estää turhat lukkiutumiset 18.10.2000 23 18.10.2000 24

6.4.5 Siirron optimointi saa optimoida lähettämisiään ei tarvitse lähettää heti kun data on tullut dataa kerätään puskuriin ja lähetetään sopivassa tilanteessa PUSH-lipun avulla sovellus ilmoittaa, että data on lähetettävä heti Optimointi on usein tarpeen: Interaktiivinen editori => merkki lähetetään heti 21 tavun -segmentti => 41 tavun IP-paketti joka kuitataan 40 tavun IP-paketilla ilmoitus uudesta ikkunan koosta 40 tavun IPpaketilla kaiutetaan merkki vielä 41 tavun IP-paketilla yhden merkin käsittely => 162 tavun siirtäminen ja neljän segmentin lähettäminen 18.10.2000 25 18.10.2000 26 Ratkaisu: Naglen algoritmi jos data tulee tavuttain lähetä 1. tavu kerää sitä seuraavat tavut puskuriin ja lähetä vasta kun edellinen lähetys on kuitattu paitsi jos lähetettävää on suurimman segmentin verran tai puolet ikkunan koosta hankala, jos hiirtä liikutellaan Internetin kautta! 18.10.2000 27 Silly window syndrome Tilanteessa, jossa lähettäjältä dataa :lle suurina lohkoina vastaanottajalle vain tavu kerrallaan voi tuhota :n suorituskyvyn koko data lähetetään tavu kerrallaan joka tavun välissä ilmoitus ikkunan koon kasvattamisesta yhdellä Siis: ei ilmoitusta yhdestä tavusta, lähettäjä ei lähetä yhtä tavua koko segmentti puolet puskurin koosta 18.10.2000 28 Silly winwow syndrome otsake otsake 1 tavu vastaanottaja puskuri täynnä sovellus lukee yhden tavun puskuriin mahtuu 1 tavu ilmoitetaan uusi ikkunan koko uusi tavu saapuu vastaanottaja puskuri täynnä 6.4.2. -segmentti segmentti 20 tavun otsake + optionaalinen osa dataosa voi puuttua segmentin kokoa rajoittaa MTU (Maximum transfer unit) verkon rajoitus maksimikoolle (muutama tuhat tavua) IP-paketin dataosa korkeintaan 65535 tavua liian isot segmentit paloitellaan joka palalle IP-otsake => yleisrasite kasvaa 18.10.2000 29 18.10.2000 30

Source port head. length Checksum Checksum -otsakkeen kentät Sequence number Destination port Acknowledgement number U A P R S F R C S S Y I Window size G K H T N N Urgent pointer Options (0 or more 32 bit words) Data (optional) 18.10.2000 31 TPC-segmentin otsakekentät Lähde- ja kohdeportit (Source port, Destination port) yhteyden päätepisteet portti + koneen IP-osoite => 48 bittinen TSAP Järjestysnumero (Sequence number) tavut numeroidaan => 32 bittiä segmentin ensimmäisen tavun numero Kuittausnumero (Acknowledgement number) seuraavaksi odotettu tavu -otsakkeen pituus ( header length) mahdollisten optiokenttien takia 6 bitin käyttämätön kenttä 18.10.2000 32 6 lippubittiä URG onko pikadataa pikadatan sijainnin ilmoittaa pikadatakenttä (Urgent pointer) ACK onko kuittauskenttä käytössä PSH onko hetilähetettävää (pushed) dataa RST yhteyden uudelleenalustuspyyntö (reset), yleensä ongelmatilanne SYN käytetään yhteyttä muodostettaessa SYN =1, ACK = 0 connection request SYN =1, ACK = 1 connection accepted FIN käytetään yhteyden purkuun FIN =1 ei enää lähetettävää 18.10.2000 33 Ikkunan koko (window size) vaihteleva ikkunankoko kuittaus irroitettu lähetysluvasta Tarkistussumma (Checksum) lasketaan otsakkeelle, datalle ja ns. pseudootsakkeelle 18.10.2000 34 pseudo-otsake Source IP address Optiokenttä (options) voidaan lisätä piirteitä, joita ei ole varsinaisessa otsakkeessa suurin hyväksyttävä datakenttä Destination IP address 00000000 Protocol = 6 /UDP segmentin pituus Auttaa havaitsemaan väärään osoitteeseen toimitetut paketit. ikkunan koon moninkertaistaminen (window scale) nopeille ja pitkän viipeen linjoille 64 ktavun ikkunan koko on liian pieni valikoivan toiston käyttö go back N :n tilalla vähentää turhia uudelleenlähetyksiä Sisältää IP-otsakkeen tietoja! 18.10.2000 35 18.10.2000 36

6.4.6. :n ruuhkan valvonta Liikaa kuormitusta => verkko ruuhkautuu => hidastetaan lähettämistä Ruuhkan havaitseminen nykyisin siirtovirheet harvinaisia poikkeuksena langattomat verkot => uudelleenlähetykset johtuvat ruuhkasta uudelleenlähetysajastimen laukeaminen on merkki ruuhkasta ruuhkaikkuna paljonko tavuja (segmenttejä) lähettäjällä saa korkeintaan olla verkossa liikkeellä kuittaus => ko. tavut jo poistuneet verkosta tavuja kuittaukset 18.10.2000 37 18.10.2000 38 Ruuhkaikkunan koko? Lähettäjän on itse pääteltävä ja arvioitava sopiva ruuhkaikkunan koko kukaan muu ei sitä kerro! timeout => on ruuhkaa kuittaukset tulevat tasaisesti => ei ole ruuhkaa Dynaaminen ruuhkaikkunan koko: ruuhkaikkunaa kasvatetaan kunnes törmätään ruuhkaan sen jälkeen ruuhkaikkunaa pienennetään reilusti ja aletaan uudestaan kasvattaa ruuhkaikkunaa 18.10.2000 39 Hitaan aloituksen algoritmi (slow start) Algoritmi pyrkii löytämään sopivan ikkunan koon yhteyden alussa tai ruuhkatilanteen jälkeen mahdollisimman nopeasti ei ole niin kovin hidas, vaan alussa eksponentiaalinen! alussa ruuhkaikkuna = yksi segmentti kuitattu ruuhkaikkunallinen kasvattaa ruuhkaikkunan kaksinkertaiseksi 18.10.2000 40 lähettäjä datasegmentti ACK vastaanottaja kynnysarvo (threshold) varoitusarvo = tästä lähtien syytä varoa ruuhkaa aluksi 64 K kynnysarvoon saakka voidaan kasvattaa ruuhkaikkunaa eksponentiaalisesti kynnysarvon saavuttamisen jälkeen kasvatetaan ruuhkaikkunaa vain lineaarisesti = kasvatetaan kuittausten jälkeen vain yhdellä edetään hyvin varovaisesti! 18.10.2000 41 18.10.2000 42

jos ajastin ehtii laueta => ruuhkatilanne kynnysarvoksi puolet nykyisestä ruuhkaikkunan arvosta hitaalla aloituksella etsitään taas uusi sopiva ruuhkaikkunan arvo ruuhkaikkunan arvoksi 1 segmentti ruuhkaikkunaa kasvatetaan aluksi eksponentiaalisesti eli kaksinkertaistetaan kun ikkunallinen on kuitattu kynnysarvon saavuttamisen jälkeen kasvatetaan vain segmentti kerrallaan kunnes taas havaitaan ruuhka ja aloitetaan ruuhkaikkunan uuden arvon etsiminen Uudelleenlähetysjastimen hallinta uudelleenlähetysajastin (retransmission timer) asetetaan aina kun segmentti lähetetään ruuhkaa, jos kuittaus ei saavu ajoissa mikä on sopiva ajastimen aika? kuittaus aika vaihtelee suuresti vaihtelu on myös nopeaa dynaaminen arvo saadaan jatkuvien verkon suorituskykymittauksien perusteella 18.10.2000 43 18.10.2000 44 RTT arvio kiertoviiveelle (round-trip time) mitataan jokaisen lähetetyn segmentin kiertoviive M RTT = αrtt + (1-α)Μ, tyypillisesti α = 7/8 uudelleenlähetysajastimen arvo βrtt aluksi β oli aina 2 parannus: otetaan huomioon myös poikkeama D (deviation) oletetun ja saadun kiertoviiveen välillä RTT-M D = α D + (1- α) RTT-M ajastimen arvo = RTT +4*D uudelleenlähetysten vaikutus ajastimeen kumpaan segmenttiin kuittaus kohdistuu? Karnin algoritmi ei oteta huomioon uudelleenlähettyjen segmenttien kuittauksia RTT:n laskemisessa 18.10.2000 45 18.10.2000 46 Parannuksia ruuhkanvalvontaan Nopea uudelleenlähetys (Fast Retransmit) ei odoteta ajastimen laukeamista ennen uudelleenlähetystä vastaanottaja kuittaa jokaisen paketin kun vastaanottaja huomaa puuttuvan paketin, se lähettää uudelleen edellisen paketin kuittauksen Duplicate ACK (~ NAK) kun lähettäjä saa useita (3 ) peräkkäisiä saman paketin kuittauksia => se havaitsee tästä paketin puuttuvan ja lähettää sen heti uudelleen => nopeampi uudelleenlähetys 18.10.2000 47 Nopea toipuminen (Fast Recovery) kun kadonnut paketti huomataan nopealla toipumisella ei aloiteta alusta hitaalla aloituksella vaan pudotetaan ruuhkaikkuna puoleen ja jatketaan normaalilla lineaarisella kasvattamisella 18.10.2000 48

hidas aloitus ja ruuhkan valvonta ongelmallisia langattomassa yhteydessä parannuksia tarkempi kello ruuhkan ennustaminen ennen ajastimen laukeamista early warning system => 40-70 % parempia tuloksia 18.10.2000 49 langattomassa verkossa monet -toteutukset optimoitu luotettaville lankaverkoille => suorituskyky langattomissa verkoissa erittäin huono ruuhkanvalvonta-algoritmi olettaa ajastimen laukeamisen johtuvan ruuhkasta lähettämistä hidastetaan, jotta verkon kuormitus pienenisi ja ruuhkaa ei syntyisi langattomat yhteydet ovat epäluotettavia ja paketteja katoaa kadonneet paketit syytä lähettää nopeasti uudelleen lähetystä pitäisi päinvastoin nopeuttaa! 18.10.2000 50 6.4.1. :n palvelumalli pistoke (socket) -yhteyden päätepiste sovellukselle lähettäjällä ja vastaanottajalla oma pistoke pistokenumero 48 bittiä koneen 32 bitin IP-osoite 16 bitin porttinumero kiinnitettyjä portteja (well-known port)»ftp 21»TELNET 23»HTTP 80 18.10.2000 51 -yhteys kaksisuuntainen (full-duplex) kaksipisteyhteys tunnistetaan päätepisteinä olevien pistokkeiden tunnuksista (pistoke1, pistoke2) Kone a Kone b 18.10.2000 52 Pistokerajapinta (Socket interface) Verkkopalvelun ja sitä käyttävän sovelluksen rajapinta yleensä käyttöjärjestelmän tarjoama palvelu pistokerajapinta alunperin Berkeley Unixin mukana, nyt lähes kaikissa käyttöjärjestelmissä miten verkkoprotokollan tarjoamiin palveluihin päästään käsiksi sovelluksesta 18.10.2000 53 :n pistokeprimitiivit SOCKET luo uusi yhteyden päätepiste pistoke BIND anna pistokkeelle osoite LISTEN halukas vastaanottamaan yhteyksiä ACCEPT jää odottamaan yhteysyrityksiä CONNECT yritä muodostaa yhteys SEND lähetä dataa yhteyttä pitkin RECEIVE vastaanota dataa yhteydeltä CLOSE pura yhteys (symmetrinen) 18.10.2000 54

KJ prosessi pistoke puskurit KJ = käyttöjärjestelmä Sovelluksen tekijän alue Internet prosessi pistoke puskurit Prosessien kommunikointi -pistokkeita käyttäen 18.10.2000 55 KJ Kuljetusyhteyden muodostus ja käyttö SOCKET BIND LISTEN server ACCEPT RECEIVE SEND(DATA) Kuljetuspalvelun tuottaja esim. conn.req. conn. ack. data data RECEIVE client CONNECT(SERVER) SEND(DATA) -yhteyden hallinta yhteys muodostetaan kolminkertaisella kättelyllä passiivinen osapuoli kuuntelee SOCKET LISTEN ACCEPT aktiivinen osapuoli aloittaa yhteydenmuodostuksen CONNECT 18.10.2000 57 CONNECT-primitiivi parametreina IP-osoite ja porttinumero suurin hyväksyttävä segmentin koko muuta tietoa, esim. salasana -segmentti, jossasyn-segmentti SYN = 1 ACK = 0 18.10.2000 58 client server client server SOCKET CONNECT SOCKET LISTEN ACCEPT SEND RECEIVE SEND RECEIVE Asiakkaan pistoke Kolminkertainen kättely = -yhteyden muodostus Yhteydenotto pistoke Tavuvirta putkessa Datan siirto Yhteyspistoke Asiakkaan pistoke tavuja tavuja Yhteyspistoke Pistoke + = tavuputki prosessien välissä 18.10.2000 59 Pistoke + = tavuputki prosessien välissä 18.10.2000 60

-yhteys on tavuvirtaa, ei sanomavirtaa lähetettäessä neljä 512 tavun pätkää vastaanottaja saa joko neljä 512 tavun pätkää kaksi 1024 tavun pätkää yhden 2048 tavun pätkän Segmentit lähetetään neljänä eri IP-pakettina Ne luovutetaan vastaanottajalle yhdellä READ- kutsulla A B C D A B C D neljä 512 tavun segmenttiä yksi 2048 tavun data 18.10.2000 61 server SEND(DATA) CLOSE yhteyden purkaminen discon. data discon. client CLOSE asiakas jää odottamaan mahdollista dataa palvelimelta symmetrinen yhteyden purku asiakas vapautetaan 18.10.2000 62 C-rutiineina int socket(int domain, int type, int protocol) palvelin: int bind (int socket, struct sockaddr *address, int addr_len) int listen(int socket, int backlog) int accept(int socket, struct sockaddr *address, int *addr_len asiakas: int connect (intsocket, struct sockaddr *address, int addr_len) 18.10.2000 63 int send(int socket, char *message, int msg_len, int flags) sanoman lähetys annetun pistokkeen kautta int recv(int socket, char *buffer, int buf_len, int flags) sanoma vastaanotto annetusta pistokkeesta ilmoitettuun puskuriin 18.10.2000 64 Pistokeohjelmointia Javalla Socket clientsocket = new Socket( hostname, 6789); clientsocket.close(); ServerSocket welcomesocket = new Server Socket (6789); Socket connectionsocket = welcomesocket; accept() (esimerkki kirjassa Kurose, Ross, Computer Networking, A Top-Down Approach Featuring the Interbet) 18.10.2000 65 Pistokeohjelmointi Pistokeohjelmointia ja yleensä hajautettujen verkkosovellusten tekemistä opetellaan erillisellä kurssilla Verkkosovellusten toteuttaminen (järjestetään keväällä 2001) 18.10.2000 66