# Alternating bit protocol

Het Alternating Bit Protocol ABP is een netwerkprotocol, dat tot doel heeft het twee computers mogelijk te maken over een verbindingslijn te communiceren, waarin fouten optreden. Het ABP is ontworpen om de problemen het hoofd te bieden, die in de communicatie werden ondervonden in de vroege dagen van netwerken. Verzonden berichten kwamen vaak niet aan. Het was dan nodig om de berichten steeds opnieuw te versturen, totdat ze wel waren aangekomen. Er zijn bij de communicatie dus een zender Z en een ontvanger O betrokken. Het ABP is een protocol dat die twee mogelijk maakt om de communicatie zo uit te voeren, dat zij zelf niet tussenbeide hoeven te komen.
Z moet een tijd lang steeds hetzelfde bericht versturen, totdat het bericht komt dat O het heeft ontvangen. Z registreert dit in een enkel bit, vandaar de naam Alternating Bit Protocol. Het protocol is op het ARPANET gebruikt.

## Procedure

Zender Z en Ontvanger O zijn verbonden door een communicatiekanaal, bijvoorbeeld een netwerkkabel of het internet. Dit kanaal maakt het mogelijk om beide kanten op te communiceren, maar het kanaal maakt fouten, berichten kunnen onderweg verloren gaan. Er is wel de garantie dat er ten minste eens in de zoveel tijd een bericht aankomt. Het protocol komt er feitelijk op neer dat Z een bericht herhaald verstuurt, gelabeld met een nummer $n$, totdat het van O een tegenbericht ontvangt dat het bericht met nummer $n$ is ontvangen. 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$ is ontvangen. Vervolgens wacht O op een bericht met een nummer ongelijk aan $n$.
* Als O een bericht ontvangen heeft met nummer $n$, verwacht deze vervolgens een bericht met een nummer $n+1$. Wordt weer een bericht met nummer $n$ ontvangen, dan is dat bericht dubbel, maar stuurt toch nog een bevestiging van bericht $n$.
* Als Z een bevestiging krijgt van bericht $n$, dan begint Z bericht $n+1$ te versturen. Ontvangt Z daarna nog bevestigingen van $n$, dan worden deze genegeerd.

## Varianten

Er zijn veel varianten op het basisprotocol ABP. Deze varianten zijn opgekomen uit praktisch gebruik.
Implementaties van ABP maken om te beginnen vaak gebruik van meer soorten tegenberichten die O naar Z kan versturen na ontvangst van een bericht. De bekendste hiervan is het tegengestelde, dat een bericht niet goed is aangekomen, waarmee O aangeeft dat bericht $n$ weliswaar aangekomen is maar onderweg beschadigd is en opnieuw moet worden verstuurd. 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 versleutelde bericht en geen tegenbericht versturen heeft hetzelfde effect.
Een andere, veel voorkomende variant is die waarbij een tijdsindicatie met het bericht wordt meegestuurd. Het is in veel communicatiekanalen zo dat berichten niet alleen verloren kunnen gaan, maar ook tijdelijk kunnen blijven hangen, waardoor de volgorde van berichten verloren kan gaan. Het bijvoegen van een tijdsindicatie kan dit probleem ondervangen. Deze variant is opgekomen met de snellere en efficiëntere netwerken waarbij het steeds maar moeten wachten op ontvangsten voordat een volgend bericht kon worden verzonden als zonde van de tijd werd beschouwd, zeker als het volgende bericht niets met het eerste te maken had. Deze variant, sliding window protocol, staat dus toe om meer berichten tegelijk proberen te versturen en is eigenlijk een uitbreiding van ABP.