Emulatie van Traffic Control in User-Mode Linux



Vergelijkbare documenten
OSI model. Networking Fundamentals. Roland Sellis

Revisie geschiedenis. [XXTER & KNX via IP]

4/5 Installatieservers

Summa Cutter Tools. 1 Cutter tools. Met dit programma kunnen twee dingen geïnstalleerd worden:

Chapter 4. eenvoudige webserver opzetten

Laten we eens beginnen met de mouwen op te stropen en een netwerk te bouwen.

Handleiding VirtualBox

Cloud2 Online Backup - CrashplanPRO

De ontwikkelaar heeft het recht om af te zien van verdere ontwikkeling en/of ondersteuning van dit pakket.

Temperatuur logger synchronisatie

Studietaak 4 Hoe installeer ik software? Apache Webserver

De ontwikkelaar heeft het recht om af te zien van verdere ontwikkeling en/of ondersteuning van dit pakket.

Van dvd naar webserver. Marcel Nijenhof 18 Juli

Inhoud. Packet Tracer x. Labs xi

UBUNTU 8 installatie. 13/10/ ivowebschool.be/ /205bc10d-ef8e-4a 1/14. Onderwerpen

BELANGRIJK! LEES DEZE OVEREENKOMST ALVORENS DE SOFTWARE TE INSTALLEREN!

Handleiding voor installatie en gebruik van

Netwerkbeheer Examennummer: Datum: 17 november 2012 Tijd: 10:00 uur - 11:30 uur

Werkplekbeheer en kantoorautomatisering Examennummer: Datum: 24 maart 2012 Tijd: 13:00 uur - 14:30 uur

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous

Xampp Web Development omgeving opzetten onder Windows.

Rapport. i-bridge FleetBroker en LocationBroker. Versie 1.0. Datum 22 December 2010

Gigaset pro VLAN configuratie

Xelion ESPA koppeling Handleiding Beheer V1.6

Linux Server Installatie

Handleiding integratie CF iviewer CT-iViewer

Computernetwerken Deel 2

XAMPP Web Development omgeving opzetten onder Windows.

Is het website niet beschikbaar, dan is op de methodewebsite de datasheet te vinden van de twee appliances:

Remote Back-up Personal

Quickstart ewon Cosy 131

Elektronisch factureren

Boutronic. MSSQL Express server voor Log functie. >> Installatie handleiding << 23 april 2014, versie 1.0d

ZIEZO Remote Back-up Personal

3Com 4400 instellen voor Qmanage

BELANGRIJK! LEES DEZE OVEREENKOMST ALVORENS DE SOFTWARE TE INSTALLEREN!

b-logicx handleiding INHOUDSOPGAVE Toegang op afstand via extern IPadres UG_NoIP.pdf

Boutronic. MSSQL Express server voor Log functie. >> Installatie handleiding << 2 april 2012, versie 1.0d

HANDLEIDING DMS Plugin Installatie, configuratie & werking

In de meeste netwerkomgevingen staan de firewalls het browsen of surfen op internet toe.

Port Redirection & Open Ports

Handleiding Back-up Online Mac Versie april 2017

Werking van de Office Connector, en het oplossen van fouten.

Het besturingssysteem of operating system, vaak afgekort tot OS is verantwoordelijk voor de communicatie van de software met de hardware.

De nieuwste build van CarmenTV Injector heeft een aantal verbeterde en nieuwe functies.

Kijk eerst in Computer (Mijn Computer) van je werkplek. Welke stationsletters zie je op de PC?

Instructies voor een snelle installatie

5/5 Red Carpet. 5/5.1 Inleiding

QoS / Quality Of Service

1 Installatie van de server... 2

NAT (Network Address Translation)

Installatie en configuratie VCDS HEX-NET

Degrande Frederik COMPUTER OVERNEMEN januari 2005

Installatie SQL: Server 2008R2

Vigor 2850 serie Dual PPPoA/PVC - RoutIT

VoIP Netwerking Configuratie Gids. Vox Davo VoIP Netwerking Configuratie Gids

Installatiehandleiding TiC Narrow Casting Manager

MS Virtual pc 2007 Handleiding

Ashampoo Rescue Disc

API...1 Identificatie...1 Opties...2 Acties...3 Webserver...6 Heartbeat...6 Buffer groottes...8

Voor op afstand os installatie moeten de volgende onderdelen geïnstalleerd zijn op de Windows 2000 server.

Optibel Breedband Telefonie Installatie- en Gebruikershandleiding SPA-2102

Linux Gevorderden Basis installatie Linux. Elektronica-ICT. Selina Oudermans 2ICT4. Academiejaar

Installatie van WerkMeester

Quality of Service First Priority of VoIP SIP/RTP

JaZUp Gebruikershandleiding

Webrelais IPIO-4A8I-M

Vandaag Nog Beter Internet? Lees dit E-Book Door En Geniet Vandaag Nog Van Sneller Internet

Virtualizatie bij SIN

1945, eerste DC. Eigen logo

1. Introductie netwerken

Rodin installatiehandleiding (vanaf versie 2.1.xxx.x)

QoS / Quality Of Service

Functionele beschrijving: scannen naar Exact Globe.

HANDLEIDING. Dit document beschrijft de installatie, configuratie en gebruik van de Netduino Plus 2 monitoring oplossing

Samba installeren en configureren

ISW Presents Debian Homeserver Workshop

3Com 4500G instellen voor Qmanage

Aanmelden Na installatie wordt de service automatisch gestart en kunt u meteen aanmelden van op afstand:

Belangrijk: Voordat u een VPN tunnel creëert dient u ervoor te zorgen dat de datum en tijd instellingen van de router juist staan ingesteld.

Upgrade naar People Inc 3.5.0

Instellen van IP-Aliasing op een Linux Machine Mini-HOWTO

1 Inleiding. 3 Handmatig... invoeren zaken basis 4 Verwerken... zaken 5 Afhandelen... van zaken. 7 Uitgebreidere... zaak opties

Softphone Installatie Handleiding

Berekening van de hash-code van een bestand of CD

Remote Powercontrol for TCP/IP networks

Fuel. Handleiding voor installatie en gebruik

INSTALLATIE EXCHANGE CONNECTOR

IAAS HANDLEIDING - SOPHOS FIREWALL

FTP introductie

Optibel Breedband Telefonie Installatie- en Gebruikershandleiding

Deze applicatie nota legt uit hoe u een Net2 datalijn verbonden aan een TCP/IP netwerk, via een TCP/IP interface moet verbinden.

VirtualBox: hoe werkt het?

Installatie Handleiding AP 1120 op HiPath 3000

Vakinhoudelijke uitwerking Keuzevak Applicatieontwikkeling van het profiel MVI vmbo beroepsgericht

5/8 Patch management

Installatiehandleiding. Facto minifmis

Siemens workpoints en DHCP options

Transcriptie:

E07/ELO/09 Diepenbeek, 2007 Emulatie van Traffic Control in User-Mode Linux rapport over het eindwerk van Geert GERITS en Filip SCHREURS kandidaten voor de graad van industrieel ingenieur in de elektronica Promotor: ing. L. Rutten

Woord vooraf Via deze weg willen we graag enkele personen bedanken die ons hebben geholpen om dit eindwerk tot een goed einde te brengen. In de eerste plaats is dat onze promotor, meneer L. Rutten, die ons het hele jaar door goed heeft bijgestaan. Zonder zijn hulp zouden we nooit zo ver geraakt zijn als nu het geval is. Vervolgens willen we ook mevrouw M. Mussen bedanken voor de taalkundige revisie. Verder danken we zeker ook onze ouders voor de morele en financiële steun. Zonder hen was het niet mogelijk geweest om dit eindwerk, en onze studies in het algemeen, te voltooien. Tot slot willen we nog meedelen dat dit document gemaakt is in DocBook volgens het DocBook XML DTD V4.5. Voor de opmaak hebben we gebruik gemaakt van een aangepaste versie van de XSL-stylesheets voor DocBook-XML-bestanden v1.72.0 van Norman Walsh. Voor meer info, zie bijlage A.

Inhoudsopgave Abstract... 6 1 Inleiding... 7 1.1 Open-sourcesoftware... 7 1.2 Emulatie... 7 1.3 Doel van het eindwerk... 8 2 User-Mode Linux... 9 2.1 Aanpassingen in het host-besturingssysteem... 9 2.1.1 SKAS-patch... 9 2.1.2 Kernel compileren... 11 2.2 Guest-besturingssysteem... 12 2.2.1 Image... 12 2.2.2 Kernel compileren... 13 2.2.3 UML's starten... 14 3 Networking... 15 3.1 Het OSI-model... 15 3.2 Bridging... 16 3.3 Tunneling... 17 3.4 IP-maskerade... 18 3.5 Testopstelling... 18 4 Visualisatie... 20 4.1 SNMP... 20 4.1.1 Management Information Base... 20 4.1.2 Structuur... 21 4.1.3 Praktische informatie... 22 4.2 RRDtool... 23 4.2.1 Database... 24 4.2.2 Grafieken... 26 5 Traffic Control... 29 5.1 Hierarchical Token Bucket... 29 5.2 Netwerkverkeer controleren met rate en ceil... 30 5.3 Meerdere klassen en filters gebruiken... 32 5.4 HTTP-verkeer boosten met burst... 34 6 Scripts... 37 6.1 De basis van shellscripts... 37 6.1.1 While-lus... 37 6.1.2 For-lus... 37 6.1.3 If-constructie... 38 6.1.4 Operatoren... 38 6.1.5 Shebang... 39 6.2 Installatiescripts... 39 6.2.1 install.sh... 39 6.2.2 rc.local.sh... 43 6.2.3 uninstall.sh... 43 6.3 Opstartscripts... 44 6.3.1 bridge.sh... 44 6.3.2 interfaces.sh... 45 6.3.3 uml.sh... 45 6.3.4 router.sh... 46

6.3.5 init.sh... 47 6.3.6 project.sh... 47 6.3.7 stop.sh... 50 6.4 Uitvoeringsscripts... 51 6.4.1 database.sh... 51 6.4.2 picture.sh... 52 6.4.3 program.sh... 52 6.4.4 rrdtool.sh... 53 7 Besluit... 56 7.1 Samenvatting... 56 7.2 Persoonlijke visie... 57 Literatuurlijst... 58

Lijst van figuren 2.1 Vergelijking tussen UML en Qemu... 9 2.2 Screenshot van een menuconfig... 12 3.1 Schema van het OSI-model... 15 3.2 Schema van het virtuele netwerk... 18 4.1 Schematische voorstelling van het voorbeeldnetwerk... 20 4.2 Hiërarchische structuur van een MIB... 21 4.3 Schematische weergave van een eenvoudige circulaire database... 23 4.4 Schematische weergave van de RRDtool-database... 25 4.5 Voorbeeldgrafiek met 2 uren aan data... 27 4.6 Voorbeeldgrafiek met 24 uren aan data... 28 4.7 Voorbeeldgrafiek met 7 dagen aan data... 28 4.8 Voorbeeldgrafiek met 30 dagen aan data... 28 5.1 Schematische voorstelling van het voorbeeldnetwerk... 29 5.2 Schema van de instellingen van HTB: rate en ceil... 30 5.3 Grafiek van een download, begrensd met een rate... 31 5.4 Grafiek van een download, begrensd met een rate en een ceil... 32 5.5 Schema van de instellingen van HTB: meerdere klassen... 32 5.6 Grafiek van een HTTP-download... 34 5.7 Grafiek van een FTP-download... 34 5.8 Schema van de instellingen van HTB: burst... 35 5.9 Grafiek van een download, zonder burst... 36 5.10 Grafiek van een download, geboost door een burst... 36 7.1 Algemeen schema van het virtuele netwerk in de testopstelling... 56

Abstract Het doel van dit eindwerk is een testomgeving ontwerpen met behulp van User-Mode Linux. Deze testomgeving moet in staat zijn om een volledig virtueel netwerk te emuleren op één enkele pc. De gebruiker moet het dataverkeer in deze testomgeving eenvoudig kunnen nagaan en indien nodig ook controleren. User-Mode Linux laat toe verschillende virtuele Linuxsystemen als een applicatie te draaien binnen een bestaand Linuxsysteem. Hierdoor leent het zich uitstekend om nieuwe software uit te testen en te debuggen zonder dat het het huidige systeem beïnvloedt. User-Mode Linux kan meerdere virtuele systemen tegelijk aanmaken die in hardware en software verschillen van de gebruikte pc. Met deze virtuele systemen emuleren we een netwerk dat dienst kan doen als testomgeving voor verschillende programma's, technieken en protocols. Een eerste belangrijke techniek is Hierarchical Token Bucket (HTB), een onderdeel van Traffic Control (tc). HTB is een eenvoudige maar krachtige techniek waarmee we het dataverkeer over het netwerk kunnen controleren en limiteren. Een tweede techniek is RRDtool. Deze kan met behulp van het Simple Network Management Protocol (SNMP) gegevens opvragen bij een router en deze opslaan in een database. Het kan vervolgens van de opgeslagen gegevens grafieken genereren die we tot in de details kunnen configureren. Met behulp van een Apache webserver publiceren we de grafieken op een eenvoudige website. Na de testfase kan de virtuele testomgeving dienst doen als netwerkdemo om de werking van de verschillende uitgeteste technieken duidelijk te maken. Ze kan zo een nuttige aanvulling zijn voor de lessen datacommunicatie. En door de realistische emulatie in User-Mode Linux levert de overgang van testsysteem naar reëel systeem zelden grote problemen op.

Hoofdstuk 1: Inleiding De dag van vandaag is open-sourcesoftware aan een grote opmars bezig. Denk maar aan het besturingssysteem Linux dat voor meer en meer gebruikers het standaardbesturingssysteem is geworden. Of denk aan Sun's kantoorpakket OpenOffice.org, dat niet enkel voor Linux, maar ook voor andere besturingssystemen een goed alternatief is voor de vaak dure kantoortoepassingen. Zowel verschillende Linuxdistributies als het volledige OpenOffice.org-pakket zijn volledig gratis en legaal te downloaden van het internet. 1.1 Open-sourcesoftware Open-sourcesoftware (soms ook open-bronsoftware genoemd) is computerprogrammatuur waarvan de broncode in te kijken en te veranderen is [1]. De gebruiker kan, met andere woorden, de software zelf aanpassen als hij niet geheel tevreden is met de werking ervan. De voorwaarde is wel dat hij over genoeg kennis moet beschikken om de broncode te begrijpen en op een correcte manier aan te passen. Dit is een groot voordeel ten opzichte van commerciële software, waar de broncode vaak een bedrijfsgeheim is. Als er in deze software een fout zit, of de werking is verouderd of niet meer volgens de huidige wetten en reglementen, dan moet de gebruiker de leverancier inschakelen om hier iets aan te doen. De gebruiker heeft vaak geen invloed meer over de snelheid waarop de leverancier de software aanpast. Het kan zelfs zijn dat de leverancier besluit om de ontwikkeling volledig stop te zetten. In zo'n geval moet er gezocht worden naar een waardig alternatief, wat mogelijk een hele boel onverwachte kosten met zich mee brengt. Het is niet omdat gebruikers open-sourcesoftware zelf kunnen aanpassen dat de ontwikkelaars er zich niet meer mee bezighouden. In vele gevallen zullen er voor open-sourcesoftware ook updates worden gemaakt, net zoals bij alle andere software. In sommige gevalen bieden de ontwikkelaars zelfs een bepaalde vorm van ondersteuning en garanties aan hun gebruikers aan. Het gaat dan meestal niet over gratis software. Dit is bijvoorbeeld het geval bij een aantal distributies van het besturingssysteem Linux. Bedrijven die willen overschakelen op Linux willen bepaalde garanties dat de overschakeling geen al te grote problemen veroorzaakt. En ze willen garanties dat de ontwikkelaars het besturingssysteem op regelmatige tijden updaten, vooral als gebruikers fouten ontdekken. 1.2 Emulatie Een emulator maakt het mogelijk om een ander of verouderd computersysteem in een eigen of nieuwe omgeving na te bootsen [2]. Emulatie wordt vaak verward met simulatie, hoewel er toch een duidelijk verschil is. Een simulatie beschrijft enkel wat iets anders doet of hoe het werkt, terwijl een emulatie datgene ook daadwerkelijk uitvoert. Een vliegtuigsimulator vliegt bijvoorbeeld niet echt. Een simulatie heeft dus betrekking op een model om het gedrag van een systeem te begrijpen, te voorspellen of te ontwerpen. Het creëert de mogelijkheden van het systeem niet opnieuw [3]. Een emulatie creëert daarentegen een surrogaat voor het systeem dat alle of een deel van de mogelijkheden van het originele systeem nabootst. Een voorbeeld van een open-source emulatieprogramma is Netkit. Het stelt gebruikers in staat om op een eenvoudige manier en aan een lage kostprijs een volledig netwerk te emuleren op één enkele pc. En hoewel alles virtueel is hebben de makers er toch voor gezorgd dat de kloof met de realiteit zo klein mogelijk is. Het virtueel netwerk zal op dezelfde manier geconfigureerd kunnen worden als een echt computernetwerk.

Inleiding Om een netwerk te emuleren met Netkit is het enkel nodig om een shellscript te schrijven en uit te voeren. Zo'n script start de virtuele pc's en routers 1 op en verbindt ze zoals de gebruiker dat wenst. Een alternatieve manier om netwerkdemo's te maken voor Netkit is het gebruik van NetML. Dit is een op XML gebaseerde taal waarmee de gebruiker eenvoudige netwerkbeschrijvingen kan maken [4]. Deze beschrijvingen kunnen naast Netkitdemo's ook omgezet worden naar configuratiebestanden voor sommige routers. Netkit is voor het overgrote deel gebaseerd op User-Mode Linux. Voor dit eindwerk hebben we User-Mode Linux gebruikt als virtuele omgeving op ongeveer dezelfde manier als Netkit dat doet. We maken een shellscript dat een netwerkdemo start zoals bij Netkit, maar dan zonder gebruik te maken van Netkit zelf. Dit geeft ons meer vrijheid en meer inzicht in de exacte werking van de emulatie. 1.3 Doel van het eindwerk In dit eindwerk is het de bedoeling om netwerkdemo's te maken waarin de gebruiker op een veilige en vooral goedkope manier nieuwe systemen en protocols kan uittesten. Zowel de testomgeving als de protocols bestaan volledig uit open-sourcesoftware. De eerstvolgende twee hoofdstukken handelen over de testomgeving. User-Mode Linux is in staat om een volledig netwerk van virtuele Linux-pc's en routers aan te maken. Hiervoor is slechts één enkele pc met het besturingssysteem Linux nodig. Het virtuele netwerk zal dienen om alle programma's en protocols op uit te testen. De overgang van User-Mode Linux naar een echt netwerk is daarna nog slechts een kleine stap. Vervolgens komt in hoofdstuk 4 de visualisatie van het netwerkverkeer met behulp van RRDtool aan bod. RRDtool is een pakket dat databases aanmaakt voor de nodige gegevens. Het kan ook op een eenvoudige manier grafieken maken van alle gegevens in zijn databases. RRDtool krijgt de nodige gegevens van de router met behulp van SNMP. Verder handelt hoofdstuk 5 over Linux Traffic Control. Dit is een protocol dat het dataverkeer over een netwerk controleert en limiteert. En tot slot geeft hoofdstuk 6 nog wat meer uitleg over de verschillende scripts die het werk een stuk vergemakkelijken. Het werkt zowel het installatiescript als de verschillende opstartscripts verder uit. 1 Een router is een onderdeel van een computernetwerk dat datapakketten buffert en doorstuurt naar een bestemming binnen een privaat netwerk. Dit wordt ook routing genoemd en vindt plaats binnen de derde laag van het OSI-model, de netwerklaag. Zie hoofdstuk 3 voor uitleg over het OSI-model. 8

Hoofdstuk 2: User-Mode Linux User-Mode Linux laat toe verschillende virtuele Linuxsystemen (guests) te draaien als een applicatie binnen een bestaand Linuxsysteem (host). Iedere guest draait als een proces in de user space 1. Doordat User-Mode Linux toelaat om verschillende Linuxsystemen te draaien op één enkele pc biedt het een uitstekende veiligheid en zekerheid naar de host toe op vlak van configuratie en stabiliteit. Hierdoor leent het zich uitstekend voor educatieve doeleinden en kan het ook dienen om nieuwe software te testen en te debuggen zonder de host te beïnvloeden. Figuur 2.1: Vergelijking tussen UML en Qemu De schema's in figuur 2.1 schetsen de opbouw van twee virtuele systemen. Het linkse schema geeft User-Mode Linux schematisch weer. Hierin zien we dat een UML-kernel de belangrijke schakel is tussen de processen die in het virtuele systeem draaien en de Linuxkernel van de host. Het rechterschema toont duidelijk dat de virtualisatie hier voor een andere aanpak kiest. Een emulator zoals Qemu voorziet een extra laag virtuele hardware in de opstelling. Deze virtuele hardware zorgt voor de communicatie tussen de beide Linuxkernels. De kernel van het virtuele systeem is daarom een gewone Linuxkernel die niet speciaal voor de emulatie gecompileerd hoeft te worden. 2.1 Aanpassingen in het host-besturingssysteem Er bestaan twee verschillende modes waarin de host kan werken. De oude mode wordt tt-mode genoemd, wat voor Tracing Thread staat. User-Mode Linux draait in deze mode indien er vanuit de host geen ondersteuning voorzien is voor User-Mode Linux. Indien de host-kernel gepatched wordt dan kan User-Mode Linux in de nieuwe mode draaien. Deze mode wordt SKAS-mode genoemd. Dit staat voor Separate Kernel Address Space. 2.1.1 SKAS-patch Oorspronkelijk heeft een User-Mode Linux een specifieke opbouw. Elk proces van een UML komt overeen met een apart proces op de host. In Linux bestaat er een speciale thread 2, de tracing thread. 1 De user space is het geheugengebied waarin alle gebruikerstoepassingen werken. 2 Een thread is een proces dat binnen een ander proces uitgevoerd wordt. Met behulp van threads kan een computerprogramma verschillende taken tegelijkertijd uitvoeren. 9

User-Mode Linux Deze thread is noodzakelijk om system calls 3 van alle processen te onderscheppen. Als een proces van een virtuele machine een system call uitvoert is deze gericht aan de kernel van de virtuele machine zelf. Deze verwijst de system call vervolgens door naar de kernel van het host-besturingssysteem. Het antwoord moet uiteindelijk weer via dezelfde weg terug. Dit houdt een serieuze performantiedaling in. Om dit tegen te gaan wordt er een nieuwe system call in de host-kernel voorzien die processen toelaat om hun eigen system calls te onderscheppen. De gelimiteerde ondersteuning voor User-Mode Linux in een gewone Linuxkernel veroorzaakt daarbuiten nog een aantal problemen. De UML-kernel is aanwezig in dezelfde adresruimte als alle processen van de host-pc en is bijgevolg van buiten af aanpasbaar. Deze schrijftoegang tot de kerneldata vormt een duidelijk veiligheidsprobleem. Dit kan veroorzaken dat de UML buiten zijn toegewezen geheugenbereik kan schrijven, wat je absoluut moet vermijden. De jail-mode verhelpt dit probleem door de UML-data readonly te maken terwijl een proces loopt. Dit veroorzaakt echter een extra performantiedaling. De SKAS-patch biedt een oplossing voor deze problemen. Een gepatchte Linuxkernel laat toe dat de UML's in de veiligere SKAS-mode opstarten. De aanpassingen die de SKAS-patch in de Linux-host aanbrengt verplichten de UML-kernel in een totaal ander adresgebied te lopen dan zijn eigen processen. Dit lost de problemen inzake veiligheid op. De adresgebieden in de guests zijn identiek aan wat ze zouden zijn op de host. De SKAS-mode vereist dat je een patch uitvoert op de broncode van de host-kernel alvorens je deze gaat compileren. De patch implementeert de ondersteuning voor aparte adresgebieden die nodig is voor SKAS-mode en nog enkele noodzakelijke toevoegingen aan ptrace 4. Vooraleer je de kernel kan patchen moet je eerst nog extra software installeren in Ubuntu die dit mogelijk maakt. sudo apt-get install build-essential \ linux-source-2.6.17 \ kernel-package \ libncurses5-dev Merk hierbij op dat de eerste regels van dit commando eindigen met een backslash. Dit wil zeggen dat het commando nog niet volledig is, maar dat er nog tekst volgt op een volgende regel. Normaal voer je een commando uit op één regel, maar om esthetische redenen kan je het soms beter splitsen in meerdere opeenvolgende regels. Als je dit commando in een script zou gebruiken, dan kan je het ook splitsen om het overzicht wat te bewaren. Vervolgens moet je de kernel uitpakken in de daarvoor voorziene map. cd /usr/src sudo tar xvfj linux-source-2.6.17.tar.bz2 Omdat Ubuntu 6.10 met een 2.6.17-kernel werkt moet je skas-2.6.17-rc5-v9-pre9.patch.bz2 downloaden van http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/. Deze plaats je zonder uit te pakken in de map /usr/src/. Vervolgens ga je naar de submap linux-source-2.6.17 en patch je de bronbestanden van de kernel met volgend commando. 3 Een system call is een mechanisme dat een computerprogramma gebruikt om een service van het besturingssysteem te verkrijgen. 4 Ptrace() is een system call die een proces toelaat om de uitvoering van een ander proces te controleren. 10

User-Mode Linux cd linux-source-2.6.17 bunzip2 -cd../skas-2.6.17-rc5-v9-pre9.patch.bz2 \ sudo patch -p1 --dry-run De optie dry-run geeft aan dat het commando nog niks effectief verandert in de broncode. De patch test alleen of alles wel goed zal verlopen. Indien nergens in de output failed voorkomt is het veilig om deze patch daadwerkelijk toe te passen op de broncode van de kernel. Dit doe je door hetzelfde commando uit te voeren, maar dan zonder de optie dry-run. bunzip2 -cd../skas-2.6.17-rc5-v9-pre9.patch.bz2 sudo patch -p1 2.1.2 Kernel compileren Als je de kernel gepatched hebt moet je het configuratiebestand van de geïnstalleerde kernel kopiëren naar de map /usr/src/linux-source-2.6.17 en hernoemen naar.config. Deze nieuwe naam is nodig omdat het commando dat de kernel compileert de configuratie van de kernel automatisch uit het bestand.config leest. sudo cp /boot/config-2.6.17-10-generic.config Wanneer je eventueel ook nog extra opties wilt toevoegen alvorens de kernel te compileren, dan kan dit eenvoudig door een configuratiemenu te starten en de opties aan te vinken. sudo make menuconfig Voordat je de opties aanvinkt laad je best het.config-bestand door "Load an Alternate Configuration File" te selecteren in het configuratiemenu, zoals in figuur 2.2 te zien is. Aangezien Ubuntu gebaseerd is op Debian kan je gebruik maken van de Debian-tools om de kernel te compileren. Dit vergemakkelijkt de installatie een heel stuk. Je kan een.deb-bestand van de gecompileerde kernel maken dat je achteraf eenvoudig kan installeren. Hiervoor hoef je maar één keer te compileren en de installatie zal nu voor de rest geheel vanzelf gebeuren. De installatie door middel van een.deb-bestand zorgt ook zelf voor een entry in de bootloader. sudo make-kpkg --initrd \ --append-to=-project kernel_image kernel_headers Als je de UML nu start zal hij de ondersteuning van de host proberen te detecteren. Indien dit niet lukt zal hij terugvallen op de oude tt-mode. Als de UML de SKAS-patch wel correct kan gebruiken, dan zal de host-kernel het aantal processen dat tot de UML behoort reduceren tot vier. Het eerste van deze vier processen is de UML-kernelthread die in het gescheiden kerneladresgebied loopt. Deze thread voert de kernelcode uit en onderschept de system calls van UML-processen. Een tweede belangrijk proces is de thread voor de user space van de UML. Deze voert alle UML-processen uit. Als derde proces treffen we de ubd-driverthread aan. Dit proces staat in voor het asynchroon I/O-gebeuren. Dit is alles wat met het dataverkeer van en naar een harde schijf te maken heeft. Het laatste proces is de SIGIO emulatiethread. SIGIO is een synoniem voor SIGPOLL, wat het signaal is dat programma's teruggeven wanneer een asynchrone I/O-gebeurtenis plaatsvindt. 11

User-Mode Linux 2.2 Guest-besturingssysteem Figuur 2.2: Screenshot van een menuconfig Om de UML-guest te kunnen starten heb je een image en een UML-kernel nodig. 2.2.1 Image Als eerste heb je een image met een bestandssysteem nodig waarvan je je UML's kan starten. Een kant en klare image kan je afhalen van http://uml.nagafix.co.uk/, maar je kan ook zelf een image aanmaken. Op dit laatste gaan we hier niet dieper in, aangezien er voldoende images beschikbaar zijn. In bijlage B vind je meer info over hoe je een eigen image met een bestandsysteem kan aanmaken. De images voor UML's zijn allemaal zo klein en compact mogelijk gehouden. Een Linuxdistributie die zich goed leent voor kleine images is Debian Linux. Een ander voordeel van Debian is dat de pakketmanager, apt-get, toegang heeft tot een zeer groot aanbod aan pakketten. Als je dus een pakket nodig hebt in je UML, is de kans groot dat je ze met de pakketmanager snel en makkelijk kan afhalen. Starten van een image heeft echter ook enkele nadelen. Een imagebestand is veel gevoeliger voor fouten dan een normale partitie op een harde schijf. Als bij het wegschrijven naar een imagebestand een fout optreedt is de kans groot dat het bestand beschadigd is. Voor dit geval bestaan er tools om een image te herstellen, maar dit neemt vaak veel tijd in beslag en ze garanderen niet altijd een volledig herstel. 12

User-Mode Linux Om deze reden kan User-Mode Linux ook met een COW-bestand (Copy On Write) werken. Dit is een bestand dat je samen met de image meegeeft aan het opstartcommando voor een UML. User-Mode Linux schrijft nu alle aanpassingen weg in dit COW-bestand, zodat de originele image behouden blijft. Als er nu een schrijffout optreedt, of je richt zelf onherstelbare schade aan in je UML, dan is het voldoende om het COW-bestand te wissen. Nu kan je de UML opnieuw starten met de originele image en een nieuw COW-bestand. Doordat User-Mode Linux in een COW-bestand enkel de aanpassingen van het imagebestand wegschrijft, blijven deze bestanden relatief klein. Je hebt dus niet veel extra schrijfruimte nodig. Als je meerdere UML's tegelijk wilt starten spaar je zelfs schijfruimte uit als je met COW-bestanden werkt. Daar waar je anders voor elke UML een apart imagebestand nodig hebt, heb je nu slechts één image nodig. Voor elke UML gebruik je dan een apart COW-bestand, zodat elke UML toch verschillend kan zijn. Als je een imagebestand gebruikt in combinatie met een COW-bestand moet je er wel rekening mee houden dat User-Mode Linux bij het opstarten altijd kijkt naar de bestandsnaam en de tijd waarop het imagebestand het laatst is aangepast. Dit heeft als gevolg dat je een imagebestand niet zomaar mag kopiëren, want dan verandert de aanpassingstijd naar de tijd van kopiëren. Als je dus een back-up wilt maken van je imagebestand moet je dit doen op een manier waarbij de originele tijd behouden blijft, anders zal je COW-bestand niet meer overeenkomen met je imagebestand. In Linux kan je dit doen met het commando cp -p. 2.2.2 Kernel compileren De UML-kernel moet je zelf compileren. Zonder kernel kan je niet booten van je image. Alvorens je de kernel kan compileren moeten je er zeker van zijn dat je de benodigde software geïnstalleerd hebt. sudo apt-get install build-essential \ libncurses5-dev Vervolgens download je een Linuxkernel van http://www.kernel.org en pak je deze uit in de home-map. tar -xvzf linux-2.6.20.1.tar.gz Voor een.tar.gz-archief geef je best -xvzf mee als argumenten bij het tar-commando. De x wil hier zeggen dat je bestanden van een archief uitpakt. De v zorgt ervoor dat je een output op het scherm ziet. Zo kan je zien wat tar allemaal uitpakt en waar. De z moet je meegeven omdat het om een.gz-archief gaat. En de f tenslotte, duidt aan dat de bestandsnaam van het archief dat je uitpakt nog volgt. Als je de kernel hebt uitgepakt kan je de voorbereidingen beginnen om de Linuxkernel te compileren. Omdat je gaat compileren voor de speciale architectuur van User-Mode Linux geef je bij de commando's telkens de optie ARCH=um mee. cd linux-2.6.20.1 make mrproper ARCH=um make defconfig ARCH=um make menuconfig ARCH=um Als eerste kuis je de kernelcode op. Het commando make mrproper wist de eventueel aanwezige configuratie of de objecten die zich in de map bevinden. Het kan nooit kwaad om dit commando uit te 13

User-Mode Linux voeren, ook niet als je nog nooit een kernel gecompileerd hebt. Met make defconfig vervolgens, laad je de standaardconfiguratie. Deze bevat de meest noodzakelijke opties die voor een kernel nodig zijn. Als je de optie ARCH=um meegeeft laad je automatisch de juiste standaardconfiguratie voor User-Mode Linux. Met een laatste commando voor je de kernel effectief kan gaan compileren open je het configuratiemenu. Er zijn enkele opties die je in het configuratiemenu zeker niet mag vergeten aan te passen. Ten eerste vink je Loadable module support best uit. Modules kunnen problemen veroorzaken in UML's. Alle andere opties die de kernel als module zou laden kan je dus ook best vast in de kernel compileren. Ten tweede moet je tunneling en 802.1d ethernet bridging aanvinken onder networking options. Als je dit niet doet zullen je UML's geen toegang hebben tot het internet. Tot slot kan je best alle opties die je niet nodig hebt, zoals bijvoorbeeld wireless LAN, uitvinken. Zo kan je de grootte van de kernel beperken, wat altijd een pluspunt is voor een UML-kernel [5]. Als de configuratie uiteindelijk voldoet aan alle eisen kan je overgaan tot de laatste stap, de kernel compileren. In het commando geef je een naam mee aan het bestand dat het commando gaat genereren, bijvoorbeeld linux. Met dit bestand kunnen we de image achteraf starten. make linux ARCH=um 2.2.3 UML's starten Nu je over zowel een image als een gecompileerde kernel beschikt, kan je een eerste UML opstarten../linux ubd0=mycow,debian-root_fs 1 \ mem=64m 2 root=/dev/ubda 3 1 Met de eerste parameter geef je mee welk COW-bestand je gebruikt en van welke image je moet starten. Als het COW-bestand dat je opgeeft nog niet bestaat maakt User-Mode Linux dit zelf aan. 2 Met deze parameter bepaal je hoeveel geheugen Linux moet reserveren voor deze UML. Meer geheugen resulteert in een snellere UML, maar je moet opletten dat je je UML's niet te veel geheugen geeft. Dat zou tot een instabiel systeem kunnen leiden. 3 Deze derde parameter bepaalt waar de virtuele root van de UML zich bevindt. Met dit commando kan je een eenvoudige UML opstarten, maar deze UML zal nog niet over netwerkmogelijkheden beschikken. Hoe je een netwerk van UML's kan maken legt hoofdstuk 3 in detail uit. Na hoofdstuk 3 kan je het commando om UML's te starten dan ook nog voor een stuk uitbreiden. De volledige commando's die we voor dit eindwerk gebruikt hebben om UML's te starten kan je terugvinden in hoofdstuk 6. 14

Hoofdstuk 3: Networking Voor User-Mode Linux zijn er verschillende manieren om de virtuele Linuxsystemen van een netwerkverbinding te voorzien. Deze netwerkverbinding kan dan dienen om een connectie te maken met de host-pc zelf, met andere systemen in het locale net of met het internet. Als we het netwerk aan de praat willen krijgen moet de guest-kernel dit wel ondersteunen. 3.1 Het OSI-model Het Open Systems Interconnection model is een abstracte beschrijving voor de communicatie binnen een netwerk en het ontwerp van protocollen in een computernetwerk. Het model bestaat uit zeven verschillende lagen die zich boven elkaar bevinden. Figuur 3.1: Schema van het OSI-model De onderste laag van figuur 3.1 is de fysische laag. Deze beschrijft alle elektrische en fysische specificaties van desbetreffende apparaten. Het bevat de layout van de pinnen, connectoren, voltageniveau's en kabelspecificaties. De belangrijkste functies van de fysische laag bestaan eruit om een fysische connectie tussen de hardware en een communicatiemedium tot stand te brengen, in stand houden en indien nodig ook weer te deactiveren. Dit is het niveau waarop hubs 1, repeaters 2 en netwerkadapters werken. De tweede laag is de datalink- of verbindingslaag. Deze voorziet de functionaliteiten en procedures om data betrouwbaar te transporteren over een verbinding. Een eerste functionaliteit betreft het detecteren en eventueel corrigeren van fouten die kunnen optreden in de fysische laag. Een tweede functionaliteit 1 Een hub is een apparaatje dat voorzien is van een paar ethernetpoorten waar de netwerkkabels van meerdere computers samenkomen. De signalen die van een computer komen worden versterkt en doorgezonden naar alle andere kabels. 2 Een repeater is een elektronisch apparaat dat een zwak signaal ontvangt en het dan versterkt verder stuurt zodat het signaal langere afstanden kan overbruggen. 15

Networking bestaat uit het vastleggen van de adressen en de berichtformaten. Dit gebeurt op basis van het unieke, door de fabrikant toegekende MAC-adres 3. Deze laag ordent de bits van de fysische laag tot stukken data, ook wel frames genoemd. Per frame bepaalt een aantal foutcontroles of het frame correct ontvangen is. Het meest bekende voorbeeld van deze laag is het ethernet. Laag drie vervolgens, staat ook wel bekend als de netwerklaag. Deze bevindt zich tussen de datalinklaag en de transportlaag. De netwerklaag is verantwoordelijk voor de overbrugging van de afstand tussen de omliggende lagen. Hij staat dus in voor het vertalen van een sessie in een verzameling pakketten die door de verschillende verbindingen in het netwerk geleid kunnen worden. Dit houdt in dat de laag een datastroom binnen een sessie in verschillende pakketten gaat opbreken. Hiernaast is deze laag ook verantwoordelijk voor de routing van de pakketten door het netwerk. Dit wil zeggen dat hij beslist hoe hij elk pakket over het netwerk zal versturen. De vierde laag uit figuur 3.1 is de laatste laag die instaat voor het datatransport. Deze laag, de transportlaag, zorgt voor een probleemloos transport van data voor de applicaties. De meest gebruikte protocollen uit deze laag zijn het Transmission Control Protocol (TCP) en het User Datagram Protocol (UDP). De eenheden van data uit deze laag worden meestal segmenten of datagrammen genoemd. De vijfde laag van het model wordt ook wel de sessielaag genoemd. Hij synchroniseert de dialoog die plaatsvindt op de presentatielaag tussen twee hosts en onderhoudt de uitwisseling van data. Problemen die zich voordoen binnen de toepassingslaag en de presentatielaag worden hier gemeld. De sessielaag biedt o.a. Class of Service (CoS). De voorlaatste laag is de presentatielaag. Deze bepaalt het uiteindelijk toegepaste formaat om data uit te wisselen. Bij de zendende computer vertaalt deze laag de data die door de toepassingslaag worden aangeboden in een gemeenschappelijk erkend tussenformaat. Bij de ontvangende computer vertaalt de presentatielaag het tussenformaat in een formaat dat de applicatielaag van die computer ondersteunt. De presentatielaag is ook verantwoordelijk voor protocolconversie. De protocolconversie vertaalt en codeert eventueel de data. Ook de tekenset wijzigen of converteren en grafische commando's uitbreiden zijn taken van de presentatielaag. Tevens houdt hij zich bezig met de compressie van data waardoor het aantal te verzenden bits vermindert. De bovenste van de drie lagen die in verbinding staan met de applicatie is de toepassingslaag. Deze communiceert direct met de betreffende applicatie en geeft opdrachten aan de presentatielaag. De laag staat ook het dichtst bij de gebruiker. E-mail, het HyperText Transfer Protocol (HTTP) en het File Transfer Protocol (FTP) communiceren op deze laag. De toepassingslaag onderscheidt zich van de andere lagen uit het OSI-model doordat het geen diensten aanbiedt aan de andere lagen, maar alleen naar de applicatie buiten het OSI-model. 3.2 Bridging Een eerste belangrijke techniek bij networking is bridging. Dit is een techniek om pakketten door te sturen van het ene naar het andere computernetwerk. Het maakt geen veronderstellingen over waar in een netwerk een bepaald adres aanwezig is. Deze techniek hangt af van broadcasting 4 om een onbekend apparaat op te sporen. Vanaf het moment dat een apparaat opgespoord is wordt z'n locatie opgeslagen in een routingtabel. Deze tabel houdt het MAC-adres en het overeenstemmende IP-adres bij, zodat in de toekomst voor dit apparaat geen broadcast meer nodig is. 3 Het MAC-adres is een uniek identificatienummer dat aan een apparaat is toegekend. MAC staat voor Media Access Control. Een MAC-adres bestaat uit zes hexadecimale getallen. vb: 00:0C:6E:D2:11:E6 4 Een broadcast is een pakket dat elk ander apparaat in het netwerk kan ontvangen. 16

Networking De afhankelijkheid van broadcasting beperkt het gebruik van bridging. Hierdoor wordt het alleen maar gebruikt in Local Area Networks (LAN). Bridging laat toe om twee verschillende netwerken te verbinden op niveau van de datalinklaag. Qua werking gelijken een bridge en een switch heel erg op elkaar op een enkele uitzondering na. Een bridge is een apparaat dat tussen netwerken staat en het broadcastverkeer tussen de netwerken van elkaar scheidt. Een switch laat broadcasts gewoon passeren. In ons project maken we gebruik van dit principe om internettoegang te voorzien aan de virtuele systemen. Dit gebeurt echter niet op het hardwareniveau zoals hierboven beschreven, maar op een softwarematig niveau. Linux voorziet hier meestal standaard ondersteuning voor. In Ubuntu moet je hiervoor nog enkele pakketten installeren. sudo apt-get install bridge-utils \ 1 uml-utilities 2 1 Dit pakket bevat de benodigdheden om de Linux ethernet bridge te configureren. 2 Dit pakket bevat extra benodigdheden in de gebruikersomgeving voor User-Mode Linux. Wij gebruiken een shellscript om deze software-bridge te starten. Omdat het nuttig is dit te starten bij het booten van de host hebben wij geopteerd deze te laten uitvoeren op het einde van het bootproces [6]. sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' 1 sudo ifconfig eth0 0.0.0.0 promisc up 2 sudo brctl addbr uml-bridge 3 sudo brctl setfd uml-bridge 0 4 sudo brctl sethello uml-bridge 0 5 sudo brctl stp uml-bridge off 6 sudo ifconfig uml-bridge 10.1.202.84 netmask 255.255.255.0 up 7 sudo ip route add default via 10.1.202.1 8 sudo brctl addif uml-bridge eth0 9 1 Dit commando activeert ip-forwarding dat de pakketten van de host verder kan sturen. 2 Dit commando reset de ethernetpoort van de host naar een tijdelijke IP-vrije status. Alle netwerkactiviteiten zullen tijdelijk stilliggen. 3 Dit commando voegt een nieuwe virtuele bridge toe met de naam uml-bridge. 4 Dit commando bepaalt de vertraging bij het doorsturen van pakketten. 5 Dit commando geeft op wat de hello-tijd is. Op het moment dat je een router opstart begint hij hello-pakketten te versturen in het netwerk om te melden dat hij nieuw is in het netwerk en om ervoor te zorgen dat andere routers hem leren kennen. 6 Dit commando zet Spanning Tree Protocol (STP) af. STP is een protocol van de tweede laag in het OSI-model dat ervoor zorgt dat er geen lussen voorkomen in het netwerk. 7 Dit commando geeft het IP-adres van de host aan de bridge. Het activeert tevens de bridge. 8 Een voorlaatste commando voegt een default gateway toe. 9 Dit laatste commando hangt de bridge aan de ethernetpoort. Zie hoofdstuk 6 voor meer uitleg over het script waarin deze commando's voorkomen. 3.3 Tunneling Een volgende belangrijke techniek is tunneling. Dit is een netwerkprotocol dat een ander protocol of een sessie inkapselt in een protocol van een hogere of dezelfde laag. Het zou gebruikt kunnen worden om datalinklaagprotocol te transporteren via een transportlaagprotocol. 17

Networking 3.4 IP-maskerade Een laatste belangrijke techniek is IP-maskerade. Dit is een voorziening in de Linuxkernel die toelaat om pakketten te manipuleren zodat het lijkt alsof ze van andere adressen afkomstig zijn dan van de originele bron. Deze maskerade van de pakketten gebeurt alleen tijdens het forwarden van pakketten. Maskerade van pakketten gebeurt in twee richtingen op een router. Een systeem dat zich in een privaat netwerk bevindt dat door een router gescheiden wordt van de buitenwereld kan communiceren met het internet via deze router. Als dit systeem een datapakket naar het internet wil versturen moet dit altijd door de router passeren. Als het pakketje aankomt in de router kijkt hij waar dit pakketje naartoe moet. Alleen als de bestemming buiten het private netwerk ligt stuurt hij het pakketje door naar de buitenwereld. Voordat de router het pakket daadwerkelijk verstuurt verandert hij het IP-adres van de zender in het IP-adres van de router zelf. Zo denkt de buitenwereld dat het pakketje van de router afkomstig is. Een antwoord zal nu ook terug aankomen op de router. Als dit pakketje terugkomt weet de router dat hij dat verstuurd heeft en met wie hij z'n IP-adres gewisseld heeft. De router herstelt het originele IP-adres en stuurt het pakketje het private netwerk in. Hierdoor zal het uiteindelijk aankomen op het systeem dat het daadwerkelijk verstuurd heeft. Maskerade is noodzakelijk naar de buitenwereld toe omdat de buitenwereld de IP-adressen van de systemen in het private netwerk niet kent. 3.5 Testopstelling Om een veel voorkomende situatie te simuleren hebben we geopteerd voor een netwerk met een router en een eenvoudig achterliggend privaat netwerk, zoals figuur 3.2 aantoont. Figuur 3.2: Schema van het virtuele netwerk Het is de bedoeling dat de router naast de host-pc aan de bridge hangt. Hiervoor maakt User-Mode Linux gebruik van het tunnelingsprincipe. De router heeft meerdere virtuele ethernetpoorten. De basispoort, eth0, is met de bridge verbonden via een tunnel. Het overige aantal poorten van de router zal 18

Networking dienen voor een overeenstemmend aantal private netwerken. In deze private netwerken zal User-Mode Linux een aantal andere systemen emuleren die met opzet zeer eenvoudig worden gehouden. Een switch 5 verbindt de UML's van een bepaald subnetwerk met de overeenstemmende poort van de router. Een script start deze switch samen met de router. De switch is gewoon een proces dat enkel virtueel bestaat, net als de rest van het netwerk. 5 Een switch is een onderdeel van een computernetwerk dat lijkt op een bridge. Het enige verschil is dat een switch de binnenkomende pakketten niet filtert, maar gewoon allemaal doorstuurt naar de rest van het netwerk. 19

Hoofdstuk 4: Visualisatie De vorige twee hoofdstukken maakten duidelijk hoe je met User-Mode Linux op één enkele pc een volledig computernetwerk kan emuleren. Nu het volledige netwerk klaar is kan je beginnen met het uittesten van verschillende protocols. Dit hoofdstuk legt uit hoe je gegevens over je netwerk kan opvragen, in een database opslaan en grafisch weergeven. De oplossing zal weer enkel uit open-sourcesoftware bestaan. Dit hoofdstuk gaat uit van een netwerk met een router waarop twee guest-uml's hangen. De router is via eth0 met het internet en via eth1 en eth2 met respectievelijk UML1-1 en UML2-1 verbonden. Een grafische weergave van het gebruikte netwerk kan je zien in figuur 4.1. 4.1 SNMP Figuur 4.1: Schematische voorstelling van het voorbeeldnetwerk Simple Network Management Protocol is een protocol dat over een TCP/IP-netwerk werkt om informatie van systemen die op het netwerk zijn aangesloten op te vragen. Het kan bijvoorbeeld op een eenvoudige manier de status van een harde schijf van een server opvragen of de hoeveelheid dataverkeer dat er over een netwerk gaat. Deze informatie kan dan door andere tools verder verwerkt worden. SNMP vereist nagenoeg geen bandbreedte en dat maakt het protocol erg geliefd om bepaalde toepassingen van op afstand aan te sturen. Grotere bedrijven gebruiken het protocol ook om een volledig netwerk te routeren langs de interne servers. Op deze manier kan het netwerk op de meest efficiënte wijze worden gebruikt [7]. 4.1.1 Management Information Base SNMP werkt met Management Information Bases of MIBs om al zijn informatie bij te houden. Een MIB is een verzameling informatie die hiërarchisch wordt opgeslagen. Door de hiërarchie is het makkelijk om een bepaalde waarde op te vragen. Hiervoor moet je wel de plaats van de informatie in de gehele structuur weten. Zie figuur 4.2 voor een voorbeeld van de structuur van een MIB zoals die van SNMP. Een element in een MIB wordt een MIB-object genoemd. Vaak zal echter ook gewoon met de term MIB naar een MIB-object worden verwezen. Dit kan voor enige verwarring zorgen. Een MIB-object kan op twee manieren worden weergegeven. Zowel een weergave met getallen als een weergave met woorden kunnen worden gebruikt. In figuur 4.2 kan je zien dat 1.3.6.1.2.1.2 20