Hoofdindex » Servers » TechTalk » ARP
Webservers en meer
TechTalk
ARP
Op het eerste zicht lijkt het ARP (Address Resolution Protocol) een onnodig ding. Het is alsof de geleerden een extra protocol uitgevonden hebben, gewoon om de protocol stack vol te krijgen (het bekende OSI model). Het ARP zit trouwens op de tweede laag, de datalink laag, juist boven de fysische laag.

Address Resolution Protocol

Zo'n 50 jaar geleden bestonden de netwerken zoals we die nu kennen niet. Het IP, het “Internet Protocol” was één van de talrijke beschikbare protocollen (en de meeste gebruikers vonden het protocol "onnodig veel te complex"). Een ander protocol was IPX/SPX dat bijvoorbeeld door Lantastic gebruikt werd.

Maar ongeacht het protocol dat gebruikt wordt, moeten computers met elkaar kunnen communiceren. Ze moeten zelfs kunnen communiceren, zonder dat er een bovenliggend protocol beschikbaar is. Bij de opstart van een computersysteem heeft die zelfs in de meeste gevallen geen IP adres (die wordt door DHCP uitgereikt). Soms zijn er op het hele netwerk geen IP adressen beschikbaar!

MAC address

Het enige dat altijd beschikbaar is, is het MAC address (Media Access Control). Het MAC address zit in de netwerkadapter ingebakken, en ieder adapter heeft een eigen adres. Een ethernet adres bestaat uit 6 bytes, waarvan de eerste drie de fabrikant aangeven en de laatste drie een volgnummer zijn. Een MAC adres heeft vaak de vorm hh:hh:hh:hh:hh:hh (waarbij 'h' een hexadecimale cijfer is).

Het MAC address is fantastic, maar het geeft geen informatie over het netwerk zelf. Een adaptor met adres 01:a0:ab:ce:cf:10 kan in Amerika gebruikt worden, terwijl de adapter met adres 01:a0:ab:ce:cf:01 in België gelegen is. Een MAC adres werkt enkel binnen een subnet, dat zijn computers die met elkaar gekoppeld worden door "domme" verbindingen zoals kabels, hubs, switches en bridges.

  • Een bridge is bijvoorbeeld een powerline adaptor die de verbinding tussen twee punten maakt. Ook een modem of een klassieke access point is een bridge: het maakt de verbinding tussen twee stukken van een lokaal netwerk. (lokaal in de logische betekenis).

  • Een hub is een verdeeldoos: het verdeelt de inkomende berichten op een poort naar alle aangesloten poorten (daarom worden hubs niet meer gebruikt: ze zorgen snel voor overbelasting van het lokaal netwerk).

  • Een switch is een slimme hub: het verdeelt de inkomende berichten enkel naar de juiste poort (gebaseerd op het MAC adres). Terwijl een bridge of hub op de fysische laag werken (zij sturen gewoon door), werkt een switch op de datalink layer: die kent het MAC adres van de aangesloten apparaten.

Met het commando arp -a kan je een lokale lijst krijgen van de computers, met hun mac- en ip adres. De lijst is lokaal, dat wilt zeggen dat die enkel in de computer zelf opgeslagen is. Als de computer opstart is de lijst leeg.

Als de computer opgestart is, dan is het eerste wat hij doet een “gratuitous ARP message” uitsturen, daarmee geeft hij te kennen dat zijn mac-adres online is. Daarvoor gebruikt hij een ARP-reply (operation code=2, daarover meer later). Enkel switches maken daar gebruik van: ze leggen een tabelletje aan "op poort 1 staat er een computer aangesloten met mac adres ...". Computers maken daar normaal geen gebruik van, want er hoort nog geen IP adres bij dit MAC adres.

Dan stuurt de computer een DHCP request, dit is een broadcast (gericht aan alle computers op het lokaal netwerk). Enkel de DHCP server zal daarop reageren en een IP adres uitreiken. Een broadcast bericht is altijd lokaal binnen het subnet, dus ieder subnet moet precies één DHCP server hebben. Aangezien de router meestal als grenspost fungeert, heeft die ook een DHCP server aan boord (maar verplicht is dit niet: een windows domain controller kan bijvoorbeeld ook als DHCP server dienen).

Nu heeft de computer dus een eigen IP adres (192.168.2.199). Het is opgenomen in het lokaal netwerk.

De figuur rechts geeft de inhoud van de ARP cache weer: 192.168.2.1 is de router, en 192.168.2.2 is de lokale mail server. Deze twee adressen kent mijn computer, want die heeft er al mee gebabbeld.

Nu moet er een verbinding gelegd worden met 192.168.2.3 (dit is de sturing van mijn verwarming). Ik heb hier het triviale ping gebruikt (zie ICMP), maar alle hogere protocollen zoals web, mail, vpn,... werken op dezelfde manier.

Als ik na de verbinding de lokale ARP cache opnieuw opvraag, dan is er één element bijgekomen: het adres van mijn verwarming.

Dezelfde commando's heb ik via een linux computer gegeven: een eerste arp commando, dan een ping, en dan opnieuw een arp. Het eerste adres is dat van de router, het tweede adres van een draadloos netwerk bij de buren. Na de ping is er hier ook een adres bijgekomen.

Indeling van een ARP pakket

Vooralleer we een voorbeeld van een berichtuitwisseling geven, tonen we de onderverdeling van een ARP pakket. Een berichtuitwisseling is bijvoorbeeld de vraag "wie is IP 192.168.2.3" met het antwoord "ik ben 192.168.2.3 en mijn MAC adres is..." Een MAC adres is een beetje vergelijkbaar met een telefoonnummer: er zijn duizenden Jan Peeters (ip=192.168.2.3), maar er is er maar één met telefoonnummer 003250289574.

Een ARP pakket is universeel en moet dus overweg kunnen met alle mogelijke configuraties, zowel hardware (ethernet, token ring, rooksignalen...) als softwarematig (TCP/IP, IPX/SPX, AppleTalk, NetBIOS,...): daarom dat de lengte van alle adressen variabel is.

    Internet Protocol (IPv4) over Ethernet ARP packet
    bit0 - 78 - 15
    0Hardware type (HTYPE)
    16Protocol type (PTYPE)
    32Hardware address length (HLEN)Protocol address length (PLEN)
    48Operation (OPER)
    64Sender hardware address (SHA) (first 16 bits)
    80(next 16 bits)
    96(last 16 bits)
    112Sender protocol address (SPA) (first 16 bits)
    128(last 16 bits)
    144Target hardware address (THA) (first 16 bits)
    160(next 16 bits)
    176(last 16 bits)
    192Target protocol address (TPA) (first 16 bits)
    208(last 16 bits)
  • Hardware type:
    dit is het fysisch type van het netwerk. Voor ethernet is dit type 1.

  • Protocol type:
    geeft het protocol type dat er op het netwerk gebruikt wordt. Voor IPv4 is dat 0x0800 (hexadecimaal 800).

  • Hardware address Length:
    ethernet gebruikt een hardware adres van 6 bytes.

  • Protocol address Length:
    IPv4 gebruikt adressen die 4 bytes lang zijn.

  • Operation:
    is dit een request (vraag=1) of een reply (antwoord=2)

  • Sender hardware address:
    MAC adres van de zender

  • Sender protocol address:
    IP adres van de zender

  • Target hardware address:
    MAC adres van de bestemmeling

  • Target protocol address:
    IP adres van de bestemmeling
We keren terug naar ons voorbeeld, waar mijn computer een verbinding wilt aangaan met de verwarming. Mijn computer kent daar enkel het IP adres van (de DNS dienst die voor de omzetting van namen naar adressen zorgt werkt enkel met IP adressen).

Mijn computer stuurt een oproep:

    Een packet sniffer zal dit vertalen als
    "Who is 192.168.2.3? Tell it to 192.168.2.199"
  • SHA: 00:24:d7:c9:5f:f8,
  • SPA: 192.168.2.199
  • THA: ff:ff:ff:ff:ff:ff (broadcast),
  • TPA: 192.168.2.3
Alle computers in het subnet moeten de broadcast verwerken, maar enkel de aangesproken computer (waarvan het IP adres opgegeven is) zal een antwoord sturen:
    Een packet sniffer zal dit vertalen als
    "192.168.2.3 is at 00:50:8b:db:28:61"
  • SHA: 00:50:8b:db:28:61,
  • SPA: 192.168.2.3
  • THA: 00:24:d7:c9:5f:f8,
  • TPA: 192.168.2.199
En zo weet mijn computer naar welk fysisch adres hij een oproep moet sturen. De switch luistert ook mee, en bepaalt aan de hand van de SHA welke computer op iedere poort aangesloten is: een broadcast wordt naar alle computers doorgestuurd, een unicast enkel naar de juiste computer.

Voor alle duidelijkheid, rechts een netwerkconfiguratie met 3 computers en één router, dat zijn de 4 blauwe kaders (opgelet, de adressen komen niet overeen met ons voorbeeld!)

We interesseren ons voor wat er in de "router" zit. Deze router heeft een switch-gedeelte (lichtblauw) met 6 lokale netwerkaansluitingen (LAN). De switch heeft nog een aantal onzichtbare netwerkaansluitingen

  • Voor de DHCP server (die de IP adressen moet uitreiken),
  • De ARP controller (die de switch bestuurt),
  • De webserver (voor het configureren van de router),
  • Vaak heeft de router een DNS cache (niet aangegeven op de figuur): bij de DHCP configuratie van de computers wordt er naar de router doorverwezen als DNS server, terwijl de router zelf contact maakt met de DNS server van de internet service provider, en
  • De eigenlijke router die een verbinding met de buitenwereld maakt.

Voor de router-functie heeft "de router" een extra netwerk-aansluiting genaamd "WAN".

Het is dus duidelijk dat arp een zeer krachtig protocol is. Zonder arp zou het internet (IP, TCP en UDP) niet bestaan. Maar arp bestond al voor het internet... De toepassingen van ARP worden op een volgende pagina besproken.

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