Twee lagen model

De toepassingen waar we mee te maken hebben stellen verschillende eisen.
Voor een deel zijn deze eisen tegengesteld en strijdig.

Voor sommige toepassingen zijn bandbreedte en minimale vertraging van belang.
Een verstoring vormt geen probleem en kan eenvoudig elders opgevangen worden.
Denk bijvoorbeeld aan telefonie: voor een gebruiker is een kleine verstoring geen groot probleem en zelfs bij een grotere verstoring kan een gebruiker dit wel opvangen.
Maar, voor telefonie is vertraging erg vervelend.
Een vertraging van 100-200 ms is merkbaar.

Voor andere toepassingen is elke verstoring één teveel, maar zijn vertraging en bandbreedte minder kritisch.
Voorbeelden hiervan zijn de meeste datatoepassingen, zoals e-mail, gebruik van het web, tekst-chat.

Het internet komt aan deze tegengestelde eisen tegemoet door het gebruik van een tweelagenmodel:
de onderste laag, het IP-protocol (Internet Protocol), vormt een best-effort pakketcommunicatie, "zo dicht mogelijk op de onderliggende hardware".
"Best effort" wil in dit geval zeggen dat pakketten getransporteerd worden zo goed (en kwaad) de hardware dit toestaat.
Er zijn geen garanties voor correcte aflevering of voor aflevering in de juiste volgorde.
Als een pakket niet aankomt, of in de verkeerde volgorde, of beschadigd, dan moet dat probleem elders opgelost worden.

Voor sommige toepassingen is dit goed genoeg, denk aan het telefonievoorbeeld.
Voor andere toepassingen is betrouwbaarheid essentieel.
Hiervoor moet de tweede laag in het protocol zorgen, in de vorm van het TCP-protocol (Transmission Control Protocol).
Dit zorgt, op basis van de best-effort pakketcommunicatie, voor betrouwbare verbindingen (datastromen).
Deze betrouwbaarheid wordt gerealiseerd door in het geval van ontbrekende of beschadigde pakketten te zorgen voor hertransmissie.

Toepassingen waarvoor het best-effort model van de IP-laag voldoende is, kunnen gebruik maken van het UDP-protocol (User Datagram Protocol) in de tweede laag in plaats van TCP.

We moeten in staat zijn om de verschillende datastromen van de segmenten voor de verschillende toepassingsinstanties te identificeren.
Dit kan op basis van de gecombineerde IP+TCP of IP+UDP header-informatie. Een TCP- of UDP-header bevat een poort nummer.
De identificatie van een stroom is dan: ((IP-adres zender, poortnrzender), (IP-adres ontvanger, poortnr ontvanger)).
Hierop komen we later terug.