Flow control

Uit Wikipedia, de vrije encyclopedie
Niet te verwarren met Control flow.

Flow control is een techniek die gebruikt wordt bij computernetwerken of telecommunicatienetwerken om de snelheid van gegevensoverdracht tussen twee knooppunten te regelen om te voorkomen dat een snelle zender een langzame ontvanger overspoelt. Flow control is niet hetzelfde als congestiecontrole, dat wordt gebruikt voor het regelen van de gegevensstroom wanneer er daadwerkelijk congestie is opgetreden.[1] Flow control-mechanismen kunnen geclassificeerd worden op basis van het feit of het ontvangende knooppunt al dan niet feedback stuurt naar het verzendende knooppunt.

Stop-and-wait[bewerken | brontekst bewerken]

Stop-and-wait is de eenvoudigste vorm van flow control. Bij deze methode wordt het bericht in meerdere frames opgedeeld en geeft de ontvanger aan dat hij gereed is om een gegevensframe te ontvangen. De zender wacht op een ontvangstbevestiging (ACK) na elk frame gedurende een bepaalde tijd (de zogenaamde time-out). De ontvanger stuurt de ACK om de zender te laten weten dat het gegevensframe correct is ontvangen. De zender zal pas na ontvangst van de ACK het volgende frame versturen.

Als een frame of ACK tijdens de verzending verloren gaat, wordt het frame opnieuw verzonden. Dit hertransmissieproces staat bekend als ARQ (automatic repeat request).

Het probleem met stop-and-wait is dat er slechts één frame tegelijk kan verzonden worden, wat vaak tot inefficiënte gegevensoverdracht leidt, omdat de zender geen nieuw pakket kan versturen totdat hij een ACK heeft ontvangen.[2] Gedurende deze tijd zijn zowel de zender als het kanaal inactief.

Sliding window[bewerken | brontekst bewerken]

Sliding window is een methode van flow control waarbij een ontvanger een zender toestemming geeft om gegevens te verzenden totdat een buffer vol is. Als deze buffer of venster vol is, moet de zender stoppen met zenden totdat de ontvanger signaleert dat er een groter venster beschikbaar is.[3] Sliding window flow control wordt onder andere gebruikt in TCP.[4]

Sliding window flow control kan het beste gebruikt worden wanneer de buffergrootte beperkt en vooraf bepaald is. Tijdens een typische communicatie tussen een zender en een ontvanger reserveert de ontvanger bufferruimte voor n frames (n is de buffergrootte in frames). De zender kan n frames verzenden en de ontvanger kan deze n frames accepteren zonder te hoeven wachten op een bevestiging. Elk frame krijgt een volgnummer om te kunnen bijhouden welke frames een bevestiging hebben ontvangen. De ontvanger bevestigt een frame door een bevestiging te sturen met daarin het volgnummer van het volgende verwachte frame. Deze bevestiging kondigt aan dat de ontvanger klaar is om n frames te ontvangen, te beginnen met het opgegeven volgnummer. Zowel de zender als de ontvanger gebruiken een venster. De grootte van het venster is kleiner dan of gelijk aan de buffergrootte.

Flow control met een sliding window presteert veel beter dan stop-and-wait flow control. Als in een draadloze omgeving bijvoorbeeld de datasnelheden laag zijn en het ruisniveau hoog, is het niet erg haalbaar om te wachten op een bevestiging voor elk verzonden pakket. In dit geval levert het verzenden van gegevens in grotere blokken betere prestaties op in termen van hogere doorvoer.

Flow control met een sliding window is een point-to-point-protocol, in de veronderstelling dat geen andere entiteit probeert te communiceren totdat de huidige gegevensoverdracht is voltooid. Het door de zender bijgehouden venster geeft aan welke frames hij kan verzenden. De zender verstuurt alle frames in het venster en wacht op een bevestiging (in tegenstelling tot een bevestiging na elk frame). De zender verschuift dan het venster naar het overeenkomstige volgnummer, waarmee wordt aangegeven dat frames binnen het venster vanaf het huidige volgnummer kunnen worden verzonden.

Go-back-N[bewerken | brontekst bewerken]

Go-back-N is een foutcorrectietechniek waarbij de zender alle frames in het huidige venster opnieuw verstuurt wanneer de ontvanger een negatieve bevestiging (NACK) voor een bepaald frame stuurt. Dit zorgt weliswaar voor enige overhead omdat het opnieuw versturen van het volledige venster meer bandbreedte verbruikt, maar het is nog altijd efficiënter dan Stop-and-wait.[5]

Selective repeat[bewerken | brontekst bewerken]

Een ander foutcorrectiemechanisme is selective repeat. In dit geval stuurt de zender bij ontvangst van een negatieve bevestiging voor een bepaald frame alleen het frame in kwestie opnieuw naar de ontvanger. Bij gebruik van selective repeat moet de ontvanger elk individueel frame bevestigen, in tegenstelling tot go-back-N waar de ontvanger alleen de ontvangst van het volledige venster moet bevestigen. Selective repeat is complexer om te implementeren dan go-back-N, maar is efficiënter in termen van bandbreedte.[5]