De transportlaag: UDP en TCP

Leer hoe de transportlaag aflevering zonder garanties tussen hosts op het internet omzet in communicatie tussen applicatieprocessen. Bekijk hoe poortnummers elk segment bij de juiste socket afleveren, wat UDP aan IP toevoegt en wanneer een applicatie daarvoor kiest. Ontdek hoe je met controlesommen, ontvangstbevestigingen, volgnummers, timers en schuifvensters stap voor stap een betrouwbaar protocol opbouwt, met Go-back-N en selectieve herhaling. Volg daarna TCP in detail: het segmentformaat, volgnummers en bevestigingsnummers op basis van bytes, de handshake en het afsluiten van verbindingen, het schatten van de rondlooptijd en time-outs, hertransmissie en snelle hertransmissie, en stroomregeling met het ontvangstvenster.

GemiddeldLes 3 van 8 in Cursus Computernetwerken en internetprotocollen

Wat je leert

  1. Beschrijf welke diensten de transportlaag boven op de netwerklaag toevoegt en volg hoe elk aankomend segment via poortnummers en sockets het juiste applicatieproces bereikt.
    • Beschrijf de diensten van de transportlaag en hun beperkingen
      Leg uit hoe de transportlaag aflevering tussen hosts omzet in communicatie tussen processen en vergelijk wat TCP en UDP applicaties bieden.
    • Lever segmenten met behulp van poortnummers af bij de juiste socket
      Gebruik poortnummers om multiplexing en demultiplexing uit te leggen en bepaal welke socket een UDP- of TCP-segment ontvangt.
  2. Lees de UDP-header, bereken en controleer de controlesom en bepaal voor een gegeven applicatie of de minimale dienstverlening van UDP een betere keuze is dan TCP.
    • Lees de UDP-header en bereken de controlesom
      Interpreteer de vier velden van de UDP-header en bereken de internetcontrolesom met eencomplementrekenen.
    • Bepaal wanneer UDP het geschikte transportprotocol is
      Weeg de snelheid en controle van UDP af tegen het ontbreken van betrouwbaarheid, stroomregeling en congestiebeheersing en stem het transportprotocol af op de behoeften van een applicatie.
  3. Ontwerp stap voor stap een protocol dat gegevens correct aflevert over een kanaal dat pakketten beschadigt en verliest, en maak het vervolgens efficiënt met pipelining via Go-back-N en selectieve herhaling.
    • Herstel bitfouten met ontvangstbevestigingen en volgnummers
      Bouw een stop-and-waitprotocol voor een kanaal dat bits beschadigt en leg uit waarom het controlesommen, ontvangstbevestigingen, hertransmissies en volgnummers nodig heeft.
    • Vang pakketverlies op met timers en meet de prestaties van stop-and-wait
      Voeg een afteltimer toe om verloren pakketten op te vangen, volg het alternerend-bitprotocol in verliesscenario's en bereken waarom stop-and-wait een snelle verbinding slecht benut.
    • Verzend pakketten via pipelining met Go-back-N
      Volg de zender en ontvanger van Go-back-N met cumulatieve ontvangstbevestigingen en één timer en leg de grens aan de venstergrootte uit.
    • Verzend met selectieve herhaling alleen verloren pakketten opnieuw
      Volg selectieve herhaling met individuele ontvangstbevestigingen, timers per pakket en buffering bij de ontvanger, leg de strengere venstergrens uit en vergelijk het protocol met Go-back-N.
  4. Beschrijf de TCP-verbinding en het segmentformaat, bepaal volgnummers en bevestigingsnummers in een bytestroom en volg hoe verbindingen worden geopend en gesloten.
    • Beschrijf de verbindingsstructuur en segmentstructuur van TCP
      Leg uit wat een TCP-verbinding is, hoe TCP applicatiegegevens als een bytestroom behandelt en waarvoor elk veld van de TCP-header dient.
    • Nummer bytes met volgnummers en bevestigingsnummers
      Bepaal de volgnummers en bevestigingsnummers van segmenten in beide richtingen van een verbinding, inclusief aankomst buiten volgorde en cyclische terugloop.
    • Open en sluit TCP-verbindingen
      Volg de drieweg-handshake en het afsluiten van de verbinding met volgnummers en toestanden en leg TIME_WAIT, TCP-resets en SYN-flooding uit.
  5. Schat de rondlooptijd en stel de time-out van TCP in, volg hoe TCP verlies detecteert en herstelt en gebruik het ontvangstvenster om te voorkomen dat de zender de buffer van de ontvanger laat overlopen.
    • Schat de rondlooptijd en stel de time-out in
      Bereken de afgevlakte rondlooptijd van TCP, de variatie daarin en de hertransmissietime-out en leg uit hoe de time-out na verlies groeit.
    • Volg de hertransmissies en ontvangstbevestigingen van TCP
      Volg de zender en ontvanger van TCP bij verloren, vertraagde en dubbele ontvangstbevestigingen, pas de bevestigingsregels toe en gebruik snelle hertransmissie.
    • Voorkom met stroomregeling dat de ontvangstbuffer overloopt
      Bereken het ontvangstvenster, pas de limiet voor onbevestigde gegevens bij de zender toe en leg nulvensters, vensterschaling en de doorvoersnelheidslimiet van een venster uit.

Transportlaag: uitleg

5 hoofdstukken

1

Van hosts naar applicatieprocessen

Een host kan tegelijkertijd een browser, een gesprek en een bestandsoverdracht uitvoeren. Elke applicatie heeft haar eigen gegevens nodig, ook al delen ze een netwerkinterface. Transportprotocollen bieden die dienst op procesniveau boven IP. Volg een segment van de verzendende socket naar de ontvangende socket en gebruik daarna poorten en adressen om UDP-aflevering te onderscheiden van de afzonderlijke verbindingen die een TCP-server onderhoudt.

1.1 Wat TCP en UDP aan IP toevoegen

Een applicatie verzendt via een socket, de interface tussen haar proces en de transportlaag. De transportlaag laat processen op verschillende hosts lijken alsof ze direct communiceren. Dit is logische communicatie: de gegevens gaan nog steeds over verbindingen en via routers, maar de applicatie werkt via haar lokale socket.

Volg de gegevens door de lagen

Bij de zender neemt het transportprotocol applicatiegegevens, verdeelt die zo nodig in stukken en voegt een transportheader toe. Het resulterende segment gaat naar IP. IP voegt zijn eigen header toe, waardoor een IP-datagram ontstaat dat het netwerk transporteert. Op de bestemming geeft IP het segment aan het transportprotocol, dat de transportheader interpreteert en de gegevens bij een socket aflevert.

De protocollogica wordt uitgevoerd op de eindhosts. Gewone routers sturen IP-datagrammen door; ze verzorgen geen TCP-ontvangstbevestigingen en hertransmissies namens de applicaties. Zie een IP-adres als het adres van een gebouw en de ontvangende socket als de beoogde ontvanger binnen. Een brief naar het gebouw brengen en die bij de juiste persoon bezorgen zijn afzonderlijke taken.

IP biedt aflevering tussen hosts zonder garanties. Datagrammen kunnen verloren gaan, dubbel aankomen, van volgorde veranderen of beschadigd raken. De transportlaag breidt de aflevering uit naar processen en kan mechanismen toevoegen die deze problemen herstellen.

Vergelijk de diensten
DienstUDPTCP
CommunicatievormOnafhankelijke berichtenVerbinding met een bytestroom
Betrouwbare aflevering in volgordeNeeJa
Stroomregeling voor de ontvangerNeeJa
Congestiebeheersing voor het netwerkGeen ingebouwd mechanismeJa
Maximale vertraging of minimale doorvoersnelheidGeen garantieGeen garantie
Versleuteling op zichzelfNeeNee

UDP, het User Datagram Protocol, voegt poorten en een foutcontrole toe aan de aflevering van IP. Een segment kan aankomen zonder voorafgaande uitwisseling om een verbinding op te zetten. UDP herstelt een verloren segment niet en houdt een later segment niet vast totdat een eerder segment aankomt.

TCP, het Transmission Control Protocol, bouwt verbindingstoestand op vóór de normale gegevensoverdracht. Het nummert bytes, controleert op fouten, ontvangt bevestigingen en verzendt ontbrekende gegevens opnieuw. De ontvangende applicatie krijgt een betrouwbare bytestroom in volgorde. Stroomregeling beschermt de buffer; congestiebeheersing reageert op de netwerkbelasting.

Betrouwbaarheid maakt het onderliggende netwerk niet betrouwbaar. Als een IP-datagram verdwijnt, verstuurt TCP een nieuwe kopie van de ontbrekende gegevens. Als latere bytes eerder aankomen, kan de ontvanger ze vasthouden totdat het ontbrekende deel is aangevuld. De applicatie ziet een herstelde aflevering, maar moet mogelijk langer wachten. TCP noch UDP kan een uiterste aflevertijd beloven of netwerkcapaciteit reserveren alleen doordat het boven op IP zonder garanties werkt.

Kies de dienst bij de socket

Een streamsocket kiest doorgaans TCP; een datagramsocket kiest UDP. HTTP/1.1 en HTTP/2, e-mailoverdracht met SMTP en inloggen op afstand met SSH gebruiken TCP. Gewone DNS-query's gebruiken vaak UDP. HTTP/3 gebruikt QUIC boven op UDP: QUIC biedt betrouwbare streams en beveiliging boven op de minimale dienst van UDP.

Een TCP-verbinding alleen houdt een wachtwoord niet geheim. TLS voegt versleuteling en authenticatie toe boven op TCP; QUIC integreert TLS in zijn ontwerp. Betrouwbaarheid gaat over de vraag of bytes correct en in volgorde bij de applicatie aankomen. Vertrouwelijkheid gaat over de vraag of een waarnemer ze kan lezen.

Belangrijkste punten

  • IP levert af tussen hosts; de transportlaag levert af tussen applicatieprocessen.
  • TCP herstelt verlies en volgorde op de eindhosts.
  • UDP levert berichten af zonder ingebouwd herstel of ingebouwde stroomregeling.
  • TCP noch UDP garandeert op zichzelf een uiterste aflevertijd, doorvoersnelheid of versleuteling.

1.2 Poorten en socketselectie

Een host heeft vaak veel sockets open. Multiplexing verzamelt uitgaande gegevens van die sockets en voegt transportheaders toe. Demultiplexing selecteert voor elk aankomend segment de ontvangende socket.

Lees de adresgegevens

Zowel TCP als UDP bevat een 16-bits bronpoort en een 16-bits bestemmingspoort. De waarden lopen van 0 tot 65.535. De bestemmingspoort identificeert de ontvangende dienst; de bronpoort helpt de andere kant het antwoord te adresseren. IANA verdeelt poorten in systeempoorten 0–1023, gebruikerspoorten 1024–49151 en dynamische poorten 49152–65535.

Servers luisteren op afgesproken poorten: SSH gebruikt 22, SMTP 25, DNS 53, HTTP 80 en HTTPS meestal 443. Clients krijgen meestal een tijdelijke poort van het besturingssysteem. Het ingestelde bereik hoeft niet gelijk te zijn aan het dynamische bereik van IANA: een gebruikelijke Linux-standaard is 32768–60999, terwijl Windows meestal 49152–65535 gebruikt.

Bij een aankomend IP-datagram bepaalt de host eerst het transportprotocol. IPv4-protocolwaarde 6 betekent TCP en 17 betekent UDP; IPv6 identificeert het protocol van de bovenliggende laag via de keten van volgende headers. TCP-poort 53 en UDP-poort 53 behoren tot verschillende naamruimten van transportprotocollen. Daarna gebruikt de ontvanger adressen en poorten om een socket te selecteren en plaatst hij de gegevens in een wachtrij voor de applicatie.

UDP: veel clients, één ontvangende socket

In het basismodel van een niet-verbonden UDP-server wordt de ontvangende socket geselecteerd op basis van IP-bestemmingsadres en bestemmingspoort. Verschillende clients kunnen allemaal naar dezelfde socket sturen.

Een server op 203.0.113.53 luistert op UDP-poort 53. Verzoeken van 198.51.100.7:51000 en 192.0.2.44:62011 bereiken deze ene serversocket. Het eerste antwoord gaat van 203.0.113.53:53 naar 198.51.100.7:51000. De applicatie krijgt het bronadres en de bronpoort van elk verzoek, zodat ze de juiste client kan antwoorden. Een verbonden UDP-socket kan ook beperken van welke andere partij die ontvangt; er wordt geen UDP-handshake toegevoegd.

TCP: onderscheid verbindingen met vier waarden

Een TCP-server heeft een luistersocket en afzonderlijke verbindingssockets. Een verbinding wordt geïdentificeerd door het viertupel van IP-bronadres, bronpoort, IP-bestemmingsadres en bestemmingspoort.

Voor een server op 203.0.113.10:80 zijn dit verschillende verbindingen:

  • 198.51.100.7:50312 → 203.0.113.10:80
  • 198.51.100.7:50313 → 203.0.113.10:80
  • 192.0.2.44:50312 → 203.0.113.10:80

De eerste twee verschillen in bronpoort. De eerste en derde delen een bronpoort maar verschillen in bronadres. Alle drie gebruiken serverpoort 80. Een aparte serverpoort per client is niet nodig, omdat het volledige viertupel hun verbindingssockets onderscheidt. Eén proces kan veel van zulke sockets afhandelen.

Als geen socket overeenkomt

Een SYN die naar een gesloten TCP-poort wordt gestuurd, krijgt normaal een TCP-reset terug, met de RST-vlag aan. Een UDP-segment dat naar een poort zonder ontvanger wordt gestuurd, leidt normaal tot een ICMP-melding “poort onbereikbaar”. Firewalls, filtering en beperkingen op antwoorden kunnen beïnvloeden wat terugkomt. Bij een poorttest wijst SYN-ACK op een luisterende TCP-dienst; RST duidt op weigering. Alleen stilte kan filtering niet onderscheiden van verlies of een host die niet beschikbaar is.

Belangrijkste punten

  • Multiplexing combineert uitgaand socketverkeer; demultiplexing selecteert een ontvangende socket.
  • Poortnummers hebben 16 bits en horen bij een transportprotocol.
  • Een eenvoudige UDP-server kan veel clients via één socket ontvangen.
  • TCP onderscheidt verbindingssockets met beide IP-adressen en beide poorten.
  • Gesloten TCP- en UDP-poorten leveren normaal verschillende antwoorden op.
2

UDP-berichten, controlesommen en applicatiekeuzes

UDP houdt de transportdienst beperkt: een korte header, aflevering bij een socket en een controlesom. Die eenvoud is nuttig wanneer een applicatie controle over de timing van berichten wil, maar laat herstel en snelheidsbeheer over aan de applicatie of een protocol boven UDP. Lees de header en werk de optelling met teruggevoerde overdracht voor de controlesom door. Beoordeel daarna een applicatie op haar deadlines en afleverbehoeften, in plaats van elke realtime dienst als hetzelfde geval te behandelen.

2.1 De UDP-header en internetcontrolesom

UDP verstuurt elk bericht onafhankelijk, zonder handshake of gedeelde verbindingstoestand voor volgnummers. De vaste header van 8 bytes bevat vier velden van elk 16 bits: bronpoort, bestemmingspoort, lengte en controlesom.

Tel de juiste bytes

De lengte omvat de UDP-header plus de gegevens. Die is minstens 8 bytes. Een bericht met 40 gegevensbytes heeft UDP-lengte 48. Met een IPv4-header van 20 bytes en zonder IP-opties is het volledige IP-datagram 68 bytes. De IP-header valt buiten de UDP-lengte.

De controlesom detecteert sommige bitfouten in de UDP-header en gegevens. Die omvat ook een pseudoheader die is opgebouwd uit IP-adresgegevens, het protocolnummer en de UDP-lengte. Die waarden helpen een segment te detecteren dat onder de verkeerde adresgegevens is afgeleverd. De pseudoheader is invoer voor de berekening; het is geen extra verzonden deel van de UDP-header.

Tel op met teruggevoerde overdracht

Behandel de invoer voor de berekening als 16-bits woorden. Zet het controlesomveld tijdens de berekening op nul. Tel de woorden op en voer elke overdracht voorbij bit 16 terug naar de lage kant. Dit is eencomplementoptelling. Keer ten slotte alle 16 bits van de teruggevoerde som om om de controlesom te krijgen. Als het aantal bytes oneven is, voeg je alleen voor de berekening een nulbyte toe.

Gebruik voor drie voorbeeldwoorden hexadecimale notatie om de overdracht zichtbaar te maken:

  1. Tel A35C en 69C3 op tot 10D1F. De eerste 1 is een overdracht buiten 16 bits.
  2. Voer die terug: 0D1F + 1 = 0D20.
  3. Tel 1234 erbij op: 0D20 + 1234 = 1F54.
  4. Neem het complement van elke bit: FFFF − 1F54 = E0AB.

De controlesom is E0AB. Als je de eerste overdracht simpelweg weglaat, krijg je de verkeerde som. Binair is de eindsom 0001 1111 0101 0100 en het complement daarvan 1110 0000 1010 1011.

Controleer bij de ontvanger

De ontvanger herhaalt de optelling met terugvoering over de pseudoheader en het ontvangen segment, nu inclusief het controlesomveld. Een ongewijzigd segment geeft alleen enen, FFFF. Hier geldt 1F54 + E0AB = FFFF. Een resultaat met een nulbit wijst op een fout. UDP verwerpt een segment waarvan de meegeleverde controlesom, als die niet nul is, de controle niet doorstaat zonder melding; het stuurt geen vervanging en herstelt de gegevens niet.

Alleen enen betekent dat de controle is geslaagd, niet dat elke mogelijke fout is uitgesloten. Compenserende veranderingen in verschillende woorden kunnen de som ongewijzigd laten. De controlesom detecteert fouten; die lokaliseert de verkeerde bits niet en corrigeert ze ook niet.

Waarom de eindhosts opnieuw controleren

Een controle op de verbinding beschermt een bepaalde verbinding. Sommige verbindingen hebben die controle mogelijk niet en ook binnen apparatuur tussen verbindingen kan beschadiging optreden. Een eind-tot-eindcontrole toetst wat de bestemmingshost heeft bereikt. Dit illustreert het eind-tot-eindprincipe: een eigenschap die over het hele pad nodig is, moet op de eindpunten worden gecontroleerd.

Bij IPv4 geeft een UDP-controlesomveld met waarde nul aan dat de zender de controlesom heeft weggelaten. Een berekende controlesom van nul wordt als allemaal enen verzonden om dit onderscheid te behouden. IPv6 vereist normaal een UDP-controlesom, met nauw omschreven uitzonderingen voor tunnels. TCP gebruikt ook een internetcontrolesom met een pseudoheader en vereist die controlesom.

Belangrijkste punten

  • De UDP-lengte omvat de header van 8 bytes en sluit de IP-header uit.
  • Voer elke overdracht terug naar de lage 16 bits en neem daarna het complement van de som.
  • Een controlesom bij de ontvanger die volledig uit enen bestaat, betekent dat de controle is geslaagd.
  • UDP verwerpt een segment met een controlesom die niet nul is en de controle niet doorstaat, zonder het opnieuw te verzenden.
  • De controlesom kan fouten missen en kan ze niet corrigeren.
  • Een IPv4-controlesomveld met waarde nul betekent dat de UDP-controlesom is weggelaten.

2.2 Kies UDP op basis van de behoeften van de applicatie

De beperkte dienst van UDP geeft een applicatie controle over haar berichten. Er is geen transporthandshake vóór het eerste bericht, geen UDP-hertransmissiewachtrij en geen UDP-mechanisme dat latere gegevens vasthoudt achter een ontbrekend eerder bericht. De applicatie beslist wat ze verzendt en welk verlies van belang is.

Stem herstel af op het tijdstip waarop gegevens nog bruikbaar zijn

Neem spraakaudio die in stukken van 20 ms wordt verzonden: 50 berichten per seconde. Een ontbrekend stuk moet over 60 ms worden afgespeeld, maar het detecteren van het verlies en het verkrijgen van een nieuwe kopie duurt ongeveer 150 ms. Dat herstelde stuk zou te laat aankomen. Een spraakapplicatie kan latere stukken op tijd afspelen en het ontbrekende geluid maskeren, bijvoorbeeld door de onderbreking af te vlakken.

De bepalende grootheid is de resterende tijd tot het afspelen, niet de duur van 20 ms van één stuk. Als herstel vóór de deadline kan worden voltooid, kan hertransmissie helpen. TCP moet bytes in volgorde afleveren, dus een ontbrekende eerdere byte kan ook de aflevering van al ontvangen latere bytes vertragen. Dit wachten wordt binnen de stream vaak blokkering door het eerste element genoemd.

Een bestandsoverdracht heeft een andere prioriteit: elke byte moet correct aankomen en wachten op herstel is acceptabel. TCP biedt die dienst al. Bij gebruik van UDP verschuift het werk van verlies detecteren, vervangende gegevens aanvragen en de volgorde herstellen naar de applicatie of een ander protocol.

Wat de kleine header oplevert

De header van UDP is 8 bytes; die van TCP is minstens 20. Een UDP-server kan berichten van veel clients ontvangen zonder per client transportverbindingen op te zetten. Er zijn nog steeds socketbuffers en applicatiemiddelen, dus “verbindingsloos” betekent niet dat de host niets opslaat.

Veelvoorkomende toepassingen van UDP zijn gewone DNS-query's op poort 53, NTP-tijdsynchronisatie op 123, SNMP-beheer op 161 en DHCP-adrestoewijzing op 67 en 68. Gesprekken en games kiezen vaak UDP om berichten op tijd te leveren. Video op aanvraag gebruikt meestal HTTP via TCP of QUIC, dus “video gebruikt UDP” is een te algemene regel.

QUIC laat zien hoeveel een protocol boven UDP kan toevoegen: betrouwbare streams, congestiebeheersing en beveiliging met TLS 1.3. Het werd gestandaardiseerd in 2021 en gebruikt meestal UDP-poort 443; HTTP/3 werkt boven op QUIC. UDP zelf heeft die diensten er niet bij gekregen.

Houd berichten klein genoeg

UDP behoudt berichtgrenzen. Een ontvangbewerking leest één bericht, geen bytestroom die uit meerdere verzendingen is samengesteld. De applicatie moet een voldoende grote leesbuffer aanbieden; een kleinere buffer kan het bericht afkappen.

Voor IPv4 met een IP-header van 20 bytes is de theoretische maximale nettolading 65.535 − 20 − 8 = 65.507 bytes. Verzenden dicht bij die grens kan IP-fragmentatie vereisen. Op een pad dat IPv4-datagrammen van 1.500 bytes ondersteunt, passen 1.500 − 20 − 8 = 1.472 gegevensbytes zonder fragmentatie als er geen IP-opties zijn. Andere paden en headers kunnen die waarde verlagen.

Houd rekening met de ontbrekende regelingen

UDP heeft geen ingebouwde stroomregeling om een trage ontvanger te beschermen. Als de socketbuffer vol raakt, kunnen aankomende berichten worden verworpen. Het mist ook ingebouwde congestiebeheersing. Verantwoord werkende UDP-applicaties zorgen voor passende snelheidsregeling, zodat ze een gedeeld pad niet overbelasten. Sommige netwerken filteren UDP, dus applicaties hebben mogelijk een terugvaloptie nodig.

Het overslaan van verbindingsopbouw en herstel kan vertraging verminderen, maar UDP vergroot de capaciteit van een verbinding niet en voorkomt geen IP-verlies. Beoordeel het hele applicatieprotocol: het werk dat het boven op UDP toevoegt, kan belangrijker zijn dan de grootte van de header.

Belangrijkste punten

  • Kies herstel op basis van de vraag of de herstelde gegevens nog bruikbaar zijn.
  • UDP behoudt berichten, maar biedt geen herstel van verlies of ordening.
  • Applicaties boven UDP moeten omgaan met de capaciteit van de ontvanger en de netwerkbelasting.
  • QUIC biedt betrouwbare, beveiligde streams boven op UDP.
3

Bouw betrouwbaarheid op en houd gegevens onderweg

Een betrouwbaar protocol heeft aanwijzingen nodig over wat is aangekomen en een plan voor wanneer die aanwijzingen ontbreken. Begin met een kanaal dat bits omkeert en voeg daarna pakketverlies en vertraagde terugkoppeling toe. Als de correctheid is geregeld, bereken je hoeveel tijd een zender bij stop-and-wait niets doet. Met schuifvensters kunnen meerdere pakketten tegelijk onderweg zijn; Go-back-N en selectieve herhaling maken verschillende keuzes voor ontvangstbevestigingen, buffering en hertransmissie.

3.1 Controlesommen, terugkoppeling en detectie van duplicaten

Een protocol voor betrouwbare gegevensoverdracht geeft de ontvangende applicatie correcte gegevens, in volgorde en zonder duplicaten, ook wanneer het onderliggende kanaal pakketten beschadigt. Bouw het ontwerp op door je af te vragen wat er in elke fase mis kan gaan. Bij deze protocollen gaan applicatiegegevens één kant op en gaat de terugkoppeling voor de besturing terug.

Beschrijf gedrag met toestanden

Een eindige toestandsautomaat legt de huidige toestand van de zender of ontvanger vast. Elke overgang heeft een gebeurtenis die de overgang veroorzaakt en acties die moeten worden uitgevoerd. Een toestand zoals “wachten op ACK 0” geeft aan welke bevestiging de zender nodig heeft om verder te gaan. In de notatie van toestandsautomaten geeft Λ aan dat er geen gebeurtenis of actie is; een inkomende onderbroken pijl markeert de begintoestand.

Bij een volledig betrouwbaar kanaal heeft versie 1.0 alleen verzending en aflevering nodig. De zender verpakt gegevens, de ontvanger haalt ze uit de pakketten en geen van beiden heeft terugkoppeling nodig. Als je bitfouten toevoegt, verandert het ontwerp.

Detecteer een fout en vraag om een nieuwe kopie

Versie 2.0 gebruikt drie mechanismen:

  • Met een controlesom kan de ontvanger een pakket op beschadiging controleren.
  • Een ACK meldt succesvolle ontvangst; een NAK meldt beschadigde gegevens.
  • Hertransmissie verstuurt zo nodig een nieuwe kopie.

Samen vormen deze een automatisch herhaalverzoek (ARQ). De zender verstuurt één pakket en wacht op terugkoppeling voordat hij het volgende verstuurt: stop-and-wait. Hij bewaart een kopie van het huidige pakket, omdat hij het mogelijk opnieuw moet verzenden.

Maar terugkoppelingspakketten gaan over hetzelfde onbetrouwbare kanaal. Een beschadigde ACK laat de zender in onzekerheid: heeft de ontvanger de gegevens geaccepteerd of is een nieuwe kopie nodig? Opnieuw verzenden is alleen veilig als de ontvanger een vervangende kopie kan onderscheiden van nieuwe applicatiegegevens. Een controlesom alleen herkent geen duplicaten; twee geldige kopieën hebben dezelfde geldige inhoud.

Geef elk onbevestigd pakket een identiteit

Versie 2.1 voegt een volgnummer toe. Met maar één onbevestigd pakket is in dit stop-and-waitkanaalmodel een nummer van één bit dat afwisselt als 0, 1, 0, 1 voldoende. De ontvanger onthoudt welk nummer hij verwacht. Hij levert een geldig pakket met dat nummer eenmaal af en verandert daarna zijn verwachting. Een pakket met het vorige nummer is een duplicaat: bevestig het opnieuw, maar lever de gegevens niet opnieuw af.

De zender behoudt het huidige nummer tijdens hertransmissie. Hij gaat pas naar het andere nummer na de bijpassende, leesbare ACK. Beschadigde terugkoppeling of een NAK leidt in dit ontwerp met alleen fouten tot hertransmissie.

Vervang NAK's door herhaalde ACK's

Versie 2.2 verwijdert NAK's. De ontvanger reageert op een beschadigd of dubbel pakket met een ACK voor het laatste pakket dat hij heeft geaccepteerd. De ACK heeft daarom een nummer nodig.

Stel dat pakket 0 “A” bevat en correct aankomt. De ontvanger levert “A” af en stuurt ACK 0. Pakket 1 met “B” raakt beschadigd, dus herhaalt de ontvanger ACK 0. De zender wacht op ACK 1; deze dubbele ACK geeft aan dat hij pakket 1 opnieuw moet verzenden. De geldige vervanging wordt als “B” afgeleverd en met ACK 1 bevestigd.

Dubbele gegevens verwerpen en het dubbele pakket bevestigen zijn verschillende handelingen. Als de ontvanger een vervanging zonder melding zou negeren waarvan de eerdere ACK onleesbaar was, zou de zender nooit kunnen weten dat de aflevering was geslaagd. TCP gebruikt ook geen NAK's, hoewel de bytenummering en de regels voor snelle hertransmissie verschillen van dit eenvoudige protocol.

Belangrijkste punten

  • Een controlesom detecteert beschadiging maar herkent op zichzelf geen duplicaat.
  • ARQ combineert foutdetectie, terugkoppeling van de ontvanger en hertransmissie.
  • Bij stop-and-wait is één gegevenspakket onbevestigd.
  • Dankzij afwisselende volgnummers kan de ontvanger elk pakket eenmaal afleveren.
  • Een duplicaat wordt opnieuw bevestigd zonder de gegevens opnieuw af te leveren.

3.2 Timers en de efficiëntie van stop-and-wait

Terugkoppeling helpt niet als die nooit aankomt. Wanneer het kanaal een gegevenspakket of een ACK kan verliezen, heeft de zender een manier nodig om zonder bericht verder te gaan. Versie 3.0 voegt een afteltimer toe aan het alternerend-bitprotocol.

Ga om met stilte zonder dubbel af te leveren

De zender start de timer telkens wanneer hij het huidige pakket verstuurt, ook bij een vervanging. Een bijpassende, onbeschadigde ACK stopt de timer en maakt het volgende pakket mogelijk. Een beschadigde ACK of een ACK met het verkeerde nummer wordt genegeerd. Als de timer eerst afloopt, verzendt de zender hetzelfde pakket opnieuw en start hij de timer opnieuw.

Bij een verloren gegevenspakket heeft de ontvanger niets te bevestigen; de time-out zorgt voor de vervanging. Bij een verloren ACK heeft de ontvanger de gegevens al afgeleverd. Wanneer de vervanging aankomt, herkent de ontvanger aan het volgnummer een duplicaat. Hij verwerpt de gegevens en stuurt de ACK opnieuw.

Een voortijdige time-out treedt op wanneer het oorspronkelijke pakket of de ACK alleen vertraagd was. De vervanging verspilt transmissiecapaciteit, maar detectie van duplicaten houdt de aflevering correct. Een bruikbare time-out moet ruimte bieden voor de verwachte rondlooptijd en verwerking door de ontvanger. Een te korte time-out veroorzaakt onnodige hertransmissies; een te lange vertraagt het herstel van werkelijk verlies.

Onderscheid transmissietijd en wachttijd

Laat de pakketlengte L bits zijn en de transmissiesnelheid R bit/s. De zender heeft L/R seconden nodig om één pakket op de verbinding te zetten. Als we de transmissie- en verwerkingstijd van de ACK negeren, duurt één stop-and-waitcyclus RTT+L/R. Het deel van de tijd dat aan verzenden wordt besteed is

U=L/RRTT+L/R.

Voor pakketten van 1.500 bytes op een verbinding van 1 Gbit/s reken je eerst bytes om naar bits:

L=1.500×8=12.000 bits.

Daarna is L/R=12 μs=0,012 ms. Bij een RTT van 40 ms geldt:

U=0,01240,012≈0,000300.

De zender is ongeveer 0,03% van de tijd actief. De doorvoersnelheid is ongeveer 12.000 bits per 0,040012 s, of 300 kbit/s. Een zeer snelle verbinding vervoert nog steeds weinig nuttig verkeer, omdat de zender bijna de hele cyclus wacht.

Verzend pakketten via pipelining

Met pipelining kunnen meerdere onbevestigde pakketten onderweg zijn. Als er maximaal N pakketten in het zendvenster passen, wordt de ideale benutting:

U=min⁡(1,N(L/R)RTT+L/R).

Bij dezelfde verbinding geven 1.000 pakketten een benutting van ongeveer 0,30. Om de verbinding volledig bezet te houden zijn minstens 40,012/0,012≈3.334,33 pakkettransmissietijden nodig, dus rond je naar boven af op 3.335 pakketten. Als je naar beneden afrondt, blijft er een korte periode zonder verzending over vóór de eerste ACK.

Een grotere pijplijn vereist genoeg volgnummers om de pakketten te onderscheiden en genoeg bufferruimte om onbevestigde gegevens te bewaren. Afhankelijk van het protocol kan ook de ontvanger buffering nodig hebben. Go-back-N en selectieve herhaling maken hierin verschillende ontwerpkeuzes.

Als je alleen de transmissiesnelheid verhoogt, wordt de toch al korte transmissietijd nog korter. Bij een vaste pakketgrootte en RTT verlaagt dat de benutting van stop-and-wait. Meer gegevens onderweg stellen de zender in staat de beschikbare capaciteit te gebruiken.

Belangrijkste punten

  • Een timer maakt voortgang mogelijk wanneer gegevens of terugkoppeling verloren gaan.
  • Een voortijdige time-out verspilt capaciteit, maar volgnummers voorkomen dubbele aflevering.
  • Gebruik bits voor de pakketlengte wanneer de transmissiesnelheid in bit/s is gegeven.
  • De benutting bij stop-and-wait is de transmissietijd gedeeld door de volledige cyclustijd.
  • Pipelining verbetert de benutting door meerdere onbevestigde pakketten toe te staan.
  • Rond een vereist venster in hele pakketten naar boven af en begrens de benutting op 1.

3.3 Go-back-N-vensters en cumulatieve ACK's

Go-back-N (GBN) staat maximaal N verzonden maar onbevestigde pakketten toe. Het schuifvenster van de zender schuift vooruit wanneer ontvangstbevestigingen de aflevering bevestigen. De ontvanger blijft eenvoudig: hij accepteert alleen het volgende pakket in volgorde.

Houd de bereiken van de zender uit elkaar

De variabele base geeft het oudste onbevestigde pakket aan. nextseqnum geeft het volgende nieuwe pakket aan dat kan worden verzonden. Vóór de cyclische terugloop van volgnummers zijn de bereiken:

  • Onder base: al bevestigd.
  • Van base tot en met nextseqnum − 1: verzonden, wacht op bevestiging.
  • Van nextseqnum tot en met base + N − 1: beschikbaar voor nieuwe gegevens.
  • Vanaf base + N: geblokkeerd totdat het venster opschuift.

Bij base = 10, nextseqnum = 13 en N=5 zijn pakketten 10–12 onbevestigd. Pakketten 13 en 14 kunnen worden verzonden. Pakket 15 niet. Een venster begrenst de hoeveelheid onbevestigde gegevens, niet het totale aantal pakketten in een overdracht.

Cumulatieve ontvangstbevestigingen verschuiven de ondergrens

GBN-ACK n bevestigt alle pakketten tot en met n. Die verschuift base naar n+1. Eén latere cumulatieve ACK kan dus eerdere ACK's dekken die verloren zijn gegaan. Deze nummeringsconventie geeft het laatst geaccepteerde pakket aan; de ACK-conventie van TCP geeft de volgende verwachte byte aan.

GBN houdt één timer bij voor het oudste onbevestigde pakket. De verzending van het eerste onbevestigde pakket start de timer. Een ACK die de ondergrens verschuift, start de timer opnieuw als er nog onbevestigde gegevens zijn; bevestiging van alles stopt de timer. Wanneer de timer afloopt, verzendt de zender elk pakket opnieuw dat is verzonden maar onbevestigd blijft. Dat aantal kan kleiner zijn dan het maximale venster N.

Volg een ontbrekend pakket

Gebruik een venster van vier en verstuur pakketten 0, 1, 2 en 3. Pakket 2 gaat verloren. De ontvanger levert 0 en 1 af en stuurt ACK 0 en ACK 1. Pakket 3 komt na het ontbrekende pakket aan: de ontvanger verwerpt het en herhaalt ACK 1.

De eerste twee ACK's maken ruimte voor pakketten 4 en 5. Ook die komen na het ontbrekende pakket 2 aan, dus worden beide verworpen en met ACK 1 beantwoord. De ondergrens van de zender blijft 2. Bij een time-out verzendt hij 2, 3, 4 en 5 opnieuw. Die komen nu in volgorde aan en kunnen allemaal worden afgeleverd.

De kopieën van 3, 4 en 5 waren de eerste keer onbeschadigd. GBN verzendt ze opnieuw omdat de ontvanger geen pakketten buiten volgorde buffert. Dat bespaart toestand bij de ontvanger, ten koste van extra verkeer na verlies.

Laat één volgnummer buiten het venster

Een k-bits veld biedt 2k pakketnummers, die cyclisch opnieuw worden gebruikt. GBN vereist:

N≤2k−1.

Met drie bits zijn de nummers 0–7 en is het grootste zendvenster zeven. Als alle acht waren toegestaan, zou de ontvanger 0–7 kunnen accepteren en daarna weer 0 verwachten. Als alle ACK's verloren zouden gaan, zou een opnieuw verzonden oude 0 er dan als nieuw uitzien. Als alleen 0–6 zijn verzonden, verwacht de ontvanger daarentegen 7 en kan hij de opnieuw verzonden 0 als oud herkennen. Vensterberekeningen rond de cyclische terugloop volgen de cyclische volgorde, niet de gewone numerieke grootte.

Belangrijkste punten

  • GBN-ACK n bevestigt elk pakket tot en met n.
  • De ontvanger verwerpt pakketten die na een ontbrekend pakket aankomen.
  • Eén timer houdt het oudste onbevestigde pakket bij.
  • Bij een time-out worden de verzonden, onbevestigde pakketten opnieuw verzonden.
  • Het grootste GBN-venster met k-bits nummers is 2^k − 1.

3.4 Selectieve herhaling en hergebruik van volgnummers

Selectieve herhaling (SR) bewaart correct ontvangen pakketten, ook wanneer eerdere pakketten ontbreken. Elk geldig pakket krijgt een eigen ACK. De zender kan dan alleen een pakket vervangen waarvan de timer afloopt.

Houd elk pakket afzonderlijk bij

Het venster van de zender begint bij send_base, het oudste onbevestigde pakket, en bevat N toegestane volgnummers. Elk onbevestigd pakket heeft een logische timer. Een ACK markeert dat specifieke pakket als ontvangen. Een ACK voorbij de ondergrens verschuift het venster op zichzelf niet: de ondergrens blijft bij het eerste ontbrekende pakket. Zodra dat pakket is bevestigd, schuift de ondergrens voorbij eventuele volgende pakketten die al zijn bevestigd.

Het venster van de ontvanger begint bij rcv_base, het volgende pakket dat nodig is voor aflevering. Een geldig pakket binnen het venster wordt bevestigd. Gegevens buiten volgorde worden gebufferd. Wanneer het pakket aan de ondergrens aankomt, levert de ontvanger het af, samen met elk opeenvolgend gebufferd pakket erna, tot aan het volgende ontbrekende pakket.

Een pakket in het direct voorafgaande venster is een oud duplicaat. De ontvanger bevestigt het opnieuw zonder het af te leveren. Deze regel is essentieel wanneer de oorspronkelijke ACK verloren is gegaan: de zender kan nog steeds wachten terwijl de ontvanger al verder is gegaan.

Herstel één verloren pakket

Gebruik N=4 en laat pakket 2 verloren gaan nadat de zender 0–3 heeft verstuurd. De ontvanger levert 0 en 1 af en bevestigt ze, en buffert en bevestigt daarna 3. Met die eerste twee ACK's kan de zender 4 en 5 versturen. Beide worden gebufferd en afzonderlijk bevestigd, maar send_base blijft op 2.

Wanneer de timer van pakket 2 afloopt, wordt alleen 2 opnieuw verzonden. Door de aankomst daarvan kan de ontvanger 2, 3, 4 en 5 samen afleveren en rcv_base naar 6 verschuiven. Zodra ACK 2 de zender bereikt, schuift ook zijn ondergrens naar 6, voorbij pakketten 3–5 waarvan hij de ACK's al heeft.

Waarom het venster maximaal de helft van de volgnummerruimte is

De ontvanger kan voorlopen op de zender omdat ACK's vertraagd of verloren zijn. Nieuwe acceptabele nummers mogen niet overlappen met nummers die nog als oude pakketten opnieuw kunnen worden verzonden.

Stel bij nummers van twee bits, 0–3, en een venster van drie dat de ontvanger 0, 1 en 2 accepteert. Zijn nieuwe venster is {3, 0, 1}. Als alle ACK's verdwijnen, past een opnieuw verzonden oude 0 in dit venster en lijkt die nieuw. De ontvanger kan die niet onderscheiden van een werkelijk nieuwe 0 die na een verloren 3 is verzonden.

Voor even grote zend- en ontvangstvensters is de veilige grens:

N≤2k−1.

Nummering met drie bits staat dus SR-vensters tot vier toe, terwijl GBN zeven toestaat.

KenmerkGo-back-NSelectieve herhaling
Betekenis van ACKAlle pakketten tot en met nAlleen pakket n
TimerEén timer voor het oudste pakketEén logische timer per pakket
Actie bij ontvangst buiten volgordeVerwerpenBufferen en bevestigen
Herstel bij time-outAlle onbevestigde pakkettenHet pakket waarvan de timer afliep
Onderscheid een oude kopie na cyclische terugloop

Venstergrenzen regelen de huidige vensters, maar een echt netwerk kan ook een oude kopie onderweg houden totdat nummers opnieuw worden gebruikt. Een maximale pakketlevensduur begrenst hoe lang zulke kopieën kunnen blijven bestaan. TCP noemt dit de maximale segmentlevensduur (MSL). Bij hoge snelheden kan TCP zijn 32-bits volgnummerruimte snel opnieuw gebruiken, dus helpt bescherming tegen cyclisch teruggelopen volgnummers (PAWS) op basis van tijdstempels om verouderde gegevens te verwerpen.

Belangrijkste punten

  • SR bevestigt elk onbevestigd pakket afzonderlijk en houdt er afzonderlijk een timer voor bij.
  • Pakketten buiten volgorde worden gebufferd totdat het ontbrekende deel voor aflevering is aangevuld.
  • Een latere ACK markeert ontvangst, maar de ondergrens van de zender blijft bij het eerste onbevestigde pakket.
  • Oude duplicaten moeten opnieuw worden bevestigd.
  • Even grote SR-vensters mogen maximaal de helft van de volgnummerruimte beslaan.
  • Lang vertraagde kopieën vereisen ook bescherming wanneer nummers opnieuw worden gebruikt.
4

TCP-segmenten, bytenummers en verbindingen

TCP onderhoudt in elke richting van een verbinding een afzonderlijke bytestroom. De header koppelt die stromen aan poorten, identificeert hun bytes en bevat ontvangstbevestigingen en besturingssignalen. Lees het segmentformaat en volg daarna de nummers tijdens gegevensoverdracht, verbindingsopbouw en afsluiting. Als je de twee richtingen gescheiden houdt, zijn meeliftende ontvangstbevestigingen, eenzijdige sluitingen en de extra volgnummers voor SYN en FIN veel gemakkelijker te volgen.

4.1 De TCP-bytestroom en segmentheader

Een TCP-verbinding is toestand die wordt bijgehouden in twee eindhosts: buffers, bytetellers en andere variabelen die tijdens de verbindingsopbouw worden aangemaakt. De verbinding is punt-tot-punt, tussen twee eindpunten, en fullduplex, zodat beide tegelijk kunnen verzenden. Gewone routers sturen de IP-datagrammen door zonder de TCP-eindpunttoestand bij te houden.

Bytes hebben geen berichtgrenzen

TCP bewaart de volgorde van bytes, maar niet de grenzen van schrijfbewerkingen van de applicatie. Drie schrijfbewerkingen van 100 bytes kunnen de applicatie bereiken in één leesbewerking van 300 bytes, of in leesbewerkingen van 50 en 250 bytes. Een applicatie die berichten uitwisselt, moet zelf berichtafbakening verzorgen, bijvoorbeeld met een lengteveld of een scheidingsteken. Een korte leesbewerking bewijst niet dat een volledig bericht is aangekomen.

Schrijfbewerkingen van de applicatie komen in een zendbuffer. TCP kiest stukken om te verzenden en bewaart onbevestigde gegevens voor mogelijke hertransmissie. Binnenkomende gegevens komen in een ontvangstbuffer totdat de ontvangende applicatie ze leest.

Bepaal de grootte van gegevens los van de headers

De maximale segmentgrootte (MSS) begrenst de applicatiegegevens in een segment. Zowel TCP- als IP-headers zijn daarbij uitgesloten. Voor een pad dat IP-datagrammen van 1.500 bytes met een IPv4-header van 20 bytes en een TCP-header van 20 bytes ondersteunt, geldt:

MSS=1.500−20−20=1.460 bytes.

Opties nemen meer ruimte in, dus een zender moet rekening houden met hun werkelijke headerlengtes. Elk eindpunt maakt tijdens de handshake de MSS bekend die het kan ontvangen; beperkingen van het pad kunnen verder beperken wat kan worden verzonden. Zonder MSS-optie wordt standaard uitgegaan van 536 gegevensbytes voor IPv4 en 1.220 voor IPv6.

Lees de headervelden
VeldGrootteDoel
Bron- en bestemmingspoortElk 16 bitsDe eindpunten van de applicaties identificeren
Volgnummer32 bitsDe eerste gegevensbyte identificeren
Bevestigingsnummer32 bitsDe volgende verwachte byte aangeven
Gegevensoffset4 bitsDe headerlengte in 32-bits woorden aangeven
Ontvangstvenster16 bitsDe capaciteit van de ontvanger bekendmaken
Controlesom16 bitsFouten detecteren met een pseudoheader
Aanwijzer voor urgente gegevens16 bitsUrgente gegevens lokaliseren wanneer URG aanstaat

De minimale header bestaat uit vijf 32-bits woorden, of 20 bytes. Een gegevensoffset van 8 betekent 32 bytes, inclusief 12 bytes buiten de vaste header. De maximale offset is 15: in totaal 60 bytes, met ruimte voor maximaal 40 bytes aan opties.

Interpreteer vlaggen en opties

SYN synchroniseert volgnummers tijdens het openen. FIN sluit één verzendrichting. RST breekt een verbinding af of weigert die. ACK maakt het bevestigingsveld geldig. PSH vraagt om snelle aflevering aan de applicatie; het maakt geen berichtgrens. URG maakt de aanwijzer voor urgente gegevens geldig, hoewel nieuwe applicaties het advies krijgen dat mechanisme te vermijden. ECE en CWR bevatten signalen voor expliciete congestiemelding.

Veelvoorkomende opties zijn MSS, vensterschaling, tijdstempels en selectieve ontvangstbevestiging (SACK). Schaling vergroot het bereik van het ontvangstvenster. Tijdstempels helpen de RTT te meten en verouderde segmenten te verwerpen. SACK beschrijft ontvangen blokken na een ontbrekend deel.

Zonder opties voegen TCP en IPv4 samen 40 bytes toe. Een volledig gegevenssegment van 1.460 bytes neemt een IP-datagram van 1.500 bytes in beslag, waarvan ongeveer 97,3% applicatiegegevens is. Een zuivere ACK heeft geen gegevens, maar neemt nog steeds die 40 headerbytes in beslag.

Belangrijkste punten

  • TCP is een fullduplex, punt-tot-puntbytestroom.
  • Applicaties verzorgen hun eigen berichtafbakening.
  • MSS telt alleen applicatiegegevens; de gegevensoffset telt 32-bits headerwoorden.
  • SYN, FIN en RST hebben verschillende rollen bij verbindingsbeheer.
  • Opties breiden TCP uit zonder de vaste headervelden te veranderen.

4.2 Volgnummers en de volgende verwachte byte

TCP-volgnummers tellen bytes, geen segmenten. Het volgnummer van een segment geeft de eerste gegevensbyte aan. Het bevestigingsnummer beschrijft de tegenovergestelde richting: de volgende byte die deze zender verwacht te ontvangen.

Splits een stroom in segmenten

De SYN gebruikt een initieel volgnummer (ISN) van 3.000. De eerste gegevensbyte is daarom 3.001. Een bestand van 10.000 bytes met een MSS van 1.460 vereist zes volledige gegevenssegmenten en één korter segment:

SegmentEerste byteGegevensbytes
13.0011.460
24.4611.460
35.9211.460
47.3811.460
58.8411.460
610.3011.460
711.7611.240

Elk volgend volgnummer krijg je door de gegevenslengte van het vorige segment op te tellen. De laatste byte is 13.000, dus succesvolle ontvangst van het hele bestand levert cumulatieve ACK 13.001 op.

Bevestig een aaneengesloten prefix

ACK n bevestigt alle bytes tot en met n−1. Die bevestigt byte n niet. Als de ontvanger bytes tot en met 4.460 heeft, verwacht hij 4.461. Een segment dat bij 5.921 begint, laat een ontbrekend deel achter. Een ontvanger die dat segment buffert, stuurt nog steeds ACK 4.461 omdat zijn aaneengesloten prefix niet is gegroeid.

Daarom kan de ontvangstbevestiging niet simpelweg het grootste waargenomen volgnummer zijn. Latere bytes laten zien dat er iets na het ontbrekende deel is aangekomen; ze vullen het niet op. Wanneer het ontbrekende bereik aankomt, kan een cumulatieve ACK over al gebufferde gegevens heen springen.

Houd beide richtingen onafhankelijk bij

Stel dat de volgende byte van een client 1.000 is en de volgende byte van een server 5.000. De client verstuurt 200 gegevensbytes met volgnummer 1.000 en bevestigingsnummer 5.000. Het antwoord van de server bevat 1.200 bytes met volgnummer 5.000 en bevestigingsnummer 1.200. De volgende zuivere ACK van de client heeft volgnummer 1.200 en bevestigingsnummer 6.200.

De server heeft zijn eigen volgnummer niet afgeleid van de lengte van het verzoek. Elke richting heeft een eigen nummering. Een ACK met uitgaande gegevens meesturen heet meeliften van ontvangstbevestigingen. Een zuivere ACK verbruikt geen volgnummerruimte; SYN en FIN verbruiken elk één nummer, ook zonder gegevens.

Beheer beginwaarden en cyclische terugloop

Eindpunten kiezen een ISN wanneer ze een verbinding openen. Een klok en een pseudowillekeurige functie met een sleutel van de verbindingsadressen en poorten helpen een nieuwe verbinding te onderscheiden van oude vertraagde segmenten en maken geldige nummers moeilijk te raden voor een buitenstaander. Elke verbinding bij nul laten beginnen zou beide beschermingen verzwakken.

De velden zijn 32 bits, dus de nummering loopt cyclisch terug modulo 232, ongeveer 4,3 miljard bytes. Bij 1 Gbit/s duurt het ongeveer 34 s om die ruimte te doorlopen; bij 10 Gbit/s ongeveer 3,4 s. PAWS op basis van tijdstempels biedt op snelle paden een extra controle op verouderde segmenten.

Voor gewone berekeningen buiten de cyclische terugloop is de volgende byte na een gegevenssegment het volgnummer plus de gegevenslengte. Als een SYN of FIN aanwezig is, tel je het ene extra nummer mee dat die besturingsvlag verbruikt. Pas de berekening afzonderlijk toe op elke richting.

Belangrijkste punten

  • Het volgnummer van een segment identificeert de eerste byte ervan.
  • ACK n bevestigt bytes tot en met n − 1 en geeft de volgende verwachte byte aan.
  • Een ontbrekend deel houdt de cumulatieve ACK gelijk, ook als latere gegevens worden gebufferd.
  • Elke richting heeft een onafhankelijke nummering.
  • Gegevens, SYN en FIN verbruiken volgnummerruimte; zuivere ACK's niet.
  • Volgnummers lopen cyclisch terug modulo 2^32.

4.3 Een verbinding openen, eenzijdig sluiten en vrijgeven

Bij de verbindingsopbouw van TCP kunnen beide eindpunten een beginvolgnummer bekendmaken en vaststellen dat de andere kant het heeft ontvangen. Bij het latere afsluiten wordt elke richting afzonderlijk vrijgegeven. Deze besturingsuitwisselingen gebruiken dezelfde volgnummerruimte als gegevens.

Volg de drieweg-handshake
  1. De client maakt verbindingstoestand aan, verstuurt SYN met ISN 7.000 en gaat naar SYN_SENT.
  2. De server antwoordt met SYN-ACK, volgnummer 21.000 en bevestigingsnummer 7.001. Hij bevindt zich in SYN_RCVD terwijl hij op bevestiging wacht.
  3. De client registreert het nummer van de server en stuurt ACK met volgnummer 7.001 en bevestigingsnummer 21.001. De client gaat naar ESTABLISHED; de server doet dat wanneer die ACK aankomt.

Elke SYN verbruikt één nummer. Het derde segment kan al applicatiegegevens bevatten. De gewone handshake kost één rondlooptijd voordat de client die eerste gegevens kan versturen. Een uitwisseling van twee berichten zou de server niet laten weten dat de client zijn ISN heeft ontvangen en zou ertoe kunnen leiden dat hij een vertraagde oude SYN als een nieuw verzoek accepteert.

Bij de socketinterface start connect een actieve opening. Een server luistert naar verzoeken en accept geeft na de verbindingsopbouw een nieuwe verbindingssocket terug. De luistersocket blijft beschikbaar voor andere clients.

Sluit elke richting

Een eindpunt stuurt FIN wanneer het geen bytes meer te verzenden heeft. De andere kant bevestigt die FIN door zijn ACK tot één voorbij de FIN te verhogen. De andere kant kan zijn eigen resterende bytes nog versturen: dit is een eenzijdige sluiting. Zijn latere FIN sluit de andere richting en heeft ook een ACK nodig. Sluiten gebruikt meestal vier segmenten, hoewel een FIN en ACK kunnen worden gecombineerd.

Voor een client die als eerste sluit, is het gebruikelijke toestandspad ESTABLISHED → FIN_WAIT_1 na het verzenden van FIN → FIN_WAIT_2 zodra die FIN is bevestigd → TIME_WAIT na ontvangst en bevestiging van de FIN van de andere kant → CLOSED. De andere kant gaat door CLOSE_WAIT terwijl de applicatie afrondt, daarna door LAST_ACK na het verzenden van een eigen FIN en ten slotte naar CLOSED bij ontvangst van de ACK.

Zorg dat de laatste ACK kan worden hersteld

Bij de gebruikelijke actieve sluiting duurt TIME_WAIT tweemaal de maximale segmentlevensduur. Als de laatste ACK verdwijnt, kan het andere eindpunt zijn FIN opnieuw verzenden en een nieuwe ACK ontvangen. Door te wachten krijgen oude segmenten ook tijd om te verlopen voordat het viertupel van de verbinding opnieuw wordt gebruikt. De MSL-waarde van twee minuten uit de standaard levert vier minuten op; implementaties kunnen andere tijden gebruiken, waarbij 60 seconden een bekende Linux-waarde is.

Een RST verschilt van FIN: die breekt de verbinding af of weigert een verzoek. Een SYN naar een gesloten poort krijgt normaal RST terug. SYN-ACK wijst op een luisterende socket; stilte kan het gevolg zijn van filtering, verlies of een onbereikbare bestemming.

Bescherm onvoltooide handshakes

Een SYN-flood verstuurt veel openingsverzoeken zonder ze te voltooien. Een server die voor elke halfopen verbinding middelen reserveert, kan zijn beschikbare ruimte voor toestand uitputten. SYN-cookies stellen de toewijzing van die toestand per verbinding uit. De server verwerkt verifieerbare verbindingsinformatie in zijn gekozen ISN met behulp van een geheim en tijdsafhankelijke invoer. Een geldige laatste ACK geeft de cookie terug via het bevestigingsnummer, zodat de server die kan controleren en toestand kan aanmaken. De server heeft nog steeds een luistersocket en gedeelde middelen; hij voorkomt dat voor elke SYN een afzonderlijke onvoltooide verbinding wordt opgeslagen.

Belangrijkste punten

  • De handshake bevestigt beide initiële volgnummers.
  • SYN en FIN verbruiken elk één volgnummer.
  • Een FIN sluit één richting; de andere kant mag blijven verzenden.
  • TIME_WAIT maakt herstel van de laatste ACK en het verlopen van oude segmenten mogelijk.
  • RST breekt een verbinding af of weigert die.
  • SYN-cookies verminderen de toestand per verzoek voordat de handshake is voltooid.
5

TCP-herstel en het tempo van de ontvanger

Een ACK kan vertraagd raken, een segment kan verdwijnen en de ontvangende applicatie kan stoppen met lezen. TCP heeft afzonderlijke reacties op deze gebeurtenissen nodig. RTT-schattingen bepalen hoe lang TCP wacht, dubbele ACK's kunnen een ontbrekend deel vóór een time-out aan het licht brengen en het ontvangstvenster meldt de beschikbare bufferruimte. Volg de onbevestigde bytes van de zender naast de opgeslagen bytes van de ontvanger om te zien waarom een herstelde verbinding toch moet wachten voordat er meer gegevens kunnen worden verzonden.

5.1 Meet de RTT en kies een hertransmissietime-out

TCP heeft een hertransmissietime-out nodig die lang genoeg is voor normale rondlooptijden, maar kort genoeg om snel van verlies te herstellen. De RTT varieert wanneer wachtrijen en paden veranderen, dus volgt de time-out zowel een afgevlakte schatting als de grootte van recente afwijkingen.

Neem een ondubbelzinnige meting

SampleRTT meet het interval vanaf het verzenden van gegevens tot de ontvangst van een ACK die die gegevens dekt. In een basisimplementatie meet TCP één geschikt segment tegelijk. Het algoritme van Karn sluit opnieuw verzonden gegevens uit van gewone RTT-metingen: een ACK kan naar de oorspronkelijke kopie of de vervanging verwijzen. Overeengekomen tijdstempels kunnen deze dubbelzinnigheid wegnemen.

De eerste geldige meting R stelt EstimatedRTT in op R en DevRTT op R/2. Voordat er een meting is, is de aanbevolen initiële time-out 1 s.

Werk de variatie vóór het gemiddelde bij

Gebruik voor een nieuwe meting de vorige EstimatedRTT om de afwijking te meten:

DevRTTnew=0,75DevRTTold+0,25∣SampleRTT−EstimatedRTTold∣.

Werk daarna het exponentieel gewogen voortschrijdend gemiddelde bij:

EstimatedRTTnew=0,875EstimatedRTTold+0,125SampleRTT.

De aanbevolen gewichten zijn β=1/4 en α=1/8. Oudere metingen behouden na elke bijwerking minder invloed. Als je het gemiddelde eerst bijwerkt, verandert de afwijking die in de eerste vergelijking wordt gebruikt.

Werk één bijwerking uit

Begin met EstimatedRTT = 100 ms en DevRTT = 10 ms; neem een meting van 120 ms.

  1. Absolute afwijking: ∣120−100∣=20 ms.
  2. Nieuwe DevRTT: 0,75(10)+0,25(20)=12,5 ms.
  3. Nieuwe EstimatedRTT: 0,875(100)+0,125(120)=102,5 ms.
  4. Basistime-out: 102,5+4(12,5)=152,5 ms.

De basisregel is:

TimeoutInterval=EstimatedRTT+4DevRTT.

De volledige standaard gebruikt EstimatedRTT + max(G, 4 DevRTT), waarbij G de klokgranulariteit is. Wanneer de marge van vier afwijkingen groter is dan het klokinterval, geeft de basisregel hetzelfde resultaat.

De standaard beveelt aan een berekende waarde onder 1 s te verhogen tot 1 s. Werkelijke implementaties kunnen een lager minimum gebruiken; een gebruikelijk Linux-minimum is 200 ms. De berekende 152,5 ms is daarom een ruwe schatting, niet noodzakelijk de timer die een host instelt. Een optionele bovengrens moet minstens 60 s zijn.

Verleng de wachttijd na een time-out

Wanneer de timer afloopt, verzendt TCP de oudste onbevestigde gegevens opnieuw en verdubbelt het de time-out. Een huidige waarde van 0,75 s wordt 1,5 s en na nog een keer aflopen 3 s. Herhaalde onmiddellijke pogingen zouden verkeer toevoegen aan een pad dat al geen terugkoppeling aflevert.

Een nieuw aankomende ACK verlaagt die verlengde time-out niet noodzakelijk. TCP heeft een geldige nieuwe RTT-meting nodig om de schatting opnieuw te berekenen. Zonder tijdstempels verhindert de dubbelzinnigheid door hertransmissie dat een ACK voor de opnieuw verzonden gegevens als die nieuwe meting wordt gebruikt. Zodra geschikte nieuwe gegevens zijn verzonden en bevestigd, kan een nieuwe meting de berekende time-out verlagen.

Belangrijkste punten

  • Het algoritme van Karn vermijdt dubbelzinnige metingen van opnieuw verzonden gegevens.
  • Werk DevRTT bij met de oude EstimatedRTT en werk daarna EstimatedRTT bij.
  • De time-out bevat een variatiemarge en grenzen van de implementatie.
  • Bij een time-out verdubbelt het huidige hertransmissie-interval.
  • Een geldige nieuwe RTT-meting maakt het mogelijk een verlengde time-out opnieuw te berekenen.

5.2 Cumulatieve ACK's, timers en snelle hertransmissie

TCP combineert een controlesom, bytevolgnummers, cumulatieve ACK's en hertransmissie om een betrouwbare stroom af te leveren. De zender moet een ACK die de aflevergrens vooruitbrengt onderscheiden van een ACK die de huidige grens herhaalt.

Volg de gebeurtenissen bij de zender

SendBase is de eerste onbevestigde byte; NextSeqNum is het volgende ongebruikte bytenummer. Nieuwe applicatiegegevens worden verzonden met volgnummer NextSeqNum, dat daarna met de gegevenslengte wordt verhoogd. Als er geen hertransmissietimer loopt, start verzending van onbevestigde gegevens de timer.

Het aanbevolen basistimeralgoritme gebruikt één hertransmissietimer voor het oudste onbevestigde segment. Bij een time-out wordt dat oudste onbevestigde segment opnieuw verzonden, het interval verdubbeld en de timer opnieuw gestart. Een ACK groter dan SendBase verschuift de ondergrens en start de timer opnieuw als er onbevestigde gegevens overblijven. Als alles is bevestigd, stopt de timer. Een dubbele ACK verschuift de ondergrens niet.

Verloren ACK's hoeven geen probleem te blijven

A verstuurt 500 bytes vanaf 501. B ontvangt ze en stuurt ACK 1.001, die verloren gaat. Als niets anders die bytes bevestigt, krijgt A een time-out en verzendt ze opnieuw. B herkent het duplicaat, levert geen extra gegevens af en stuurt opnieuw ACK 1.001.

Stel nu dat A ook de volgende 500 bytes had verstuurd, vanaf 1.001. Als ACK 1.501 vóór de time-out aankomt, bevestigt die beide segmenten. Het verlies van ACK 1.001 vereist geen hertransmissie. Een ACK is cumulatief, dus de zender heeft niet voor elk segment een afzonderlijke aangekomen ACK nodig.

Bij een voortijdige time-out verzendt A alleen het oudste segment opnieuw. Als vertraagde ACK's vervolgens beide oorspronkelijke segmenten bevestigen, hoeft A het tweede niet opnieuw te verzenden. Een time-out geeft aan dat terugkoppeling niet op tijd aankwam, niet dat elk onbevestigd segment is verdwenen.

Gebruik de timing van ACK's om ontbrekende delen te melden

Bij gegevens die in volgorde aankomen terwijl geen ACK wacht, mag de ontvanger een ACK kort uitstellen, minder dan 0,5 s, om ontvangstbevestigingen te combineren. Hij moet minstens elk tweede segment van volledige grootte bevestigen. Een tweede aankomst in volgorde terwijl een ACK wacht, leidt tot een cumulatieve ACK. Een aankomst buiten volgorde na een ontbrekend deel leidt onmiddellijk tot een dubbele ACK; het geheel of gedeeltelijk aanvullen van een ontbrekend deel leidt ook onmiddellijk tot een ACK.

Herstel een ontbrekend deel vóór de time-out

Stel dat A vijf segmenten van 1.000 bytes verstuurt die beginnen bij 1.001, 2.001, 3.001, 4.001 en 5.001. Het tweede gaat verloren. De ACK van B na het eerste is 2.001. De drie latere aankomsten leveren elk opnieuw ACK 2.001 op.

Na drie dubbele ACK's gebruikt A snelle hertransmissie om het segment dat bij 2.001 begint opnieuw te verzenden zonder op de time-out te wachten. Omdat de latere gegevens zijn gebufferd, kan B door het aanvullen van dat ontbrekende deel 6.001 bevestigen. De eerste ACK 2.001 is de oorspronkelijke ACK; de volgende drie zijn duplicaten. Eén of twee dubbele ACK's kunnen ontstaan door gewone herordening, wat verklaart waarom op meer aanwijzingen wordt gewacht.

TCP combineert ideeën uit beide vensterprotocollen. Zijn cumulatieve ACK's en eenvoudige enkele timer lijken op GBN, maar zijn buffering en gerichte hertransmissie lijken op SR. De overeengekomen SACK meldt byteblokken voorbij de cumulatieve grens, zodat de zender meerdere ontbrekende delen nauwkeuriger kan identificeren. TCP stuurt geen NAK voor een mislukte controlesom; het resulterende ontbrekende deel blijkt uit latere ACK's of een time-out.

Belangrijkste punten

  • Een cumulatieve ACK kan een eerdere verloren ACK dekken.
  • De basishertransmissietimer beschermt de oudste onbevestigde gegevens.
  • Een time-out vereist niet dat alle onbevestigde segmenten opnieuw worden verzonden.
  • Drie dubbele ACK's zetten in het basisalgoritme snelle hertransmissie in gang.
  • SACK meldt ontvangen blokken na een ontbrekend deel zonder de betekenis van cumulatieve ACK's te veranderen.

5.3 Ontvangstvensters en bufferruimte

Stroomregeling voorkomt dat een TCP-zender de buffer van de ontvanger laat overlopen. Ze reageert op hoe snel de ontvangende applicatie leest. Congestiebeheersing reageert op belasting in het netwerk; de twee regelingen beschermen verschillende middelen.

Bereken de beschikbare ruimte

Laat RcvBuffer de buffercapaciteit zijn, LastByteRcvd de laatste in volgorde opgeslagen byte en LastByteRead de laatste byte die de applicatie heeft gelezen. In dit model met aaneengesloten gegevens is de bezette ruimte LastByteRcvd − LastByteRead. Het ontvangstvenster is:

rwnd=RcvBuffer−(LastByteRcvd−LastByteRead).

De ontvanger maakt de beschikbare ruimte bekend in het vensterveld van zijn teruggestuurde segmenten. De zender houdt zijn aantal onbevestigde bytes binnen die ruimte:

LastByteSent−LastByteAcked≤rwnd.

Bij RcvBuffer = 40.000 bytes, LastByteRcvd = 30.000 en LastByteRead = 18.000 is de bezetting 12.000 en rwnd 28.000 bytes. ACK 30.001 met dit venster staat onbevestigde bytes tot en met 58.000 toe. Als de zender al tot en met 34.000 heeft verzonden, heeft hij 4.000 onbevestigde bytes en mag hij er nog 24.000 verzenden. Het venster is de toegestane ruimte voor alle onbevestigde bytes, geen extra ruimte boven op die bytes.

Hervat na een nulvenster

Wanneer er geen ruimte meer is, maakt de ontvanger rwnd = 0 bekend en stopt de zender met de normale verzending van nieuwe gegevens. Wanneer de applicatie leest, maakt de ontvanger de nieuw beschikbare ruimte bekend in een vensterupdate.

Die update kan een zuivere ACK zijn, die op zichzelf niet betrouwbaar wordt afgeleverd. Als die verloren gaat, kan de zender blijven wachten hoewel er ruimte is. Testberichten bij een nulvenster, die meestal één byte bevatten, zetten de ontvanger ertoe aan zijn huidige venster terug te sturen. De tussenpozen tussen testberichten worden groter; het is geen normale verzending van grote hoeveelheden gegevens door een gesloten venster.

Breng het venster in verband met de doorvoersnelheid

Bij een vast venster en een vaste RTT voldoet de ideale doorvoersnelheid die door het venster wordt begrensd aan:

doorvoersnelheid≤rwndRTT.

Gebruik bytes en seconden om bytes/s te krijgen. Een venster van 65.535 bytes bij een RTT van 0,1 s staat ongeveer 655.350 bytes/s toe, of 5,2 Mbit/s. Een hogere transmissiesnelheid kan deze venstergrens niet wegnemen.

Om een pad volledig te benutten moet het venster het bandbreedte-vertragingsproduct dekken. Bij 1 Gbit/s en 0,1 s zijn de vereiste gegevens onderweg 100 miljoen bits, of 12,5 MB. Dit is een noodzakelijke venstergrootte voor die ideale snelheid, geen garantie dat die wordt bereikt.

Schaal het veld en vermijd zeer kleine updates

Het 16-bits veld alleen kan zo'n groot venster niet weergeven. Een optie voor vensterschaling die in SYN's wordt overeengekomen, vermenigvuldigt latere vensterwaarden met 2s, waarbij s≤14. De grootste schaal geeft iets minder dan 1 GiB. Een verschuiving van 7 staat maximaal 8.388.480 bytes toe; verschuiving 8 staat 16.776.960 toe, genoeg voor het voorbeeld van 12,5 MB. De schaal blijft vast voor die richting, terwijl de bekendgemaakte ruimte verandert. De venstervelden van SYN's zelf worden niet geschaald.

Als telkens na het vrijkomen van enkele bytes de ruimte wordt bekendgemaakt, kan het syndroom van kleine vensters ontstaan: veel zeer kleine segmenten met grote headeroverhead. Om dit te voorkomen wacht de ontvanger op een bruikbare hoeveelheid vrije ruimte, meestal één MSS of de helft van de buffer, afhankelijk van welke kleiner is. Het algoritme van Nagle pakt kleine schrijfbewerkingen bij de zender aan door ze vast te houden zolang eerdere gegevens onbevestigd blijven, of totdat er genoeg gegevens zijn voor een volledig segment.

Belangrijkste punten

  • Stroomregeling beschermt de ontvanger; congestiebeheersing beschermt het netwerk.
  • Trek gebufferde ongelezen gegevens af van de capaciteit om rwnd te vinden.
  • Trek bestaande onbevestigde gegevens af van rwnd voordat je meer verzendt.
  • Testberichten bij een nulvenster herstellen een verloren update die het venster weer opent.
  • Het venster gedeeld door de RTT begrenst de ideale doorvoersnelheid die door het venster wordt beperkt.
  • Vensterschaling legt de vermenigvuldigingsfactor bij de verbindingsopbouw vast, terwijl de vrije ruimte blijft veranderen.
  • Updateregels voor de ontvanger en het algoritme van Nagle pakken verschillende oorzaken van zeer kleine segmenten aan.

Transportlaag: voorbeelden

5 Walkthroughs

1

Volg gegevens van de ene socket naar de andere

9 stappen
Volg aflevering via de transportlaag, selecteer ontvangende sockets en leg uit hoe TCP en UDP applicaties bedienen.
  1. 1
    IntroductieEén host, meerdere gesprekken

    Een laptop kan een pagina bekijken terwijl er een gesprek wordt gevoerd. Beide applicaties delen de aflevering van IP, maar hebben elk hun eigen binnenkomende gegevens nodig.

    Volg een bericht vanaf een applicatiesocket naar beneden, over het netwerk en omhoog naar de bestemmingssocket. Vergelijk daarna hoe een UDP-server meerdere bronnen afhandelt met hoe een TCP-server tot stand gebrachte verbindingen onderscheidt.

  2. 2
    UitlegBouw een segment op en pak het uit

    Het verzendende transportprotocol neemt applicatiegegevens en voegt zijn header toe, waardoor een segment ontstaat. IP plaatst dat segment in een IP-datagram.

    Op de bestemming bepaalt IP het bovenliggende protocol en geeft het segment naar boven door. TCP of UDP interpreteert de transportheader en selecteert een socket. De applicatie leest via die socket; gewone routers sturen de IP-datagrammen alleen door over het pad.

  3. 3
    AnalogieEen adres en een ontvanger

    Een gebouwadres brengt een brief naar het juiste gebouw. Een naam van een ontvanger laat iemand binnen de brief naar de juiste persoon doorsturen. Op vergelijkbare wijze ondersteunen IP-adressen aflevering bij hosts, terwijl transportpoorten helpen een applicatiesocket te selecteren.

    De vergelijking onderscheidt twee taken. Werkelijke transportprotocollen bieden ook vastgelegde diensten: TCP kan ontbrekende bytes herstellen, terwijl UDP herstel overlaat aan bovenliggende software.

  4. 4
    UitdagingKan TCP een aankomsttijd beloven?

    Een applicatie heeft elke byte onbeschadigd nodig en ook een gegarandeerde aankomst binnen 25 ms. Voldoet de keuze voor TCP aan beide eisen?

    ---reveal---

    TCP biedt betrouwbare aflevering van bytes in volgorde, maar garandeert die deadline van 25 ms niet. Herstel kan vertraging toevoegen en het IP-pad zonder garanties biedt geen vaste maximale wachttijd. Een aflevergarantie en een deadlinegarantie zijn afzonderlijke eisen.

  5. 5
    UitlegSelecteer een ontvangende UDP-socket

    Een eenvoudige niet-verbonden UDP-serversocket wordt geselecteerd op basis van het IP-bestemmingsadres en de bestemmingspoort. Berichten van verschillende clients kunnen allemaal die socket bereiken.

    Stel dat 203.0.113.20:7000 berichten ontvangt van 192.0.2.5:55010 en 198.51.100.9:55010. De bronpoort is gelijk, maar de bronnen verschillen. De server leest bij elk bericht het broneindpunt om het juiste antwoord te adresseren.

  6. 6
    VoorbeeldGebruik een TCP-serverpoort opnieuw

    Een TCP-server op 203.0.113.20:443 heeft twee clients: 192.0.2.5:55010 en 198.51.100.9:55010.

    Elke tot stand gebrachte verbinding heeft een eigen viertupel. Beide delen het serveradres en de serverpoort; hun bronadressen onderscheiden ze. De luistersocket accepteert meer clients terwijl de verbindingssockets de bestaande streams vervoeren. Er is geen extra luisterpoort nodig voor elke client.

  7. 7
    UitdagingTel de verbindingssockets

    Een server op 203.0.113.30:443 accepteert verbindingen van 192.0.2.7:56000, 192.0.2.7:56001 en 198.51.100.7:56000. Hoeveel verbindingssockets onderscheiden deze streams?

    ---reveal---

    Drie. De eerste twee verschillen in bronpoort; de eerste en derde verschillen in bronadres. Hun gedeelde bestemmingspoort voegt ze niet samen. De luistersocket staat apart en is niet een van deze drie verbindingssockets.

  8. 8
    UitdagingKies het transportprotocol en het ontvangende eindpunt

    Een dienst heeft afzonderlijke berichten zonder verbindingsopbouw nodig. Twee clients sturen naar de niet-verbonden socket op 203.0.113.40:8000. Welk transportprotocol is geschikt en wat selecteert die serversocket?

    ---reveal---

    UDP is geschikt voor de berichtendienst zonder transporthandshake. Het bestemmingsadres 203.0.113.40 en poort 8000 selecteren de eenvoudige serversocket. De broneindpunten geven aan waar antwoorden naartoe gaan; ze vereisen geen afzonderlijke verbindingen zoals bij TCP.

  9. 9
    SamenvattingLees een afleververloop in volgorde

    Bepaal bij een inkomend verloop eerst het transportprotocol, dan de eindpuntgegevens en vervolgens de dienst die de applicatie ontvangt.

    Een UDP-bericht en een TCP-bytestroom kunnen hetzelfde numerieke serverpoortnummer delen omdat ze bij verschillende protocollen horen. Binnen TCP onderscheiden beide adressen en beide poorten een verbinding. Betrouwbaarheid, timing en versleuteling moeten elk als afzonderlijke applicatiebehoefte worden beoordeeld.

2

Controleer een UDP-bericht en kies de dienst

11 stappen
Lees UDP-velden, voer een overdracht bij een controlesom terug en bepaal of verliesherstel een applicatiedeadline kan halen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieEen kleine header met een specifieke taak
  2. 2
    UitlegTel de bytes van een UDP-segment
  3. 3
    UitlegBereid de invoer voor de controlesom voor
  4. 4
    VoorbeeldVoer de overdracht terug voordat je doorgaat
  5. 5
    VoorbeeldNeem het complement en controleer
  6. 6
    UitdagingVerwerk een andere overdracht
  7. 7
    UitlegHoud herstel binnen de deadline
  8. 8
    KernpuntEen UDP-applicatie kan meer toevoegen
  9. 9
    UitdagingZou een vervanging nog helpen?
  10. 10
    UitdagingCombineer berichtgrootte en dienstkeuze
  11. 11
    SamenvattingControleer wat elke laag biedt
3

Bouw een betrouwbare overdracht met een schuifvenster

20 stappen
Ontwikkel verwerking van duplicaten, timers en pipelining en volg daarna Go-back-N en selectieve herhaling bij hetzelfde verlies.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieMaak foutgevallen zichtbaar
  2. 2
    UitlegGeef weer waarop elk eindpunt wacht
  3. 3
    AnalogieGeef een vervanging dezelfde identiteit
  4. 4
    UitdagingBeantwoord een duplicaat zonder opnieuw af te leveren
  5. 5
    UitlegReageer op stilte
  6. 6
    VoorbeeldMeet verzending en wachten afzonderlijk
  7. 7
    VoorbeeldVul dat wachtinterval
  8. 8
    UitdagingBepaal een venster voor pipelining
  9. 9
    UitlegLees het Go-back-N-venster
  10. 10
    VoorbeeldVerlies één pakket bij Go-back-N
  11. 11
    UitdagingVerzend het onbevestigde bereik opnieuw
  12. 12
    KernpuntHoud een ongebruikt nummer buiten het GBN-venster
  13. 13
    UitlegSelectieve herhaling bewaart latere aankomsten
  14. 14
    VoorbeeldHerstel hetzelfde verlies met één vervanging
  15. 15
    UitdagingVerschuif de SR-ondergrens na een late ACK
  16. 16
    VoorbeeldLaat overlap tussen oude en nieuwe nummers zien
  17. 17
    TipHoud vensters gescheiden voordat je nummers opnieuw gebruikt
  18. 18
    UitdagingKies tussen vensterontwerpen
  19. 19
    VerbandVerwerk kopieën die een volledige cyclus overleven
  20. 20
    SamenvattingVolg de toestand voordat je kiest wat je opnieuw verzendt
4

Volg TCP van SYN tot FIN

16 stappen
Lees de header, nummer beide bytestromen en werk het openen en sluiten van een verbinding door.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieHoud twee bytestromen gescheiden
  2. 2
    UitlegLees een stroom, geen rij berichten
  3. 3
    VoorbeeldInterpreteer de headergrootte vóór de grootte van de nettolading
  4. 4
    UitdagingHoud rekening met de werkelijke headers
  5. 5
    UitlegBenoem de eerste gegevensbyte
  6. 6
    VoorbeeldGa verder met segmenten van verschillende grootte
  7. 7
    VoorbeeldLaat een ontvangstbevestiging meeliften
  8. 8
    UitdagingHoud een ACK op dezelfde waarde bij een ontbrekend deel
  9. 9
    VoorbeeldBevestig beide initiële nummers
  10. 10
    UitdagingControleer de velden van de laatste handshake
  11. 11
    UitlegSluit één richting tegelijk
  12. 12
    KernpuntWacht zodat de laatste ACK kan worden herhaald
  13. 13
    VerbandWeiger een openingsverzoek of bescherm je ertegen
  14. 14
    UitdagingBevestig gegevens en afsluiting samen
  15. 15
    TipHerken hergebruik van nummers
  16. 16
    SamenvattingHoud rekening met elk verbruikt nummer
5

Herstel TCP-verlies zonder de ontvanger te overbelasten

18 stappen
Werk een timer bij, identificeer ontbrekende bytes, bereken de beschikbare ontvangstruimte en leg uit hoe een venster weer opengaat.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBepaal wat de voortgang tegenhoudt
  2. 2
    UitlegKies een bruikbare RTT-meting
  3. 3
    VoorbeeldWerk eerst de afwijking bij
  4. 4
    VoorbeeldWerk het gemiddelde bij en pas de grenzen toe
  5. 5
    UitdagingGa verder met een tweede meting
  6. 6
    TipVerleng de wachttijd zonder een meting te verzinnen
  7. 7
    VoorbeeldLaat een latere ACK een verloren ACK dekken
  8. 8
    UitlegMeld een ontbrekend deel met herhaalde ACK's
  9. 9
    UitdagingVul een ontbrekend deel en schuif voorbij gebufferde bytes
  10. 10
    KernpuntGebruik de basistimer voor het oudste ontbrekende deel
  11. 11
    UitlegTel eerst de ongelezen bytes
  12. 12
    VoorbeeldTrek al onbevestigde gegevens af
  13. 13
    UitdagingBereken hoeveel je nog mag verzenden
  14. 14
    VerbandHerstel een verloren update die het venster weer opent
  15. 15
    VoorbeeldBepaal een venstergrootte voor het pad
  16. 16
    TipHoud schaling en zeer kleine updates uit elkaar
  17. 17
    UitdagingHerstel gegevens maar wacht op ruimte
  18. 18
    SamenvattingKoppel elke reactie aan de bijbehorende aanwijzing

Transportlaag: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Transportdiensten en aflevering van berichten10 Oefenvragen

Vraag 1 van 10

Met welke TCP-dienst kan een ontvangende applicatie bestandsbytes in hun oorspronkelijke volgorde ontvangen?
  1. Een gegarandeerde maximale netwerkvertraging
  2. Een betrouwbare bytestroom in volgorde
  3. Eén bericht per schrijfbewerking van de applicatie
  4. Een ingebouwde versleutelde verbinding
Toon antwoordVerberg antwoord
Antwoord: B
TCP nummert bytes en herstelt ontbrekende gegevens voordat het de stroom in volgorde aflevert. Het bewaart de grenzen van schrijfbewerkingen van de applicatie niet, dus drie schrijfbewerkingen hoeven geen drie leesbewerkingen op te leveren. Versleuteling vereist een beveiligingsprotocol zoals TLS; betrouwbaarheid alleen verbergt de bestandsinhoud niet.

Vraag 2 van 10

Twee TCP-clients gebruiken bronpoort 54000 om verbinding te maken met hetzelfde serveradres en dezelfde serverpoort. Hun IP-bronadressen verschillen. Hoe onderscheidt de server hun verkeer?
  1. Hij wijst aan één client een nieuwe luisterpoort toe.
  2. Hij voegt beide clients samen in één bytestroom.
  3. Hij selecteert sockets alleen met bestemmingspoorten.
  4. Hij selecteert verschillende verbindingssockets met viertupels.
Toon antwoordVerberg antwoord
Antwoord: D
Een TCP-verbinding wordt geïdentificeerd door beide IP-adressen en beide poorten. De verschillende bronadressen maken deze viertupels verschillend, ook al zijn de bronpoorten gelijk. De server kan één luisterpoort behouden; hij heeft geen aparte luisterpoort voor elke client nodig.

Vraag 3 van 10

Een UDP-antwoord gaat van 203.0.113.8:123 naar 192.0.2.18:57320. Wat is de bestemmingspoort?
  1. 57320
  2. 123
  3. 17
  4. 192
Toon antwoordVerberg antwoord
Antwoord: A
De bestemmingspoort is de poort van het ontvangende eindpunt, 57320. Poort 123 identificeert in dit antwoord de verzendende dienst en is dus de bronpoort. Een antwoord keert de eindpuntrollen van het verzoek om; de bekende poort van de dienst hoeft niet in beide richtingen de bestemming te zijn.

Vraag 4 van 10

Een UDP-bericht bevat 72 gegevensbytes. Welke waarde hoort in het lengteveld?
  1. 72 bytes
  2. 92 bytes
  3. 80 bytes
  4. 100 bytes
Toon antwoordVerberg antwoord
Antwoord: C
De UDP-lengte omvat de UDP-header van 8 bytes en de 72 gegevensbytes, samen 80 bytes. Als je alleen de applicatiegegevens telt, mis je de transportheader. Als je een IP-header toevoegt, tel je bytes buiten het UDP-segment mee; IP heeft eigen lengte-informatie.

Vraag 5 van 10

Een positie-update in een game verloopt over 35 ms. Het herstellen van een verloren kopie zou 90 ms duren en er is al een nieuwere positie beschikbaar. Waarom kan de applicatie dat herstel overslaan?
  1. De vervanging zou na de bruikbare deadline aankomen.
  2. UDP garandeert dat de nieuwere positie nauwkeurig is.
  3. Het netwerk moet de verloren update al hebben afgeleverd.
  4. Een UDP-header voorkomt het verzenden van oude posities.
Toon antwoordVerberg antwoord
Antwoord: A
De herstelde update zou 55 ms na het verlopen aankomen, zodat de oude positie deze applicatie niet meer zou helpen. UDP bepaalt niet wat bruikbaar is en voorkomt het verzenden van verouderde gegevens niet; de applicatie maakt die keuze. Verlies van een bericht zegt ook niets over de nauwkeurigheid van een nieuwere positie.

Vraag 6 van 10

Een stop-and-waitontvanger heeft pakket 0 afgeleverd en verwacht nu pakket 1. Er komt opnieuw een onbeschadigd pakket 0 aan. Wat moet hij doen?
  1. Het opnieuw afleveren en ACK 0 sturen.
  2. De gegevens verwerpen en ACK 1 sturen.
  3. De gegevens verwerpen en geen terugkoppeling sturen.
  4. De gegevens verwerpen en ACK 0 sturen.
Toon antwoordVerberg antwoord
Antwoord: D
Het herhaalde nummer duidt op een oude kopie, dus de gegevens mogen niet tweemaal worden afgeleverd. Door ACK 0 opnieuw te sturen, kan de zender herstellen als de eerste ACK verloren of onleesbaar was. ACK 1 zou ontvangst bevestigen van het volgende pakket, dat de ontvanger nog niet heeft geaccepteerd.

Vraag 7 van 10

Een stop-and-waitprotocol met alleen fouten heeft controlesommen en ACK/NAK-terugkoppeling, maar geen volgnummers. Waarom is opnieuw verzenden na beschadigde terugkoppeling onveilig?
  1. De vervanging kan geen geldige controlesom bevatten.
  2. De ontvanger kan een al geaccepteerd pakket tweemaal afleveren.
  3. De zender moet bij elke nieuwe poging van bronpoort veranderen.
  4. Het terugkoppelingskanaal kan geen nuttige informatie bevatten.
Toon antwoordVerberg antwoord
Antwoord: B
De onleesbare terugkoppeling kan een ACK zijn geweest voor al afgeleverde gegevens. Zonder pakketidentiteit kan de ontvanger de vervanging voor nieuwe gegevens aanzien en die tweemaal afleveren. Een geldige controlesom controleert of de inhoud onbeschadigd is; die onderscheidt geen duplicaat van een nieuwe aflevering.

Vraag 8 van 10

Een stop-and-waitzender gebruikt pakketten van 1.000 bytes op een verbinding van 8 Mbit/s met een RTT van 19 ms. Negeer transmissie en verwerking van de ACK. Wat is de benutting?
  1. 0,005
  2. 0,95
  3. 0,05
  4. 0,50
Toon antwoordVerberg antwoord
Antwoord: C
Een pakket bevat 8.000 bits, dus transmissie duurt 1 ms. De volledige cyclus is 19 + 1 = 20 ms, wat een benutting van 1/20 = 0,05 geeft. Als je 1.000 als aantal bits gebruikt, vergeet je de omzetting van bytes naar bits en krijg je een onjuiste transmissietijd.

Vraag 9 van 10

Een TCP-gegevensoffsetveld bevat 9. Hoe lang is de TCP-header?
  1. 36 bytes
  2. 9 bytes
  3. 29 bytes
  4. 72 bytes
Toon antwoordVerberg antwoord
Antwoord: A
De gegevensoffset telt woorden van 32 bits, die elk 4 bytes bevatten. Een waarde van 9 geeft daarom 36 bytes TCP-header, inclusief de vaste 20 bytes. Het is de totale headerlengte, dus als je nog eens 20 bytes optelt, tel je het vaste deel een tweede keer.

Vraag 10 van 10

Een zender met het alternerend-bitprotocol verstuurt pakket 1. De ACK raakt vertraagd tot na de time-out, dus wordt een vervanging verstuurd. De oorspronkelijke ACK komt daarna aan voordat de vervanging de ontvanger bereikt. De zender verstuurt het nieuwe pakket 0. Wat levert de ontvanger van vervanging 1 en nieuw pakket 0 af als de gegevenspakketten niet van volgorde veranderen?
  1. Beide pakketten, omdat elk onbeschadigd aankwam.
  2. Geen van beide, omdat de timer van de zender afliep.
  3. Alleen pakket 1, omdat de ACK daarvan eerst aankwam.
  4. Alleen pakket 0, na verwerping van duplicaat 1.
Toon antwoordVerberg antwoord
Antwoord: D
De ontvanger had het oorspronkelijke pakket 1 al afgeleverd voordat hij de vertraagde ACK stuurde. Daarom verwerpt hij vervanging 1 als duplicaat en bevestigt hij die opnieuw. Het nieuwe pakket 0 heeft het verwachte afwisselende nummer en wordt afgeleverd; een time-out maakt de eerdere aflevering niet ongedaan.
Set 2: Schuifvensters en herstel van verlies10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat bevestigt ACK 12 bij Go-back-N?
  1. Alleen pakket 12
  2. Alle pakketten tot en met 12
  3. Alle pakketten vóór 12
  4. Alleen pakketten na 12
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een Go-back-N-zender heeft venstergrootte 6, ondergrens 20 en nextseqnum 24. Er treedt geen cyclische terugloop op. Welke nieuwe pakketten kan hij vóór een volgende ACK verzenden?
  1. 24 tot en met 29
  2. 20 en 21
  3. 24 en 25
  4. 25 en 26
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een Go-back-N-zender gebruikt venster 5 en verstuurt pakketten 10–14; pakket 12 gaat verloren. ACK's voor 10 en 11 komen aan, dus verstuurt hij 15 en 16. Alle latere gegevens komen aan voordat de timer voor pakket 12 afloopt. Wat wordt bij die time-out opnieuw verzonden?
  1. 12, 13, 14, 15 en 16
  2. Alleen 12
  3. Alleen 12, 13 en 14
  4. 10, 11, 12, 13 en 14
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een zender met selectieve herhaling heeft ondergrens 30 en pakketten 30–33 onbevestigd. ACK's 31, 32 en 33 komen aan, maar ACK 30 niet. Waar staat de ondergrens van de zender?
  1. 31
  2. 33
  3. 34
  4. 30
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een SR-ontvanger heeft venstergrootte 4. Hij accepteert pakketten 8–11 en verschuift zijn ondergrens naar 12. ACK 9 gaat verloren, dus wordt pakket 9 opnieuw verzonden. Met welke reactie kan de zender correct herstellen?
  1. Negeer pakket 9 omdat het buiten het huidige venster valt.
  2. Stuur ACK 11 omdat alle vier pakketten zijn ontvangen.
  3. Stuur ACK 9 zonder pakket 9 opnieuw af te leveren.
  4. Buffer pakket 9 totdat de volgnummers cyclisch teruglopen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een protocolontwerper heeft bij selectieve herhaling een even groot zend- en ontvangstvenster van 10 pakketten nodig. Wat is de minimale grootte van het volgnummerveld?
  1. 3 bits
  2. 5 bits
  3. 4 bits
  4. 6 bits
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een pijplijn verstuurt pakketten van 1.250 bytes op een verbinding van 10 Mbit/s met een RTT van 9 ms. Negeer transmissie en verwerking van de ACK. Wat is het kleinste venster waarmee de zender onafgebroken bezig kan blijven?
  1. 9 pakketten
  2. 11 pakketten
  3. 90 pakketten
  4. 10 pakketten
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Met welk mechanisme kan een ontvanger bij stop-and-wait een vervangend pakket van nieuwe gegevens onderscheiden?
  1. Een volgnummer
  2. Een langere time-out
  3. Een hogere transmissiesnelheid
  4. Alleen een controlesom
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Twee stop-and-waitpaden gebruiken gelijke pakketgroottes en RTT's. De transmissiesnelheid van de tweede verbinding is twee keer zo hoog. Hoe veranderen de benutting en de nuttige doorvoersnelheid als je verlies en ACK-transmissie negeert?
  1. Beide verdubbelen.
  2. De benutting daalt; de doorvoersnelheid wordt minder dan twee keer zo hoog.
  3. De benutting blijft gelijk; de doorvoersnelheid verdubbelt.
  4. De benutting stijgt; de doorvoersnelheid blijft gelijk.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

TCP verstuurt drie opeenvolgende segmenten. De ACK voor het eerste gaat verloren, maar een latere ACK die alle drie dekt, komt vóór de time-out aan. Welke gegevens moeten wegens die verloren ACK opnieuw worden verzonden?
  1. Alleen het eerste segment
  2. Alleen het laatste segment
  3. Geen van de drie segmenten
  4. Alle drie de segmenten
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: TCP-bytes en verbindingstoestand10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een programma schrijft 60 bytes en daarna 90 bytes naar een TCP-socket. Wat kan één ontvangende leesbewerking teruggeven?
  1. Alleen 60 bytes tot een tweede leesbewerking
  2. Precies één bericht van 150 bytes met een grensmarkering
  3. Alleen 90 bytes omdat de latere schrijfbewerking de eerste vervangt
  4. Alle 150 bytes zonder markering van de schrijfgrens
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een TCP-segment begint bij byte 8401 en bevat 640 gegevensbytes, zonder SYN of FIN. Welke ACK bevestigt dit hele segment wanneer alle eerdere bytes zijn aangekomen?
  1. 9040
  2. 9041
  3. 8402
  4. 640
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een ontvanger verwacht byte 12001. Hij buffert 400 bytes vanaf 12401, ontvangt daarna 250 bytes vanaf 12001 en vervolgens 150 bytes vanaf 12251. Welke ACK volgt op elk van de laatste twee aankomsten?
  1. 12251, daarna 12801
  2. 12401, daarna 12801
  3. 12251, daarna 12401
  4. 12801, daarna 12801
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

De volgende byte van een client is 3001 en de volgende byte van een server is 9101. De client verstuurt 180 bytes; de server ontvangt die en verstuurt 420 bytes zonder eerdere onbevestigde servergegevens. Welke volg- en bevestigingsnummers staan in dat serversegment?
  1. Volgnummer 3281; ACK 9521
  2. Volgnummer 9521; ACK 3181
  3. Volgnummer 9101; ACK 3181
  4. Volgnummer 3181; ACK 9101
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een client verstuurt SYN met volgnummer 4600. De server antwoordt met SYN-ACK met volgnummer 17000. Welk bevestigingsnummer hoort in de laatste handshake-ACK van de client?
  1. 17000
  2. 17001
  3. 4601
  4. 17002
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

A heeft gegevens tot en met byte 7199 verzonden en stuurt daarna FIN. B bevestigt die FIN en heeft nog 300 niet-verzonden applicatiebytes. Wat is het juiste vervolg?
  1. B verstuurt zijn gegevens en mag daarna zijn eigen FIN sturen; zijn ACK is 7201.
  2. B moet zijn niet-verzonden gegevens verwerpen; zijn ACK is 7201.
  3. B verstuurt zijn gegevens pas na een nieuwe handshake; zijn ACK is 7200.
  4. B sluit beide richtingen onmiddellijk; zijn ACK is 7200.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

A sluit als eerste en bereikt TIME_WAIT na ontvangst van de FIN van B. De laatste ACK van A gaat verloren. B verzendt zijn FIN opnieuw. Waarom is het nu nuttig de verbindingstoestand van A te behouden?
  1. A kan daarmee de verzendrichting van B heropenen.
  2. A kan daarmee de ontbrekende gegevens van B opnieuw verzenden.
  3. A kan daarmee de FIN opnieuw bevestigen.
  4. A kan daarmee het volgende volgnummer van B instellen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een TCP-zender heeft één ACK 4401 ontvangen, gevolgd door nog drie ACK's 4401 doordat latere gegevens na een ontbrekend deel aankomen. Welk segment verzendt snelle hertransmissie in het basisalgoritme opnieuw?
  1. Het segment dat eindigt bij byte 4400
  2. Het meest recent verzonden segment
  3. Elk segment na byte 4401
  4. Het segment dat begint bij byte 4401
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een ontvanger heeft een capaciteit van 24000 bytes en bevat 6500 ongelezen bytes. De zender heeft onder de huidige bekendgemaakte waarde al 5500 bytes onbevestigd. Hoeveel extra bytes passen er?
  1. 17500 bytes
  2. 12000 bytes
  3. 18500 bytes
  4. 6500 bytes
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

TCP verstuurt segmenten vanaf 2001, 2501 en 3001, elk 500 bytes. Alle gegevens komen aan, maar elke ACK is vertraagd tot na de time-out. De zender verzendt 2001 opnieuw; daarna komt ACK 3501 aan voordat de nieuwe timer afloopt. Wat moet nog opnieuw worden verzonden?
  1. Niets; ACK 3501 bevestigt alle drie gegevenssegmenten.
  2. Alleen 2501; 2001 was de enige verzonden vervanging.
  3. Zowel 2501 als 3001; elk vereist een eigen timergebeurtenis.
  4. Alle drie; een ACK na een time-out kan oorspronkelijke gegevens niet bevestigen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: TCP-time-outs, ontbrekende delen en ontvangstruimte10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een hertransmissietimer is ingesteld op 1,2 s. Welk interval volgt na één time-out met exponentiële wachttijdverlenging?
  1. 0,6 s
  2. 1,2 s
  3. 2,4 s
  4. 4,8 s
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

EstimatedRTT is 200 ms en DevRTT is 20 ms. Een nieuwe meting is 240 ms. Wat is met de aanbevolen gewichten en bijwerkvolgorde de ruwe time-out als de klokgranulariteit verwaarloosbaar is?
  1. 305 ms
  2. 300 ms
  3. 285 ms
  4. 320 ms
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

EstimatedRTT is 240 ms en DevRTT is 20 ms. Een zender zonder tijdstempels heeft zijn time-out verlengd tot 2 s. Een ACK voor opnieuw verzonden gegevens komt 150 ms na de nieuwe poging aan. Later levert niet eerder opnieuw verzonden gegevensverkeer een geldige meting van 320 ms op. Welke ruwe time-out moet bij verwaarloosbare klokgranulariteit uit deze gebeurtenissen worden berekend?
  1. 390 ms
  2. 444 ms
  3. 350 ms
  4. 2000 ms
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een ontvanger krijgt een onbeschadigd TCP-segment na een ontbrekend bytebereik. Wat moet de onmiddellijke ACK aangeven?
  1. Het einde van het nieuw aangekomen segment
  2. De eerste byte die nog ontbreekt in de aaneengesloten stroom
  3. De lengte van het segment buiten volgorde
  4. De eerste byte na alle door de andere kant verzonden gegevens
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een ontvanger verwacht byte 6001. Hij buffert drie opeenvolgende segmenten van 800 bytes vanaf 6801, 7601 en 8401 en stuurt onmiddellijk dubbele ACK's. Daarna komt een vervangend segment van 800 bytes vanaf 6001 aan. Welke cumulatieve ACK volgt?
  1. 6801
  2. 8401
  3. 9201
  4. 6001
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een TCP-zender heeft segmenten vanaf 10501, 11001, 11501 en 12001 onbevestigd. Zijn huidige cumulatieve ACK-grens is 10501. Hij ontvangt tweemaal ACK 10501, daarna eenmaal ACK 11001 en vervolgens nog driemaal ACK 11001. Er loopt geen timer af. Welk segment verzendt snelle hertransmissie in het basisalgoritme opnieuw?
  1. Het segment dat begint bij 10501
  2. Het segment dat begint bij 11501
  3. Het segment dat begint bij 12001
  4. Het segment dat begint bij 11001
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Nadat een ontvanger een nulvenster heeft bekendgemaakt, leest zijn applicatie gegevens. De vensterupdate die het venster weer opent, gaat verloren. Hoe kan de zender de beschikbare ruimte ontdekken?
  1. Door automatische hertransmissie van elke zuivere ACK
  2. Door een nieuwe drieweg-handshake op dezelfde stroom
  3. Door een vaste time-out die het venster naar het maximum terugzet
  4. Door een testbericht bij een nulvenster en het antwoord met het huidige venster
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een pad heeft een RTT van 80 ms en kan 200 Mbit/s transporteren. Een ontvanger kan maximaal 65535 × 2^s bytes bekendmaken. Wat is, zonder andere beperkingen, de kleinste schaalverschuiving die genoeg gegevens onderweg toestaat om het pad volledig te benutten?
  1. 4
  2. 5
  3. 6
  4. 7
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een ontvanger maakt ACK 51001 en rwnd 18000 bekend terwijl de zender tot en met byte 57000 heeft verzonden. De zender verstuurt daarna nog 8000 bytes en ontvangt ACK 59001 met rwnd 12000. Hoeveel extra bytes mag hij nu onder de nieuwe bekendgemaakte waarde verzenden?
  1. 4000 bytes
  2. 12000 bytes
  3. 6000 bytes
  4. 10000 bytes
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een dienst gebruikt UDP maar heeft volledige aflevering in volgorde nodig en verzendt veel verkeer over een gedeeld pad. Wat moet de dienst of een protocol boven UDP bieden?
  1. Herstel, ordening en passende congestiebeheersing
  2. Alleen een groter controlesomveld en een langere IP-header
  3. Alleen een grotere ontvangstbuffer en permanente bronpoorten
  4. De aanname dat al het verlies op het gedeelde pad onschadelijk is
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Analyseer volledige transportverlopen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een meegeleverde UDP-controlesom die niet nul is, doorstaat de controle bij de ontvanger niet. Wat doet UDP met het segment?
  1. Het corrigeert de bits en levert daarna af.
  2. Het verwerpt het segment zonder melding.
  3. Het vraagt om herverzending met een UDP-NAK.
  4. Het levert twee kopieën af ter vergelijking.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Twee 16-bits invoerwoorden voor een controlesom zijn FFFE en 0002. Wat is hun internetcontrolesom?
  1. FFFF
  2. 0000
  3. FFFE
  4. 0001
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een protocol met selectieve herhaling en even grote vensters gebruikt nummers 0–7 en venstergrootte 5. De ontvanger accepteert 0–4, maar elke ACK gaat verloren. Welke oude pakketnummers zouden bij hertransmissie in het nieuwe ontvangstvenster passen?
  1. 0 en 1
  2. 3 en 4
  3. 5 en 6
  4. 0 tot en met 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een Go-back-N-zender heeft nummers van vier bits en heeft minstens 16 pakketten onderweg nodig om een pad volledig te benutten. Wat is de kleinste wijziging die deze pijplijn veilig ondersteunt zonder het protocoltype te veranderen?
  1. Behoud vier bits en gebruik alle 16 nummers.
  2. Behoud vier bits en vergroot alleen de ontvangstbuffer.
  3. Behoud vier bits en vervang cumulatieve ACK's door individuele ACK's.
  4. Gebruik nummers van vijf bits en een venster van minstens 16.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een pad staat IPv4-datagrammen van 1400 bytes toe. De IP-header is 20 bytes en de TCP-gegevensoffset is 8. Hoeveel gegevensbytes passen erin zonder die grens te overschrijden?
  1. 1360 bytes
  2. 1348 bytes
  3. 1372 bytes
  4. 1380 bytes
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Na een handshake met client-ISN 15000 verstuurt de client 2300 bytes, verdeeld in 1000, 1000 en 300 bytes, en daarna FIN. Alles komt in volgorde aan. Welke ACK bevestigt de FIN?
  1. 17300
  2. 17301
  3. 17302
  4. 18002
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

EstimatedRTT is 400 ms en DevRTT is 60 ms. Na een eerdere wachttijdverlenging is een geldige nieuwe meting 240 ms. Welke time-out volgt uit deze nieuwe meting bij een verwaarloosbare klokgranulariteit en een minimum van 1 s?
  1. 560 ms
  2. 640 ms
  3. 1120 ms
  4. 1000 ms
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een ontvanger maakt ACK 8001 met rwnd 9000 bekend. De zender heeft tot en met 11000 verzonden. De applicatie leest daarna 2000 bytes, maar er bereikt geen bijgewerkte vensterwaarde de zender. Hoeveel nieuwe bytes mag de zender met zijn bekende venster verzenden?
  1. 6000 bytes
  2. 8000 bytes
  3. 9000 bytes
  4. 11000 bytes
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een server gebruikt SYN-cookies tijdens een stortvloed aan onvoltooide handshakes. Welke gebeurtenis maakt het normaal mogelijk om toestand voor de nieuwe verbinding toe te wijzen?
  1. Ontvangst van een SYN gericht aan de luisterpoort
  2. Verzending van de eerste SYN-ACK aan een schijnbare client
  3. Validatie van de cookie die de laatste ACK teruggeeft
  4. Wachten gedurende één maximale segmentlevensduur na de SYN
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een ontvanger verwacht byte 16001. Van vier segmenten van 600 bytes vanaf 16001, 16601, 17201 en 17801 gaan het eerste en het derde verloren. Het tweede en vierde komen aan en worden gebufferd; slechts twee dubbele ACK's bereiken de zender. Bij een time-out wordt het eerste opnieuw verzonden en komt het aan. Welke ACK volgt en welk ontbrekende deel blijft over?
  1. ACK 18401; er blijft geen ontbrekend deel over.
  2. ACK 17201; het ontbrekende deel vanaf 17201 blijft over.
  3. ACK 16601; beide latere segmenten moeten opnieuw worden verzonden.
  4. ACK 17801; het ontbrekende deel vanaf 17801 blijft over.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

75 Kernbegrippen, elk met een definitie

A

Aflevering zonder garanties
Aflevering zonder garanties probeert gegevens te vervoeren zonder aankomst, volgorde, integriteit, een maximale vertraging of een minimale doorvoersnelheid te garanderen.
TCP kan een verloren segment herstellen, hoewel de onderliggende IP-dienst geen garanties blijft bieden.
Afspeeldeadline
Een afspeeldeadline is het tijdstip waarop een ontvangen stuk audio of video beschikbaar moet zijn voor de geplande weergave.
Een ontbrekend stuk audio dat na het afspeelmoment wordt hersteld, kan de onderbreking die de luisteraar al heeft gehoord niet meer opvullen.
Afwijking van de rondlooptijd (DevRTT)
DevRTT is een afgevlakte maat voor hoeveel recente RTT-metingen van de eerdere schatting verschillen, gebruikt om de time-outmarge in te stellen.
Een wisselende padvertraging verhoogt de afwijkingsmarge, ook wanneer de gemiddelde RTT slechts weinig verandert.
Algoritme van Karn
Het algoritme van Karn sluit dubbelzinnige RTT-metingen van opnieuw verzonden gegevens uit, tenzij informatie zoals tijdstempels de verzending identificeert.
Een ACK na een nieuwe poging kan op de oorspronkelijke kopie betrekking hebben, dus de aankomsttijd alleen kan geen nieuwe meting opleveren.
Algoritme van Nagle
Het algoritme van Nagle voegt kleine schrijfbewerkingen van de zender samen terwijl eerdere gegevens onbevestigd zijn, of totdat genoeg gebufferde gegevens een volledig segment kunnen vormen.
Een reeks schrijfbewerkingen van één byte kan worden verzameld in plaats van voor elke bewerking een afzonderlijk segment met relatief veel headeroverhead te verzenden.
Alternerend-bitprotocol
Het alternerend-bitprotocol gebruikt volgnummers 0 en 1 met stop-and-wait, ontvangstbevestigingen en een timer om fouten en verlies te verwerken.
Na een verloren ACK kan de ontvanger aan een herhaald pakketnummer herkennen dat hij dezelfde gegevens niet tweemaal moet afleveren.
Automatisch herhaalverzoek
Een automatisch herhaalverzoek is een herstelmethode voor betrouwbare overdracht die foutdetectie, terugkoppeling van de ontvanger en vervangende verzendingen combineert.
Nadat een NAK beschadiging meldt, gebruikt de zender zijn opgeslagen pakketkopie om opnieuw te verzenden.

B

Bandbreedte-vertragingsproduct
Het bandbreedte-vertragingsproduct is de verbindings- of padsnelheid vermenigvuldigd met de rondlooptijd en schat de gegevens die onderweg moeten zijn om die snelheid vol te houden.
Een pad van 100 Mbit/s met een RTT van 0,1 s heeft ongeveer 10 miljoen bits, of 1,25 MB, onderweg nodig om bezet te blijven.
Berichtgrens
Een berichtgrens scheidt het ene applicatiebericht van het andere; UDP bewaart deze scheidingen terwijl TCP een bytestroom zonder ingebouwde berichtafbakening vervoert.
Twee UDP-verzendingen maken twee berichten, zodat de ontvanger ze niet tot één UDP-bericht samenvoegt.
Betrouwbare gegevensoverdracht
Betrouwbare gegevensoverdracht levert correcte applicatiegegevens in volgorde af zonder verlies of duplicaten, met herstel boven op een onbetrouwbaar kanaal.
Een vervangend pakket herstelt een mislukte transmissie zonder een tweede kopie in de afgeleverde gegevens te maken.
Bevestigingsnummer
Een TCP-bevestigingsnummer identificeert de volgende verwachte byte van de andere kant en bevestigt alle bytes daarvoor in de aaneengesloten stroom.
ACK 4001 bevestigt bytes tot en met 4000, ook als de ontvanger gegevens na een later ontbrekend deel heeft gebufferd.
Blokkering door het eerste element
Blokkering door het eerste element in een TCP-stream treedt op wanneer ontbrekende eerdere bytes de aflevering van al aangekomen latere bytes vertragen.
Een ontvanger kan latere audiogegevens vasthouden terwijl TCP op vervangende bytes van een eerder segment wacht.
Buffering van gegevens buiten volgorde
Buffering van gegevens buiten volgorde slaat geldige gegevens op die na een ontbrekend deel zijn ontvangen, totdat de ontbrekende eerdere gegevens aankomen en aflevering in volgorde kan doorgaan.
Zodra pakket 4 het ontbrekende deel aanvult, kunnen gebufferde pakketten 5 en 6 zonder nieuwe verzending worden afgeleverd.
Bytestroom
Een bytestroom is een geordende reeks bytes zonder ingebouwde berichtgrenzen van de applicatie, zoals TCP die bij de ontvanger aflevert.
Een leesbewerking kan bytes van meerdere eerdere schrijfbewerkingen teruggeven, dus controleert de applicatie haar eigen berichtafbakening.

C

Cumulatieve ontvangstbevestiging
Een cumulatieve ontvangstbevestiging bevestigt een volledige aaneengesloten prefix van ontvangen gegevens, zodat één ACK meerdere eerdere verzendingen kan dekken.
Een latere cumulatieve ACK kan het verlies van een eerdere ACK onschadelijk maken als die vóór de time-out aankomt.
Cyclische terugloop van volgnummers
Bij cyclische terugloop van volgnummers wordt na de hoogste waarde in een eindige volgnummerruimte het laagste nummer opnieuw gebruikt, wat cyclische vergelijkingsregels vereist.
Nadat TCP alle 2^32 bytewaarden heeft gebruikt, herhalen nummers zich, ook al kan de verbinding gegevens blijven vervoeren.

D

Demultiplexing
Demultiplexing selecteert de ontvangende applicatiesocket voor een aankomend transportsegment op basis van het protocol en de eindpuntgegevens.
De host stuurt een DNS-antwoord naar de socket die het verzoek deed, in plaats van het in de stroom van een browser te plaatsen.
Drieweg-handshake
De drieweg-handshake is de uitwisseling van SYN, SYN-ACK en ACK door TCP om eindpunttoestand op te bouwen en beide initiële volgnummers te bevestigen.
De laatste ACK bevestigt de SYN van de server en kan tegelijkertijd de eerste applicatiegegevens van de client bevatten.
Dubbele ontvangstbevestiging
Een dubbele ontvangstbevestiging herhaalt een bestaande cumulatieve bevestiging zonder nieuwe bytes te bevestigen, vaak doordat latere gegevens na een ontbrekend deel aankwamen.
Drie dubbele ACK's die aan de voorwaarden voldoen kunnen vervanging van een ontbrekend segment in gang zetten voordat de timer afloopt.

E

Eenzijdige sluiting
Een eenzijdige sluiting beëindigt één TCP-verzendrichting met FIN terwijl gegevens in de andere richting van de verbinding kunnen blijven stromen.
Een client kan klaar zijn met het verzenden van een verzoek en toch de resterende antwoordbytes van de server blijven ontvangen.
Eind-tot-eindprincipe
Het eind-tot-eindprincipe plaatst controles op een vereiste eigenschap van het volledige pad bij de eindpunten die kunnen nagaan of die eigenschap geldt.
Een transportcontrolesom controleert de ontvangen gegevens nog steeds wanneer afzonderlijke verbindingen eigen foutcontroles hebben.
Eindige toestandsautomaat
Een eindige toestandsautomaat beschrijft een systeem als een huidige toestand met overgangen door gebeurtenissen die aangeven welke acties moeten worden uitgevoerd.
Een zender die op ACK 1 wacht, behandelt een bijpassende ACK anders dan terugkoppeling met het verkeerde nummer.
Exponentiële wachttijdverlenging
Exponentiële wachttijdverlenging verdubbelt de huidige hertransmissietime-out nadat die afloopt en vergroot zo de wachttijd tussen herhaalde mislukte pogingen.
Opeenvolgende time-outs kunnen een wachtinterval verhogen van 1 s naar 2 s en daarna naar 4 s.

F

Fullduplexverbinding
Een fullduplexverbinding laat beide eindpunten tegelijkertijd verzenden en houdt in elke richting een onafhankelijke stroomnummering bij.
Een server kan antwoordbytes verzenden terwijl de client op dezelfde verbinding nog meer gegevens verstuurt.

G

Gegevensoffset
De TCP-gegevensoffset geeft de totale TCP-headerlengte in woorden van 32 bits en geeft aan waar de nettolading van de applicatie begint.
Een gegevensoffset van 6 geeft een header van 24 bytes, met vier bytes naast de vaste TCP-header.
Gemeten rondlooptijd (SampleRTT)
SampleRTT is een gemeten interval vanaf het verzenden van gegevens tot de ontvangst van een ACK die deze bevestigt, mits de timing ondubbelzinnig is.
Zonder tijdstempels kan een ACK die opnieuw verzonden gegevens bevestigt niet aangeven welke kopie de reactie veroorzaakte.
Geschatte rondlooptijd (EstimatedRTT)
EstimatedRTT is de afgevlakte rondlooptijdschatting van TCP, die wordt bijgewerkt door de oude schatting en elke nieuwe geldige meting te wegen.
Met gewicht 1/8 voor een nieuwe meting verandert één vertraagde ACK de schatting minder dan wanneer de meting die volledig vervangt.
Go-back-N
Go-back-N is een protocol voor betrouwbare overdracht met pipelining, cumulatieve ACK's, één timer voor het oudste pakket en een ontvanger die alleen pakketten in volgorde accepteert.
Een ontbrekend pakket zorgt ervoor dat latere aankomsten buiten volgorde worden verworpen en na een time-out opnieuw worden verzonden.

H

Hertransmissietime-out
Een hertransmissietime-out is een wachtinterval waarvan het aflopen een nieuwe verzending in gang zet wanneer de verwachte bevestiging niet is aangekomen.
Een verloren gegevenspakket levert geen terugkoppeling op, maar een time-out geeft de zender toch aanleiding om het opnieuw te proberen.

I

Individuele ontvangstbevestiging
Een individuele ontvangstbevestiging bevestigt één geïdentificeerd pakket zonder ook alle eerdere pakketten in de reeks te bevestigen.
Ontvangst van SR-ACK 22 vertelt de zender niet of pakket 21 is aangekomen of nog moet worden vervangen.
Initieel volgnummer
Een initieel volgnummer is het TCP-beginvolgnummer dat een eindpunt kiest en in zijn SYN meestuurt voordat applicatiegegevens beginnen.
Wanneer SYN 27000 gebruikt, gebruikt de eerste applicatiebyte normaal volgnummer 27001.
Inkapseling
Bij inkapseling wordt de gegevenseenheid van een laag in de eenheid van een andere laag geplaatst, met een nieuwe header die de afleverinformatie van die laag beschrijft.
IP kapselt een transportsegment in door de IP-header toe te voegen die wordt gebruikt om het bij de bestemmingshost af te leveren.
Internetcontrolesom
De internetcontrolesom is het bitsgewijze complement van een eencomplementsom van 16-bits woorden met teruggevoerde overdracht, gebruikt om transmissiefouten te detecteren.
Een ontvangende host neemt de controlesom mee in de som met terugvoering en controleert of het resultaat volledig uit enen bestaat.

L

Logische communicatie
Logische communicatie laat gelijkwaardige processen met elkaar communiceren alsof ze rechtstreeks verbonden zijn, terwijl lagere lagen hun gegevens over een netwerk vervoeren.
Twee applicaties op verschillende hosts gebruiken sockets zonder elke router en verbinding op het pad ertussen te beheren.

M

Maximale segmentgrootte
De maximale segmentgrootte is de grootste bekendgemaakte nettolading aan applicatiegegevens voor TCP-segmenten, exclusief transport- en netwerkheaders.
Een IPv4-datagram van 1500 bytes met twee headers van 20 bytes laat 1460 bytes voor applicatiegegevens over.
Maximale segmentlevensduur
De maximale segmentlevensduur is een bovengrens die wordt gebruikt om te bepalen hoe lang een TCP-segment in het netwerk kan blijven voordat het verloopt.
TIME_WAIT gebruikt tweemaal de MSL om oud verbindingsverkeer te laten verlopen en de laatste ACK te kunnen herhalen.
Meeliften van ontvangstbevestigingen
Bij het meeliften van ontvangstbevestigingen gaat bevestigingsinformatie voor ontvangen gegevens mee in een TCP-segment dat ook gegevens in de omgekeerde richting verzendt.
Een antwoord van een server kan het verzoek bevestigen en tegelijk eigen onafhankelijk genummerde bytes bevatten.
Multiplexing
Multiplexing verzamelt uitgaande gegevens van meerdere applicatiesockets en voegt transportinformatie toe, zodat het verkeer het netwerk kan delen.
Een host verstuurt browser- en e-mailverkeer via dezelfde interface met verschillende poortinformatie.

N

Negatieve ontvangstbevestiging
Een negatieve ontvangstbevestiging is terugkoppeling die meldt dat gegevens niet correct zijn ontvangen en dat een vervangende verzending nodig is.
Een stop-and-waitontwerp dat alleen bitfouten verwerkt, stuurt een NAK nadat de controlesom een beschadigd pakket heeft gedetecteerd.

O

Ondergrens van het zendvenster
De ondergrens van het zendvenster markeert de oudste onbevestigde gegevens aan het begin van het venster en beperkt hoe ver nieuwe verzendingen kunnen reiken.
Bij GBN verschuift ontvangst van ACK 19 de ondergrens naar 20 en kan die ruimte maken voor extra pakketten.
Ontvangstbevestiging
Een ontvangstbevestiging is terugkoppeling van de ontvanger die de ontvangst van gegevens bevestigt; de betekenis kan afhankelijk van het protocol individueel of cumulatief zijn.
SR-ACK 14 bevestigt alleen pakket 14, terwijl GBN-ACK 14 ook alle voorgaande pakketten bevestigt.
Ontvangstvenster
Een ontvangstvenster bij selectieve herhaling is het bereik van volgnummers dat momenteel voor nieuwe gegevens acceptabel is, vanaf de ondergrens voor aflevering.
Een pakket na een ontbrekend deel kan worden geaccepteerd als het nummer binnen het huidige SR-ontvangstvenster ligt.
Ontvangstvenster
Het ontvangstvenster is de door de ontvanger bekendgemaakte capaciteit voor onbevestigde TCP-gegevens; die verandert wanneer opgeslagen gegevens aankomen en de applicatie leest.
Als de bekendgemaakte waarde 10000 bytes is en er al 4000 onbevestigd zijn, passen er nog maar 6000 bij.

P

PAWS
PAWS gebruikt TCP-tijdstempels om verouderde segmenten te verwerpen wanneer opnieuw gebruikte bytenummers op zichzelf geldig kunnen lijken.
Een snelle verbinding kan haar 32-bits bytenummers doorlopen voordat een oude vertraagde kopie is verdwenen.
Pipelining
Pipelining laat meerdere gegevenspakketten tegelijk onbevestigd blijven en gebruikt de verbinding terwijl eerdere pakketten op terugkoppeling wachten.
Een zender kan een tweede pakket versturen voordat de ACK van het eerste pakket de rondreis heeft voltooid.
Poortnummer
Een poortnummer is een 16-bits transportidentificatie die helpt een applicatie-eindpunt op een host te selecteren; TCP en UDP hebben afzonderlijke poortruimten.
Een DNS-dienst kan query's ontvangen op UDP-poort 53 en ook luisteren naar TCP-verbindingen op poort 53.
Pseudoheader
Een pseudoheader bestaat uit IP-adresgegevens en protocolinformatie die in een transportcontrolesomberekening worden meegenomen zonder een extra transportheader te vormen.
De UDP-controlesom omvat zowel de bestemmingsadresgegevens als de UDP-header en gegevens.

Q

QUIC
QUIC is een beveiligd transportprotocol boven op UDP dat betrouwbare streams en congestiebeheersing biedt en HTTP/3-verkeer vervoert.
Een webverbinding met HTTP/3 krijgt betrouwbare aflevering van QUIC, hoewel UDP zelf geen herstel biedt.

S

Schuifvenster
Een schuifvenster is een verschuivend bereik van volgnummers dat begrenst welke pakketten op een bepaald moment onbevestigd of acceptabel mogen zijn.
Een opschuivende GBN-ACK maakt aan de rechterkant een positie vrij voor verzending van een nieuw pakket.
Segment
Een segment is een eenheid van de transportlaag met een transportheader en applicatiegegevens, die binnen een IP-datagram wordt vervoerd.
Een TCP-zender voegt een header toe aan een stuk bestandsbytes voordat hij het segment aan de IP-laag doorgeeft.
Selectieve herhaling
Selectieve herhaling is een protocol voor betrouwbare overdracht met individuele pakket-ACK's, logische timers per pakket en buffering van pakketten buiten volgorde bij de ontvanger.
Als alleen de timer van pakket 7 afloopt, kan de zender 7 vervangen zonder de succesvol bevestigde pakketten opnieuw te verzenden.
Selectieve ontvangstbevestiging
Selectieve ontvangstbevestiging is een TCP-optie die ontvangen byteblokken na een ontbrekend deel meldt als aanvulling op de cumulatieve bevestigingsgrens.
SACK kan laten zien dat twee latere blokken al zijn gebufferd terwijl een tussenliggend bytebereik nog moet worden hersteld.
Snelle hertransmissie
Snelle hertransmissie verzendt in het basisalgoritme het vermoedelijk ontbrekende TCP-segment opnieuw na drie dubbele ACK's, zonder op de time-out te wachten.
Latere segmenten die na een ontbrekend deel aankomen, leveren terugkoppeling waarmee de zender eerder kan handelen dan de timer zou toelaten.
Socket
Een socket is een eindpuntinterface waarmee een applicatieproces gegevens naar een netwerk verzendt en daaruit ontvangt.
Een TCP-server behoudt een luistersocket terwijl geaccepteerde clients via verbindingssockets communiceren.
Stop-and-wait
Stop-and-wait is een overdrachtsmethode waarbij de zender slechts één gegevenspakket onbevestigd houdt en op bevestiging wacht voordat hij verdergaat.
Een lange rondlooptijd kan ervoor zorgen dat de zender niets doet, ook als de verbinding het pakket zeer snel kan verzenden.
Stroomregeling
Stroomregeling begrenst de onbevestigde gegevens van een zender op basis van de beschikbare bufferruimte van de ontvanger en beschermt zo een langzaam lezende applicatie.
Een ontvanger met een volle buffer kan een nulvenster bekendmaken, ook als het netwerkpad nog capaciteit heeft.
SYN-cookie
Een SYN-cookie verwerkt verifieerbare verbindingsinformatie in het ISN van een server, zodat afzonderlijke toestand na een geldige laatste ACK kan worden toegewezen.
De server controleert de terugkerende ontvangstbevestiging voordat hij middelen voor die specifieke verbinding reserveert.
SYN-flood
Een SYN-flood is een aanval die veel verzoeken om een verbinding te openen verstuurt zonder de handshakes te voltooien, waardoor servermiddelen worden verbruikt.
Een wachtrij met onvoltooide verzoeken kan een server verhinderen verbindingen van legitieme clients te accepteren.
Syndroom van kleine vensters
Het syndroom van kleine vensters is inefficiënte overdracht in veel zeer kleine TCP-segmenten, vaak bevorderd door zeer kleine schrijfbewerkingen of bekendgemaakte venstervergrotingen.
Als telkens enkele nieuw vrijgemaakte bytes worden bekendgemaakt, kan de headeroverhead de nuttige gegevens overheersen.

T

TCP
TCP is een verbindingsgericht transportprotocol dat een betrouwbare fullduplexbytestroom in volgorde tussen twee applicatie-eindpunten biedt.
De applicatie ontvangt één geordende stroom, ook wanneer IP-datagrammen in een andere volgorde aankwamen.
TCP-optie
Een TCP-optie is variabele headerinformatie die de vaste header uitbreidt, zoals MSS, vensterschaling, tijdstempels of selectieve ontvangstbevestigingen.
Een tijdstempeloptie maakt de header langer, waardoor binnen een IP-datagram van vaste grootte minder ruimte voor de nettolading overblijft.
TCP-reset
Een TCP-reset is een segment met RST aan dat een verbinding weigert of abrupt afbreekt in plaats van een ordelijke FIN-uitwisseling te voltooien.
Een SYN naar een TCP-poort zonder luistersocket krijgt normaal een reset van de bestemmingshost terug.
Teruggevoerde overdracht
Bij teruggevoerde overdracht wordt een overdracht voorbij de hoogste bit van een woord tijdens eencomplementoptelling terug bij de laagste posities opgeteld.
Optellen van FFFF en 0001 geeft vóór terugvoering 10000 en na het terugvoeren van de overdracht 0001.
Testbericht bij een nulvenster
Een testbericht bij een nulvenster is een kleine verzending van de zender die het huidige venster van de ontvanger opvraagt terwijl de normale verzending van nieuwe gegevens is onderbroken.
Met testberichten kan een zender ontdekken dat er weer ruimte is als de eerdere vensterupdate van de ontvanger verloren is gegaan.
Tijdelijke poort
Een tijdelijke poort is een lokale poort die doorgaans door het besturingssysteem wordt gekozen voor de netwerkcommunicatie van een client.
Het verzoek van de client gebruikt tijdelijke bronpoort 55120 en het antwoord gebruikt die waarde als bestemmingspoort.
TIME_WAIT
TIME_WAIT is een TCP-afsluittoestand die verbindingsinformatie bewaart om de laatste ACK te herhalen en oude segmenten te laten verlopen.
Als de laatste ACK verloren gaat, kan een opnieuw verzonden FIN van de andere kant nog worden beantwoord door het eindpunt dat als eerste sloot.
Transportlaag
De transportlaag biedt boven op de dienst van IP tussen hosts logische communicatie tussen applicatieprocessen op verschillende hosts.
Een browser ontvangt zijn eigen antwoordbytes via een socket terwijl een andere applicatie dezelfde host gebruikt.

U

UDP
UDP is een verbindingsloos transportprotocol dat afzonderlijke berichten vervoert met aflevering op basis van poorten en een veld voor de internetcontrolesom.
Een DNS-client kan zijn eerste UDP-query verzenden zonder eerst transportberichten voor verbindingsopbouw uit te wisselen.
Uitgestelde ontvangstbevestiging
Een uitgestelde ontvangstbevestiging stelt bevestiging van TCP-gegevens in volgorde kort uit, zodat terugkoppeling kan worden gecombineerd, binnen grenzen voor timing en frequentie.
Een tweede segment van volledige grootte dat in volgorde aankomt, leidt tot een cumulatieve ACK in plaats van opnieuw lang te wachten.

V

Vensterschaling
Vensterschaling vermenigvuldigt latere TCP-venstervelden met een macht van twee die tijdens de verbindingsopbouw is overeengekomen, zodat ontvangstvensters groter dan 65535 bytes mogelijk zijn.
Een schaalverschuiving van 3 interpreteert een latere veldwaarde van 12000 als een bekendgemaakt venster van 96000 bytes.
Viertupel
Het viertupel van een TCP-verbinding is de combinatie van het IP-bronadres, de bronpoort, het IP-bestemmingsadres en de bestemmingspoort.
Twee verbindingen met één webserver blijven onderscheiden wanneer hun clients verschillende bronadressen gebruiken.
Volgnummer
Het volgnummer van een TCP-gegevenssegment identificeert de eerste gegevensbyte in de stroom van die richting, met berekeningen modulo 2^32.
Een segment van 700 bytes dat bij 2001 begint, wordt gevolgd door nieuwe gegevens die bij 2701 beginnen als er geen besturingsvlag tussenkomt.
Volgnummerruimte
Een volgnummerruimte is de eindige verzameling beschikbare pakket- of byte-identificaties, die cyclisch opnieuw worden gebruikt zodra de maximale waarde is gepasseerd.
Bij pakketnummers van drie bits is het nummer na 6 gelijk aan 7 en de volgende waarde na 7 gelijk aan 0.
Voortijdige time-out
Een voortijdige time-out treedt op wanneer een zender opnieuw probeert voordat bevestiging van een succesvolle oorspronkelijke verzending tijd heeft gehad om terug te komen.
De ontvanger verwerpt de gegevens van de onnodige vervanging maar bevestigt die opnieuw, zodat de zender verder kan.

Z

Zenderbenutting
Zenderbenutting is het deel van de verstreken tijd waarin een zender actief pakketbits op zijn uitgaande verbinding zet.
Een benutting van 0,1 betekent dat de zender een tiende van de gemeten tijd verzendt en de rest wacht.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag