kappale 3 kuljetustaso - lut · kappale 3 kuljetustaso computer networking: a top down approach 6th...

209
Transport Layer 3-1 Kappale 3 Kuljetustaso Computer Networking: A Top Down Approach 6 th edition Jim Kurose, Keith Ross Addison-Wesley March 2012 Patrik Tikka 2-16 Antti Sinkkonen 17-27 Esko Mäkelä 54-85 Meri Ovaska 86-103 Saku Käsnänen 104-120 Markus Leppioja 121-142 Henri Takki 143-178 Ilari Tuomela 179 - 209

Upload: others

Post on 06-Jun-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

  • Transport Layer 3-1

    Kappale 3Kuljetustaso

    Computer Networking: A

    Top Down Approach

    6th edition Jim Kurose, Keith Ross

    Addison-WesleyMarch 2012

    Patrik Tikka 2-16Antti Sinkkonen 17-27Esko Mäkelä 54-85Meri Ovaska 86-103Saku Käsnänen 104-120Markus Leppioja 121-142Henri Takki 143-178Ilari Tuomela 179 - 209

  • Transport Layer 3-2

    Chapter 3: Transport Layerour goals: ❖ understand principles

    behind transport layer services:▪ multiplexing,

    demultiplexing▪ reliable data transfer▪ flow control▪ congestion control

    ❖ learn about Internet transport layer protocols:▪ UDP: connectionless

    transport▪ TCP: connection-oriented

    reliable transport▪ TCP congestion control

  • Transport Layer 3-3

    Kappale 3: KuljetuskerrosTavoitteemme: ❖ Ymmärtää

    kuljetuskerroksen palveluiden perusperiaatteet:▪ Multiplexaus,

    demultiplexaus▪ Luotettava

    tiedonsiirto▪ Data virran ohjaus▪ Ruuhkanhallinta

    ❖ Oppia asioita kuljetuskerroksen protokollista:▪ UDP: Yhteydetön

    tiedonsiirto▪ TCP: Yhteys-orientoitunut

    luotettava tiedonsiirto▪ TCP Ruuhkanhallinta

  • Transport Layer 3-4

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP▪ segment structure▪ reliable data transfer▪ flow control▪ connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-5

    Kappale 3: kehys

    3.1 Kuljetuskerroksen palvelut

    3.2 Multiplexaus, demultiplexaus

    3.3 Yhteydetön tiedonsiirto: UDP

    3.4 Luotettavan tiedonsiirron perusteet

    3.5 Yhteys-orientoitunut luotettava tiedonsiirto : TCP▪ Segmenttirakenne▪ Luotettava tiedonsiirto▪ Virtauksen ohjaus▪ Yhteyden hallinta

    3.6 Ruuhkanhallinnan perusteet

    3.7 TCP Ruuhkanhallinta

  • Transport Layer 3-6

    Transport services and protocols❖ provide logical

    communication between app processes running on different hosts

    ❖ transport protocols run in end systems ▪ send side: breaks app

    messages into segments, passes to network layer▪ rcv side: reassembles

    segments into messages, passes to app layer

    ❖ more than one transport protocol available to apps▪ Internet: TCP and UDP

    applicationtransportnetworkdata linkphysical

    applicationtransportnetworkdata linkphysical

  • Transport Layer 3-7

    Kuljetuspalvelut ja -protokollat❖ Tarjoavat loogisen

    kommunikoinnin eri solmuissa toimivien sovellusten prosessien välille.

    ❖ Kuljetusprotokollat pyörivät päätejärjestelmissä▪ Lähettäjä: Paloittelee

    lähetettävän tiedon segmentteihin ja lähettää edelleen verkkokerrokselle

    ▪ Vastaanottaja: Kasaan tiedon segmenteistä ja välittää sovelluskerrokselle

    ❖ Enemmän kuin yksi protokolla sovelluskerroksen käytettävissä▪ Internet: TCP jaUDP

    applicationtransportnetworkdata linkphysical

    applicationtransportnetworkdata linkphysical

  • Transport Layer 3-8

    Transport vs. network layer❖ network layer:

    logical communication between hosts

    ❖ transport layer:logical communication between processes▪ relies on, enhances,

    network layer services

    12 kids in Ann’s house sending letters to 12 kids in Bill’s house:

    ❖ hosts = houses❖ processes = kids❖ app messages = letters in

    envelopes❖ transport protocol = Ann

    and Bill who demux to in-house siblings

    ❖ network-layer protocol = postal service

    household analogy:

  • Transport Layer 3-9

    Kuljetus - vs. verkkokerros❖ Verkkokerros:

    looginen kommunikaatio solmujen välillä

    ❖ Kuljetuskerros: Looginen kommunikaatio sovellusten prosessien välillä▪ Nojaa ja ehostaa

    verkkokerroksen palveluita

    12 lasta Annen talossa lähettää kirjeitä 12:lle lapselle Billin talossa:

    ❖ Solmut= Talot❖ Prosessit = Lapset❖ Sovellus viestit = Kirjeet

    kuorissa❖ Kuljetusprotokolla= Anna

    ja Bill, jotka toimittavat viestit lapsille

    ❖ Verkkokerrosprotokolla= Postipalvelu

    Talo analogia:

  • Transport Layer 3-10

    Internet transport-layer protocols❖ reliable, in-order

    delivery (TCP)▪ congestion control ▪ flow control▪ connection setup

    ❖ unreliable, unordered delivery: UDP▪ no-frills extension of

    “best-effort” IP❖ services not available: ▪ delay guarantees▪ bandwidth guarantees

    applicationtransportnetworkdata linkphysical

    applicationtransportnetworkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical network

    data linkphysical

  • Transport Layer 3-11

    Internetin kuljetuskerroksen protokollat

    ❖ Luotettava, toimitus-tilauksesta (TCP)▪ Ruuhkanhallinta▪ Virtauksenohjaus▪ Yhteyden alustus

    ❖ Epäluotettava, tilaamaton-toimitus: UDP▪ Ei mitään erityistä, vaan

    “paras mahdollinen” IP❖ Ei saatavilla olevat

    palvelut: ▪ Viive takuu▪ Kaistanleveys takuu

    applicationtransportnetworkdata linkphysical

    applicationtransportnetworkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical network

    data linkphysical

  • Transport Layer 3-12

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP▪ segment structure▪ reliable data transfer▪ flow control▪ connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-13

    Kappale 3: kehys

    3.1 Kuljetuskerroksen palvelut

    3.2 Multiplexaus, demultiplexaus

    3.3 Yhteydetön tiedonsiirto: UDP

    3.4 Luotettavan tiedonsiirron perusteet

    3.5 Yhteys-orientoitunut luotettava tiedonsiirto : TCP▪ Segmenttirakenne▪ Luotettava tiedonsiirto▪ Virtauksen ohjaus▪ Yhteyden hallinta

    3.6 Ruuhkanhallinnan perusteet

    3.7 TCP Ruuhkanhallinta

    3.1 Kuljetuskerroksen palvelut

    3.2 Multiplexaus, demultiplexaus

    3.3 Yhteydetön tiedonsiirto: UDP

    3.4 Luotettavan tiedonsiirron perusteet

    3.5 Yhteys-orientoitunut luotettava tiedonsiirto : TCP▪ Segmenttirakenne▪ Luotettava tiedonsiirto▪ Virtauksen ohjaus▪ Yhteyden hallinta

    3.6 Ruuhkanhallinnan perusteet

    3.7 TCP Ruuhkanhallinta

  • Transport Layer 3-14

    Multiplexing/demultiplexing

    process

    socket

    use header info to deliverreceived segments to correct socket

    demultiplexing at receiver:

    handle data from multiplesockets, add transport header (later used for demultiplexing)

    multiplexing at sender:

    transport

    application

    physicallink

    network

    P2P1

    transport

    application

    physicallink

    network

    P4

    transport

    application

    physicallink

    network

    P3

  • Transport Layer 3-15

    Multipelxaus/Demultiplexaus

    process

    socket

    Käyttää tunnisteinfoatoimittaakseen tietosegmentit oikeisiin soketteihin

    Demultiplexaus vastaanottajalla:Tiedon käsittely monelta eri

    soketilta, lisää kuljetustunnisteen(Käytetään myöhemmin DM:ssä)

    Multiplexaus lähettäjällä:

    transport

    application

    physicallink

    network

    P2P1

    transport

    application

    physicallink

    network

    P4

    transport

    application

    physicallink

    network

    P3

  • Transport Layer 3-16

    How demultiplexing works

    ❖ host receives IP datagrams▪ each datagram has source IP

    address, destination IP address▪ each datagram carries one

    transport-layer segment▪ each segment has source,

    destination port number ❖ host uses IP addresses &

    port numbers to direct segment to appropriate socket

    source port # dest port #

    32 bits

    applicationdata

    (payload)

    other header fields

    TCP/UDP segment format

  • Transport Layer 3-17

    Miten demultiplexaus toimii

    ❖ Solmu vastaanottaa IP datapaketteja▪ Jokaisessa datapaketissa on

    lähteen IP osoite ja päämäärän IP osoite

    ▪ Jokaisessa datapaketissa on yksi kuljetuskerroksen segmentti

    ▪ Jokaisessa paketissa on lähteen ja päämäärän porttinumero

    ❖ Solmu käyttää IP -osoitteita ja porttiennumeroita segmenttien ohjaamiseen oikeille soketeille

    Lähde portti# Päämäärä portti#

    32 bittiä

    Sovelluksen data (Itse kuljetettava viesti)

    Muut tunniste kentät

    TCP/UDP segmenttimalli

  • Transport Layer 3-18

    Connectionless demultiplexing❖ recall: created socket has

    host-local port #:DatagramSocket mySocket1 = new DatagramSocket(12534);

    ❖ when host receives UDP segment:▪ checks destination port #

    in segment▪ directs UDP segment to

    socket with that port #

    ❖ recall: when creating datagram to send into UDP socket, must specify▪ destination IP address▪ destination port #

    IP datagrams with same dest. port #, but different source IP addresses and/or source port numbers will be directed to same socket at dest

  • Transport Layer 3-19

    Yhteydetön demultiplexaus❖Uudelleenkutsu: luodulla

    soketilla on solmu-paikallinen portti#:DatagramSocket mySocket1 = new DatagramSocket(12534);

    ❖ Kun solmu vastaanottaaUDP segmentin:▪ Tarkastaan päämäärä

    portin# segmentistä▪ Ohjaa UDP segmentin

    oikealla porttinumerolla vatustettuun sockettiin

    ❖ Uudelleenkutsu: Luotaessa UDP sockettiin lähetettävää datapakettia, täytyy määrittää:▪ Päämäärän IP▪ Päämäärän portti#

    Samoilla PM. Portti#:lla varustetut IP datapaketit, mutta eri IP-lähteet ja/tai lähde porttinumerot, ohjataan samaan sockettiin päämäärässä

  • Transport Layer 3-20

    Connectionless demux: exampleDatagramSocket serverSocket = new DatagramSocket(6428);

    transport

    application

    physicallink

    network

    P3 transport

    application

    physicallink

    network

    P1

    transport

    application

    physicallink

    network

    P4

    DatagramSocket mySocket1 = new DatagramSocket (5775);

    DatagramSocket mySocket2 = new DatagramSocket(9157);

    source port: 9157dest port: 6428

    source port: 6428dest port: 9157

    source port: ?dest port: ?

    source port: ?dest port: ?

  • Transport Layer 3-21

    Yhteydetän demultiplexaus: esimerkkiDatagramSocket serverSocket = new DatagramSocket(6428);

    transport

    application

    physicallink

    network

    P3 transport

    application

    physicallink

    network

    P1

    transport

    application

    physicallink

    network

    P4

    DatagramSocket mySocket1 = new DatagramSocket (5775);

    DatagramSocket mySocket2 = new DatagramSocket(9157);

    source port: 9157dest port: 6428

    source port: 6428dest port: 9157

    source port: ?dest port: ?

    source port: ?dest port: ?

  • Transport Layer 3-22

    Connection-oriented demux

    ❖ TCP socket identified by 4-tuple: ▪ source IP address▪ source port number▪ dest IP address▪ dest port number

    ❖ demux: receiver uses all four values to direct segment to appropriate socket

    ❖ server host may support many simultaneous TCP sockets:▪ each socket identified by

    its own 4-tuple❖ web servers have

    different sockets for each connecting client▪ non-persistent HTTP will

    have different socket for each request

  • Transport Layer 3-23

    Yhteys-orientoitunut demultiplexaus

    ❖ TCP socketti tunnistetaan “nelikolla”: ▪ Lähde IP -osoite▪ Lähde portti#▪ PM IP -osoite▪ PM portti#

    ❖ demux: vastaanottaja käyttää kaikkia neljää arvoa segmentin ohjaamiseen oikealle socketille

    ❖ Palvelin solmu saattaa tukea monia samanaikaisia TCP socketteja:▪ Jokainen socketti

    tunnistetaan niiden omasta “nelikosta”

    ❖ Web palvelimilla on erilliset socketit jokaiselle yhdistetylle asiakkaalle▪ Ei-pysyvä HTTP varaa eri

    socketit jokaiselle pyynnölle

  • Transport Layer 3-24

    Connection-oriented demux: example

    transport

    application

    physicallink

    network

    P3 transport

    application

    physicallink

    P4

    transport

    application

    physicallink

    network

    P2

    source IP,port: A,9157dest IP, port: B,80

    source IP,port: B,80dest IP,port: A,9157

    host: IP address A

    host: IP address C

    network

    P6

    P5 P

    3

    source IP,port: C,5775dest IP,port: B,80

    source IP,port: C,9157dest IP,port: B,80three segments, all destined to IP address: B,

    dest port: 80 are demultiplexed to different sockets

    server: IP address B

  • Transport Layer 3-25

    Yhteys-orientoitunut demultiplexaus: esimerkki

    transport

    application

    physicallink

    network

    P3 transport

    application

    physicallink

    P4

    transport

    application

    physicallink

    network

    P2

    source IP,port: A,9157dest IP, port: B,80

    source IP,port: B,80dest IP,port: A,9157

    solmu: IP osoite A

    Solmu: IP osoite C

    network

    P6

    P5 P

    3

    source IP,port: C,5775dest IP,port: B,80

    source IP,port: C,9157dest IP,port: B,80Ko,me segmenttiä, jokainen samaan IP osoitteeseen: B,

    PM portti: 80 jokainen segmentti on multiplexattu eri socketteihin

    Palvelin: IP osoite

    B

  • Transport Layer 3-26

    Connection-oriented demux: example

    transport

    application

    physicallink

    network

    P3 transport

    application

    physicallink

    transport

    application

    physicallink

    network

    P2

    source IP,port: A,9157dest IP, port: B,80

    source IP,port: B,80dest IP,port: A,9157

    host: IP address A

    host: IP address C

    server: IP address B

    network

    P3

    source IP,port: C,5775dest IP,port: B,80

    source IP,port: C,9157dest IP,port: B,80

    P4

    threaded server

  • Transport Layer 3-27

    Yhteys-orientoitunut demultiplexaus: esimerkki

    transport

    application

    physicallink

    network

    P3 transport

    application

    physicallink

    transport

    application

    physicallink

    network

    P2

    source IP,port: A,9157dest IP, port: B,80

    source IP,port: B,80dest IP,port: A,9157

    Solmu: IP osoite A

    Solmu: IP osoite C

    Palvelin: IP Osoite

    B

    network

    P3

    source IP,port: C,5775dest IP,port: B,80

    source IP,port: C,9157dest IP,port: B,80

    P4

    Kierteinen palvelin

  • Transport Layer 3-28

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP▪ segment structure▪ reliable data transfer▪ flow control▪ connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-29

    Kappale 3: kehys

    3.1 Kuljetuskerroksen palvelut

    3.2 Multiplexaus, demultiplexaus

    3.3 Yhteydetön tiedonsiirto: UDP

    3.4 Luotettavan tiedonsiirron perusteet

    3.5 Yhteys-orientoitunut luotettava tiedonsiirto : TCP▪ Segmenttirakenne▪ Luotettava tiedonsiirto▪ Virtauksen ohjaus▪ Yhteyden hallinta

    3.6 Ruuhkanhallinnan perusteet

    3.7 TCP Ruuhkanhallinta

    3.1 Kuljetuskerroksen palvelut

    3.2 Multiplexaus, demultiplexaus

    3.3 Yhteydetön tiedonsiirto: UDP

    3.4 Luotettavan tiedonsiirron perusteet

    3.5 Yhteys-orientoitunut luotettava tiedonsiirto : TCP▪ Segmenttirakenne▪ Luotettava tiedonsiirto▪ Virtauksen ohjaus▪ Yhteyden hallinta

    3.6 Ruuhkanhallinnan perusteet

    3.7 TCP Ruuhkanhallinta

  • Transport Layer 3-30

    UDP: User Datagram Protocol [RFC 768]❖ “no frills,” “bare bones”

    Internet transport protocol❖ “best effort” service, UDP

    segments may be:▪ lost▪ delivered out-of-order

    to app❖ connectionless:▪ no handshaking

    between UDP sender, receiver▪ each UDP segment

    handled independently of others

    ❖ UDP use:▪ streaming multimedia

    apps (loss tolerant, rate sensitive)▪ DNS▪ SNMP

    ❖ reliable transfer over UDP: ▪ add reliability at

    application layer▪ application-specific error

    recovery!

  • Transport Layer 3-31

    UDP: Käyttäjä Datapaketti protokolla [RFC 768]

    ❖ “Ei erikoisuuksia,” “perus” Internet kuljetusprotokolla

    ❖ “Parasmahdollinen” palvelu, UDP segmentit voivat:▪ hukkua▪ Päätyä epäjärjestyksessä

    sovellukselle❖ Yhteydetön:

    ▪ Ei yhteyden alustusta UDP lähettäjän ja vastaanottajan välillä

    ▪ Jokainen UDP segmentti käsitellään itsenäisesti erillään muista

    ❖ UDP käytetään:▪ Strrimaus sovelluksissa

    (YLE areena, youtube, yms.)▪ DNS (root hakee

    syvemmältä tietoja jne.)▪ SNMP

    ❖ Luotettava tiedonsiirto käyttäen UDP:tä: ▪ Lisätään sovellustasolla▪ Sovelluskohtainen

    palautuminen vikatilanteista.

  • Transport Layer 3-32

    UDP: segment header

    source port # dest port #

    32 bits

    applicationdata

    (payload)

    UDP segment format

    length checksum

    length, in bytes of UDP segment,

    including header

    ❖ no connection establishment (which can add delay)

    ❖ simple: no connection state at sender, receiver

    ❖ small header size❖ no congestion control:

    UDP can blast away as fast as desired

    why is there a UDP?

  • Transport Layer 3-33

    UDP: segmenttiotsikko

    Lähteen portti#Kohteen portti #

    32 bits

    sovellusdata(tietosisältö)

    UDP segmentti muoto

    pituus tarkiste

    UDP segmentin, otsikko mukaan

    lukien, pituus biteissä

    ❖ Ei tarvita yhteyttä(mikä voi lisätä viivettä)

    ❖ yksinkertaista: ei yhteystilaa vastaanottajalla eikä lähettäjällä

    ❖ Pieni otsikon koko❖ Ei ruuhkakontrollia: UDP

    voi painaa eteenpäin niin paljon kuin halutaan

    Miksi UDP on olemassa?

  • Transport Layer 3-34

    UDP checksum

    sender:❖ treat segment contents,

    including header fields, as sequence of 16-bit integers

    ❖ checksum: addition (one’s complement sum) of segment contents

    ❖ sender puts checksum value into UDP checksum field

    receiver:❖ compute checksum of

    received segment❖ check if computed

    checksum equals checksum field value:▪ NO - error detected▪ YES - no error detected.

    But maybe errors nonetheless? More later ….

    Goal: detect “errors” (e.g., flipped bits) in transmitted segment

  • Transport Layer 3-35

    UDP tarkiste

    lähettäjä:❖ Kohtelee segmentin

    sisältöä, otsikko mukaan lukien, 16-bittisinä kokonaislukuina

    ❖ tarkiste: segmentin sisällön yhteenlasku

    ❖ Lähettäjä laittaa yhteenlaskun arvon UDP:n tarkisteen kenttään

    Vastaanottaja:❖ Laskee vastaanotetun

    segmentin tarkisteen❖ Tarkistaa vastaako äsken

    laskettu tarkiste vastaanotetun segmentin UDP:n tarkistekentän vastaavaa arvoa:▪ EI– virhe havaittu▪ KYLLÄ – ei havaittu

    virhettä.

    Tavoite: havaita“virheet” (ts., käännetyt bitit) siirretyssä segmentissä

  • Transport Layer 3-36

    Internet checksum: example

    example: add two 16-bit integers

    1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 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 01 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

    wraparound

    sumchecksum

    Note: when adding numbers, a carryout from the most significant bit needs to be added to the result

  • Transport Layer 3-37

    Internetin tarkiste: esimerkki

    esimerkki: lisää kaksi 16-bittistä kokonaislukua

    1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 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 01 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

    kierre

    summatarkiste

    Huom: numeroita lisätessä, tärkeimmän bitin suorite täytyy lisätä lopputulokseen

  • Transport Layer 3-38

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP▪ segment structure▪ reliable data transfer▪ flow control▪ connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-39

    Kappale 3 kehys

    3.1 kuljetustason palvelut

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP▪ segment structure▪ reliable data transfer▪ flow control▪ connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-40

    Principles of reliable data transfer❖ 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-41

    Luotettavan tiedonsiirron periaatteet❖ Tärkeää sovellus-, kuljetus- ja linkkitasoilla▪ top-10 listalla verkon tärkeistä puheenaiheista

    ❖ Epäluotettavan kanavan tunnusmerkit määrittelevät luotettavan tiedonsiirtoprotokollan monimutkaisuuden (rtd)

  • Transport Layer 3-42

    ❖ characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt)

    Principles of reliable data transfer❖ important in application, transport, link layers▪ top-10 list of important networking topics!

  • Transport Layer 3-43

    ❖ Epäluotettavan kanavan tunnusmerkit määrittelevät luotettavan tiedonsiirtoprotokollan monimutkaisuuden (rtd)

    Luotettavan tiedonsiirron periaatteet❖ Tärkeää sovellus-, kuljetus- ja linkkitasoilla▪ top-10 listalla verkon tärkeistä puheenaiheista

  • Transport Layer 3-44

    ❖ characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt)

    ❖ important in application, transport, link layers▪ top-10 list of important networking topics!

    Principles of reliable data transfer

  • Transport Layer 3-45

    ❖ Epäluotettavan kanavan tunnusmerkit määrittelevät luotettavan tiedonsiirtoprotokollan monimutkaisuuden (rtd)

    ❖ Tärkeää sovellus-, kuljetus- ja linkkitasoilla▪ top-10 listalla verkon tärkeistä puheenaiheista

    Luotettavan tiedonsiirron periaatteet

  • Transport Layer 3-46

    Reliable data transfer: getting started

    sendside

    receiveside

    rdt_send(): called from above, (e.g., by app.). Passed data to deliver to receiver upper layer

    udt_send(): called by rdt,to transfer packet over

    unreliable channel to receiver

    rdt_rcv(): called when packet arrives on rcv-side of channel

    deliver_data():called by rdt to deliver data to upper

  • Transport Layer 3-47

    Luotettava tiedonsiirto: alkusysäys

    Lähetetyspuoli

    Vastaanotto

    puoli

    rdt_send(): kutsutaan yläpuolelta, (esim., sovellus.). Siirretty data

    kuljettajalle, jolta vastaanottajalle ylemmälle tasolle

    udt_send(): rtd kutsuu,Siirretään paketti

    epäluotettavaa kanavaa pitkin vastaanottajalle

    rdt_rcv(): kutsutaan kun paketti saapuu vastaanotto-puolelle

    deliver_data(): rtd kutsuu, siirretään data

    ylemmälle tasolle

  • Transport Layer 3-48

    we’ll:❖ incrementally develop sender, receiver sides of

    reliable data transfer protocol (rdt)❖ consider only unidirectional data transfer▪ but control info will flow on both directions!

    ❖ use finite state machines (FSM) to specify sender, receiver

    state1

    state2

    event causing state transitionactions taken on state transition

    state: when in this “state” next state

    uniquely determined by next event

    eventactions

    Reliable data transfer: getting started

  • Transport Layer 3-49

    Me:❖ Inkrementaalisesti kehitämme rtd:n sekä lähettäjä-

    että vastaanottopuolta❖ Harkitse vain yksisuuntaista tiedonsiirtoa▪ Mutta kontrollitieto liikkuu molempiin suuntiin!

    ❖ Käytetään FSM:ää tarkentamaan lähettäjää ja vastaanottajaa

    Tila1

    Tila2

    Tapahtuma aiheuttaa tilan vaihdonTilan vaihdon aiheutamat toimenpiteet

    tila: kun ollaan tässä ”tilassa”, seuraava

    toiminto määrää itse seuraavan tilan

    tapahtumatoimenpiteet

    Luotettava tiedonsiirto

  • Transport Layer 3-50

    rdt1.0: reliable transfer over a reliable channel

    ❖ underlying channel perfectly reliable▪ no bit errors▪ no loss of packets

    ❖ separate FSMs for sender, receiver:▪ sender sends data into underlying channel▪ receiver reads data from underlying channel

    Wait for call from above packet = make_pkt(data)

    udt_send(packet)

    rdt_send(data)extract (packet,data)deliver_data(data)

    Wait for call from below

    rdt_rcv(packet)

    sender receiver

  • Transport Layer 3-51

    rdt1.0: luotettava siirto luotettavan kanavan yli

    ❖ Alla oleva kanava täysin luotettava▪ Ei bitti virheitä▪ Ei pakettihäviötä

    ❖ Erilliset FSM:ät lähettäjälle ja vastaanottajalle▪ Lähettäjä lähettää datan alla olevaan kanavaan▪ Vastaanottaja lukee dataa alla olevasta kanavasta

    Odotakutsuaylhäältä packet = make_pkt(data)

    udt_send(packet)

    rdt_send(data)extract (packet,data)deliver_data(data)

    Odota kutsua

    alapuolelta

    rdt_rcv(packet)

    lähettäjä vastaanottaja

  • Transport Layer 3-52

    ❖ underlying channel may flip bits in packet▪ checksum to detect bit errors

    ❖ 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

    ❖ new mechanisms in rdt2.0 (beyond rdt1.0):▪ error detection▪ receiver feedback: control msgs (ACK,NAK) rcvr-

    >sender

    rdt2.0: channel with bit errors

    How do humans recover from “errors”

    during conversation?

  • Transport Layer 3-53

    ❖ Alla oleva kanava voi “pyöräyttää” bittejä▪ Tarkisteen avulla huomataan bittivirheet

    ❖ kysymys: kuinka palautua virheistä:▪ 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

    ❖ new mechanisms in rdt2.0 (beyond rdt1.0):▪ error detection▪ receiver feedback: control msgs (ACK,NAK) rcvr-

    >sender

    rdt2.0: kanava bittivirheillä

    Kuinka ihmisiet palautuvat ”virheistä” keskustelun aikana?

  • Transport Layer 3-54

    ❖ underlying channel may flip bits in packet▪ checksum to detect bit errors

    ❖ 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

    ❖ new mechanisms in rdt2.0 (beyond rdt1.0):▪ error detection▪ feedback: control msgs (ACK,NAK) from receiver to

    sender

    rdt2.0: channel with bit errors

  • Transport Layer 3-55

    ❖ perustana oleva kanava voi kääntää paketeissa olevia bittejä▪ checksum bittivirheiden tarkistusta varten

    ❖ Tärkein kysymys: kuinka palaudutaan virheistä:▪ kuittaus (ACKs): vastaaottaja kertoo yksiselitteisesti

    lähettäjälle, että paketti on vastaanotettu OK▪ kielteinen kuittaus (NAKs): vastaanottaja kertoo

    yksiselitteisesti lähettäjälle, että paketissa oli virheitä▪ lähettäjä uudelleenlähettää paketin, josta saatiin NAK

    ❖ uusi mekanismi rdt2.0:ssa (yli rdt1.0:n):▪ virheen tunnistus▪ palaute: kontrolli viestejä (ACK,NAK) vastaanottajalta

    lähettäjälle

    rdt2.0: kanava bittivirheillä

  • Transport Layer 3-56

    rdt2.0: FSM specification

    Wait for call from above

    sndpkt = make_pkt(data, checksum)udt_send(sndpkt)

    extract(rcvpkt,data)deliver_data(data)udt_send(ACK)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    Wait for ACK or

    NAK

    Wait for call from belowsender

    receiverrdt_send(data)

    Λ

  • Transport Layer 3-57

    rdt2.0: FSM erittely

    Odota kutsua ylhäältä

    sndpkt = make_pkt(data, checksum)udt_send(sndpkt)

    extract(rcvpkt,data)deliver_data(data)udt_send(ACK)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    Odota ACK tai

    NAK

    Odota kutsua ylhäältälähettäjä

    vastaanottajardt_send(data)

    Λ

  • Transport Layer 3-58

    rdt2.0: operation with no errors

    Wait for call from above

    snkpkt = make_pkt(data, checksum)udt_send(sndpkt)

    extract(rcvpkt,data)deliver_data(data)udt_send(ACK)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    Wait for ACK or

    NAK

    Wait for call from below

    rdt_send(data)

    Λ

  • Transport Layer 3-59

    rdt2.0: toimenpide ilman virheitä

    Wait for call from above

    snkpkt = make_pkt(data, checksum)udt_send(sndpkt)

    extract(rcvpkt,data)deliver_data(data)udt_send(ACK)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    Wait for ACK or

    NAK

    Wait for call from below

    rdt_send(data)

    Λ

  • Transport Layer 3-60

    rdt2.0: error scenario

    Wait for call from above

    snkpkt = make_pkt(data, checksum)udt_send(sndpkt)

    extract(rcvpkt,data)deliver_data(data)udt_send(ACK)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    Wait for ACK or

    NAK

    Wait for call from below

    rdt_send(data)

    Λ

  • Transport Layer 3-61

    rdt2.0: virheskenaario

    Wait for call from above

    snkpkt = make_pkt(data, checksum)udt_send(sndpkt)

    extract(rcvpkt,data)deliver_data(data)udt_send(ACK)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    Wait for ACK or

    NAK

    Wait for call from below

    rdt_send(data)

    Λ

  • Transport Layer 3-62

    rdt2.0 has a fatal flaw!

    what happens if ACK/NAK corrupted?

    ❖ sender doesn’t know what happened at receiver!

    ❖ can’t just retransmit: possible duplicate

    handling duplicates: ❖ sender retransmits current

    pkt if ACK/NAK corrupted

    ❖ sender adds sequence number to each pkt

    ❖ receiver discards (doesn’t deliver up) duplicate pkt

    stop and waitsender sends one packet, then waits for receiver response

  • Transport Layer 3-63

    rdt2.0:ssa on kohtalokas vika!Mitä tapahtuu jo

    ACK/NAK on korruptoitunut?

    ❖ lähettäjä ei tiedä vastaanottajan päässä tapahtui!

    ❖ ei voi vain uudelleenlähettää: mahdollisiaduplikaatioita

    duplikaattien käsittely: ❖ lähettäjä uudelleenlähettää

    nykyisen paketin jos ACK/NAK korruptioitunut

    ❖ lähettäjä lisää järjestysnumeron jokaiseen pakettiin

    ❖ vastaanottaja hylkää duplikaatti paketetit

    pysähdy ja odotalähettäjä lähettää yhden paketin ja odottaa vastaanottajan vastausta

  • Transport Layer 3-64

    rdt2.1: sender, handles garbled ACK/NAKs

    Wait for call 0 from

    above

    sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)

    rdt_send(data)

    Wait for ACK or NAK 0 udt_send(sndpkt)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )

    sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)

    rdt_send(data)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)

    Wait forcall 1 from

    above

    Wait for ACK or NAK 1

    ΛΛ

  • Transport Layer 3-65

    rdt2.1: lähettäjä, käsittelee sotkuisen ACK/NAK

    Wait for call 0 from

    above

    sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)

    rdt_send(data)

    Wait for ACK or NAK 0 udt_send(sndpkt)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )

    sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)

    rdt_send(data)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isNAK(rcvpkt) )

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)

    Wait forcall 1 from

    above

    Wait for ACK or NAK 1

    ΛΛ

  • Transport Layer 3-66

    Wait for 0 from below

    sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)

    rdt_rcv(rcvpkt) && not corrupt(rcvpkt) &&has_seq0(rcvpkt)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt)

    extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)

    Wait for 1 from below

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt)

    extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)

    rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

    sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)

    rdt_rcv(rcvpkt) && not corrupt(rcvpkt) &&has_seq1(rcvpkt)

    rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

    sndpkt = make_pkt(ACK, chksum)udt_send(sndpkt)

    sndpkt = make_pkt(NAK, chksum)udt_send(sndpkt)

    rdt2.1: vastaanottaja, käsittelee sotkuisen ACK/NAKs

  • Transport Layer 3-67

    rdt2.1: discussion

    sender:❖ seq # added to pkt❖ two seq. #’s (0,1) will

    suffice. Why?❖ must check if received

    ACK/NAK corrupted ❖ twice as many states▪ state must “remember”

    whether “expected” pkt should have seq # of 0 or 1

    receiver:❖ must check if received

    packet is duplicate▪ state indicates whether

    0 or 1 is expected pkt seq #

    ❖ note: receiver can notknow if its last ACK/NAK received OK at sender

  • Transport Layer 3-68

    rdt2.1: keskustelulähettäjä:❖ järjestysnumero #

    lisätty pakettiin❖ kaksi järj.num. #’s

    (0,1) riittää. Miksi?❖ täytyy tarkistaa jos

    vastaanotettu ACK/NAK korruptoitunut

    ❖ tuplasti enemmän tiloja▪ tilan täytyy “muistaa”

    josko “odotetun” paketin järj.num. tulisi olla 0 vai 1

    receiver:❖ täytyy tarkistaa, onko

    vastaanotettu paketti duplikaatti▪ tila osoittaa indicates

    joko 0 tai 1 on odotettu pkt järj.num.

    ❖ huom: vastaanottaja EI voi tietää onko lähettäjä vastaanottanu viimeiseksi lähetetyn ACK/NAK kuittauksen

  • Transport Layer 3-69

    rdt2.2: a NAK-free protocol

    ❖ same functionality as rdt2.1, using ACKs only❖ instead of NAK, receiver sends ACK for last pkt

    received OK▪ receiver must explicitly include seq # of pkt being ACKed

    ❖ duplicate ACK at sender results in same action as NAK: retransmit current pkt

  • Transport Layer 3-70

    rdt2.2: NAK-vapaa protokolla

    ❖ sama toiminnallisuus kuin rdt2.1, käytetään ainoastaan ACK

    ❖ NAK:n sijaan vastaanottaja lähettää ACK kuittauksen viimeisestä vastaanotetusta paketista▪ vastaanottajan täytyy yksiselitteisesti sisällyttää paketin

    järj.num. joka kuitataan ACK ❖ duplikaatti ACK lähettäjällä johtaa samaan

    toimenpiteeseen kuin NAK: uudelleen lähetetään sen kyseinen paketti

  • Transport Layer 3-71

    rdt2.2: sender, receiver fragments

    Wait for call 0 from

    above

    sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)

    rdt_send(data)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||

    isACK(rcvpkt,1) )

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)

    Wait for ACK

    0sender FSMfragment

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt)

    extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt)

    Wait for 0 from below

    rdt_rcv(rcvpkt) && (corrupt(rcvpkt) ||

    has_seq1(rcvpkt))

    udt_send(sndpkt)receiver FSM

    fragment

    Λ

  • Transport Layer 3-72

    rdt2.2: lähettäjä, vastaanottajan kappale

    Wait for call 0 from

    above

    sndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)

    rdt_send(data)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||

    isACK(rcvpkt,1) )

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)

    Wait for ACK

    0sender FSMfragment

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt)

    extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(ACK1, chksum)udt_send(sndpkt)

    Wait for 0 from below

    rdt_rcv(rcvpkt) && (corrupt(rcvpkt) ||

    has_seq1(rcvpkt))

    udt_send(sndpkt)receiver FSM

    fragment

    Λ

  • Transport Layer 3-73

    rdt3.0: channels with errors and loss

    new assumption:underlying channel can also lose packets (data, ACKs)▪ checksum, seq. #,

    ACKs, retransmissions will be of help … but not enough

    approach: sender waits “reasonable” amount of time for ACK

    ❖ retransmits if no ACK received in this time

    ❖ if pkt (or ACK) just delayed (not lost):▪ retransmission will be

    duplicate, but seq. #’s already handles this▪ receiver must specify seq

    # of pkt being ACKed❖ requires countdown timer

  • Transport Layer 3-74

    rdt3.0: kanavia joissa virheitä ja hävikkiä

    uusi oletus: perustana oleva kanava voi myös kadottaa paketteja (dataa, kuittauksia)▪ checksum, järj.num . #,

    ACK, uudelleenlähetys auttavat … mutta ei tarpeeksi

    lähestymistapa: lähettäjä odottaa “kohtuullisen” ajan ACK-kuittausta

    ❖ uudelleen lähettää jos ACK ei saavu tässä ajassa

    ❖ jos pkt (tai ACK) vain viivästyy (ei häviä):▪ uudelleen lähetys tulee olemaan

    duplikaatti, mutta järj.num. ottaa tämän jo huomioon

    ▪ vastaanottajan täytyy tarkentaa minkä järj. numn paketti ACK-kuitataan

    ❖ vaattii lähtölaskenta ajastimen

  • Transport Layer 3-75

    rdt3.0 sendersndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_timer

    rdt_send(data)

    Wait for

    ACK0

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,1) )

    Wait for call 1 from

    above

    sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)start_timer

    rdt_send(data)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,0) )

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1)

    stop_timerstop_timer

    udt_send(sndpkt)start_timer

    timeout

    udt_send(sndpkt)start_timer

    timeout

    rdt_rcv(rcvpkt)

    Wait for call 0from

    above

    Wait for

    ACK1

    Λrdt_rcv(rcvpkt)

    ΛΛ

    Λ

  • Transport Layer 3-76

    rdt3.0 lähettäjäsndpkt = make_pkt(0, data, checksum)udt_send(sndpkt)start_timer

    rdt_send(data)

    Wait for

    ACK0

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,1) )

    Wait for call 1 from

    above

    sndpkt = make_pkt(1, data, checksum)udt_send(sndpkt)start_timer

    rdt_send(data)

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)

    rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) ||isACK(rcvpkt,0) )

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1)

    stop_timerstop_timer

    udt_send(sndpkt)start_timer

    timeout

    udt_send(sndpkt)start_timer

    timeout

    rdt_rcv(rcvpkt)

    Wait for call 0from

    above

    Wait for

    ACK1

    Λrdt_rcv(rcvpkt)

    ΛΛ

    Λ

  • Transport Layer 3-77

    lähettäjä vastaanottaja

    rcv pkt1

    rcv pkt0

    send ack0

    send ack1

    send ack0

    rcv ack0

    send pkt0

    send pkt1

    rcv ack1

    send pkt0rcv pkt0

    pkt0

    pkt0

    pkt1

    ack1

    ack0

    ack0

    (a) ei hävikkiä

    lähettäjä vastaanottaja

    rcv pkt1

    rcv pkt0

    send ack0

    send ack1

    send ack0

    rcv ack0

    send pkt0

    send pkt1

    rcv ack1

    send pkt0rcv pkt0

    pkt0

    pkt0

    ack1

    ack0

    ack0

    (b) paketti häviää

    pkt1X

    hävikki

    pkt1

    ajastin laukeaat

    resend pkt1

    rdt3.0 toiminnassa

  • Transport Layer 3-78

    rdt3.0 toiminnassa

    rcv pkt1send ack1

    (detect duplicate)

    pkt1

    lähettäjä vastaanottaja

    rcv pkt1

    rcv pkt0

    send ack0

    send ack1

    send ack0

    rcv ack0

    send pkt0

    send pkt1

    rcv ack1

    send pkt0rcv pkt0

    pkt0

    pkt0

    ack1

    ack0

    ack0

    (c) ACK hävikki

    ack1X

    loss

    pkt1ajastin

    laukeaatresend pkt1

    rcv pkt1send ack1

    (detect duplicate)

    pkt1

    lähettäjä vastaanottaja

    rcv pkt1

    send ack0rcv ack0

    send pkt1

    send pkt0rcv pkt0

    pkt0

    ack0

    (d) ennenaikainen aikakatkaisu / viivästetty ACK

    pkt1

    ajastin laukeaat

    resend pkt1

    ack1

    send ack1

    send pkt0rcv ack1

    pkt0

    ack1

    ack0

    send pkt0rcv ack1 pkt0

    rcv pkt0send ack0ack0rcv pkt0send ack0(detect duplicate)

  • Transport Layer 3-79

    rdt3.0:n suorituskyky❖ rdt3.0 on virheetön, mutta suorituskyky haisee❖ esim..: 1 Gbps yhteys, 15 ms viive, 8000 bitin paketti:

    ▪ U lähettäjä: käyttöaste – murto-osan ajasta lähettäjä kiireinen lähettämään

    ▪ Jos RTT=30 msek, 1KB pkt joka 30 msek: 33kB/sec läpimeno yli 1 Gbps yhteys

    ❖ verkkoprotokolla rajoittaa fyysisten resurssien käyttöä!

    Dtrans =LR

    8000 bits109 bits/sec= = 8 mikrosekunttia

  • Transport Layer 3-80

    rdt3.0: stop-and-wait operation

    first packet bit transmitted, t = 0

    sender receiver

    RTT

    last packet bit transmitted, t = L / R

    first packet bit arriveslast packet bit arrives, send ACK

    ACK arrives, send next packet, t = RTT + L / R

  • Transport Layer 3-81

    rdt3.0: pysähdy-ja-odota toimenpide

    ensimmäisen paketin bitti lähetetää

    lähettäjär vastaanottaja

    RTT

    viimeisen paketin bitti läh., t = L / R

    viim. pktn bitti saapuu, lähetetää ACK

    ACK saapuu, lähetetään seurava pkt, t = RTT + L /

    R

    ensimmäisen paketin bitti saapuu

  • Transport Layer 3-82

    Pipelined protocols

    pipelining: sender allows multiple, “in-flight”, yet-to-be-acknowledged pkts▪ range of sequence numbers must be increased▪ buffering at sender and/or receiver

    ❖ two generic forms of pipelined protocols: go-Back-N, selective repeat

  • Transport Layer 3-83

    Kanavoituprotokollakanavointi: lähettäjä sallii useaman “matkalla”,

    mutta-ei-vielä-kuitattu paketin▪ järj. numeroiden joukkoa täytyy kasvattaa▪ puskurointi lähettäjällä ja/tai vastaanottajalla

    ❖ kaksi geneeristä kanavointiprotokollan muotoa: mene-ja-tule-takaisin (go-Back-N), valikoiva toisto

  • Transport Layer 3-84

    Pipelining: increased utilization

    first packet bit transmitted, t = 0sender receiver

    RTT

    last bit transmitted, t = L / R

    first packet bit arriveslast packet bit arrives, send ACK

    ACK arrives, send next packet, t = RTT + L / R

    last bit of 2nd packet arrives, send ACKlast bit of 3rd packet arrives, send ACK

    3-packet pipelining increasesutilization by a factor of 3!

  • Transport Layer 3-85

    Kanavointi: hyötykäytön kasvatus

    ensimmääisen paketin bittilähetetään, t = 0lähettäjä vastaanotaja

    RTT

    viim. bitti lähetetty, t = L / R

    ensim. pktn bitti saapuuviim. pktn bitti saapuu, läh. ACK

    ACK saapuu, läh. seuraava pkt, t = RTT + L /

    R

    toisen pktn viim. bitti saapuu, läh. ACKkolmannen pktn viim. bitti saapuu, läh. ACK

    3-paketin kanavointi lisää hyötykäyttöä

    kolminkertaisesti!

  • Transport Layer 3-86

    Pipelined protocols: overviewGo-back-N:❖ sender can have up to N

    unacked packets in pipeline

    ❖ receiver only sends cumulative ack▪ doesn’t ack packet if

    there’s a gap❖ sender has timer for

    oldest unacked packet▪ when timer expires,

    retransmit all unacked packets

    Selective Repeat:❖ sender can have up to N

    unack’ed packets in pipeline

    ❖ rcvr sends individual ackfor each packet

    ❖ sender maintains timer for each unacked packet▪ when timer expires,

    retransmit only that unacked packet

  • Transport Layer 3-87

    Kanavoidut protokollat: yleiskatsaus

    Go-back-N:❖ lähettäjällä voi olla N

    kuitattujen pakettien putki

    ❖ vastaanotin lähettää vain kumulatiivisen ack:n▪ ei ole ack jos on aukko

    ❖ lähettäjällä on ajastin vanhimpaan kuitattuun pakettiin▪ kun aika on kulunut,

    lähetetään uudestaan kaikki kuittaamattomat paketit

    Valikoiva uudelleenlähetys:❖lähettäjällä voi olla N kuitattujen pakettien putki

    ❖ rcvr lähettää yksittäisen ack: jokaisesta paketista

    ❖ lähettäjä ylläpitää ajastinta jokaiseen kuittaamattomaan pakettiin▪ kun ajastin on kulunut,

    uudelleenlähetetään vain kuittaamaton paketti

  • Transport Layer 3-88

    Go-Back-N: sender❖ k-bit seq # in pkt header❖ “window” of up to N, consecutive unack’ed pkts allowed

    ❖ ACK(n): ACKs all pkts up to, including seq # n - “cumulative ACK”▪ may receive duplicate ACKs (see receiver)

    ❖ timer for oldest in-flight pkt❖ timeout(n): retransmit packet n and all higher seq # pkts in

    window

  • Transport Layer 3-89

    Go-Back-N: lähettäjä❖ k-bit seq # paketin ylätunniste❖ “ikkuna” jopa N, peräkkäistä kuittaamatonta pakettia sallittu

    ❖ ACK(n): ACKs kaikki paketit, mukaanlukien seq # n -“kumulatiivinen ACK”▪ voi saada duplikaatti-ACKs (kts vastaanotin)

    ❖ ajastin vanhimmalle menossa olevalle paketille❖ timeout(n): uudelleenlähettää paketin n ja kaikki korkeammat

    seq # paketit ikkunasta

  • Transport Layer 3-90

    GBN: sender extended FSM

    Wait start_timerudt_send(sndpkt[base])udt_send(sndpkt[base+1])…udt_send(sndpkt[nextseqnum-1])

    timeout

    rdt_send(data)

    if (nextseqnum < base+N) {sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)udt_send(sndpkt[nextseqnum])if (base == nextseqnum)

    start_timernextseqnum++}

    elserefuse_data(data)

    base = getacknum(rcvpkt)+1If (base == nextseqnum)

    stop_timerelse

    start_timer

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    base=1nextseqnum=1

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    Λ

  • Transport Layer 3-91

    GBN: lähettäjä laajennettu FSM

    Wait start_timerudt_send(sndpkt[base])udt_send(sndpkt[base+1])…udt_send(sndpkt[nextseqnum-1])

    timeout

    rdt_send(data)

    if (nextseqnum < base+N) {sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)udt_send(sndpkt[nextseqnum])if (base == nextseqnum)

    start_timernextseqnum++}

    elserefuse_data(data)

    base = getacknum(rcvpkt)+1If (base == nextseqnum)

    stop_timerelse

    start_timer

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    base=1nextseqnum=1

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    Λ

  • Transport Layer 3-92

    ACK-only: always send ACK for correctly-received pkt with highest in-order seq #▪ may generate duplicate ACKs▪ need only remember expectedseqnum

    ❖ out-of-order pkt: ▪ discard (don’t buffer): no receiver buffering!▪ re-ACK pkt with highest in-order seq #

    Wait

    udt_send(sndpkt)default

    rdt_rcv(rcvpkt)&& notcurrupt(rcvpkt)&& hasseqnum(rcvpkt,expectedseqnum)

    extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum++

    expectedseqnum=1sndpkt =

    make_pkt(expectedseqnum,ACK,chksum)

    Λ

    GBN: receiver extended FSM

  • Transport Layer 3-93

    ACK-vain: aina lähettää ACK oikein vastaanotettu paketti suurimmassa seq # järjestyksessä▪ voi tuottaa päällekkäisiä ACKseja▪ täytyy vain muistaa expectedseqnum

    ❖ viallinen paketti: ▪ hylkäys (ei puskurointia): ei vastaanottajan puskurointia!▪ uudelleen-ACK paketti suurimmassa seq # järjestyksessä

    Wait

    udt_send(sndpkt)default

    rdt_rcv(rcvpkt)&& notcurrupt(rcvpkt)&& hasseqnum(rcvpkt,expectedseqnum)

    extract(rcvpkt,data)deliver_data(data)sndpkt = make_pkt(expectedseqnum,ACK,chksum)udt_send(sndpkt)expectedseqnum++

    expectedseqnum=1sndpkt =

    make_pkt(expectedseqnum,ACK,chksum)

    Λ

    GBN: vastaanottajan laajennettu FSM

  • Transport Layer 3-94

    GBN in action

    send pkt0send pkt1send pkt2send pkt3

    (wait)

    sender receiver

    receive pkt0, send ack0receive pkt1, send ack1

    receive pkt3, discard, (re)send ack1rcv ack0, send pkt4

    rcv ack1, send pkt5

    pkt 2 timeoutsend pkt2send pkt3send pkt4send pkt5

    Xloss

    receive pkt4, discard, (re)send ack1

    receive pkt5, discard, (re)send ack1

    rcv pkt2, deliver, send ack2rcv pkt3, deliver, send ack3rcv pkt4, deliver, send ack4rcv pkt5, deliver, send ack5

    ignore duplicate ACK

    0 1 2 3 4 5 6 7 8

    sender window (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

  • Transport Layer 3-95

    GBN toiminnassa

    lähettää pkt0lähettää pkt1lähettää pkt2lähettää pkt3

    (wait)

    lähettäjä vastaanottaja

    vastaanottaa pkt0, lähettää ack0vastaanottaa pkt1, lähettää ack1

    receive pkt3, hylkää, uudelleen lähettää ack1

    vast.ottaa ack0, lähettää pkt4

    rcv ack1, send pkt5

    pkt 2 timeoutlähettää pkt2lähettää pkt3lähettää pkt4lähettää pkt5

    Xloss

    receive pkt4, discard, (re)send ack1

    receive pkt5, discard, (re)send ack1vast.o pkt2, toimittaa,

    lähettää ack2rcv pkt3, deliver, send ack3rcv pkt4, deliver, send ack4rcv pkt5, deliver, send ack5

    ignore duplicate ACK

    0 1 2 3 4 5 6 7 8

    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

  • Transport Layer 3-96

    Selective repeat❖ receiver individually acknowledges all correctly

    received pkts▪ buffers pkts, as needed, for eventual in-order delivery

    to upper layer❖ sender only resends pkts for which ACK not

    received▪ sender timer for each unACKed pkt

    ❖ sender window▪ N consecutive seq #’s▪ limits seq #s of sent, unACKed pkts

  • Transport Layer 3-97

    Valikoiva uudelleenlähetys❖ vastaanotin erikseen kuittaa kaikki oikein

    vastaanotetut paketit▪ puskuroidaan paketteja tarpeen mukaan, lopulta

    järjestykseen ylemmälle kerrokselle❖ lähettäjä uudelleenlähettää vain paketit, joiden

    ACK ei vastaanoteta▪ lähettäjän ajastin jokaiselle kuittaamattomalle paketille

    ❖ lähettäjän ikkuna▪ N peräkkäinen seq #’s▪ rajoitukset seq #s lähettämisessä, unACKed pkts

  • Transport Layer 3-98

    Selective repeat: sender, receiver windows

  • Transport Layer 3-99

    Valikoiva uudelleenlähetys: lähettäjä, vastaanottaja ikkuna

  • Transport Layer 3-100

    Selective repeat

    data from above:❖ if next available seq # in

    window, send pkttimeout(n):❖ resend pkt n, restart timerACK(n) in [sendbase,sendbase+N]:❖ mark pkt n as received❖ if n smallest unACKed

    pkt, advance window base to next unACKed seq #

    senderpkt n in [rcvbase, rcvbase+N-1]❖ send ACK(n)❖ out-of-order: buffer❖ in-order: deliver (also

    deliver buffered, in-order pkts), advance window to next not-yet-received pkt

    pkt n in [rcvbase-N,rcvbase-1]❖ ACK(n)otherwise:❖ ignore

    receiver

  • Transport Layer 3-101

    Valikoiva uudelleenlähetys

    data ylhäältä:❖ jos seuraava saatavissa

    oleva seq #ikkunassa, lähetä paketti

    timeout(n):❖ uudelleen lähetä paketti,

    ajastin alkaa alustaACK(n) in [sendbase,sendbase+N]:❖ merkitse paketti

    vast.otetuksi❖ jos pienin unACKed

    paketti, etukäteen ikkunaan seuraava unACKed seq #

    lähettäjäpkt n in [rcvbase, rcvbase+N-1]❖ lähetä ACK(n)❖ viallinen: puskuroi❖ toimiva: toimita (myös

    toimita puskuroidut, toimivat paketit), etene ikkuna seuraavaan ei vielä toimitettuun pakettiin

    pkt n in [rcvbase-N,rcvbase-1]❖ ACK(n)otherwise:❖ ignooraa

    vastaanottaja

  • Transport Layer 3-102

    Selective repeat in action

    send pkt0send pkt1send pkt2send pkt3

    (wait)

    sender receiver

    receive pkt0, send ack0receive pkt1, send ack1

    receive pkt3, buffer, send ack3rcv ack0, send pkt4

    rcv ack1, send pkt5

    pkt 2 timeoutsend pkt2

    Xloss

    receive pkt4, buffer, send ack4

    receive pkt5, buffer, send ack5

    rcv pkt2; deliver pkt2,pkt3, pkt4, pkt5; send ack2

    record ack3 arrived

    0 1 2 3 4 5 6 7 8

    sender window (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

    record ack4 arrivedrecord ack5 arrived

    Q: what happens when ack2 arrives?

  • Transport Layer 3-103

    Valikoiva uudelleenlähetys toiminnassa

    lähetä pkt0lähetä pkt1lähetä pkt2lähetä pkt3

    (odota)

    lähettäjä vastaanottaja

    vast.ota pkt0, läh ack0vast.ota pkt1, läh ack1

    vast.ota pkt3, puskuroi, lähetä ack3rcv ack0, läh pkt4

    rcv ack1, läh pkt5

    pkt 2 timeoutsend pkt2

    Xloss

    receive pkt4, buffer, send ack4

    receive pkt5, buffer, send ack5

    rcv pkt2; deliver pkt2,pkt3, pkt4, pkt5; send ack2

    rekisteröi ack3 saapuneeksi

    0 1 2 3 4 5 6 7 8

    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

    record ack4 arrivedrecord ack5 arrived

    Q: Mitä tapahtuu kun ack2 saapuu?

  • Transport Layer 3-104

    Selective repeat:dilemmaexample: ❖ seq #’s: 0, 1, 2, 3❖ window size=3

    receiver window(after receipt)

    sender window(after receipt)

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    pkt0pkt1pkt2

    0 1 2 3 0 1 2 pkt0

    timeoutretransmit pkt0

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2XXX

    will accept packetwith seq number 0(b) oops!

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    pkt0pkt1pkt2

    0 1 2 3 0 1 2pkt0

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    Xwill accept packetwith seq number 0

    0 1 2 3 0 1 2 pkt3

    (a) no problem

    receiver can’t see sender side.receiver behavior identical in both cases!

    something’s (very) wrong!

    ❖ receiver sees no difference in two scenarios!

    ❖ duplicate data accepted as new in (b)

    Q: what relationship between seq # size and window size to avoid problem in (b)?

  • Transport Layer 3-105

    Valikoiva uudelleenlähetys:ongelmaeseimerkki: ❖ järjestysnrot: 0, 1, 2, 3❖ ikkunan koko=3

    vastaanottoikkuna(kuitin jälkeen)

    lähetysikkuna(kuitin jälkeen)

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    pkt0pkt1pkt2

    0 1 2 3 0 1 2 pkt0

    aikakatkaisu-uudelleenlähetys pkt0

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2XXX

    hyväksyy paketin järj. numerolla 0(b) Ups!

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    pkt0pkt1pkt2

    0 1 2 3 0 1 2pkt0

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    Xhyväksyy paketin järj.numerolla 0

    0 1 2 3 0 1 2 pkt3

    (a) ei ongelmiavastaanottaja ei näe lähettäjän puolta.

    vastaanottajan käytös identtistä molemmissa tapauksissa.jotain pahasti pielessä!

    ❖ vastaanottaja ei näe eroa 2 skenaarion välillä!

    ❖ duplikoitunut data hyväksytään uutena b:ssä

    Q: mikä on suhde järjestysnumeron ja ikkunan koolla välttääkseen ongelmaa b:ssä?

  • Transport Layer 3-106

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP▪ segment structure▪ reliable data transfer▪ flow control▪ connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-107

    TCP: Overview RFCs: 793,1122,1323, 2018, 2581

    ❖ full duplex data:▪ bi-directional data flow

    in same connection▪ MSS: maximum

    segment size❖ connection-oriented:▪ handshaking (exchange

    of control msgs) inits sender, receiver state before data exchange

    ❖ flow controlled:▪ sender will not

    overwhelm receiver

    ❖ point-to-point:▪ one sender, one receiver

    ❖ reliable, in-order byte steam:▪ no “message boundaries”

    ❖ pipelined:▪ TCP congestion and flow

    control set window size

  • Transport Layer 3-108

    TCP: Yleiskatsaus RFC:t 793,1122,1323, 2018, 2581

    ❖ täysin dupleksinen data:❖kaksisuuntainen

    tiedonvirtaus samassa yhteydessä▪ MSS: maksimaalinen

    segmentin koko❖ yhteys-orientoitunut:

    ▪ tervehtiminen (kontrolliviestien vaihto) määrittää lähettäjän ja vastaanottajan tilan ennen tiedonvaihtoa

    ❖ virta hallittuna:▪ lähettäjä ei pysty

    valtaamaan vastaanottajaa täysin

    ❖ pisteestä pisteeseen:▪ yksi lähettäjä, yksi

    vastaanottajaa❖ luotettava, käytössä

    pysyvä “datavirta”:▪ ei ”viestirajoja”

    ❖ putkitettu:▪ TCP:n ruuhkan ja virran

    hallinta asettaa ikkunalle koon

  • Transport Layer 3-109

    TCP segment structure

    source port # dest port #

    32 bits

    applicationdata

    (variable length)

    sequence numberacknowledgement number

    receive window

    Urg data pointerchecksumFSRPAUheadlen

    notused

    options (variable length)

    URG: urgent data (generally not used)

    ACK: ACK #valid

    PSH: push data now(generally not used)

    RST, SYN, FIN:connection estab(setup, teardown

    commands)

    # bytes rcvr willingto accept

    countingby bytes of data(not segments!)

    Internetchecksum

    (as in UDP)

  • Kuljetuskerros 3-110

    TCP segmentin rakenne

    lähtöportin nro saapumisportin nro

    32 bits

    sovelluksen data

    (vaihteleva pituus)

    järjestysnumerotunnistautumisnumero

    vast.ottoikkunaKiireellisen

    datan osoitinchecksumFSRPAUots.pit.

    ei käyt.

    vaihtoehdot(vaihteleva pituus)

    URG: kiireinen data (yleensä ei käytetä)

    ACK: ACK numero ok

    PSH: työnnä dataa nyt

    (ei käytetä usein)RST, SYN, FIN:

    yhteyden perustus

    (asennus, purkukäskyt)

    määrä tavuja, jonka vastaanottaja on valmis hyväksymään

    laskettu tavuina dataa (ei segmentteinä)

    Internetintarkistussu

    mma (UDP-

    muodossa)

  • Transport Layer 3-111

    TCP seq. numbers, ACKssequence numbers:▪ byte stream “number” of

    first byte in segment’s data

    acknowledgements:▪ seq # of next byte

    expected from other side▪ cumulative ACK

    Q: how receiver handles out-of-order segments▪A: TCP spec doesn’t say,

    - up to implementor source port # dest port #sequence number

    acknowledgement number

    checksum

    rwndurg pointer

    incoming segment to sender

    A

    sent ACKed

    sent, not-yet ACKed(“in-flight”)

    usablebut not yet sent

    not usable

    window sizeN

    sender sequence number space

    source port # dest port #

    sequence numberacknowledgement number

    checksum

    rwndurg pointer

    outgoing segment from sender

  • Kuljetuskerros 3-112

    TCP järjestysnumerot, ACK:tjärjestysnumerot:▪ datavirran ensimmäisen

    tavun “numero” segmentin datassa

    Tunnistautumiset:▪ edellisen tavun järj.nro

    odotetaan toiselta puolelta▪ kumulatiivinen ACK

    K: kuinka vastaanottaja käsittelee toiminnassa olemattomia segmenttejä?▪ V: TCP:n tiedot ei kerro, -

    vastuu tulkitsijallalähtöportti # v.o.portti #

    järjestys numerotunnistautumisnumero

    t.summa

    v.o.ikiireellis-o.

    saapuva segmentti

    A

    lähetetty kuitattu

    lähetetty, ei vielä kuitattu(‘matkalla’)

    käytettävissä, ei vielälähetetty

    ei käytettävissä

    ikkunan kokoN

    lähettäjän järjestysnumerotila

    lähtöportti # v.o.portti #

    järjestysnumerotunnistautumisnumero

    t.summa

    v.o.ikiireellis-o.

    lähtevä segmentti

  • Transport Layer 3-113

    TCP seq. numbers, ACKs

    Usertypes

    ‘C’

    host ACKsreceipt

    of echoed‘C’

    host ACKsreceipt of‘C’, echoesback ‘C’

    simple telnet scenario

    Host BHost A

    Seq=42, ACK=79, data = ‘C’

    Seq=79, ACK=43, data = ‘C’

    Seq=43, ACK=80

  • Kuljetuskerros 3-114

    TCP järjestysnumerot, ACK:t

    Käyttäjä kirjoittaa

    ‘C’

    isäntä kuittaa

    kirjauksen

    toistetusta ‘C’:stä.

    isäntä kuittaa kirjauksen ‘C’:stä, toistaa takaisin ‘C’

    yksinkertainen telnet skenaario

    Isäntä B

    Isäntä A

    järj=42, ACK=79, data = ‘C’

    järj=79, ACK=43, data = ‘C’

    järj=43, ACK=80

  • Transport Layer 3-115

    TCP round trip time, timeoutQ: how to set TCP

    timeout value?❖ longer than RTT▪ but RTT varies

    ❖ too short: premature timeout, unnecessary retransmissions

    ❖ too long: slow reaction to segment loss

    Q: how to estimate RTT?❖ SampleRTT: measured

    time from segment transmission until ACK receipt▪ ignore retransmissions

    ❖ SampleRTT will vary, want estimated RTT “smoother”▪ average several recent

    measurements, not just current SampleRTT

  • Transport Layer 3-116

    TCP edestakaisen matkan aika(RTT), aikakatkaisuK: kuinka asetetaan

    TCP:n aikakatkaisuarvo ?

    ❖ pidempi kuin RTT▪ mutta RTT vaihtelee

    ❖ liian lyhyt:ennenaikainen aikakatkaisu, tarpeettomia uudelleenlähetyksiä

    ❖ liian pitkä: hitaat reaktiot segmenttihävikkiin

    K: kuinka arvioida RTT:tä?

    ❖ MitattuRTT: mittaa ajan segmentin siirrosta ACK kuittaukseen▪ ei huomioi

    uudelleenlähetyksiä❖ MitattuRTT vaihtelee,

    halutaan arvioitu RTT “pehmeämmäksi”▪ keskiarvo useista

    viimeaikaisista mittauksista, ei hetkellistä MitattuaRTT:tä

  • Transport Layer 3-117

    EstimatedRTT = (1- α)*EstimatedRTT + α*SampleRTT

    ❖ exponential weighted moving average❖ influence of past sample decreases exponentially fast❖ typical value: α = 0.125

    TCP round trip time, timeoutRT

    T (m

    illise

    cond

    s)

    RTT: gaia.cs.umass.edu to fantasia.eurecom.fr

    sampleRTTEstimatedRTT

    time (seconds)

  • Kuljetuskerros 3-118

    ArvioituRTT = (1- α)*ArvioituRTT + α*MitattuRTT

    ❖ eksponentiaalinen painotettu liikkuva keskiarvo❖ vanhan mittauksen vaikutus vähenee eksponentiaalisesti❖ tyypillinen arvo α = 0.125

    TCP edestakaisenmatkan aika(RTT), aikakatkaisu

    RTT

    (mill

    iseku

    ntia

    )

    RTT: gaia.cs.umass.edu:sta osoitteeseenfantasia.eurecom.fr

    MitattuRTTArvioituRTT

    aika (sekuntia)

  • Transport Layer 3-119

    ❖ timeout interval: EstimatedRTT plus “safety margin”▪ large variation in EstimatedRTT -> larger safety margin

    ❖ estimate SampleRTT deviation from EstimatedRTT: DevRTT = (1-β)*DevRTT +

    β*|SampleRTT-EstimatedRTT|

    TCP round trip time, timeout

    (typically, β = 0.25)

    TimeoutInterval = EstimatedRTT + 4*DevRTT

    estimated RTT “safety margin”

  • Kuljetuskerros 3-120

    ❖ aikakatkaisun väli: ArvioituRTT + “turvaväli”▪ suuri vaihtelu ArvioituRTT:ssä -> suurempi turvaväli

    ❖ arvioi MitattuRTT:n vaihtelu ArvioituRTT:stä: MuuttuvaRTT = (1-β)*MuuttuvaRTT +

    β*|MittausRTT-ArvioituRTT|

    TCP edestakaisen matkan aika (RTT), aikakatkaisu

    (tyypillisesti, β = 0.25)

    aikakatkaisun väli = ArvioituRTT + 4*Muuttuva RTT

    estimated RTT “safety margin”

  • Transport Layer 3-121

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP▪ segment structure▪ reliable data transfer▪ flow control▪ connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-122

    TCP reliable data transfer❖ TCP creates rdt service

    on top of IP’s unreliable service▪ pipelined segments▪ cumulative acks▪ single retransmission

    timer❖ retransmissions

    triggered by:▪ timeout events▪ duplicate acks

    let’s initially consider simplified TCP sender:▪ ignore duplicate acks▪ ignore flow control,

    congestion control

  • Transport Layer 3-123

    TCP luotettava datan siirto❖ TCP luo rdt palvelun

    IP:n epäluotettavan palvelun päälle

    ▪ kanavoidut segmentit▪ kumulatiiviset kuittaukset▪ yksittäinen

    uudelleenlähetys ajastin❖ uudellenlähetyksen

    laukaisevat:▪ aika loppu tapahtumat▪ duplikaattikuittaukset

    aluksi hulehditaan yksinkertaistusta TCP lähettäjästä▪ ei huomio

    duplikaattikuittauksia▪ ei huomio ruuhka, eikä

    flow tarkkailua

  • Transport Layer 3-124

    TCP sender events:data rcvd from app:❖ create segment with

    seq #❖ seq # is byte-stream

    number of first data byte in segment

    ❖ start timer if not already running ▪ think of timer as for

    oldest unacked segment▪ expiration interval: TimeOutInterval

    timeout:❖ retransmit segment

    that caused timeout❖ restart timerack rcvd:❖ if ack acknowledges

    previously unacked segments▪ update what is known

    to be ACKed▪ start timer if there are

    still unacked segments

  • Transport Layer 3-125

    TCP lähettäjän tapahtumat:data vastaanotetaan

    sovellukselta:❖ tee segmentti seq #

    kanssa❖ seq # on bitti virran

    ensimmäisen bitin numero

    ❖ aloita ajastus jos ei vielä aloitettu▪ ajattele ajastin

    vanhimman kuittaamattoman segmentin mukaan▪ expiration interval: TimeOutInterval

    aika loppu:❖ lähetä segmentti joka

    aiheutti ajan loppumisen uudelleen

    ❖ aloita ajastus alustakuittaus vastaanotettu:❖ jos kuittaus kuittaa

    aiemmin ei kuitatun segmentin▪ päivitä ne mitkä

    tiedetään että tullaan kuittaamaan▪ aloita ajastin jos jäljellä

    on kuittaamattomia segmenttejä

  • Transport Layer 3-126

    TCP sender (simplified)

    waitfor

    event

    NextSeqNum = InitialSeqNumSendBase = InitialSeqNum

    Λ

    create segment, seq. #: NextSeqNumpass segment to IP (i.e., “send”)NextSeqNum = NextSeqNum + length(data) if (timer currently not running)

    start timer

    data received from application above

    retransmit not-yet-acked segment with smallest seq. #

    start timer

    timeout

    if (y > SendBase) { SendBase = y /* SendBase–1: last cumulatively ACKed byte */if (there are currently not-yet-acked segments)

    start timerelse stop timer

    }

    ACK received, with ACK field value y

  • Transport Layer 3-127

    TCP lähettäjä (yksinkertaistettu)

    odota tapahtumaa

    NextSeqNum = InitialSeqNumSendBase = InitialSeqNum

    Λ

    luo segmentti, seq. #: NextSeqNumsiirrä segmentti IP:lle (i.e., “lähetä”)NextSeqNum = NextSeqNum + length(data) jos (ajastin ei käynnissä)

    käynnistä ajastin

    data vastaanotettu sovellukselta yläpuolelta

    uudelleen lähetys ei vielä kuitattu segmenttiin jolla pienin seq. #käynnistä ajastin

    aika loppu

    if (y > SendBase) { SendBase = y /* SendBase–1: last cumulatively ACKed byte */jos (ei ole vielä ei kuitattuja segmenttejä jäljellä

    )käynnistä ajastin

    muuten pysäytä ajastin}

    ACK vastaanotettu, with ACK field value y

  • Transport Layer 3-128

    TCP: retransmission scenarios

    lost ACK scenario

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    Seq=92, 8 bytes of data

    Xtimeo ut

    ACK=100

    premature timeout

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    Seq=92, 8bytes of data

    timeo ut

    ACK=120

    Seq=100, 20 bytes of data

    ACK=120

    SendBase=100

    SendBase=120

    SendBase=120

    SendBase=92

  • Transport Layer 3-129

    TCP: uudelleenlähetys skenaariot

    hävinnyt ACK skenaario

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    Seq=92, 8 bytes of data

    Xtimeo ut

    ACK=100

    ennenaikainen aika loppu

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    Seq=92, 8bytes of data

    timeo ut

    ACK=120

    Seq=100, 20 bytes of data

    ACK=120

    SendBase=100

    SendBase=120

    SendBase=120

    SendBase=92

  • Transport Layer 3-130

    TCP: retransmission scenarios

    X

    cumulative ACK

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    Seq=120, 15 bytes of data

    timeo ut

    Seq=100, 20 bytes of data

    ACK=120

  • Transport Layer 3-131

    TCP: uudelleenlähetys skenaariot

    X

    kumulatiivinen ACK

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    Seq=120, 15 bytes of data

    timeo ut

    Seq=100, 20 bytes of data

    ACK=120

  • Transport Layer 3-132

    TCP ACK generation[RFC 1122, RFC 2581]

    event at receiver

    arrival of in-order segment withexpected seq #. All data up toexpected seq # already ACKed

    arrival of in-order segment withexpected seq #. One other segment has ACK pending

    arrival of out-of-order segmenthigher-than-expect seq. # .Gap detected

    arrival of segment that partially or completely fills gap

    TCP receiver action

    delayed ACK. Wait up to 500msfor 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

    immediate send ACK, provided thatsegment starts at lower end of gap

  • Transport Layer 3-133

    TCP ACK generointi [RFC 1122, RFC 2581]

    tapahtuma vastaanottajalla

    in-order segmentin saapuminen odotetulla seq #. kaikki data odotetulla seq # jo kuitattuin-order segmentin saapuminen odotetulla seq #. yhdellä toisella segmentillä on kuittaus odottamassaout-of-order segmentin saapuminen liian korkealla seq. # .aukko havaittu

    segmentin saapuminen joka kokonaan tai osittain täyttää aukon

    TCP vastaanottajan toiminta

    viivästynyt ACK. Odota 500msseuraavaa segmenttiä. Jos ei seuraavaa segmenttiä. lähetä ACK

    lähetä heti yksittäinen kumulatiivinenACK, ACKing molemmat in-order segmentit

    lähetä heti duplikaatti ACK,viitaten seq. # seuraavan odotetun bitin

    lähetä heti ACK, tarjota että segmentti alkaa matalammalta aukon lopusta

  • Transport Layer 3-134

    TCP fast retransmit❖ time-out period often

    relatively long:▪ long delay before

    resending lost packet❖ detect lost segments

    via duplicate ACKs.▪ sender often sends

    many segments back-to-back▪ if segment is lost, there

    will likely be many duplicate ACKs.

    if sender receives 3 ACKs for same data(“triple duplicate ACKs”),resend unacked segment with smallest seq #▪ likely that unacked

    segment lost, so don’t wait for timeout

    TCP fast retransmit

    (“triple duplicate ACKs”),

  • Transport Layer 3-135

    TCP nopea uudelleenlähetys❖ aika loppu periodi

    suhteellisen pitkä :▪ pitkä viive ennenkuin

    hävinnyt paketti uudellen lähetetään

    ❖ havaita hävinneet segmentit duplikaatti ACK:n avulla

    ❖ lähettäjä lähettää monia paketteja back-to-back▪ Jos paketti katoaa, luultavasti saadaan monia duplikaatti ACK:ta

    jos lähettäjä saa kolme kuittausta(“kolme duplikaatti ACKs”), uudelleen lähetä ei kuitatut segmentit pienimmästä seq #▪ todennäköistä että ei

    kuitattu segmentti hävinnyt, ei tarvitse odottaa ajan loppumista

    TCP nopea uudelleenlähetys

    ,

  • Transport Layer 3-136

    X

    fast retransmit after sender receipt of triple duplicate ACK

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    timeo ut

    ACK=100

    ACK=100ACK=100

    TCP fast retransmit

    Seq=100, 20 bytes of data

    Seq=100, 20 bytes of data

  • Transport Layer 3-137

    X

    nopea uudelleenlähetys kun vastaanottaja on saanu

    kolme duplikaatti

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    timeo ut

    ACK=100

    ACK=100ACK=100

    TCP nopea uudelleenlähetys

    Seq=100, 20 bytes of data

    Seq=100, 20 bytes of data

  • Transport Layer 3-138

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP▪ segment structure▪ reliable data transfer▪ flow control▪ connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-139

    TCP flow controlapplicati

    onprocess

    TCP socketreceiver buffers

    TCPcode

    IPcode

    applicationOS

    receiver protocol stack

    application may remove data from

    TCP socket buffers ….

    … slower than TCP receiver is delivering(sender is sending)

    from sender

    receiver controls sender, so sender won’t overflow receiver’s buffer by transmitting too much, too fast

    flow control

  • Transport Layer 3-140

    TCP liikenteen hallintaapplicati

    onprocess

    TCP socketreceiver buffers

    TCPcode

    IPcode

    sovellusOS

    vastaanottajan protokolla pino

    sovellus voi siirtää dataa pois TCP sokettien puskureista ….

    …hitaampi kuin TCP vastaanottaja

    toimittaa (lähettäjä lähettää)

    from sender

    vastaanottaja kontrolloi lähettäjää, jotta lähettäjä ei ylikuormita vastaanottajan puskuria lähettämällä liian paljon, liian nopeasti

    liikenteen hallinta

  • Transport Layer 3-141

    TCP flow control

    buffered data

    free buffer spacerwnd

    RcvBuffer

    TCP segment payloads

    to application process❖ receiver “advertises” free

    buffer space by including rwnd value in TCP header of receiver-to-sender segments▪ RcvBuffer size set via

    socket options (typical default is 4096 bytes)

    ▪ many operating systems autoadjust RcvBuffer

    ❖ sender limits amount of unacked (“in-flight”) data to receiver’s rwnd value

    ❖ guarantees receive buffer will not overflow

    receiver-side buffering

  • Transport Layer 3-142

    TCP liikenteen hallinta

    puskuroitu data

    ilmaista puskurointi tilaa

    rwnd

    RcvBuffer

    TCP segmentin tietosisältö

    sovellusprosessiin❖ vastaanottaja mainostaa ilmaista

    puskuri tilaa sisällyttämällä rwnd arvon vastaanottajalta lähettäjälle segmentin TCP otsikkoon

    ▪ RcvBuffer koko asetettu soketti asetusten perusteella(tyypillinen oletus 4096 bittiä

    ▪ monet operaatiot säätävät automaattisesti RcvBuffer

    ❖ lähettäjä rajoittaa ei kuitattua dataa rwnd arvolla

    ❖ lupaa, että vastaanottajan puskuri ei ylikuormitu

    vastaanottajan puoli puskurointi

  • Transport Layer 3-143

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP▪ segment structure▪ reliable data transfer▪ flow control▪ connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-144

    Connection Managementbefore exchanging data, sender/receiver “handshake”:❖ agree to establish connection (each knowing the other willing to

    establish connection)❖ agree on connection parameters

    connection state: ESTABconnection variables:

    seq # client-to-serverserver-to-client

    rcvBuffer sizeat server,client

    application

    network

    connection state: ESTABconnection Variables:

    seq # client-to-serverserver-to-client

    rcvBuffer sizeat server,client

    application

    network

    Socket clientSocket = newSocket("hostname","port number");

    Socket connectionSocket = welcomeSocket.accept();

  • Transport Layer 3-145

    Yhteyden johtoporrasennen datan vaihtamista, lähettäjä/vastaanottaja

    “kättely”:❖ hyväksyy yhteyden muodostamisen (kummatkin tietävät

    molempien halukkuuden yhteyden muodostamiseen)❖ hyväksyminen yhteyden parametreistä

    yhteyden tila: ESTAByhteyden vaihtoehdot:

    seq # client-to-serverserver-to-client

    rcvBuffer sizeat server,client

    hakemus

    verkko

    yhteyden tila: ESTAByhteyden vaihtoehdot:

    seq # client-to-serverserver-to-client

    rcvBuffer sizeat server,client

    hakemus

    verkko

    Socket clientSocket = newSocket("hostname","port number");

    Socket connectionSocket = welcomeSocket.accept();

  • Transport Layer 3-146

    Q: will 2-way handshake always work in network?

    ❖ variable delays❖ retransmitted messages (e.g.

    req_conn(x)) due to message loss

    ❖ message reordering❖ can’t “see” other side

    2-way handshake:

    Let’s talk

    OKESTAB

    ESTAB

    choose x req_conn(x)ESTAB

    ESTABacc_conn(x)

    Agreeing to establish a connection

  • Transport Layer 3-147

    K: Toimiiko 2-osainen kättely aina verkossa?

    ❖ vaihtelevat viiveet❖ uudelleenvälitetyt viestit

    (e.g. req_conn(x)) johtuen viestin menetyksestä

    ❖ viestin uudelleentilaus❖ ei voi “nähdä” toista puolta

    2-osainen kättely:

    jutellaan

    OKESTAB

    ESTAB

    valitse x req_conn(x)ESTAB

    ESTABacc_conn(x)

    Hyväksyminen yhteyden muodostamiseen

  • Transport Layer 3-148

    Agreeing to establish a connection2-way handshake failure scenarios:

    retransmitreq_conn(x)

    ESTAB

    req_conn(x)

    half open connection!(no client!)

    client terminates

    serverforgets x

    connection x completes

    retransmitreq_conn(x)

    ESTAB

    req_conn(x)

    data(x+1)

    retransmitdata(x+1)

    acceptdata(x+1)

    choose xreq_conn(x)

    ESTAB

    ESTAB

    acc_conn(x)

    client terminates

    ESTAB

    choose xreq_conn(x)

    ESTABacc_conn(x)

    data(x+1) acceptdata(x+1)

    connection x completes server

    forgets x

  • Transport Layer 3-149

    Hyväksyminen yhteyden muodostamiseen

    2-osaisen kättelyn epäonnistumis skenaariot:

    retransmitreq_conn(x)

    ESTAB

    req_conn(x)

    half open connection!(no client!)

    client terminates

    serverforgets x

    connection x completes

    retransmitreq_conn(x)

    ESTAB

    req_conn(x)

    data(x+1)

    retransmitdata(x+1)

    acceptdata(x+1)

    choose xreq_conn(x)

    ESTAB

    ESTAB

    acc_conn(x)

    client terminates

    ESTAB

    choose xreq_conn(x)

    ESTABacc_conn(x)

    data(x+1) acceptdata(x+1)

    connection x completes server

    forgets x

  • Transport Layer 3-150

    TCP 3-way handshake

    SYNbit=1, Seq=x

    choose init seq num, xsend TCP SYN msg

    ESTAB

    SYNbit=1, Seq=yACKbit=1; ACKnum=x+1

    choose init seq num, ysend TCP SYNACKmsg, acking SYN

    ACKbit=1, ACKnum=y+1

    received SYNACK(x) indicates server is live;send ACK for SYNACK;

    this segment may contain client-to-server data received ACK(y)

    indicates client is live

    SYNSENT

    ESTAB

    SYN RCVD

    client state

    LISTENserver state

    LISTEN

  • Transport Layer 3-151

    TCP 3-osainen kättely

    SYNbit=1, Seq=x

    valitse ensi seq num, x

    lähetä TCP SYN msg

    ESTAB

    SYNbit=1, Seq=yACKbit=1; ACKnum=x+1

    valitse ensi seq num, ylähetä TCP SYNACKmsg, acking SYN

    ACKbit=1, ACKnum=y+1

    vastaanotettu SYNACK(x) osoittaa serverin

    läsnäolon;lähetä ACK for SYNACK;

    tämä serveri voi ylläpitää client-to-server dataa vastaanotettu ACK(y)

    osoittaa käyttäjän läsnäolon

    SYNSENT

    ESTAB

    SYN RCVD

    nykyinen tilaLISTEN

    serverin tila

    LISTEN

  • Transport Layer 3-152

    TCP 3-way handshake: FSM

    closed

    Λ

    listen

    SYNrcvd

    SYNsent

    ESTAB

    Socket clientSocket = newSocket("hostname","port number");

    SYN(seq=x)

    Socket connectionSocket = welcomeSocket.accept();

    SYN(x)SYNACK(seq=y,ACKnum=x+1)

    create new socket for communication back to client

    SYNACK(seq=y,ACKnum=x+1)ACK(ACKnum=y+1)ACK(ACKnum=y+1)

    Λ

  • Transport Layer 3-153

    TCP 3-osainen kättely: FSM

    suljettu

    Λ

    kuuntelu

    SYNvastotett

    u

    SYNlähetetty

    ESTAB

    Socket clientSocket = newSocket("hostname","port number");

    SYN(seq=x)

    Socket connectionSocket = welcomeSocket.accept();

    SYN(x)SYNACK(seq=y,ACKnum=x+1)

    luo uuden soketin käyttäjän kommunikointiin

    SYNACK(seq=y,ACKnum=x+1)ACK(ACKnum=y+1)ACK(ACKnum=y+1)

    Λ

  • Transport Layer 3-154

    TCP: closing a connection❖ client, server each close their side of connection▪ send TCP segment with FIN bit = 1

    ❖ respond to received FIN with ACK▪ on receiving FIN, ACK can be combined with own FIN

    ❖ simultaneous FIN exchanges can be handled

  • Transport Layer 3-155

    TCP: yhteyden sulkeminen❖ käyttäjä ja serveri sulkevat omalta osaltaan

    yhteyden▪ lähetä TCP segmenttiin FIN bitillä = 1

    ❖ vastataan vastaanotettuun FIN:iin ACK:illa▪ vastaanotettaessa FIN:iä, ACK voidaan yhdistää omaan

    FIN:iin❖ samanaikaiset FIN vaihdot voidaan handlata

  • Transport Layer 3-156

    FIN_WAIT_2

    CLOSE_WAIT

    FINbit=1, seq=y

    ACKbit=1; ACKnum=y+1

    ACKbit=1; ACKnum=x+1wait for server

    close

    can stillsend data

    can no longersend data

    LAST_ACK

    CLOSED

    TIMED_WAIT

    timed wait for 2*max

    segment lifetime

    CLOSED

    TCP: closing a connection

    FIN_WAIT_1 FINbit=1, seq=xcan no longersend but canreceive data

    clientSocket.close()

    client state server state

    ESTABESTAB

  • Transport Layer 3-157

    FIN_WAIT_2

    CLOSE_WAIT

    FINbit=1, seq=y

    ACKbit=1; ACKnum=y+1

    ACKbit=1; ACKnum=x+1odottaa serverin