# Protocol stack

Een protocol stack (stapel van protocollen oftewel protocollenhoop ) is een bepaalde implementatie van software in een verzameling van protocollen (suite) van computernetwerken. De termen wordt vaak uitwisselbaar gebruikt. Strikt gesproken is de suite de definitie van de protocollen en is de 'stack' de software-implementatie ervan.
Individuele protocollen binnen een suite zijn vaak met één enkel doel ontworpen. Deze modularisatie vergemakkelijkt ontwerp en beoordeling. Omdat ieder protocol-module gewoonlijk communiceert met 2 anderen, worden zij voorgesteld als lagen in een stapel van protocollen. Het laagste protocol handelt altijd fysieke interactie op laag-niveau van de hardware af. Iedere hogere laag voegt meer mogelijkheden toe. Gebruikerapplicaties handelen uit gewoonte enkel de bovenste lagen af (zie ook OSI-model).
Protocol stacks worden veelal, tijdens een praktische implementatie, verdeel in drie voornamelijke secties voor media, transport en applicaties. Een bepaald besturingssysteem of platform zal vaak in het bezit zijn van twee goed gedefinieerde software interfaces: één tussen de media- en transportlagen en één tussen de lagen van transport en applicaties.
De 'media-naar-transport'-interface definieert hoe software voor het transport-protocol gebruikmaakt van bepaalde media en typen hardware ("card drivers"). Dit interfaceniveau zou bijvoorbeeld omschrijven hoe TCP/IP-transportsoftware zou spreken met ethernet-hardware. Voorbeelden van deze interfaces bevatten de ODI-specificatie en NDIS in de wereld van Microsoft Windows en MS-DOS.
De 'applicatie-naar-transport'-interface definieert hoe applicatie-programma's gebruikmaken van de transportlagen. Bijvoorbeeld het interfaceniveau zou definiëren hoe een programma van de webbrowser zou spreken met TCP/IP-transport-software. Voorbeelden van deze interfaces zijn sockets van Berkeley en System V-stromen in de Unix-wereld en Winsock in de Microsoft-wereld.
Omschrijving van algemene protocolsuite:
Men stelle zich drie computers voor: A, B en C. A en B hebben beide radio-apparatuur en kunnen middels elektromagnetische golven communiceren door gebruik te maken van een geschikt netwerkprotocol (zoals IEEE 802.11). B en C zijn met elkaar door een kabel verbonden, die zij gebruiken om gegevens uit te wisselen (weer met behulp van een protocol, bijvoorbeeld ethernet). Geen van deze protocollen zullen echter in staat zijn om informatie te transporteren van A naar C, omdat deze computers zich volgens concept op verschillende netwerken bevinden. Men heeft hiervoor een inter-netwerkprotocol nodig om ze te 'verbinden'.
Men zou de twee protocollen kunnen combineren om een krachtige derde te vormen, die zowel meester is over de kabel als de draadloze transmissie, maar een ander super-protocol zou dan nodig zijn voor iedere mogelijke combinatie van protocollen. Het is makkelijker de basisprotocollen met rust te laten en een protocol te ontwerpen dat boven op ieder van de overige kan werken ( het Internetprotocol is een voorbeeld hiervan). Dit worden dan gezamenlijk twee stapels van elk twee protocollen. Het inter-netwerkprotocol zal communiceren met ieder basisprotocol in de simpelere taal hiervan; de basisprotocollen zullen elkaar niet direct aanspreken.
Een verzoek van computer A om een gegevensstuk naar C te sturen, wordt opgepakt door het bovenste protocol, die (hoe dan ook) weet dat C bereikbaar is via B. Daarom draagt het het draadloze protocol op om het gegevenspakket te verzenden naar B. Op deze computer zullen de afhandelaars van de laagste laag het pakket doorgeven aan het inter-netwerkprotocol, dat, herkennend dat B niet de eindbestemming is, nog een keer functies op het laag-niveau in werking zal zetten. Nu wordt het protocol van de kabel gebruikt om de gegevens naar C te zenden. Hier wordt het ontvangen pakket weer doorgegeven aan het bovenste protocol, die (met C als einddoel) het zal doorgeven aan een hoger protocol of applicatie op C. Vaak zit er bovendien een protocol van nog hoger niveau bovenop, dat verdere verwerking inluidt.
Een normale stapel van protocollen ziet er zo uit: