Computerarchitectuur en netwerken 9 Transportlaag Lennart Herlaar 7 oktober 2014
Inhoud Transport laag UDP TCP protocollen voor betrouwbaarheid Lennart Herlaar Computerarchitectuur en netwerken 9 1
Transportlaag Wat doet de transportlaag? De netwerklaag verzorgt verbindingen van host naar host (onafhankelijk van de structuur van het netwerk) Transportlaag verzorgt verbindingen van proces naar proces De verbindingen van de verschillende processen worden samen over dezelfde netwerkaansluiting gestuurd (multiplexing) Bij aankomst moeten ze uitgesorteerd worden naar het juiste proces (demultiplexing) Vergelijk de interne postdienst van bedrijf Eventueel kan de transportlaag ook betrouwbaarheid toevoegen (TCP) Dus transportlaag doet: multiplexing/demultiplexing Eventueel betrouwbaarheid toevoegen Lennart Herlaar Computerarchitectuur en netwerken 9 2
Transport laag Lennart Herlaar Computerarchitectuur en netwerken 9 3
Multiplexen/demultiplexen Lennart Herlaar Computerarchitectuur en netwerken 9 4
Ports In de transportlaag in het Internet worden Portnummers gebruikt (16 bits) Een eindpunt van een transportverbinding wordt geadresseerd met (IP-adres, portnummer) Portnummers < 1024 zijn gereserveerd Centrale autoriteit (IANA=Internet Assigned Numbers Authority/ ICANN=Internet Corporation For Assigned Names and Numbers) Hogere nummers zijn vrij te gebruiken Socket in O.S. is een manier (programmeerconstructie) om transportverbindingen te gebruiken Lennart Herlaar Computerarchitectuur en netwerken 9 5
Transport Protocols Twee soorten meest gebruikt in Internet: UDP (User Datagram protocol) voegt alleen multiplexing/demultiplexing toe UDP is verbindingsloos TCP (Transmission/Transport Control Protocol) voegt ook betrouwbaarheid toe TCP is verbindingsgericht Er zijn ook andere gedefinieerd. Lennart Herlaar Computerarchitectuur en netwerken 9 6
Transport Protocols Twee soorten meest gebruikt in Internet: UDP (User Datagram protocol) voegt alleen multiplexing/demultiplexing toe UDP is verbindingsloos TCP (Transmission/Transport Control Protocol) voegt ook betrouwbaarheid toe TCP is verbindingsgericht Er zijn ook andere gedefinieerd. Voorbeeld: DNS gebruikt meestal UDP: sneller (geen verbinding opzetten) maar kan ook TCP gebruiken HTTP, email, file transfer e.d. gebruiken TCP: Betrouwbaarheid is belangrijk Lennart Herlaar Computerarchitectuur en netwerken 9 6
UDP segment UDP segment bevat 4 velden naast de applicatiedata: port nummers van afzender en ontvanger Vraag: waarom niet IP-adressen? totale lengte van het segment een checksum om fouten te ontdekken Vraag: Hoe groot kan de data zijn? Lennart Herlaar Computerarchitectuur en netwerken 9 7
Inhoud Transport laag = UDP TCP: protocollen voor betrouwbaarheid = Lennart Herlaar Computerarchitectuur en netwerken 9 8
Multiplexing bij TCP Een TCP-connectie wordt gekarakteriseerd door: IP-adres + portnummer afzender, IP-adres + portnummer bestemming Lennart Herlaar Computerarchitectuur en netwerken 9 9
Betrouwbaarheid UDP levert dezelfde (on)betrouwbaarheid als het onderliggende netwerk Checksum kan gebruikt worden om integriteit van de data te controleren Verloren gegane segmenten worden niet gedetecteerd Volgorde is niet gegarandeerd Voorbeeld: DNS gebruikt meestal UDP Als nameserver geen antwoord krijgt, probeert hij een andere Volgorde is niet belangrijk TCP protocol (verbindingen opzetten, fouten corrigeren) kost teveel tijd Algemeen: bij request/response protocols kan UDP nuttig zijn. Ook bij multimedia (liever met een foutje doorgaan dan wachten) Lennart Herlaar Computerarchitectuur en netwerken 9 10
Betrouwbare Overdracht Er worden geen bits verkeerd doorgegeven Er raken geen stukken informatie kwijt Er wordt geen informatie gedupliceerd Alle gegevens worden in de juiste volgorde afgeleverd Als een van deze problemen optreedt, corrigeert het protocol dit Lennart Herlaar Computerarchitectuur en netwerken 9 11
Betrouwbare Overdracht Er worden geen bits verkeerd doorgegeven Er raken geen stukken informatie kwijt Er wordt geen informatie gedupliceerd Alle gegevens worden in de juiste volgorde afgeleverd Als een van deze problemen optreedt, corrigeert het protocol dit Voor de beschrijving van een protocol kan een Eindige automaat (Finite State Machine) gebruikt worden FSM geeft aan in welke toestanden de zender of ontvanger kan verkeren Wacht op een pakket Pakket ontvangen Zender en ontvanger hebben eigen FSM Lennart Herlaar Computerarchitectuur en netwerken 9 11
Voorbeeld FSM (Dit is een volkomen willekeurig voorbeeld) wacht op pakket recv(pakket) antwoord verzonden pakket ontvangen antwoord gestuurd send(antwoord) Algemeen: conditie voor overgang acties bij overgang Lennart Herlaar Computerarchitectuur en netwerken 9 12
Secretaresse Protocol Secretaresses versturen/ontvangen post voor hun bazen Baas Ahmed Bea Secr Sjaan Stefan Post virtuele communicatie Lennart Herlaar Computerarchitectuur en netwerken 9 13
Secretaresse Protocol Secretaresses voegen betrouwbaarheid toe Baas Ahmed Bea Secr Sjaan Please confirm Message received Stefan Post virtuele communicatie Lennart Herlaar Computerarchitectuur en netwerken 9 14
Simpel protocol met correctie In een simpel protocol stuurt de ontvanger een acknowledge (ACK) als een boodschap goed ontvangen is. Het is ook mogelijk een negatieve ack (NAK) te sturen als een boodschap verkeerd aankomt. We hebben een techniek nodig om te ontdekken dat er een (bit)fout is opgetreden: checksums (zie hoofdstuk 5) Bij een fout wordt het pakket opnieuw gestuurd Automatic Repeat request (ARQ) Lennart Herlaar Computerarchitectuur en netwerken 9 15
Interactie met omliggende lagen De verzender krijgt data van de bovenliggende laag verzendt via onderliggende laag De ontvanger krijgt data van de onderliggende laag levert af aan de bovenliggende laag Baas Ahmed Bea Secr Sjaan Stefan Post virtuele communicatie Lennart Herlaar Computerarchitectuur en netwerken 9 16
RDT (Reliable Data Transfer) Lennart Herlaar Computerarchitectuur en netwerken 9 17
FSM s voor simpel protocol Verzender: rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) Wait for call from above Wait for ACK or NAK rdt_rcv(rcvpkt) && isnak(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isack(rcvpkt)! Lennart Herlaar Computerarchitectuur en netwerken 9 18
FSM s voor simpel protocol Ontvanger: rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(nak) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack) Lennart Herlaar Computerarchitectuur en netwerken 9 19
Protocol zonder fouten rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) Wait for call from above rdt_rcv(rcvpkt) && isack(rcvpkt)! Wait for ACK or NAK rdt_rcv(rcvpkt) && isnak(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(nak) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack) Lennart Herlaar Computerarchitectuur en netwerken 9 20
Protocol met foutherstel rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) Wait for call from above Wait for ACK or NAK rdt_rcv(rcvpkt) && isack(rcvpkt)! rdt_rcv(rcvpkt) && isnak(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(nak) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ack) Lennart Herlaar Computerarchitectuur en netwerken 9 21
ACK/NAK Problemen Dit protocol is FOUT!! Lennart Herlaar Computerarchitectuur en netwerken 9 22
ACK/NAK Problemen Dit protocol is FOUT!! We veronderstellen voorlopig dat pakketten wel aankomen Wat gebeurt er als een ACK of NAK pakket verminkt raakt? Lennart Herlaar Computerarchitectuur en netwerken 9 22
ACK/NAK Problemen Dit protocol is FOUT!! We veronderstellen voorlopig dat pakketten wel aankomen Wat gebeurt er als een ACK of NAK pakket verminkt raakt? Probleem: we weten niet of het een ACK of NAK is Dus: is ons datapakket wel of niet aangekomen? Als het pakket ten onrechte nog een keer gestuurd wordt dan is er een probleem Lennart Herlaar Computerarchitectuur en netwerken 9 22
ACK/NAK Problemen Dit protocol is FOUT!! We veronderstellen voorlopig dat pakketten wel aankomen Wat gebeurt er als een ACK of NAK pakket verminkt raakt? Probleem: we weten niet of het een ACK of NAK is Dus: is ons datapakket wel of niet aangekomen? Als het pakket ten onrechte nog een keer gestuurd wordt dan is er een probleem Oplossing: Geef de pakketten volgnummers Ontvanger gooit een pakket weg als het hetzelfde volgnummer als de vorige heeft Volgnummers 0 en 1 zijn voldoende Lennart Herlaar Computerarchitectuur en netwerken 9 22
FSM s met volgnummers en ACK/NAK (rdt2.1) Verzender rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt)! rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isnak(rcvpkt) ) udt_send(sndpkt) rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) Wait for call 0 from above Wait for ACK or NAK 1 rdt_send(data) Wait for ACK or NAK 0 Wait for call 1 from above sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isnak(rcvpkt) ) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt)! Lennart Herlaar Computerarchitectuur en netwerken 9 23
FSM s met volgnummers en ACK/NAK (rdt2.1) Ontvanger rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) Wait for 0 from below Wait for 1 from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) sndpkt = make_pkt(ack, chksum) udt_send(sndpkt) Lennart Herlaar Computerarchitectuur en netwerken 9 24
FSM s met ACKS met volgnummers (rdt2.2) Verzender rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,1)! rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) Wait for call 0 from above Wait for ACK1 Wait for ACK0 Wait for call 1 from above rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,1) ) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0)! rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,0) ) udt_send(sndpkt) rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) Lennart Herlaar Computerarchitectuur en netwerken 9 25
FSM s met ACKS met volgnummers (rdt2.2) Ontvanger rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack,0, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) has_seq1(rcvpkt)) udt_send(sndpkt) Wait for 0 from below Wait for 1 from below rdt_rcv(rcvpkt) && (corrupt(rcvpkt) has_seq0(rcvpkt)) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack,1, chksum) udt_send(sndpkt) Lennart Herlaar Computerarchitectuur en netwerken 9 26
Samenvatting Transportlaag: multiplexing betrouwbaarheid (TCP) protocollen voor betrouwbaarheid met ACKs (ARQ) en volgnummers Lennart Herlaar Computerarchitectuur en netwerken 9 27
Inhoud Reliable data transfer Protocol met foutherstel Protocol met verloren pakketten Sliding Window protocol TCP implementatie Flow control Congestiebeheer Lennart Herlaar Computerarchitectuur en netwerken 9 28
Mechanismen Verzender: Als een ACK met het verkeerde volgnummer wordt ontvangen wordt het laatste pakket nog een keer gestuurd ARQ = Automatic Repeat request Volgnummers: Omdat er telkens twee mogelijkheden zijn (nieuw pakket of duplicaat, en pakket goed of pakket fout ontvangen) hebben we slechts twee volgnummers nodig: afwisselend 0 en 1 Alternating bit protocol Lennart Herlaar Computerarchitectuur en netwerken 9 29
Betrouwbare Overdracht Eisen: Er worden geen bits verkeerd doorgegeven Er raken geen stukken informatie kwijt Er wordt geen informatie gedupliceerd Alle gegevens worden in de juiste volgorde afgeleverd Als een van deze problemen optreedt corrigeert het protocol dit Tot nu toe zijn we alleen van verminkte pakketten uitgegaan. Maar er kunnen ook pakketten helemaal verloren gaan. Lennart Herlaar Computerarchitectuur en netwerken 9 30
Protocol problemen 1. A B boodschap boodschap verdwijnt B kan niets doen want deze weet niet dat A iets gestuurd heeft. A moet dus op eigen houtje uitvinden dat er iets mis is gegaan. Lennart Herlaar Computerarchitectuur en netwerken 9 31
Protocol problemen 1. 2. A B boodschap boodschap verdwijnt A B boodschap B kan niets doen want deze weet niet dat A iets gestuurd heeft. A moet dus op eigen houtje uitvinden dat er iets mis is gegaan. ACK ACK verdwijnt Ook nu moet A zelf uitvinden dat er iets verkeerd is gegaan. Lennart Herlaar Computerarchitectuur en netwerken 9 31
Timeouts De manier om dit uit te vinden is: reageren als er niks terug komt (binnen een bepaalde tijd) Hoe lang moet je wachten? Op een fysieke lijn: Round Trip Tijd (RTT) In netwerk: moeilijk te schatten Protocol moet bestand zijn tegen te korte wachttijd Na elk verzonden bericht start een wekker Als wekker afloopt en er is geen ACK gekomen: verstuur opnieuw Lennart Herlaar Computerarchitectuur en netwerken 9 32
Protocol met timeouts (rdt3.0) rdt_rcv(rcvpkt)! rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,1) stop_timer timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,0) )! rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer Wait for call 0 from above Wait for ACK1 rdt_send(data) Wait for ACK0 Wait for call 1 from above sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,1) )! timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0) stop_timer rdt_rcv(rcvpkt)! Lennart Herlaar Computerarchitectuur en netwerken 9 33
Scenario s Lennart Herlaar Computerarchitectuur en netwerken 9 34
Scenario s Lennart Herlaar Computerarchitectuur en netwerken 9 35
Scenario s Lennart Herlaar Computerarchitectuur en netwerken 9 36
Scenario s Lennart Herlaar Computerarchitectuur en netwerken 9 37
Stop-and-wait vs. Pipelining De voorgaande protocollen heten stop-and-wait Bij lange vertragingen (t.o.v. transmissietijd) zeer onvoordelig: meeste tijd gaat zitten in wachten op ACK Beter: Pipelining (sliding window protocol) Stuur alvast volgende boodschappen ook al is er nog geen ACK Lennart Herlaar Computerarchitectuur en netwerken 9 38
Stop-and-wait vs. Pipelining De voorgaande protocollen heten stop-and-wait Bij lange vertragingen (t.o.v. transmissietijd) zeer onvoordelig: meeste tijd gaat zitten in wachten op ACK Beter: Pipelining (sliding window protocol) Stuur alvast volgende boodschappen ook al is er nog geen ACK Het protocol wordt nu wel ingewikkelder: Nu bijhouden welke ACKs je al gehad hebt Meerdere buffers nodig Meer volgnummers Per verzonden bericht een timer Wat doe je als er een bericht verloren gaat? Lennart Herlaar Computerarchitectuur en netwerken 9 38
Stop-and-wait Situatie: L = 8000 bits/pakket, R = 10 9 bps, RTT = 30 msec. bereken U = efficiëntie van het gebruik van de link Lennart Herlaar Computerarchitectuur en netwerken 9 39
Pipelining Lennart Herlaar Computerarchitectuur en netwerken 9 40
Sliding window protocol Wat doe je als er een bericht verloren gaat? In ieder geval het bericht nog eens sturen Twee keuzen alleen dat bericht herhalen in dat geval moet de ontvanger ingewikkelde administratie bijhouden alle volgende berichten ook herhalen ontvanger heeft het gemakkelijker Verzender moet dus een aantal verzonden berichten kunnen bewaren zolang nog geen ACK ontvangen is: dit heet het window Aanname Er is op elk moment een beperkt aantal geldige volgnummers beperkt aantal bits beperkt geheugen bij zender/ontvanger Lennart Herlaar Computerarchitectuur en netwerken 9 41
Go Back N protocol Ontvanger wil pakketten alleen in goede volgorde ontvangen Ontvanger accepteert alleen pakket met eerstvolgende verwachte volgnummer Ontvanger heeft alleen geheugen voor één pakket nodig Ontvanger stuurt ACK van laatste correct ontvangen pakket Verzender accepteert ACK als acknowledge ook voor vorige pakketten (cumulatief) Bij probleem stuurt verzender alle pakketten na laatst geackte pakket Lennart Herlaar Computerarchitectuur en netwerken 9 42
Go Back N protocol werking Verzender base=1 nextseqnum=1 rdt_rcv(rcvpkt) && corrupt(rcvpkt)!! rdt_send(data) if (nextseqnum < base+n) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) Wait rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer timeout start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) udt_send(sndpkt[nextseqnum-1]) Lennart Herlaar Computerarchitectuur en netwerken 9 43
Go Back N protocol werking Ontvanger 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=1 sndpkt = make_pkt(0,ack,chksum) Wait default udt_send(sndpkt) Lennart Herlaar Computerarchitectuur en netwerken 9 44
Selective Repeat protocol Ontvanger wil wel pakketten herordenen Ontvanger accepteert alle pakketten in het venster Ontvanger heeft geheugen voor N pakketten Ontvanger stuurt ACK van elk correct ontvangen pakket (ook reeds eerder geackte) Verzender accepteert ACK als acknowledge alleen voor pakket zelf Elk verzonden pakket moet eigen timer hebben Bij probleem stuurt verzender alleen pakket met timeout Venster wordt opgeschoven als er geen gaten in zijn Het is evt mogelijk om NAKs te gebruiken om een missend pakket te melden Lennart Herlaar Computerarchitectuur en netwerken 9 45
Selective Repeat protocol Lennart Herlaar Computerarchitectuur en netwerken 9 46
Hoeveel volgnummers nodig? Lennart Herlaar Computerarchitectuur en netwerken 9 47
Hoeveel volgnummers nodig? Aantal volgnummers windowgrootte zender + windowgrootte ontvanger Lennart Herlaar Computerarchitectuur en netwerken 9 48
TCP Implementatie TCP gebruikt volgnummers van 32 bits TCP is geen message passing maar byte stream daarom volgnummer = bytenummer (modulo 2 32 ) ACK nummer = eerstvolgend verwacht bytenummer bytestream wordt opgedeeld in segmenten O.S kan een maximale segmentgrootte definiëren Ontvanger slaat uit volgorde ontvangen segmenten meestal wel op (maar hoeft niet) Toch cumulatieve ACK (Go Back N maar met één segment hertransmissie) Na 4 keer dezelfde ACK wordt hertransmissie gedaan vóór de timeout (Fast Retransmit) Lennart Herlaar Computerarchitectuur en netwerken 9 49
TCP segmenten Lennart Herlaar Computerarchitectuur en netwerken 9 50
TCP hertransmissie Lennart Herlaar Computerarchitectuur en netwerken 9 51
RTT schatting RTT: gaia.cs.umass.edu to fantasia.eurecom.fr EstimatedRTT = (1 α) EstimatedRTT + α SampleRTT 350 300 RTT (milliseconds) 250 200 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (seconnds) SampleRTT Estimated RTT Lennart Herlaar Computerarchitectuur en netwerken 9 52
TCP flow control Flow control = zorgen dat ontvanger niet teveel te verwerken krijgt Basis ARQ protocol levert al flow control (vooral stop-and-wait) Verzending beperkt door venster Bij TCP vaste ontvangstbuffer in O.S. Vrije ruimte = ontvangstvenster Ontvanger zendt telkens de grootte van de vrije ruimte terug naar verzender (bijvoorbeeld in ACK of retourdata) Verzender mag niet meer zenden dan in venster past Uitzondering: als venstergrootte = 0 dan toch 1 byte zenden anders komt er misschien nooit meer een nieuwe venstergrootte Lennart Herlaar Computerarchitectuur en netwerken 9 53
Flow control Zender Last Last Byte Byte Acked Sent 0 byte nummers Ontvanger Last Byte Read Last Byte Recvd RcvWindow 01 receive buffer 00 11 LastByteSent LastByteAcked RcvWindow Lennart Herlaar Computerarchitectuur en netwerken 9 54
TCP segmenten Lennart Herlaar Computerarchitectuur en netwerken 9 55
TCP connect Beide kanten kiezen een begin-sequence nummer sequence-nummers worden zo gekozen dat kans klein is op duplicaat Bij opzetten van verbinding worden sequence nummers uitgewisseld De sequencenummers moeten geacknowledget worden (twee kanten op) Daarom 3-weg handshake Lennart Herlaar Computerarchitectuur en netwerken 9 56
TCP connect Lennart Herlaar Computerarchitectuur en netwerken 9 57
TCP disconnect Bij afsluiten moet elke kant afzonderlijk een afsluitbericht sturen (anders sluit de verbinding terwijl de ander nog niet klaar is) ACKs kunnen verloren gaan: Dan stuurt de andere kant nog een keer de FIN Een timeout voor het afsluiten. Lennart Herlaar Computerarchitectuur en netwerken 9 58
TCP disconnect Lennart Herlaar Computerarchitectuur en netwerken 9 59
TCP FSMs Lennart Herlaar Computerarchitectuur en netwerken 9 60