# Netwerkprotocollen
## Doelstellingen

Onderstaande doelstellingen komen in meer of mindere mate aan bod. De grijze doelstellingen komen hier niet aan bod. Dat zijn bv. praktijkoefeningen die aansluiten bij deze theorie, maar die in dit Wikibook niet behandeld worden. Of bv. theorie die in een ander hoofdstuk wordt behandeld.
Uit het leerplan van Applicatie- en Databeheer, een deel van leerplandoel 26, 27 en 29:
* LPD 26: De leerlingen lichten de opbouw en werking van een netwerksysteem met zijn componenten en transportmedia toe.
** netwerkdiensten, clouddiensten
** routing
** virtualisatie
* Lexicon. De componenten van een netwerk zijn onder meer werkstation, server, access point, switch, router, gateway, firewall, noodbatterij, backbone, SAN, NAS.
* Lexicon. De transportmedia zijn de soorten bekabeling in een netwerk, wifi, bluetooth …
* Lexicon. De basis clouddiensten zijn: IaaS, PaaS en SaaS.
* LPD 27: De leerlingen lichten een lagenmodel voor datacommunicatie en de functie en werking van communicatieprotocollen in een netwerk toe.
** Adressering. Bij adressering worden IPv4 en IPv6 behandeld.
* Wenk. Het OSI-model wordt gebruikt als theoretisch lagenmodel. De leerlingen kunnen aan de hand van het OSI-model problemen binnen een netwerk stapsgewijs oplossen.
* Wenk. Volgende protocollen komen aan bod: TCP/IP, UDP, ethernet-protocol.
* Wenk. Bij de adressering wordt aandacht besteed aan subnet en subnetmasker.
* Wenk. Je leert de leerlingen getallen omzetten van het decimaal talstelsel naar het binair en hexadecimaal talstelsel en omgekeerd.
* LPD 29: De leerlingen installeren, configureren en onderhouden on premise een client en server besturingssysteem en applicatiesoftware.
** DNS, DHCP
* Wenk. Je kan de Cisco Packet Tracer of Lernsoftware Filius gebruiken. Dit zijn gratis tools waarmee je volledige netwerken kan bouwen en configureren. Als leerkracht kan je, om leerlingen fouten te leren herkennen, met die tools netwerken definiëren en voorzien van verschillende fouten. Je test hiermee theoretische kennis in praktische situaties.
Uit het leerplan Informatica- en communicatiewetenschappen, een deel van leerplandoel 15, 19 en 22:
* LPD 15: De leerlingen lichten de opbouw, de werking en de samenwerking toe van de componenten van een computersysteem.
** OSI-referentiemodel
** Communicatieprotocol
** Adressering
* Wenk. Het is belangrijk dat de leerlingen inzicht krijgen in het OSI-referentiemodel. Alles vertrekt van hieruit. Er worden meerdere communicatieprotocollen besproken, telkens komt het principe en de specifieke implementatie ervan aan bod. Bij adressering wordt zeker ingegaan op IP-adressering en subnetting voor IPv4 en IPv6. Enkel actuele netwerkcomponenten worden besproken.
* Wenk: Je kan volgende communicatieprotocollen aan bod laten komen: TCP/IP, seriële communicatie tussen controllers of tussen controllers en sensoren/actuatoren (I2C, SPI, Asynchroon), communicatie tussen controllers en computersystemen (USB, bluetooth, wifi, Lora, 4G, 5G …).
* LPD 19: De leerlingen beheren een computernetwerk.
** Toegangs- en gebruikersrechten
** Gebruikersprofielen
** Bronnen
** DNS, DHCP
** Shellscripting
* Wenk. Je kan een aantal groepen en gebruikers toevoegen via een script of een aantal gebruikers in éénmaal rechten geven op een gedeelde map.
* Wenk: Je kan naast DNS en DHCP ook een webserver opzetten.
* LPD 22: De leerlingen beveiligen een computernetwerk.
* Wenk. Een computersysteem maakt deel uit van een netwerksysteem. Dit doel omvat dus ook het beveiligen van een computersysteem. Behandel ook de gevolgen van een slechte beveiliging van computer- en netwerksystemen. Enkel actuele beveiligingsrisico’s en oplossingen worden besproken.
* Wenk: Wenk: Je kan een computernetwerk op meerdere manieren beveiligen: virusbescherming, firewall; afscherming van poorten; e-mailfiltering en anti-spam; anti-spywaretools; two-factor authenticatie; ...
* Wenk: Je kan het principe van NAT (Network Address Translation) uitleggen.
Uit het leerplan Toegepaste Informatica van de richting Informaticabeheer:
* 3.1.9 De functie van een communicatieprotocol toelichten.
* 3.1.10 Een actueel communicatieprotocol toelichten.
* 3.1.11 De noodzaak van adressering en de structuur van sommige adrestypes toelichten, onder meer MAC en IP.
* 3.1.12 De mogelijke technieken van adressering in een actuele netwerkarchitectuur toelichten.
* 3.1.13 De begrippen subnet en subnetmasker, en de functie ervan toelichten.
* 3.1.16 Het begrip routing toelichten.
* 3.5.1 De gevolgen van een slecht beveiligd netwerk toelichten.
* 3.3.4 Werking van DNS toelichten en instellen.
* 3.3.5 Werking van DHCP toelichten en instellen.
Voor de opbouw van het onderdeel netwerkprotocollen is gekozen voor het TCP/IP netwerklagenmodel. Dit netwerklagenmodel wordt ook gebruikt bij Wireshark, een 'packet sniffer' en 'protocol analyzer' om zo de data in een netwerk op te vangen en te analyseren. Een (groter) bestand wordt dan verdeeld in stukjes (ethernetframes genoemd), die elk afzonderlijk in een eigen "enveloppe" verstuurd worden.
Gezien het hier gaat om protocollen om te kunnen communiceren zal een 'adres' voor de verzender en de ontvanger belangrijk zijn. In onze maatschappij kan je voor jouw woning niet zomaar je eigen straat en huisnummer kiezen. Al snel zou dit chaos zijn en zou de postbode met de handen in het haar zitten. Gelukkig is dat beter geregeld: ieder huis krijgt een unieke combinatie van straat, straatnummer, gemeente en land. Zo ook op het internet. Ook bij het TCP/IP-model zijn er adresafspraken nodig, zelfs voor twee soorten adressen: MAC en IP. Er wordt aangeraden om het Wikibook van talstelsels te bekijken om zo alles beter te begrijpen.

## Linklaag, met MAC

Een MAC-adres (ook wel hardware-adres genoemd) is een uniek identificatienummer dat aan een apparaat in een ethernet-netwerk is toegekend. Dankzij dit adres kunnen apparaten met elkaar communiceren. Vrijwel ieder netwerkapparaat heeft een vast, door de fabrikant bepaald uniek MAC-adres.
Heeft een laptop een mogelijkheid voor vast internet en voor draadloos internet, dan zal die laptop twee MAC-adressen hebben. MAC-adressen zijn alleen lokaal relevant, zodra een pakket een router passeert wordt zowel het MAC-adres van de bron, als van de bestemming aangepast in het ethernetframe.

### Notatie

Het MAC-adres wordt meestal in hexadecimale vorm aangeduid, door zes groepen van twee hexadecimale cijfers (dus 12 hexadecimale cijfers). Bv.:
Een MAC-adres heeft dus als bitruimte 48 bits, waarmee 281.474.976.710.656 (2$^{48}$=16$^{12}$) unieke adressen kunnen worden gevormd. De eerste drie groepen van een MAC-adres worden toegewezen aan een fabrikant. De fabrikanten moet er dan voor zorgen dat elk adres maar eenmaal wordt gebruikt. Bij bovenstaand voorbeeld verwijst het gedeelte 00:24:1d altijd naar GigaByte als fabrikant.
Met Wireshark kan je het MAC-adres van ontvanger 00 1b bf 89 a3 50 en verzender 00 24 1d c1 71 e6 goed "zien zitten" in de linklaag van het ethernetframe. Het is logisch dat het MAC-adres in het begin van het ethernetframe zit, omdat de switch de netwerkcomponent is die snel moet kunnen beslissen via welke poort een frame verstuurd moet worden (zie verder). De linklaag begrijpt de gekleurde info en weet dat de andere data o.a. via het adresseringsprotocol IPv4 is (omwille van de code 08 00). Dit is het netwerkprincipe inkapseling: een header + data.

### Gebruik

Het MAC-adres wordt op een netwerk o.a. gebruikt bij een switch, die op basis van dit adres beslist waar een pakket heen moet. In het begin kent de switch het netwerk niet en zal hij pakketjes moeten doorsturen naar al zijn poorten. Stap-voor-stap kan hij een tabel opbouwen, zodat hij weet welke MAC-adressen op welke poorten zitten.
De vaste koppeling van een MAC-adres aan hardware wordt soms in een draadloos netwerk gebruikt om de authenticiteit van gebruikers te controleren. Maar door de mogelijkheid van nabootsen (MAC spoofing) is dit geen serieuze oplossing voor de beveiliging. Het kan wel helpen om via het MAC-adres een gestolen computer te traceren. Die vaste koppeling tussen netwerk en hardware komt ook de privacy niet ten goede: zo zal je smartphone vaak het MAC-adres uitzenden, zelfs al ben je niet verbonden met een netwerk. Er bestaan mogelijkheden om dit op een andere manier te doen.

### Broadcast

Wil je alle hosts in een netwerk kunnen bereiken, dan heb je nood aan een broadcast (bv. in het geval van DHCP). Hiervoor worden alle bits in het MAC-adres op 1 gezet, of dus op f in hexadecimale vorm. Een switch die zo'n frame ontvangt, zal dus dit frame op al zijn poorten doorsturen.

## Internetlaag

Het bekendste protocol uit de internetlaag is het Internetprotocol (IP). Dit protocol is verantwoordelijk voor het adresseren van hosts en voor het routeren van datagrammen (pakketten) van een bronhost naar een doelhost. Een host (computer, router, IP-cam,...) die in zo'n netwerk voorkomt, wordt geïdentificeerd aan de hand van een IP-nummer.

### IPv4
#### Notatie

Een IPv4-adres wordt bijna altijd aangegeven als een groep van 4 decimale getallen, gescheiden door een punt, bv.:
Je zou dan vermoeden dat 301.140.45.13 ook een geldig IP zal zijn, wat niet het geval is. Dit komt omdat per getal slechts 8 bits gebruikt worden (cfr. Wikibook "Talstelsels in de informatica"). Het grootst mogelijke getal dat daarmee kan worden gemaakt is 2$^8$-1=255. Het grootst mogelijke IP-adres is dus (in theorie) 255.255.255.255.
Een IPv4-adres heeft dus als bitruimte 32 bits, waarmee 2$^{32}$ ≈ 4 miljard adressen kunnen worden toegewezen. Dat was ooit superveel, maar men zag ook de groei van het aantal hosts. En per bewoner op de aarde heb je eigenlijk minder dan 1 IPv4-adres (de wereldbevolking telt bijna 8 miljard mensen). De bitruimte uitbreiden (IPv6, zie verder) lijkt dan eenvoudig, maar is het helemaal niet: alle apparatuur moet hier mee overweg kunnen. Alle oude apparatuur vervangen is op korte termijn niet haalbaar. In afwachting van een volledige IPv6-uitrol bedacht men andere technieken zoals publiek/privaat en NAT (zie verder).
Begin 2011 heeft de Internet Assigned Numbers Authority (IANA) trouwens de laatste IPv4-adresblokken verdeeld over de regionale internetregistries., waarvan RIPE NCC (voor Europa, Rusland en West-Azië) eind 2019 meldde dat het laatste deel ervan is uitgedeeld
Daar een router moet kunnen weten waar een frame naartoe moet, moet er een IP-adres zijn van de ontvanger, maar ook van de verzender. Met Wireshark kan je de IP-adressen c0 a8 01 02 en 4a 7d e6 c4 goed "zien zitten" in de internetlaag van het ethernetframe:
* 08 00 = inkapseling, nl. IPv4 volgt als adresseringsprotocol (en niet IPv6, want dat zou 86 dd zijn).
* 45 00 04 30 5c bd 40 00: versie, headerlengte, …
* 40 hexadecimaal is 64 decimaal = TTL = hop limit. Iedere keer dat dit ethernetframe een router passeert wordt dit eentje verminderd. Als het op 0 komt, wordt dit frame weggegooid, zodat een frame niet oneindig op het internet zou kunnen rondgestuurd worden.
* 06 = inkapseling, nl. TCP volgt als transportprotocol
* c0 a8 01 02 = 192.168.1.2 decimaal = IP-adres bron (source)
* 4a 7d e6 c4 = 74.125.230.196 decimaal = IP-adres doel (destination)
In een firewall kan een IP-adres gebruikt worden om communicatie van en/of naar bepaalde hosts te blokkeren.

#### Publiek of privaat

Om het tekort aan IPv4-adressen op te lossen heeft men vastgelegd dat bepaalde IP-adressen meerdere keren gebruikt kunnen worden, zolang ze maar uniek zijn binnen het eigen (LAN-)netwerk:
Deze adressen worden private IP adressen genoemd. Deze worden heel vaak gebruikt in LANs bij je thuis, op het kantoor of in bedrijven. Binnen je eigen netwerk mag bv. 192.168.0.101 maar één keer voorkomen, maar bij je buur of je concurrent mag 192.168.0.101 opnieuw gebruikt worden.
Als je ook communicatie met het Internet wil, kan je hiervoor geen private adressen gebruiken: ze zijn niet noodzakelijk uniek op de wereld. Hiervoor heb je een abonnement met een internet service provider (ISP) nodig. Deze geeft een IP-adres aan jouw router, dat voor de rest van de wereld zichtbaar én uniek is. Men heeft het over een publiek IP-adres.
Ook een ISP kan niet zomaar een IP-adres kiezen: het beheer van alle publieke IP adressen wordt uitgevoerd door de ICANN. Een ISP krijgt dan een "range" van IP-adressen, waaruit zij vrij kunnen kiezen. RIPE biedt op hun site de mogelijkheid om via een whois-aanvraag te weten komen welke range van IP-adressen een ISP heeft.
De aandachtige lezer zal opmerken dat er wel nog een koppeling moet gebeuren tussen publiek en privaat IP-adres: dat wordt opgelost door NAT.

#### NAT

Stel dat je vanuit jouw LAN wilt surfen naar wikibooks.org, waarvoor de pc een HTTP-aanvraag doet aan 91.198.174.192. Hij geeft ook zijn eigen IP-adres 192.168.1.1 mee, omdat hij een HTTP-antwoord wil terugkrijgen, nl. de webpagina. Het gele bolletje stelt het pakketje voor dat zich doorheen het netwerk beweegt. De letters: S=sender, R=receiver, RA=router A, RB=router B.
Deze HTTP-aanvraag komt toe bij de webserver van wikibooks.org. Alleen weet hij niet naar waar hij het HTTP-antwoord moet terugsturen. Het IP-adres 192.168.1.1 is namelijk een privaat IP-adres, dat énkel uniek moet zijn binnen één netwerk, maar niet over heel de wereld. Het is dus duidelijk dat dit niet zal werken.
Een privaat IP-adres is dus niet routeerbaar over het internet, maar van de ISP heeft router RA wel een publiek IP-adres (bv. 91.179.77.105) gekregen, wél uniek over heel de wereld.
De router RA krijgt een pakketje met als source IP-adres 192.168.1.1, maar hij zal dit wijzigen naar 91.179.77.105, voordat hij het op het Internet zet. Dit principe noemen we network address translation, kortweg NAT. Hierdoor kan wikibooks.org de webpagina terugsturen naar de publieke interface van de router, nl. 91.179.77.105. Belangrijk is dat de router een NAT-tabel bijhoudt, omdat hij moet onthouden wie dit oorspronkelijk had aangevraagd in het LAN-netwerk van A. NAT lost dus het tekort aan IPv4-adressen op, omdat zo meerdere nodes samen één IPv4-adres kunnen delen.
Het voordeel van NAT is dat het interne LAN-netwerk niet zomaar zichtbaar is voor de buitenwereld. Verschillende methoden laten echter zien dat het gros van de NAT-methoden te omzeilen valt. Bovendien kan je met een goed ingestelde firewall op de router een gelijkaardige veiligheidssituatie zoals bij NAT bekomen.
Hieronder een ander voorbeeld die het in verschillende stappen uitlegt (helaas lijkt een switch-icoon voor de router gebruikt te zijn).
* Verschillende mogelijkheden om de werking van NAT uit te leggen

#### Statisch of dynamisch

Het IP-adres van een computer kan manueel worden ingesteld op de computer, het is dan steeds hetzelfde (statisch). Voor servers en routers is een vast IP handig, omdat deze dan altijd op dat adres te bereiken zijn. Zowel door rechtstreeks het IP in te typen, als bij de koppeling domeinnaam-IP (DNS). Bedrijven of scholen vragen vaak ook een statisch IP aan bij hun ISP.
Op werkstations statische IP's gebruiken is moeilijker, omdat je zelf een goed overzicht moet behouden. Je mag een IP-adres namelijk maar één keer toewijzen. Bij het wegnemen of bijzetten van werkstations wordt dit snel onbeheerbaar. Vandaar wordt er bij werkstations bijna altijd gebruik gemaakt van DHCP, waardoor automatisch een IP wordt toegewezen. Men spreekt van een dynamisch IP. Het is dan wel niet zeker dat je steeds hetzelfde IP-adres krijgt. Bij het abonnement van een particulier zal je standaard ook een dynamisch IP van je ISP krijgen.

#### Netwerk- en hostdeel

IP-pakketten worden verstuurd door computers, servers,... Het is de verantwoordelijkheid van een router om deze pakketten op de juiste bestemming te krijgen. Stel bv. dat de webserver links een back-up wil bewaren, maar dat in een ander land wil doen, zodat ze bij een ramp aan hun data kunnen. Dat zou de server rechts kunnen zijn, waartussen zeker enkele routers zullen zitten. Een router scheidt minstens twee netwerken, maar het kunnen er ook meer zijn. Zo zijn de routers links en rechts verbonden met 4 netwerken en de middelste met 3.
De vraag is via welke interface de router links een binnenkomend pakket verder zal sturen, zodat deze kan worden gerouteerd. Wij zien gewoon dat het via zijn rechtse interface is, maar een router heeft zo'n helikopterzicht niet. De routeringstabel kan niet álle mogelijke bestemmingen (=IPv4-adressen) bevatten van de volledige wereld. Alleen al het opsommen van alle IPv4-adressen zou een bestand geven van 16 GiB (=2$^{32}$mogelijkheden * 4B/2$^{30}$=2$^4$), wat dus nog geen routeringsinformatie zou bevatten. Laat staan dat je in dat bestand een bestemming moet zoeken of dat je een bestemming moet aanpassen.
Een routeringstabel bevat dus niet (uitsluitend) afzonderlijke IP-adressen, maar er wordt gewerkt met afzonderlijke netwerken, subnetten genoemd. Hiervoor bestaat een IP-adres uit een netwerk- en een hostdeel. Het netwerkdeel geeft aan welk netwerk bedoeld is en het hostdeel geeft een bepaalde host (pc, router,...) binnen dat netwerk aan. Om te weten waar de grens ligt tussen de twee delen, zal een IP-adres vergezeld zijn van een subnetmasker. Een kortere notatie is de CIDR-notatie.

##### Subnetmasker

Dankzij het subnetmasker kan je besluiten wat van het IP-adres behoort tot het netwerkdeel en wat tot het hostdeel. Zo kan je ook besluiten of hosts tot elkaars netwerk kunnen behoren.
| PC | IP | Subnetmasker | Netwerkdeel | Hostdeel |
| A | 192.168.1.104 | 255.255.255.0 | 192.168.1 | .104 |
| B | 192.168.2.104 | 255.255.255.0 | 192.168.2 | .104 |
Conclusie: het netwerkdeel van pc A en B is niet gelijk en dus behoren ze niet tot elkaars netwerk.
| PC | IP | Subnetmasker | Netwerkdeel | Hostdeel |
| C | 192.168.1.104 | 255.255.0.0 | 192.168 | .1.104 |
| D | 192.168.2.104 | 255.255.0.0 | 192.168 | .2.104 |
Conclusie: het netwerkdeel van pc C en D is gelijk en dus behoren ze tot elkaars netwerk.
Nu blijkt dat de situatie van pc A en B toch anders is dan de situatie bij pc C en D, terwijl het nochtans gaat om dezelfde IP-adressen (maar een ander subnetmasker).

##### CIDR-notatie

In plaats van een subnetmasker wordt vaak ook aangegeven hoeveel bits gebruikt worden voor het netwerkdeel. Dit is de CIDR-notatie, die IP en subnetmasker in 1 notatie weergeeft:
| PC | IP | Subnetmasker | #netwerk- en hostbits | CIDR-notatie |
| A | 192.168.1.104 | 255.255.255.0 | 24+8=32 | 192.168.1.104/24 |
| B | 192.168.2.104 | 255.255.255.0 | 24+8=32 | 192.168.2.104/24 |
| C | 192.168.1.104 | 255.255.0.0 | 16+16=32 | 192.168.1.104/16 |
| D | 192.168.2.104 | 255.255.0.0 | 16+16=32 | 192.168.2.104/16 |
In plaats van de mogelijke private IP-adressen op te sommen met de range, kunnen ze heel compact genoteerd worden met de CIDR-notatie:
Als je een privaat netwerk opbouwt hoef je niet te kiezen voor de volledige range: bv. een netwerk 10.1.1.0/24 is ook mogelijk. Ieder IP-adres uit dit netwerk zal dan beginnen met 10.1.1.

##### Netwerkbits (ter info)

Het aantal netwerkbits hoeft dus niet noodzakelijk een veelvoud te zijn van 8, zie bv. 172.16.0.0/12. Het subnetmasker zal altijd beginnen met allemaal 1'tjes, gevolgd door allemaal 0'en. Bij 255.255.0.0 is dat geen probleem, want het decimale getal 255 is 11111111 binair. Ook het subnetmasker 11111111.11110000.00000000.00000000 is geldig, wat decimaal 255.240.0.0 zou zijn. Het subnetmasker 255.200.0.0 zou niet kunnen, want dit is 11111111.11001000.00000000.00000000 binair.
Zoals je merkt is het controleren of pc's in hetzelfde netwerk liggen een stuk moeilijker als het aantal netwerkbits geen veelvoud is van 8. Dan moet er nl. op binair niveau gekeken worden.

#### Netwerk- en broadcastadres

Op basis van de CIDR-notatie (of IP+subnetmasker) kan je het volgende bepalen:
| PC | CIDR-notatie | Netwerkadres | Broadcastadres | #hosts |
| A | 192.168.1.104/24 | 192.168.1.0 | 192.168.1.255 | 2$^{32-24}$-2=2$^8$-2=254 |
| B | 192.168.2.104/24 | 192.168.2.0 | 192.168.2.255 | 2$^{32-24}$-2=2$^8$-2=254 |
| C | 192.168.1.104/16 | 192.168.0.0 | 192.168.255.255 | 2$^{32-16}$-2=2$^{16}$-2=65534 |
| D | 192.168.2.104/16 | 192.168.0.0 | 192.168.255.255 | 2$^{32-16}$-2=2$^{16}$-2=65534 |
* Het netwerkadres is het laagste adres uit de beschikbare range (dus binair is iedere hostbit een 0) en stelt a.h.w. 'het netwerk' voor. In een firewall kan een netwerkadres in combinatie met een subnetmasker gebruikt worden om communicatie van en/of naar netwerken te blokkeren. Daar het netwerkadres dus een volledig netwerk voorstelt, mag het nooit gebruikt worden als IP-adres voor één host.
* Het broadcastadres is het hoogste adres uit de beschikbare ranges is (dus binair is iedere hostbit een 1) en stelt a.h.w. 'communicatie naar het volledige netwerk' voor. Pakketten die het broadcastadres als ontvanger hebben, komen dus op alle hosts van dat netwerk aan. Vandaar ook logisch dat je dit adres niet mag toekennen als IP-adres van een host, net omdat het gaat om broadcast en het dus geen unicast zou kunnen zijn.
* Bij de berekening van het aantal hosts moet je dus altijd '-2' doen, omdat je een netwerk-of broadcastadres nooit mag toekennen als IP-adres voor een host.
* Merk op dat het logisch is dat je voor pc C en D hetzelfde netwerk- en broadcastadres hebt, omdat ze in hetzelfde netwerk liggen.
Als het netwerkdeel nog niet gekend is, wordt 255.255.255.255 (of ff.ff.ff.ff hexadecimaal) als broadcastadres gebruikt. Dat is het geval wanneer een host een IP-adres aanvraagt via DHCP, omdat op dat moment het netwerk(deel) nog niet gekend is. Merk op ff ff ff ff ff ff op als MAC-adres van de verzender. Zo weet de switch op de linklaag dat hij onderstaand pakket naar iedere host mag doorsturen.

#### Loopbackadres

Het netwerk 127.0.0.0/8 is het loopbacknetwerk. De meeste toepassingen gebruiken van dit netwerk enkel het adres 127.0.0.1. Dit adres is het loopbackadres en staat voor de eigen computer (men heeft het over de localhost). Dit kan bijvoorbeeld gebruikt worden om serverdiensten te benaderen die op de eigen computer staan. Als je bv. een eigen webserver draait om webtoepassingen lokaal uit te testen, dan kan je surfen naar je eigen website via https://127.0.0.1. Je zou ook je eigen IP-adres kunnen gebruiken, maar dan moet je dit eerst opzoeken en bovendien kan het veranderen. Vaak werkt ook https://localhost, wat achter de schermen vertaald wordt naar https://127.0.0.1.

### IPv6

Internet Protocol versie 6 (IPv6) is versie 6 van het internetprotocol voor het toewijzen van IP-adressen. Het is de opvolger van Internet Protocol versie 4 (IPv4) en is de tweede versie van het internetprotocol die in gebruik is genomen. De tussenliggende versie IPv5 was een experimentele aanvulling op IPv4, maar deze werd nooit geïmplementeerd.

#### Notatie

IPv6-adressen zijn 128 bits lang en worden normaal geschreven als 8 groepen van 4 hexadecimale cijfers.
Een voorbeeld van een geldig IPv6-adres:
Bij de cli-commando's ipconfig of ifconfig wordt gebruik gemaakt van shortcuts om een IPv6-adres zo kort als mogelijk te noteren. We overlopen de mogelijkheden.
Als een groep van 4 cijfers 0000 is, dan mag dit helemaal worden weggelaten.
Wanneer er meer dan twee opeenvolgende groepen gereduceerd zijn tot dubbele punten, dan mogen ook die weer tot twee dubbele punten gereduceerd worden:
Opgelet, het mag enkel bij opeenvolgende groepen van nullen, omdat anders meerdere mogelijkheden ontstaan voor de posities van 0000.
Ook hoeven nullen vooraan in een getal (voorloopnullen) niet geschreven te worden:
Opgelet! In de weergave mag dan gebruik gemaakt worden van shortcuts, achter de schermen blijft het een adres bestaande uit 128 bits! Dit kan je bv. bekijken met Wireshark. Hieronder is het bronIPv6-adres fe80::1 = fe 80 00 00 00 00 00 00 00 00 00 00 00 00 00 01 en het bestemmingsIPv6-adres ff02::1 = ff 02 00 00 00 00 00 00 00 00 00 00 00 00 00 01 zichtbaar. De inkapseling heeft gezorgd voor een header, waardoor het duidelijk is dat het om IPv6 gaat. Dat zie je bij 86 dd (bij IPv4 was dit 08 00).

#### Verbeteringen

In de informaticawereld betekent een nieuwe versie vaak hogere snelheden. Bij IPv6 t.o.v. IPv4 is dat niet per definitie het geval! Meer zelfs: doordat de IP-adressen langer zijn, zijn ze in theorie moeilijker te behandelen. Bovendien zitten we de komende jaren met een overgangsfase, waar zowel IPv4, als IPv6 nodig is. Een complexe situatie. Er moeten dus wel andere redenen zijn waarom IPv6 is ontwikkeld.
* Groter adresbereik. Een IPv6-adres is 128 bits lang; het aantal mogelijke adressen is dus 2$^{128}$ ≈ 3,4 × 10$^{38}$. IPv6 heeft dus een bijna onuitputtelijke voorraad adressen: voor elke aardbewoner zijn er ongeveer 50 quadriljard beschikbaar. Laat je dan ook niet misleiden dat de adresruimte "maar" vier keer zo groot is, want het aantal adressen is daardoor 2$^{96}$ keer zo groot, nl. 2$^{128-32}$!
* Betere autoconfiguratie. IP-adressen zijn belangrijk, omdat ze communiceren mogelijk maken. Hoe verkrijg je nu een IPv6-adres? Er zijn twee mogelijkheden:
** Stateful autoconfiguratie, nl. via DHCPv6, wat gelijkaardig werkt zoals DHCP bij IPv4. Er is dus nog steeds nood aan een DHCP-server en beide moeten op de hoogte zijn van hun status m.b.t. het verkregen/uitgedeelde IP (vandaar stateful).
** Stateless autoconfiguratie, waarbij de host een IPv6 adres zelfstandig "kiest", zodat het naar grote waarschijnlijkheid uniek zal zijn. Het wordt dan gebaseerd op het netwerkprefix en vaak ook het MAC-adres. Hier valt het opzetten en configureren van een DHCP-server/service dus weg. Bovendien zijn er dan geen DHCP-broadcasts nodig, wat bij grote netwerken doorweegt op het netwerk. Stel bv. dat iedere host in een netwerk 1 broadcast stuurt, dan is dat bij 10 hosts beperkt tot 90 berichtjes, maar bij 100 hosts al 9900 (nl. n(n-1)=100*99))!
* Betere routering. Door de enorme hoeveelheid aan IPv6-adressen kan men er een stuk kwistiger mee omspringen. Op hoog niveau wordt dan bv. een onderscheid gemaakt tussen netwerknummers voor de verschillende continenten. Binnen de continenten kunnen internet exchanges en internetaanbieders hiërarchische nummerplannen opstellen. Deze hiërarchie kent twee voordelen:
** Routeringstabellen in routers worden minder complex. Alhoewel IPv6-adressen langer zijn (en dus "moeilijker" te behandelen) kan een minder complexe routeringstabel zorgen voor toegenomen snelheid.
** Applicaties kunnen, aan de hand van het IP-nummer, bepalen welke nodes netwerktechnisch dichterbij staan. Zo kunnen applicaties als BitTorrent distributiealgoritmen ontwikkelen die efficiënter netwerkverkeer opleveren doordat bij voorkeur peers worden gekozen die dichter bij elkaar staan.
* NAT wordt overbodig. Bij IPv6 is NAT dus niet meer nodig, daar dit was ontwikkeld om meerdere nodes (met private IP-adressen) samen één (publiek) IPv4-adres te laten delen. Nu kan iedere host zijn eigen uniek IPv6-adres krijgen. De (semi-)veiligheid die NAT bracht, moet bij IPv6 wel opgevangen worden door de firewall goed in te stellen! Anders kan je problemen krijgen, zoals enkele Tele2-klanten in 2014 hadden: alle computers in het interne netwerk van sommige klanten waren opeens bereikbaar vanaf de buitenwereld.
* Gegevensbeveiliging op IP-niveau. IPv6 maakt het mogelijk om gegevens op de internetlaag van beveiliging te voorzien. Deze beveiliging kent twee vormen:
** Versleuteling (encryptie) van gegevens. Zender en ontvanger kunnen een sleutel afspreken waarmee het gegevenstransport beveiligd wordt. IPv4 kent deze mogelijkheid niet, waardoor veel beveiligingsvarianten boven de IP-laag ontwikkeld zijn, bijvoorbeeld HTTPS of SSH. De versleuteling van IPv6 maakt beveiliging op bovenliggende niveaus overbodig: ieder gegevenstransport op basis van IPv6 kan immers veilig gebeuren.
** Authenticatie van gegevens. Hierbij kan de zender ieder pakket voorzien van een elektronische waarborg. Andere partijen kunnen de gegevens niet ongemerkt wijzigen, noch zich als de oorspronkelijke afzender voordoen. Hierdoor heeft de ontvanger zekerheid over de herkomst van de ontvangen IP-pakketten.
* Ondersteuning van mobiele nodes. Bij mobiele toestellen heb je soms een bestaande connectie, waarbij je plots terechtkomt in een ander netwerk. Graag zou je willen dat "lopende" connecties toch kunnen blijven. Bij IPv4 is dit niet zomaar mogelijk, terwijl IPv6 het mogelijk maakt dat een node (tijdelijk) van een ander IP-adres gebruik maakt. De preciezere details vallen buiten het kader van dit Wikibook, maar kunnen op Wikipedia worden nagelezen.

#### IPv4 vs IPv6

De wijze waarop het protocol werkt, verschilt nauwelijks van de wijze waarop IPv4 werkt. Een van de weinige verschillen is dat in IPv6 een subnet niet langer een netwerkadres en een broadcastadres bevat:
* het netwerkadres van IPv4 wordt het "subnet-router anycast"-adres bij IPv6;
* broadcast wordt in IPv6 geïmplementeerd als een speciaal geval van multicast.
Het is niet zo dat we nu van de ene op de andere dag IPv4 kunnen vervangen door IPv6. Eerst was er een periode van het testen van IPv6, om nu beide naast elkaar te laten bestaan, met een gestage groei van IPv6:
* Op 8 juni 2011 was de wereldtestdag voor IPv6. Een aantal grote bedrijven, zoals Microsoft en Google, bood de websites voor één dag aan over zowel IPv4 als IPv6 om zo de impact hiervan te testen.
* Op 6 juni 2012 activeerden een aantal Internet Service Providers (ISPs) en bedrijven permanent IPv6. Begin 2014 begon Telenet met de uitrol van IPv6. Dit zorgt ervoor dat de groei van IPv6 gestaag toeneemt, te merken bij bv. de grafieken van de Amsterdam Internet Exchange (AMS-IX)., het belangrijkste internetknooppunt in Nederland en bij het gebruik van IPv6 bij Google gebruikers

### IP vs MAC
#### Reden

MAC- en IP-adressen worden dus beide gebruikt om te adresseren, waardoor het misschien lijkt alsof we óf een IP-adres, óf een MAC-adres kunnen gebruiken. We hebben ze echter allebei nodig:
* Het voordeel van MAC-adressen is dat je ze per definitie al hebt, want ze hangen vast aan de hardware. Enkel MAC-adressen gebruiken is niet handig: zo is er geen netwerk- en hostdeel, wat het moeilijk zou maken deze te gebruiken op het wereldwijde Internet. Een MAC-adres is dan ook enkel “geldig” binnen één netwerk.
* Het voordeel van IP-adressen is dat je efficiënter netwerken kan indelen: zo vat 10.1.0.0/16 één netwerk samen met meer dan 65000 hosts! Het nadeel is dat je IP-adressen moet instellen: of statisch, of dynamisch.

#### ARP

Zowel IP, als MAC zijn dus nodig in een netwerk. Toch betekent dit niet dat we ze automatisch allebei al weten. Stel dat we een webserver in ons LAN-netwerk draaien (bv. als onderdeel van een NAS). Als we deze willen bezoeken zal het IP-adres gebruikt worden (bv. doordat we het rechtstreeks intypen in de adresbalk van de browser of via DNS). Deze aanvraag komt in principe eerst toe bij een switch, die echter enkel MAC-adressen "begrijpt", maar geen IP-adressen. Als een pc wil dat zijn pakketje toekomt bij de ontvanger, zal hij dus eerst het MAC-adres van deze ontvanger moeten achterhalen.
Het Address Resolution Protocol heeft als voornaamste doel het MAC-adres of hardwareadres te achterhalen van een bepaald IP-adres. Dit proces wordt ook wel IP-adresomzetting genoemd. Om het gebruik van broadcasts te verminderen worden eenmaal geleerde netwerkkoppelingen IP-MAC meestal tijdelijk lokaal gecachet.
Uit onderstaande capture blijkt samengevat Wie heeft 10.10.248.1? Vertel het 10.10.248.210. Uitgebreider blijkt dat een host met IP-adres 10.10.248.210 (0a 0a f8 d2) en MAC-adres 9c 05 d6 33 ae f5 via een broadcast ff ff ff ff ff ff de vraag stelt wie het MAC-adres heeft van het IP-adres 10.10.248.1 (0a 0a f8 01). Wellicht om daarna deze host een rechtstreeks (unicast) een bericht te kunnen sturen.
Door het versturen van ARP-pakketten met vervalste MAC-adressen (ARP spoofing) is het als hacker mogelijk om pakketjes te ontvangen, die niet voor hem bedoeld zijn (een man-in-the-middle-aanval). Een andere techniek is het versturen van een overvloed aan ARP-pakketten met willekeurige MAC-adressen (MAC flooding). Bij een aantal switches leidt dit ertoe dat ze in een soort van hub-modus veranderen: pakketjes worden dan naar alle poorten verstuurd. Een aanvaller kan vervolgens middels een packet sniffer al het lokale netwerkverkeer aftappen.
Alhoewel ARP hier besproken wordt bij de internetlaag, behoort het strikt gezien tot de linklaag! Een ARP-aanvraag wordt namelijk niet voorbij een router gestuurd, want het is de switch die op basis van de MAC-adressen ARP-aanvragen en ARP-antwoorden bezorgt. Het is in dit geval geplaatst bij de internetlaag, omdat kennis van MAC en IP nodig is om het te begrijpen.

## Transportlaag
### TCP

TCP is een transportprotocol dat bovenop IP werkt. TCP heeft als kenmerken dat het gegevens in een datastroom kan versturen, waarbij de garantie wordt geleverd dat de gegevens aankomen zoals ze verstuurd werden, en eventuele communicatiefouten (zowel in de gegevens zelf als in de volgorde van de gegevens) kunnen worden opgevangen. TCP gebruikt men dus primair als de overdracht zeker en compleet moet zijn (o.a. bij bestandsoverdracht). Men heeft het over een betrouwbaar protocol.

### UDP

Een ander transportprotocol is UDP, wat veel wordt gebruikt bij toepassingen waar het snel overdragen van de gegevens en een korte reactietijd zeer belangrijk is, en het minder erg is dat er gegevens verloren kunnen gaan. Dit is bv. bij telefonie, videoconferencing, DNS of het online spelen van actievolle spellen, zoals first person shooters.

### Poorten

Een IP-adres adresseert een host, maar wat als er op die host meerdere netwerkdiensten actief zijn? Hoe weet deze host aan welk programma hij welke info moet bezorgen? Hiervoor worden poortnummers gebruikt: deze adresseren een netwerkdienst op een host.
Stel je een bedrijf voor met verschillende bureaus, waar dan de afzonderlijke diensten zitten. Het adres van dat volledig bedrijf zou dan zogezegd het IP-adres zijn, terwijl ieder bureau dan zijn eigen lokaalnummer (≈ poortnummer) zou hebben. Ieder bureau biedt namelijk een aparte dienst aan (verkoop, klantendienst, marketing,...).
Een netwerkpoort komt dan als extra info bij het IP-adres van de verzender en als extra info bij het IP-adres van de ontvanger. Dit poortnummer bestaat uit 16 bits en dus zijn er 65536 (2$^{16}$) poorten beschikbaar voor TCP en 65536 poorten voor UDP. De meest bekende serverpoorten lopen van 0 tot 1023. Clients kiezen vaak een willekeurig poortnummer boven 1024.
Denk bv. aan een client met browser. De browser zal een willekeurige poort kiezen voor zichzelf als verzender (bv 46277) en voor de webserver poort 80 (HTTP) of 443 (HTTPS). Op deze client kunnen tezelfdertijd andere berichtendienst actief zijn (Discord, Teams, ...) die ook hun eigen poorten hebben.
Enkele voorbeelden van TCP- en UDP-poorten, waarbij poorten 0 tot 1023 bekend staan als systeempoorten, de andere als gebruikerspoorten:
| poort | protocol | omschrijving |
| 20 | TCP | FTP, het datakanaal |
| 21 | TCP | FTP, het controlekanaal |
| 22 | TCP | SSH: Secure Shell of SFTP |
| 53 | UDP, TCP | DNS |
| 67 | UDP | DHCP Server |
| 68 | UDP | DHCP Client |
| 80 | TCP | HTTP |
| 443 | TCP | HTTPS |
| 3389 | TCP | RDP, om een pc op afstand overnemen (remote desktop protocol). |
| 8123 | TCP | Home Assistant home automation. |
Een voorbeeld vanuit Wireshark:
Hieruit kan je enkele zaken afleiden:
* 06 = inkapseling, nl. TCP volgt als transportprotocol (bij UDP zou er 11 staan).
* c0 a8 01 02 = 192.168.1.2 decimaal = IP-adres bron (source)
* 4a 7d e6 c4 = 74.125.230.196 decimaal = IP-adres doel (destination)
* 00 50 is TCP-doelpoort 80. We kunnen er dus vanuit gaan dat de client c0 a8 01 02 met een browser (bv. Edge, Firefox, Chrome) surft naar een webserver (bv. Apache of IIS) die luistert op poort 80 voor binnenkomende aanvragen.
* b4 c5 is TCP-bronpoort 46277, want ook clients kiezen poorten om te communiceren.
* Als de webserver een antwoord terugstuurt, zal hij in principe als ontvanger IP-adres 192.168.1.2 gebruiken, met als poort 46277.
Poorten kan je ook zelf kiezen, maar in dat geval moet je bij het programma de poort expliciet opgeven. Zo wordt voor een webconfiguratie van je printer op Linux-systemen (met als achterliggende software CUPS) vaak poort 631 i.p.v. poort 80 gebruikt. Om toegang te krijgen is dan niet https://localhost nodig (die "achter de schermen" poort 80 gebruikt), maar wel https://localhost:631/. Als je zelf poorten kiest, moet je altijd opletten dat er geen conflict is met een ander programma op jouw systeem, dat ook die poort gebruikt.
Poorten kan je in een firewall gebruiken om je netwerk te beveiligen. Als je bij een computer instelt dat bij inkomende verbindingen poorten 80 en 443 geblokkeerd worden, zal je op deze computer wel kunnen surfen. Je zal dan echter zelf geen webserver kunnen draaien, tenzij je webserver draait op een niet-standaard poort.

### Port forwarding

NAT lost dus het tekort aan IPv4-adressen op, omdat zo meerdere nodes samen één IPv4-adres kunnen delen. Deze methode kan echter voor problemen zorgen.
Stel bv. dat de pc A een webserver heeft draaien en dat pc B deze wil kunnen bereiken. Naar https://192.168.1.1:80 kan pc B niet surfen, want dat is zijn eigen IP-adres, terwijl hij de webserver op pc A wil bereiken. Het wijzigen van het IP-adres van A haalt niets uit, want het zal een privaat IP-adres blijven en dus niet vindbaar (=routeerbaar) via het Internet. Surfen naar https://91.179.77.105:80 (een publiek IP) zal ook niet lukken: op router RA draait de webserver niet.
De gebruiker kan in router RA wel port forwarding instellen. Bijvoorbeeld: router RA, als je op je publieke interface een aanvraag krijgt op poort 3005, dan wil ik dat je dit doorstuurt naar 192.168.1.1 op poort 80. Als pc B dan surft naar https://91.179.77.105:3005, dan zal hij uiteindelijk terechtkomen op pc A, op poort 80. Deze portforwarding moet ingesteld worden in router RA en zou je schematisch als volgt kunnen weergeven:
| LAN-kant router | LAN-kant router | WAN-kant router | WAN-kant router |
| IP | Poort | IP | Poort |
| 192.168.1.1 | 80 | 91.179.77.105 | 3005 |
Een andere mogelijkheid bij zo'n peer-to-peer situatie en private adressen is om gebruik te maken van een derde, niet ge-NAT-te client die als doorgeefstation dienst doet (zoals bij Skype).

## Applicatielaag
### DNS

Het Domain Name System (DNS) is het netwerkprotocol dat gebruikt wordt om namen van internetdomeinen naar IP-adressen te vertalen en omgekeerd. Wij als mens zijn namelijk beter in het onthouden van namen (bv. mcdonalds.com of mc-donalds.com), terwijl een computer liever de vaste vorm heeft van cijfers (bv. 44.208.147.61 of 204.11.56.48 wat altijd 32 bits lang zal zijn). DNS zorgt dan voor de "vertaling" tussen beide.
DNS is een client-serversysteem: een opvrager (client) gebruikt het DNS-protocol om aan een aanbieder (DNS-server) een naam of adres op te vragen, waarop de server een antwoord terugstuurt. De naamgeving is hiërarchisch opgezet: bij bv. nl.wikipedia.org is wikipedia.org het domein en is nl. een subdomein van wikipedia.org. De DNS-server van wikipedia.org kan dus ook en., de. of andere subdomeinen toevoegen.
Standaard zal een DNS-aanvraag aan de ingestelde DNS-server gevraagd worden. Het kan dat deze het antwoord niet weet, maar dan kan hij het vragen aan een andere DNS-server.
Korte storing Googles dns-server leidt tot dip in AMS-IX-verkeer
Dat DNS een belangrijk protocol is bleek toen er op 23 mei 2014 een storing was op Googles dns-server. Daardoor waren heel wat diensten die van deze dns-server gebruikmaakten, onbereikbaar. In de realtimegrafieken van het internetknooppunt AMS-IX is die dip omstreeks 14.00 uur duidelijk zichtbaar.
(nl) Korte storing Googles dns-server leidt tot dip in AMS-IX-verkeer. tweakers.net (2014-05-23).

#### DNS geschiedenis

Als mens zijn we niet zo bijzonder goed in cijfers. Zo kennen we maar weinig telefoonnummers van buiten, maar via een naam hebben we de juiste persoon voor ogen. Dan gebruiken we een adresboek om die persoon te contacteren. Bij het internet is het niet anders. We zullen niet surfen naar https://91.198.174.192, maar naar https://nl.wikibooks.org.
In de begindagen van het Internet waren er zo weinig domeinnamen en IP-adressen, dat men al deze koppelingen in een hosts-bestand bijhield. Tot op de dag van vandaag bestaat dit persoonlijk “internettelefoonboek” nog steeds in de meeste besturingssystemen. Vaak heeft het al standaard bepaalde koppelingen (bv. de localhost), maar je kan er koppelingen IP-adres en domeinnaam aan toevoegen. Bij Windows kan je dit vinden bij C:\Windows\System32\drivers\etc\hosts en bij Linux bij /etc/hosts. Een voorbeeld bij Linux:
Door de groei van het internet bleek al begin de jaren '80 dat zo'n "internettelefoonboek" niet álle domeinnamen kan bevatten. Dus is er een systeem uitgewerkt die een vertaling doet van domeinnamen (bv. nl.wikibooks.org) naar IP-adressen. Dit systeem is DNS. Als we dus surfen naar https://nl.wikibooks.org, dan zal het besturingssysteem achter de schermen en via DNS het bijhorende IP-adres te weten komen (nadat het hosts-bestand is gecontroleerd).
Eén mega-groot, centraal “internettelefoonboek” bestaat niet. Het DNS-systeem is een verspreid, gedecentraliseerd systeem, met verschillende DNS-servers op het internet. In eerste instantie wordt een aanvraag gedaan aan de pc zelf. Als deze het niet weet wordt het gevraagd aan de router. Als deze het vervolgens niet weet is de DNS-server van de ISP aan de beurt, enz. Zo ontstaat een ketting van DNS-aanvragen, totdat het juiste IP-adres dat hoort bij de gevraagde domeinnaam achterhaald kan worden.

#### DSN registrar

Als je als bedrijf/instelling/persoon een eigen domeinnaam wenst, moet je een registrar contacteren. Dit bedrijf zal de nodige administratie doen, zodat je een domeinnaam kan huren. Dan wordt de koppeling tussen de domeinnaam en het (vaak statisch) IP-adres gelegd.
Domeinnamen kunnen komen te vervallen (bv. omdat de eigenaar deze niet meer wenst of niet betaalt). Op het Internet blijven vele links vaak staan, die dus niet meer zullen werken. Iemand kan deze vrije domeinnaam echter terug aanvragen/huren en kan dus bepaalde links terug laten werken. Deze persoon kan nu volledig kiezen wat die inhoud is, wat totaal iets anders kan zijn dan de oorspronkelijke website. Ook malware kan langs deze weg verspreid worden. Denk bv. aan digitale kranten die inhoud embedden, die later wijzigt. Enkele voorbeelden:
* Ethisch hacker Inti De Ceukelaire zorgt ervoor dat een link uit een tweet van president Trump verwees naar een Aalsters carnavallied.
* Nieuwssites tonen porno bij oude artikelen door verlopen domein van Vidme.
* Burgerservicenummers van miljoenen Nederlanders online te zien door verlopen domeinnaam.
* Jeugdzorg liet medische dossiers uitlekken via verlopen domeinnaam.
* Politierapporten liggen op straat door verlopen domeinnamen.

#### DNS blocking

Om binnen bedrijven/scholen/landen bepaalde websites onvindbaar te maken, kan gebruik gemaakt worden van DNS blocking. Zo kan de DNS-server op school bij het surfen naar https://hoeleerikspieken.net weigeren om een IP te geven. Voor de eindgebruiker zal het lijken alsof de website niet bestaat. Als hij thuis zou kijken en de DNS-server van zijn ISP blokkeert deze niet, dan kan hij daar wel gewoon naartoe surfen. Mocht je dan op school rechtstreeks surfen naar het IP-adres van hoeleerikspieken.net, dan is DNS niet nodig en kan zo de bijhorende DNS-blokkade omzeild worden. Bovendien kan je - mits administratorrechten - een andere DNS-server instellen, die die blokkade niet heeft. Het gebruik van énkel DNS blocking is dus geen sluitende manier om toegang tot websites te verbieden.
Turkije blokkeert toegang tot Twitter
Turkije heeft een Twitter-blokkade ingesteld nadat de premier van het land gezegd zou hebben dat hij Twitter zou 'uitroeien'. De blokkade was op bevel van meerdere rechtbanken ingesteld nadat Twitter geweigerd zou hebben bepaalde links te verwijderen. Alle Turkse internetproviders werkten mee aan de blokkade.
De blokkade was relatief eenvoudig te omzeilen: het gaat om een dns-blokkade, dus het instellen van een alternatieve dns-server van bijvoorbeeld Google of OpenDNS is voldoende om de dienst toch te gebruiken. Daarnaast gebruikten Turkse twitteraars vpn-verbindingen om de blokkade te omzeilen. De blokkade van Twitter blijkt zelfs een averechts effect te hebben (het Streisandeffect): het aantal tweets van Turkse gebruikers lag 138 procent hoger dan in dezelfde periode voor de blokkade.
Later was Turkije overgegaan tot het blokkeren van het IP-adres van Twitter. Ondanks de blokkade bleef het mogelijk om via een vpn of Tor de Twitter-site te bezoeken.
(nl) Turkije blokkeert toegang tot Twitter. tweakers.net (2014-03-21). (nl) 'Twitter-gebruik in Turkije neemt toe na blokkade'. tweakers.net (2014-03-21). (nl) 'Turkije blokkeert Twitter op ip-niveau'. tweakers.net (2014-03-23).

#### DNS spoofing

Bij DNS spoofing worden antwoorden van een DNS-server door een hacker gewijzigd. Stel dat een hacker erin slaagt om bij een DNS-request van https://www.facebook.com niet het echte IP terug te geven, maar een IP van zijn server. Dan kan hij op die server een website draaien die een exacte kopie lijkt van Facebook. De eindgebruiker zal inloggen (in de adresbalk ziet hij namelijk netjes https://www.facebook.com staan), maar zo kan de hacker gemakkelijk het wachtwoord achterhalen. Er bestaan mogelijkheden om DNS veiliger te maken, maar dit behandelen valt buiten het kader van dit boek.

#### DDOS DNS attack

I.p.v. de DNS-server te hacken, kan je die ook lastig vallen met zodanig veel DNS-aanvragen op een heel korte tijd, dat hij ze niet allemaal kan verwerken én zelfs neergaat. Hierdoor kunnen netwerkapparaten het IP-adres niet meer achterhalen van een domein en vinden ze dus ook 'de andere kant' niet meer. Het is alsof alle wegen er nog zijn, maar dat iemand alle verkeersborden heeft weggenomen. Uiteraard: als deze vragen afkomstig zijn van één IP-adres valt dit IP-adres snel te blokkeren, maar niet als dit van verschillende IP-adressen komt. Hackersgroeperingen hebben zo gehackte netwerkapparaten in handen (=een botnet) die ze zo'n aanvragen kunnen laten uitvoeren. En met het stijgend aantal IoT-toestellen kunnen dat er heel wat zijn. Het geheel noemt men dan een DDOS DNS attack (DDOS=Distributed Denial of Service), wat uiteraard niet is toegestaan.
De destructiviteit van ddos-aanvallen
Een populaire manier van ddos-aanval verloopt via DNS. Zo was er in oktober 2016 een grote DDOS DNS-attack op Dyn, een belangrijke DNS server provider. Dit verhinderde enkele uren lang dat gebruikers aan de oostkust van de VS terechtkonden op populaire websites als Twitter, Reddit, Soundcloud en GitHub. De problemen hielden al met al ongeveer twee uur aan.
(nl) De destructiviteit van ddos-aanvallen. tweakers.net (2020-10-03).
Nuance: er waren geen drie miljoen Java-tandenborstels die websites ddos'ten
DDOS-aanvallen zijn behoorlijk destructief en heel eenvoudig op te zetten, maar je moet ook niet alles geloven van wat op het internet staat. Zo was bleek het verhaal dat drie miljoen Java-tandenborstels websites konden ddos'en niet waar. Wat wel een privacy probleem kan zijn, is dat sommige tandenborstels via een niet-geëncrypteerde Bluetooth-verbinding informatie doorsturen.
(nl) Nuance: er waren geen drie miljoen Java-tandenborstels die websites ddos'ten. tweakers.net (2024-02-08).

#### Dynamic DNS

Stel dat je van buitenaf jouw thuisnetwerk wenst te bereiken. Van je provider krijg je een dynamisch IP-adres, dus zou het kunnen dat het IP-adres al is veranderd wanneer je het wenst te gebruiken. Een mogelijkheid is dan dat je een account via diensten zoals No-IP of Dyn instelt. Je krijgt dan een domeinnaam zoals naam.hopto.org of naam.ddns.net. Er moet dan nog een koppeling zijn met het publiek IP-adres. Hiervoor draait een dienst op jouw netwerk (bv. op jouw router) die regelmatig controleert of het dynamisch IP niet is veranderd. Is dat het geval, dan wordt hopto.org of ddns.net op de hoogte gebracht. Dit systeem is een onderdeel van Dynamic DNS, kortweg DDNS.

### DHCP

DHCP is een protocol dat netwerkbeheerders toelaat om de verdeling van IP-nummers centraal te beheren en automatisch toe te kennen aan hosts die daar om vragen. Zonder gebruik van DHCP moet elk IP-nummer manueel ingevoerd worden op elke client-computer. Ga je met jouw laptop naar een ander netwerk, dan zou je dit opnieuw manueel moeten veranderen (het netwerkdeel moet kloppen én het geheel moet uniek zijn).
Aangezien een computer in een netwerk niet per definitie weet waar de DHCP-server zich bevindt, zal hij een IP-aanvraag via een broadcast doen. De enige die op deze broadcast zal antwoorden, is de DHCP-server (vaak als onderdeel van de router of modem bij de mensen thuis).
Het belang van DHCP en IP
De gewone gebruiker heeft geen weet van IP, maar op zondag 3 februari 2013 werd het belang ervan pijnlijk duidelijk voor ruim de helft van de klanten van Telenet: geen internet, telefoon of digitale televisie die werkte zoals het hoort. Oorzaak van de storing zouden falende dhcp-servers zijn: de servers deelden niet langer IP-adressen uit waardoor alle toepassingen die gebruik maken van een kabelmodem niet langer verbinding konden maken. Telenet zou vrij snel de oorzaak van de verbindingsproblemen hebben gevonden, maar de provider zou enige tijd nodig hebben gehad om tests uit te voeren. Een ploeg van honderd man zou bezig zijn geweest om de problemen op te lossen. Bij sommige klanten waren er defecte modems, wellicht doordat deze klanten hun modem teveel hebben gereset.
(nl) Telenet herstart dhcp-servers na storing in geheel Vlaanderen. tweakers.net (2013-02-03). (nl) Opvallend veel meldingen van kapotte modems bij Telenet. De STandaard (2013-02-04).

### HTTP(S)

HTTP is het protocol voor de communicatie tussen een webclient en een webserver. Typisch is er een GET-request (bv. GET /images/logo.png HTTP/1.1) vanuit een webbrowser, waardoor je van een webserver een webpagina/afbeelding/... krijgt, samen met een response-code (bv. HTTP/1.1 200 OK of HTTP/1.1 404 Not Found). Standaard luistert een http-webserver op poort 80.
Bij HTTP kan iedereen met toegang tot de netwerkapparatuur letterlijk zien wat er passeert. Dus ook de login met het bijhorende wachtwoord. Vandaar is er een uitbreiding op het HTTP-protocol: HTTPS (met de s van de secure). Een buitenstaander die iets onderschept ziet dus niet de eigenlijke data, maar "nietszeggende" 0'tjes en 1'tjes. Standaard luistert een https-webserver op poort 443.

### Zeroconf

Zeroconf of Zero Configuration Networking is een reeks technieken die toelaat een bruikbaar IP-netwerk te maken zonder bijkomende configuratie of speciale servers. Hierdoor kunnen gebruikers, zonder voorkennis, toch computers, netwerkprinters en andere toestellen aan elkaar koppelen en laten samenwerken. Zonder Zeroconf moet de gebruiker de nodige kennis hebben om speciale servers te installeren, zoals een DHCP-server of een DNS-server, of moet elke computer apart correct geconfigureerd worden.
Zeroconf bestaat binnen een netwerk(segment) uit drie principes:
* Netwerkadressen uitdelen (waardoor bv. het opzetten van een DHCP-server vermeden kan worden)
* Hostnamen uitdelen aan apparaten (waardoor bv. het opzetten van een DNS-server vermeden kan worden)
* Automatisch vinden van services (bv. handig om apparaten en diensten kenbaar te maken binnen home automation. Denk aan Home Assistant)
I.v.m. 'netwerkadressen uitdelen' zal een computer die ingesteld is op DHCP, maar terechtkomt in een netwerk zonder DHCP-server of waarvan de DHCP-server niet bereikbaar is, zelf een link-local adres nemen (Microsoft heeft het over APIPA = Automatic Private IP Addressing). Om duidelijk te maken dat het om een link-local adres gaat, wordt een apart adresblok gebruikt: 169.254.0.0/16. Het besturingssysteem kiest uit dit blok een willekeurig IP-adres, dat met grote kans uniek is.
Alhoewel link-local adressen handig zijn voor lokale communicatie tussen apparaten in hetzelfde netwerksegment, bieden ze beperkte functionaliteit aan buiten dat segment:
* Ze zijn bedoeld voor lokale communicatie binnen een netwerksegment. Ze zijn niet ontworpen om rechtstreeks toegang te bieden tot internetbronnen, omdat ze niet worden gerouteerd op internet.
* Apparaten met zo'n adres kunnen geen DNS-resolutie uitvoeren om domeinnamen om te zetten in IP-adressen. Dit betekent dat ze geen toegang hebben tot externe websites via domeinnamen.
Dus als je als netwerkadmin onverwacht een 169.254.0.0/16-adres ziet, dan is het meestal een teken dat je op zoek moet naar de oorzaak.
Microsoft Fixes Windows 10 Issue That Knocked People off the Internet
Microsoft had een update uitgerold die de CDPSVC service liet crashen op Windows 10, waardoor hosts geen IP-adres meer konden ontvangen via DHCP. Hierop kende Windows een link-local IP-adres toe. Pas een paar dagen later kwam een oplossing voor dit probleem. (en) Microsoft Fixes Windows 10 Issue That Knocked People off the Internet. bleepingcomputer.com (2016-12-14).

### Netwerkschema

Je zit bijna aan het einde van dit behoorlijk uitgebreid hoofdstuk, maar dankzij al die info kan je nu onderstaand netwerkschema gemakkelijker interpreteren:
* Er zijn twee aparte, private netwerken in het LAN-deel. Deze netwerken kunnen we heel compact voorstellen door hun netwerkadres in CIDR-notatie, nl. 10.1.2.0/24 en 192.168.1.0/24.
* Voor hun verbinding naar buiten is er een publiek IP-adres 91.179.77.105.
* Tussen netwerk A en B is geen NAT nodig in router RAB, maar wel eens we via router RBI naar het internet gaan.
* Host A.1 heeft als IP 10.1.2.101, een dynamisch IP in de range .100-.200. Uit het schema kunnen we niet afleiden wie de DHCP-server is, maar de kans is groot dat dit de linkse interface van router RAB is.
* Host B.1 heeft ook een dynamisch IP, nl. 192.168.1.101 (binnen de range .50-.150).
* De andere hosts lijken een statisch IP te hebben, bv. de NAS in netwerk A met als IP 10.1.2.5.
* De gateway voor iedere host in netwerk A is de linkse interface van router RAB.
* Voor hosts in netwerk B blijken er twee gateways te zijn. De rechtse interface van router RAB, voor een bestemming in het groene netwerk 10.1.2.0/24. De linkse interface van router RBI voor iedere bestemming die niet in netwerk A zit. Die laatste zal de standaard gateway zijn, want daar zit de meeste hosts (nl. de rest van de wereld).
* Via DNS kan de domeinnaam wikibooks.org omgezet worden naar het bijhorende IP-adres 91.198.174.192.

## Wireshark

We bekijken enkele concrete captures van frames in WireShark waar je het netwerklagenmodel goed "ziet zitten" in de stroom van bytes. In de eerste lichtgrijze kolom staat het eerste hexadecimale adres van de byte die volgt, te tellen vanaf 0. Voor de interpretatie moet je hexadecimale getallen soms omzetten naar zijn decimale waarde, soms moet je op bitniveau kijken, soms moet je een tekstcodering zoals UTF-8 gebruiken, soms is het nog iets anders. Om de breedte te benutten nemen we twee rijen uit Wireshark samen naar één. De legende is: MAC-adres doel ; MAC-adres bron ; adresseringsprotocol (IPv4/IPv6) ; TTL/hop limit ; transportprotocol (TCP/UDP); IP-adres bron ; IP-adres doel ; bronpoort ; doelpoort.
Merk op dat een IPv4-verzenderadres áltijd zit van byte 30 tot 33: handig voor netwerkcomponenten om het altijd daar te kunnen terugvinden. Het IPv6-verzenderadres kan daar niet zitten, omdat eerst het ontvangeradres komt dat langer is dan een IPv4-adres. Een router die enkel IPv4 begrijpt, kan dus niet zomaar ook IPv6 correct verwerken.

### HTTP

Een capture via de display filter HTTP
Fysieke laag
Linklaag (nl. Ethernet II)
Internetlaag (nl. IPv4)
Transportlaag (nl. TCP)
Applicatielaag (nl. HTTP)

### DHCP

Een capture via de display filter bootp (=dhcp) met een ‘DHCP Discover – Transaction ID 0x7920f73a’
Fysieke laag
Linklaag (nl. Ethernet II)
Internetlaag (nl. IPv4)
Transportlaag (nl. UDP)
Applicatielaag (nl. DHCP)

### DNS

Een capture via de display filter dns met een ‘Standard query 0x91f8 A www.wikibooks.org’
Fysieke laag
Linklaag (nl. Ethernet II)
Internetlaag (nl. IPv4)
Transportlaag (nl. UDP)
Applicatielaag (nl. DNS)

### ARP

Uit onderstaande capture (met display filter arp) blijkt samengevat Wie heeft 10.10.248.1? Vertel het 10.10.248.210.
Uitgebreider blijkt dat een host met IP-adres 10.10.248.210 (0a 0a f8 d2) en MAC-adres 9c 05 d6 33 ae f5 via een broadcast ff ff ff ff ff ff de vraag stelt wie het MAC-adres heeft van het IP-adres 10.10.248.1 (0a 0a f8 01). Wellicht om daarna deze host een rechtstreeks (unicast) een bericht te kunnen sturen.
Fysieke laag
Linklaag (nl. Ethernet II)
Address Resolution Protocol (nl. een ARP-request)

### ICMP

Een capture via de display filter icmpv6 met een ‘Echo (ping) request id=0x0d08, seq=1, hop limit=64 (reply in 55)’
Fysieke laag
Linklaag (nl. Ethernet II)
Internetlaag (nl. IPv6)
ICMPv6
ICMP (het protocol dat o.a. ping gebruikt) is een onderdeel van het Interprotocol. Vandaar is er geen transport- of applicatielaag aanwezig. Merk op dat het hier gaat om ICMPv6 gaat (86 dd). Bij ICMPv4 zou het gaan om kortere 32-bit IPv4-adressen, maar het principe is gelijklopend.
* ↑ Leerplan Applicatie- en databeheer - 3de graad - D/A-finaliteit
* ↑ Informatica- en communicatiewetenschappen B + S - 3de graad - D-finaliteit
* ↑ Meer informatie op leerplan D/2015/7841/003
* ↑ Er is al een nieuwe standaard omdat wordt verwacht dat de unieke nummering ooit 'op' zal raken.
* ↑ Deze 24 bits zijn de OUI of de Organizationally unique identifier.
* ↑ Er zijn switches die zowel MAC als IP begrijpen, maar dit valt buiten het kader van deze cursus.
* ↑ Als een switch een pakketje doorstuurt naar een router, zal deze router het IP-adres dat ook in dat pakketje zit gebruiken om te routeren.
* ↑ YouTube: Traceren van een gestolen computer met behulp van het MAC-adres
* ↑ Bv. in Gnome NetworkManager 1.2: zie NetworkManger and tracking protection in Wi-Fi networks.
* ↑ (nl) ipv4-blocks zijn toegewezen, door Joost Schellevis, www.tweakers.net, 3 februari 2011
* ↑ (nl) RIPE NCC heeft zijn laatste ipv4-adressen uitgedeeld, door Joris Jansen, www.tweakers.net, 25 november 2019
* ↑ Zie ripe.net. (nl) Bron: forumbericht op 9lives.be, nl. Gezocht: IP range belgie
* ↑ (en) UDP hole punching op de Engelstalige Wikipedia. NAT to NAT client-server communication, beschrijving van de pwnat tool van Samy Kamkar
* ↑ Bron: Deel Tele2-klanten een week lang kwetsbaar
* ↑ Wereld IPv6 Dag op 8 juni 2011, Stichting IPv6 Nederland
* ↑ World IPv6 Launch
* ↑ Tweakers.net: Telenet begint met uitrol ipv6
* ↑ Ipv6 traffiek van AMS-IX in grafieken
* ↑ Wereldwijd IPv6-gebruik bij Google gebruikers.
* ↑ Zie bv. deze vermelding op de wiki van Wireshark.
* ↑ In principe, omdat Network Adress Translation nog kan zorgen voor een extra stap.
* ↑ DNS bestaat al sinds 1983 en ondertussen kan je ook het DNS-verkeer versleutelen. Meer info op Tweakers.net: Dns-over-https: vloek of zegen?
* ↑ Zie Knack.be: Vlaming laat Trump "Oilsjters" carnavalsliedje tweeten over Russische prostituees
* ↑ Zie Tweakers.net: Nieuwssites tonen porno bij oude artikelen door verlopen domein van Vidme
* ↑ Zie Tweakers.net: RTL: bsn's van miljoenen Nederlanders online te zien door verlopen domeinnaam
* ↑ Zie Tweakers.net: Jeugdzorg liet medische dossiers uitlekken via verlopen domeinnaam
* ↑ Zie Tweakers.net: Politierapporten liggen op straat door verlopen domeinnamen
* ↑ Tweakers.net: "Dnssec: voor het laatste onveilige protocol"
* ↑ Zie bv. het Tweakers.net artikel Nederlandse politie arresteert verdachte op verdenking uitvoeren ddos-aanvallen van 5 februari 2018.
* ↑ Ook Arstechica schrijft in een artikel Double-dip Internet-of-Things botnet attack felt across the Internet meer over deze DDOS DNS-aanval. In hun related stories kan je nalezen dat dit niet de eerste keer is.