Introductie
Een begrip van netwerken is belangrijk voor iedereen die een server beheert. Het is niet alleen essentieel om uw diensten online te krijgen en soepel te laten draaien, het geeft ook inzicht om problemen te diagnosticeren.
Deze tekst zal een overzicht geven van enkele veelvoorkomende netwerkconcepten. We zullen terminologie, gangbare protocollen, en de verantwoordelijkheden en kenmerken van de verschillende lagen van netwerken bespreken.
Deze handleiding is besturingssysteem-agnostisch, maar zou zeer nuttig moeten zijn bij het implementeren van functies en diensten die gebruikmaken van netwerken op uw server.
Netwerkwoordenlijst
Ten eerste zullen we enkele veelvoorkomende termen definiëren die u tegen zult komen in deze handleiding, en in andere handleidingen en documentatie met betrekking tot netwerken.
Deze termen zullen verder worden toegelicht in de desbetreffende secties die volgen:
-
Verbinding: In netwerken verwijst een verbinding naar stukjes gerelateerde informatie die worden overgedragen via een netwerk. Over het algemeen wordt eerst een verbinding tot stand gebracht voordat gegevensoverdracht plaatsvindt (door de procedures te volgen die zijn vastgelegd in een protocol) en kan deze aan het einde van de gegevensoverdracht worden ontmanteld.
-
Pakket: Een pakket is de kleinste eenheid die opzettelijk over een netwerk wordt overgedragen. Bij communicatie over een netwerk zijn pakketten de enveloppen die je gegevens (in stukjes) van het ene naar het andere eindpunt dragen.
Pakketten hebben een kopgedeelte dat informatie bevat over het pakket, waaronder de bron en bestemming, tijdstempels, netwerksprongen, enz. Het hoofdgedeelte van een pakket bevat de daadwerkelijke overgedragen gegevens. Het wordt soms het lichaam of de payload genoemd.
- Netwerkinterface: Een netwerkinterface kan verwijzen naar elk soort software-interface naar netwerkhardware. Bijvoorbeeld, als je twee netwerkkaarten in je computer hebt, kun je elke netwerkinterface die ermee is verbonden afzonderlijk beheren en configureren.
A network interface may be associated with a physical device, or it may be a representation of a virtual interface. The “loopback” device, which is a virtual interface available in most Linux environments to connect back to the same machine, is an example of this.
-
LAN: LAN staat voor “local area network”. Het verwijst naar een netwerk of een deel van een netwerk dat niet publiekelijk toegankelijk is voor het bredere internet. Een thuis- of kantoornetwerk is een voorbeeld van een LAN.
-
WAN: WAN staat voor “wide area network”. Het betreft een netwerk dat veel uitgebreider is dan een LAN. Hoewel WAN de relevante term is om grote, verspreide netwerken in het algemeen te beschrijven, wordt het meestal gebruikt om het internet als geheel aan te duiden.
Als gezegd wordt dat een interface is verbonden met de WAN, wordt over het algemeen aangenomen dat deze bereikbaar is via internet.
- Protocol: Een protocol is een reeks regels en standaarden die een taal definiëren die apparaten kunnen gebruiken om te communiceren. Er zijn veel protocollen in gebruik in netwerken, en ze worden vaak geïmplementeerd op verschillende lagen.
Sommige laag-niveau protocollen zijn TCP, UDP, IP en ICMP. Enkele bekende voorbeelden van toepassingslaagprotocollen, gebaseerd op deze lagere protocollen, zijn HTTP (voor het openen van webinhoud), SSH en TLS/SSL.
-
Port: Een poort is een adres op een enkele machine dat kan worden gekoppeld aan een specifieke software. Het is geen fysieke interface of locatie, maar het stelt uw server in staat om te communiceren met meer dan één toepassing.
-
Firewall: Een firewall is een programma dat beslist of verkeer van of naar een server moet worden toegestaan. Een firewall werkt meestal door regels te creëren voor welk type verkeer acceptabel is op welke poorten. Over het algemeen blokkeren firewalls poorten die niet worden gebruikt door een specifieke toepassing op een server.
-
NAT: NAT staat voor network address translation. Het is een manier om inkomende verzoeken opnieuw te verpakken en door te sturen naar relevante apparaten of servers op een LAN. Dit wordt meestal geïmplementeerd in fysieke LAN’s als een manier om verzoeken via één IP-adres naar de noodzakelijke backend-servers te routeren.
-
VPN: VPN staat voor virtueel privénetwerk. Het is een manier om afzonderlijke LAN’s via internet te verbinden, met behoud van privacy. Dit wordt gebruikt om externe systemen te verbinden alsof ze zich op een lokaal netwerk bevinden, vaak om veiligheidsredenen.
Er zijn veel andere termen die je tegen zult komen, en deze lijst is niet uitputtend. We zullen andere termen uitleggen wanneer dat nodig is. Op dit punt moet je enkele concepten op hoog niveau begrijpen die ons in staat zullen stellen de onderwerpen die nog komen beter te bespreken.
Netwerklagen
Hoewel netwerken vaak worden besproken in termen van topologie op een horizontale manier, tussen hosts, is de implementatie ervan gelaagd op een verticale manier binnen een gegeven computer of netwerk.
Wat dit betekent, is dat er meerdere technologieën en protocollen zijn die boven op elkaar zijn gebouwd om communicatie te laten functioneren. Elke opeenvolgende, hogere laag abstraheert de ruwe gegevens een beetje meer.
Het stelt je ook in staat om lagere lagen op nieuwe manieren te benutten zonder de tijd en energie te investeren om de protocollen en toepassingen te ontwikkelen die dat soort verkeer behandelen.
De taal die we gebruiken om te praten over elk van de gelaagdheidsschema’s varieert aanzienlijk, afhankelijk van welk model je gebruikt. Ongeacht het model dat wordt gebruikt om de lagen te bespreken, is het pad van gegevens hetzelfde.
Als gegevens uit één machine worden verzonden, begint het bovenaan de stapel en filtert naar beneden. Op het laagste niveau vindt daadwerkelijke verzending naar een andere machine plaats. Op dit punt reist de data weer omhoog door de lagen van de andere computer.
Elke laag heeft de mogelijkheid om zijn eigen “omhulsel” toe te voegen rond de gegevens die het ontvangt van de aangrenzende laag, wat de lagen die volgen helpt beslissen wat ze met de gegevens moeten doen wanneer deze wordt overgedragen.
TCP/IP Model
Het TCP/IP-model, ook wel bekend als het Internet-protocol suite, is een veelgebruikt gelaagdheidsmodel. Het definieert de vier afzonderlijke lagen:
-
Toepassing: In dit model is de toepassingslaag verantwoordelijk voor het creëren en verzenden van gebruikersgegevens tussen toepassingen. De toepassingen kunnen op externe systemen staan en zouden moeten lijken alsof ze lokaal werken voor de eindgebruiker. Deze communicatie vindt plaats tussen peers.
-
Transport: De transportlaag is verantwoordelijk voor communicatie tussen processen. Dit niveau van netwerken maakt gebruik van poorten om verschillende services aan te spreken.
-
Internet: De internetlaag wordt gebruikt om gegevens van knooppunt naar knooppunt in een netwerk te transporteren. Deze laag is op de hoogte van de eindpunten van de verbindingen, maar is niet bezorgd over de daadwerkelijke verbinding die nodig is om van de ene plaats naar de andere te komen. IP-adressen worden in deze laag gedefinieerd als een manier om externe systemen op een adresseerbare manier te bereiken.
-
Koppeling: De koppelingslaag implementeert de feitelijke topologie van het lokale netwerk waarmee de internetlaag een adresseerbare interface kan presenteren. Het legt verbindingen tussen naburige knooppunten om gegevens te verzenden.
Zoals u kunt zien, is het TCP/IP-model abstract en flexibel. Dit maakte het populair om te implementeren en stond toe dat het de dominante manier werd waarop netwerklagen worden gecategoriseerd.
Interfaces
Interfaces zijn netwerkcommunicatiepunten voor uw computer. Elke interface is geassocieerd met een fysiek of virtueel netwerkapparaat.
Meestal heeft uw server één configureerbare netwerkinterface voor elke Ethernet- of draadloze internetkaart die u heeft.
Bovendien zal het een virtuele netwerkinterface definiëren genaamd de “loopback” of localhost-interface. Dit wordt gebruikt als een interface om toepassingen en processen op een enkele computer te verbinden met andere toepassingen en processen. U kunt dit zien als de “lo” -interface in veel tools.
Vaak configureren beheerders één interface om verkeer naar internet te bedienen en een andere interface voor een LAN of privénetwerk.
In datacenters met ingeschakelde privénetwerken (inclusief DigitalOcean Droplets) heeft uw VPS twee netwerkinterfaces. De “eth0” -interface wordt geconfigureerd om verkeer van internet af te handelen, terwijl de “eth1” -interface wordt gebruikt om te communiceren met een privénetwerk.
Protocollen
Netwerken werkt door een aantal verschillende protocollen boven op elkaar te stapelen. Op deze manier kan één stuk data worden verzonden met behulp van meerdere protocollen die binnen elkaar zijn ingekapseld.
We beginnen met protocollen geïmplementeerd op de lagere netwerklagen en werken zo naar boven naar protocollen met hogere abstractie.
Medium Toegangsbeheer
Medium toegangsbeheer is een communicatieprotocol dat wordt gebruikt om specifieke apparaten te onderscheiden. Elk apparaat moet een uniek, voorgeprogrammeerd media toegangsbeheeradres (MAC-adres) krijgen bij fabricage, waarmee het wordt onderscheiden van elk ander apparaat op internet.
Hardware adresseren via het MAC-adres stelt je in staat om naar een apparaat te verwijzen met een unieke waarde, zelfs wanneer de software erboven tijdens gebruik de naam voor dat specifieke apparaat kan veranderen.
MAC-adressering is een van de weinige protocollen van de laag-niveau linklaag waarmee je waarschijnlijk regelmatig zult interageren.
IP
Het IP-protocol is een van de fundamentele protocollen die het internet laten werken. IP-adressen zijn uniek binnen elk netwerk en stellen machines in staat om elkaar aan te spreken over een netwerk. Het is geïmplementeerd op de internetlaag in het TCP/IP-model.
Netwerken kunnen aan elkaar worden gekoppeld, maar verkeer moet worden gerouteerd bij het oversteken van netwerkgrenzen. Dit protocol gaat uit van een onbetrouwbaar netwerk en meerdere paden naar dezelfde bestemming die dynamisch kunnen worden gewijzigd.
Er zijn verschillende implementaties van het protocol. De meest voorkomende implementatie van vandaag de dag zijn IPv4-adressen, die het patroon 123.123.123.123
volgen, hoewel IPv6-adressen, die het patroon 2001:0db8:0000:0000:0000:ff00:0042:8329
volgen, populairder worden vanwege het beperkte aantal beschikbare IPv4-adressen.
ICMP
ICMP staat voor internet control message protocol. Het wordt gebruikt om berichten tussen apparaten te sturen om hun beschikbaarheid of foutcondities aan te geven. Deze pakketten worden gebruikt in verschillende netwerkdiagnostische tools, zoals ping
en traceroute
.
Gewoonlijk worden ICMP-pakketten verzonden wanneer een ander type pakket een probleem ondervindt. Ze worden gebruikt als feedbackmechanisme voor netwerkcommunicatie.
TCP
TCP staat voor transmission control protocol. Het is geïmplementeerd in de transportlaag van het TCP/IP-model en wordt gebruikt om betrouwbare verbindingen tot stand te brengen.
TCP is een van de protocollen die gegevens in pakketten verpakt. Vervolgens worden deze overgedragen naar het externe uiteinde van de verbinding met behulp van de beschikbare methoden op de lagere lagen. Aan de andere kant kan het fouten controleren, verzoeken om bepaalde stukken opnieuw te verzenden en de informatie weer samenstellen tot één logisch geheel om naar de toepassingslaag te sturen.
Het protocol bouwt een verbinding op vóór gegevensoverdracht met behulp van een systeem genaamd een driewegshandshake. Dit is een manier voor de twee uiteinden van de communicatie om het verzoek te erkennen en overeenstemming te bereiken over een methode om gegevensbetrouwbaarheid te waarborgen.
Na het verzenden van de gegevens wordt de verbinding afgebroken met behulp van een vergelijkbare vierwegshandshake.
TCP is het voorkeursprotocol voor veel van de meest populaire toepassingen voor internet, waaronder WWW, SSH en e-mail.
UDP
UDP staat voor user datagram protocol. Het is een populaire metgezelprotocol van TCP en is ook geïmplementeerd in de transportlaag.
Het fundamentele verschil tussen UDP en TCP is dat UDP onbetrouwbare gegevensoverdracht biedt. Het controleert niet of de gegevens aan de andere kant van de verbinding zijn ontvangen. Dit klinkt misschien als iets negatiefs, en voor veel doeleinden is dat ook zo. Toch is het ook uiterst belangrijk voor sommige functies.
Omdat het niet nodig is om te wachten op bevestiging dat de gegevens zijn ontvangen en gedwongen wordt om gegevens opnieuw te verzenden, is UDP veel sneller dan TCP. Het maakt geen verbinding met de externe host, het stuurt gewoon gegevens zonder bevestiging.
Omdat het een eenvoudige transactie is, is het nuttig voor communicatie zoals het opvragen van netwerkbronnen. Het behoudt ook geen toestand, wat het ideaal maakt voor het verzenden van gegevens van één machine naar veel realtime clients. Dit maakt het ideaal voor VOIP, games en andere toepassingen die zich geen vertraging kunnen veroorloven.
HTTP
HTTP staat voor hypertext transfer protocol. Het is een protocol gedefinieerd in de toepassingslaag dat de basis vormt voor communicatie op het web.
HTTP definieert een aantal werkwoorden die het externe systeem vertellen wat u aanvraagt. Bijvoorbeeld, GET, POST en DELETE werken allemaal op een andere manier met de aangevraagde gegevens. Voor een voorbeeld van de verschillende HTTP-verzoeken in actie, zie Hoe Routes en HTTP-verzoekmethoden definiëren in Express.
DNS
DNS staat voor domeinnaamsysteem. Het is een protocol op toepassingslaag dat wordt gebruikt om een mensvriendelijk benamingmechanisme voor internetbronnen te bieden. Het verbindt een domeinnaam met een IP-adres en stelt je in staat om sites op naam te benaderen in je browser.
SSH
SSH staat voor Secure Shell. Het is een versleuteld protocol geïmplementeerd op de toepassingslaag dat kan worden gebruikt om op een veilige manier te communiceren met een externe server. Veel aanvullende technologieën zijn gebouwd rond dit protocol vanwege de end-to-end-versleuteling en alomtegenwoordigheid.
Er zijn nog veel andere protocollen die we niet hebben behandeld maar die even belangrijk zijn. Dit zou je echter een goed overzicht moeten geven van enkele fundamentele technologieën die het internet en netwerken mogelijk maken.
Conclusie
Op dit punt zou je bekend moeten zijn met enkele netwerkterminologie en in staat moeten zijn te begrijpen hoe verschillende componenten met elkaar kunnen communiceren. Dit zou je moeten helpen bij het begrijpen van andere artikelen en de documentatie van je systeem.
Volgende, voor een hoog-niveau, real-world voorbeeld, kun je wellicht Hoe HTTP-verzoeken te maken in Go lezen.