Hoofdindex » Servers » » Een eigen webserver » » Routers » » Werking (voorbeeld)
Webservers en meer
Wat doet een router?
Een eigen webserver?
Hier leg ik uit wat een router doet aan de hand van een voorbeeldconfiguratie, eerst zonder router, dan met een router.

Voorbeeld zonder router

De computer is direct aangesloten op de modem. Je computer heeft als ip 81.164.242.39 (gekregen via DHCP (kabel) of via PPPoE (ADSL) toen je ingelogd bent).

Poorten

Je computer heeft n enkele IP, maar talrijke poorten (omgeveer 60.000), de poorten boven 1024 zijn vrije poorten die gebruikt worden voor uitsturen van vragen en het wachten op antwoord. Het IP kan je vergelijken met het straatnummer, het poortnummer met het appartementsnummer. Het ip + poortnummer vormt het volledig adres van een computer (het wordt soms 'socket' genoemd).

Bepaalde poorten zijn gestandardiseerd: een webserver luistert op poort 80, en een client zal daarom zijn vraag richten aan poort 80. Een client die zijn mail opvraagt zal de vraag richten aan poort 110 (popmail). En zo zijn er honderden gestandardiseerde poorten: de client weet welke poort gebruikt moet worden, dit is de zogenaamde "default"-poort.

Bij het gebruik van niet-standaard-poorten, zoals een home server dat vanwege beperkingen opgelegd door de service provider niet op poort 80 kan luisteren moet je gewoon het juiste poortnummer aangeven. Een poort is maar een nummer, als client en server dezelfde poort gebruiken kunnen ze zonder probleem communiceren, welke poort ze ook gebruiken.

Opvragen van een pagina

Veronderstel dat je de indexpagina van deze server wilt opvragen. Onze server heet server.idemdito.org en heeft als address 81.83.9.93 (meer over het omzetten van namen in IP adressen in het gedeelte over de werking van DNS).

Je typt de url in je browser. Je computer voert een omzetting van de naam naar het IP adres (resolution) en maakt een verbinding met mijn server.

server.idemdito.org luistert wel op poort 80 zoals iedere normale server. Deze computer heeft een internet-verbinding dat geschikt is voor servers, met een vast IP en alle poorten open.

Bij het aanvragen van een pagina maakt je computer een TCP-verbinding (dit is de meest voorkomende verbinding, de andere zijnde UDP). TCP is een tweerichtingsverbinding, vanaf een poort van je computer naar een poort van een andere computer. In dit geval wordt poort 5000 gebruikt voor de uitgaande verbinding. Het antwoord komt via dezelfde weg (dit is het geval bij de meeste internetprotocollen zoals web en mail).

De server stuurt nu het antwoord naar poort 5000 van de klant (via dezelfde verbinding dat aangelegd om de pagina aan te vragen).

Of de verbindingen open blijven of na iedere transactie (vraag gevolgd door antwoord) of verbroken worden hangt van het protocol: bij gebruik van het oudere HTTP/1.0 wordt de verbinding verbroken na iedere vraag/antwoord, bij HTTP/1.1 blijven beide verbindingen open zolang er geen time-out gebeurt (aan de server-kant) of als de klant naar een andere site surft. Deze persistente verbindingen zijn sneller omdat er niet altijd een nieuwe verbinding gelegd moet worden. Omdat TCP een protocol met een ingebouwde foutcorrectie is, moet er bij het aangaan van een verbinding niet minder dan 3 datapakketten gewisseld worden tussen client en server. Deze pakketten bevatten geen data, maar zorgen ervoor dat de verbinding dat gemaakt zal worden over een foutcorrectie beschikt. Iedere keer dat er dus een verbinding gelegd moet worden, worden dus eerst 3 berichten verzonden; dit kan vermeden worden door de verbinding persistent te maken. Maar ik vrees dat wij aan het afdwalen zijn...

Bij FTP-verbindingen worden er twee verbindingen aangelegd: een controle-poort waardoor de opdrachten en antwoorden gestuurd worden, en een data-poort waardoor de bestanden en de directory-lists gestuurd worden. De dataverbinding wordt afgebroken na iedere verzending, waardoor het protocol niet echt efficient is bij het versturen van talrijke kleine bestanden.

Voorbeeld met router

Bij een lokaal netwerk heeft iedere computer een lokaal adres, dat verschillend is van het adres dat door de provider toegewezen is. Lokale adressen zal je meestal vinden in de range 192.168.*.*
Dit is de situatie met router: iedere computer heeft nu zijn adres gekregen van de router (via DHCP), terwijl de router zijn (publiek) adres gekregen heeft via de modem. De router heeft twee adressen: een internet adres (81.164.242.39) en een lokaal adres (192.168.1.99).
DHCP is een ongeloofelijk leuk ding (dat zal je merken als je netwerkbeheerder bent van een netwerk met honderden toestellen: computers, printers en andere internet-dingen). DHCP geeft niet alleen een IP adres aan computers, maar stuurt ze ook een aantal nuttige parameters:

  • de gateway, dit is het adres dat gebruikt moet worden voor aanvragen die niet-lokaal zijn. De gateway is meestal de router, en die heeft adres 192.168.1.99 in ons voorbeeld.
  • de subnet-mask geeft aan welke adressen lokaal zijn en welke niet. Het subnet mask is hier 255.255.255.0: alle adressen tussen 192.168.1.0 en 192.168.1.255 zijn lokaal, al de rest is 'remote'.
  • De DHCP server in de router kan nog andere parameters doorsturen, maar die zijn hier niet van belang.
Wat voor nut heeft dat? De derde computer heeft bijvoorbeeld een gedeelde printer. Als je een printopdracht naar de printer wenst te sturen, dan kan dit direct naar zijn adres gebeuren (192.168.1.103), zonder dat het via de router moet passeren. In een groot netwerk scheeft dat enorm!

NAT, PAT en overloading

We nemen weer dezelfde situatie. Computer 1 vraagt een pagina aan aan de server gelegen op adres 81.241.241.58 (dit is niet dezelfde server als in het vorig voorbeeld, maar speelt verder geen rol) en gebruikt als uitgaande poort 5000. De computer richt zich nu echter niet meer direct tot de server, maar tot de gateway omdat er een gateway en subnet ingesteld staat in de configuratie van die computer en het adres niet lokaal is (deze configuratie is automatisch gebeurd via DHCP).

Deze omroep wordt door de router omgezet naar het adres van de uiteindelijke server. Veel aan de vraag moest er niet veranderd worden.
Er wordt een regeltje in de translation table van de router ingevuld:
192.168.1.101:5000 -- 81.241.241.58:5000
Deze regeltje zegt dat een antwoord van de server op adres 81.241.241.58 dat binnenkomt op poort 5000 doorgestuurd moet worden naar de lokale computer op adres 192.168.1.101, poort 5000.

Conputer 2 heeft ook een aanvraag aan dezelfde server. Computer 2 gebruikt dezelfde instellingen, en zal ook luisteren op poort 5000.
Hier hebben we echter een probleem. Als het antwoord toekomt, dan zal het k op poort 5000 toekomen als de router de opdracht niet wijzigt! (en dan kan de router beide antwoorden niet naar de juiste computers sturen). Dit wordt opgelost door de aanvraag lichtjes te wijzigen: in plaats van poort 5000 te gebruiken, zal de router poort 5001 gebruiken in zijn aanvraag. Het wijzigen van de poortnummer heet PAT (port adres translation). Het gebruiken van een IP adres en meerdere poortnummers heet overloading: je overbruikt als het ware het ip adres. Hier wordt eveneens een regeltje in de translation table ingevuld:
192.168.1.102:5000 -- 81.241.241.58:5001
Er wordt een antwoord verwacht van de computer gelegen op 81.241.241.58 op lokale poort 5001, en het antwoord moet naar 192.168.1.102 op poort 5000.

De regel wordt uit de translation table verwijderd van zodra de betreffende verbinding verbroken is. Een FTP-verbinding waarbij er bij iedere bestandsoverdracht een nieuwe dataverbinding opgezet moet worden betekent extra veel werk voor de router.

Routers en lokale servers

In het vorige heb je geleerd hoe een router het juiste antwoord naar de juiste computer kan sturen. Maar wat gebeurt er als een antwoord binnenkomt voor een vraag dat niet gesteld werd?
In dit geval wordt het pakket gewoon weggegooid. Dit is de firewall-funktie van de router: wat niet aangevraagd werd, wordt niet verder verwerkt.

Overigens is er zeer weinig verschil tussen een vraag en een antwoord (aan de TCP pakketten kan je het niet zien: het pakket bevat gewoon een adres van de verzender en de bestemmeling + de data). Enkel de uiteindelijke computers weten waarover het gaat. De componenten onderweg sturen gewoon de gegevens door. Enkel een router moet wat meer uit zijn doppen kijken en de adressen controleren.

In het volgend voorbeeld heb je een webserver op computer 192.168.1.103 (luisterend op poort 80) en een mailserver op 192.168.1.102 (luisterend op poort 110). Je provider blokkeert alle poorten beneden 1024 in een poging je te verhinderen servers te runnen. In dit geval moet je je router bijkomend configureren. De tabel dat nu gehanteerd wordt lijkt zeer veel op de translation table van hierboven, maar deze moet gedeeltelijk zelf ingevuld worden. Hoe we dit doen wordt later nog uitgelegd.

Je moet namelijk aangeven in je routing table dat aanvragen voor webpagina's (dat je moet laten binnenkomen op poort 20800) doorgestuurd moeten worden naar 192.168.1.103 en aanvragen om mail te lezen naar computer 192.168.1.1022. Beide computers gebruiken de standaard-poorten (zodat je de web- en mailserver niet moet configureren). Hier komt dus PAT en NAT om de hoek kijken.
Als de webserver of mailserver een antwoord stuurt, dan gebeurt die via de gewone weg, dus via de gateway die gedefinieerd in iedere lokale computer.

Links to relevant pages - Liens vers d'autres pages au contenu similaire - Links naar gelijkaardige pagina's