Gecodeerde en gedecodeerde gegevens
Als u gegevens wilt verzenden via een communicatiemedium zoals een telefoonlijn, moeten de gegevens worden geserialiseerd, dat wil gezegd, geconverteerd naar een reeks en nullen die serieel over de lijn worden verzonden. Serialisatie moet zodanig worden uitgevoerd dat de computer die de gegevens ontvangt, de gegevens weer kan converteren naar de oorspronkelijke indeling. Hoe serialisatie wordt uitgevoerd, wordt een communicatieprotocolgenoemd en wordt beheerd door zowel software- als gegevensoverdrachthardware. Er zijn verschillende niveaus waarop de gegevens worden geconverteerd. In de volgende afbeelding ziet u een sterk vereenvoudigde weergave van communicatieprotocollagen.
In de voorgaande afbeelding ziet u de toepassingslaag op Computer 1 die de gegevens verzendt die moeten worden verzonden (meestal uit een combinatie van tekstuele tekens en getallen) naar de laag coderen/decoderen. De laag coderen/decoderen codeert de gegevens in een stroom computerbytes. Op het laagste niveau converteert de hardwarelaag de bytes aan gegevens naar een seriële stroom met enen en nullen die via de regel naar Computer 2 worden verzonden. De hardwarelaag van Computer 2 converteert de enen en nullen terug naar computerbytes en geeft ze door aan de coderings-/decoderingslaag. De laag coderen/decoderen codeert de bytes weer in de oorspronkelijke indeling en geeft de gegevens door aan de toepassingslaag.
Een geaccepteerd softwareontwerpprincipe is het gebruik van abstractie, dat wil gezegd, het proces van het beschrijven van een probleem of object in termen van de algemene parameters in plaats van alle details te beschrijven die nodig zijn om het probleem op te lossen, of om alle details van een object te beschrijven. Met abstractie kan een ontwerper een softwareobject opgeven dat specifieke kwaliteiten heeft zonder dat het object daadwerkelijk in de softwarecode wordt geïmplementeerd. Een dergelijke praktijk laat de implementatie open. Het vereenvoudigt ook de specificatie en maakt het mogelijk om axiomen over het object te vermelden dat kan worden bewezen wanneer het object wordt geïmplementeerd. Deze axiomen kunnen vervolgens worden aangenomen wanneer het object wordt gebruikt in een ander object op een hoger niveau. Abstractie is het kenmerk van de meest hedendaagse softwarespecificaties.
De meeste communicatieprotocollen veel abstractie omvatten. Objecten op hogere lagen worden abstract gedefinieerd en zijn bedoeld om te worden geïmplementeerd met behulp van objecten op lagere lagen. Een service op één laag kan bijvoorbeeld vereisen dat bepaalde abstracte objecten tussen computers worden overgebracht. Een laag op lager niveau kan coderingsregels gebruiken om de abstracte objecten om te zetten in tekenreeksen van enen en nullen.
Een veelgebruikte methode voor het opgeven van abstracte objecten die zijn bedoeld om serieel te worden verzonden, wordt Abstract Syntax Syntax Notation One (ASN.1) genoemd. ASN.1 wordt gedefinieerd in CCITT-aanbeveling X.208-. Eén set ASN.1-regels voor het weergeven van objecten zoals tekenreeksen en nullen wordt de Distinguished Encoding Rules (DER) genoemd en wordt gedefinieerd in CCITT-aanbeveling X.509, sectie 8.7. Dit zijn de coderingsmethoden die momenteel door CryptoAPI worden gebruikt.
Zie Functies coderen en decoderenvoor meer informatie over functies voor coderen/decoderen.