Alternating bit protocol

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Het Alternating Bit Protocol (ABP) is een redelijk simpel netwerkprotocol dat tot doel heeft het twee systemen (computers, normaal gesproken) mogelijk te maken te communiceren over een onbetrouwbaar medium.

Het doel[bewerken]

ABP is ontworpen als antwoord op de vele problemen die werden ondervonden in de communicatie in de vroege dagen van netwerken. In deze vroege netwerken was de communicatie zeer onbetrouwbaar en kwamen verzonden berichten vaak niet aan. Het was dan nodig om de berichten steeds opnieuw te versturen, totdat ze wel aangekomen waren.

Het ABP is een protocol dat het twee systemen (een zender en een ontvanger) mogelijk maakt om dit proces automatisch onderling uit te voeren zonder dat de gebruiker tussenbeide hoeft te komen.

Het protocol[bewerken]

Het ABP neemt aan dat er twee systemen zijn:

  • De zender (Z)
  • De ontvanger (O)

Z en O zijn verbonden door een of ander communicatiekanaal (een netwerkkabel, het Internet, iets...). Dit kanaal maakt het mogelijk om beide kanten op te communiceren tussen Z en O, maar het kanaal is niet betrouwbaar – berichten kunnen onderweg verloren gaan. Wel is het zo dat de kans dat een bericht aankomt, niet 0 is: er kunnen heel veel berichten verloren gaan, maar er is wel de garantie dat er af en toe een bericht aankomt (het kanaal is onbetrouwbaar, niet kapot).

Binnen die aannamen komt het protocol er feitelijk op neer dat Z een bericht herhaald verstuurt, gelabeld met een nummer N. Z stuurt dit bericht uit en blijft het bericht om de zoveel tijd uitzenden totdat het van O een tegenbericht ontvangt dat het bericht met nummer N ontvangen is. Daarna – en pas daarna – gaat Z verder met het volgende bericht, gelabeld met een volgend nummer.

Aan de andere kant wacht O op ontvangst van een bericht. Als O een bericht ontvangt met nummer N, stuurt O een bericht terug dat bericht N ontvangen is. Vervolgens wacht O op een bericht met een nummer ongelijk aan N.

In dit systeem is er een garantie dat berichten en tegenberichten ooit aankomen. Maar berichten kunnen wel verloren gaan, dus worden ze mogelijk herhaald verstuurd. Het kan dus dat een bericht meerdere malen aankomt bij Z of O. Daarom zijn er ook afspraken over hoe hiermee om te gaan:

  • Als O een bericht ontvangen heeft met nummer N, verwacht deze vervolgens een bericht met een nummer ongelijk aan N. Wordt echter een bericht met nummer N ontvangen, dan is dat bericht dubbel – O stuurt dan weer een bericht dat ontvangst van bericht N bevestigt, maar enige verwerking van de inhoud van bericht N die systeem O uitvoert, kan nu achterwege blijven.
  • Als Z een bevestiging krijgt van bericht N, dan begint Z bericht N + 1 te versturen. Ontvangt Z daarna bevestigingen van N, dan worden deze genegeerd.

Herkomst van de naam ABP[bewerken]

Omdat Z steeds maar één bericht uit kan hebben staan, zijn er niet meer dan twee waarden nodig als labels. In de vroege dagen van de computers had men de gewoonte om het geheugengebruik zo compact mogelijk te houden en als er maar twee waarden nodig waren, dan werd daarvoor gebruikgemaakt van een enkel bit. Vandaar het Alternating Bit Protocol.

Vermangelde berichten en andere stoornissen[bewerken]

Er zijn veel variaties op het basisprotocol ABP. Deze variaties zijn opgekomen uit praktisch gebruik.

Om te beginnen maken implementaties van ABP vaak gebruik van meerdere soorten tegenberichten die O naar Z kan versturen na ontvangst van een bericht. De bekendste hiervan is een "niet ontvangen" bericht, waarmee O aangeeft dat bericht N weliswaar aangekomen is maar onderweg beschadigd is en opnieuw verstuurd moet worden. Dit wordt zo vaak gedaan dat de meeste mensen zelfs denken dat dit basisfunctionaliteit van ABP is, maar feitelijk is het een uitbreiding. Uiteraard is een dergelijk tegenbericht niet nodig – het weggooien van het vermangelde bericht en geen tegenbericht versturen heeft hetzelfde effect.

Een andere, veel voorkomende variant is die waarbij een tijdsindicatie meegestuurd wordt met het bericht. In veel communicatiekanalen is het zo dat berichten niet alleen verloren kunnen gaan, maar ook tijdelijk kunnen "blijven hangen", waardoor de volgorde van berichten verloren kan gaan. Stel dat Z de berichten 1(a) - 1(a)- 0 - 1(b) verstuurt en O reageert hierop met ontvangen(1) - ontvangen(1) - ontvangen(0) – 1(b) komt dus niet aan. Stel nu dat de tweede ontvangst van 1(a) even blijft hangen en pas aankomt bij Z na ontvangen(0). Dan denkt Z dat alle drie de berichten goed aangekomen zijn. Het bijvoegen van een tijdsindicatie (om te zien hoe oud een bericht is) kan dit probleem ondervangen (of gedeeltelijk ondervangen, afhankelijk van de implementatie).

De laatste variant is opgekomen met de snellere en efficiëntere netwerken waarbij het steeds maar moeten wachten op ontvangsten voordat een volgend bericht verzonden kon worden als zonde van de tijd werd beschouwd – zeker als het volgende bericht niets met het eerste te maken had. Deze variant staat dus toe om meerdere berichten open te hebben staan en is eigenlijk een veralgemenisering van ABP. Deze variant heeft zelfs een eigen naam gekregen: SWP.