TI Fase 1 (oud)
Hieronder vind je elk vak in Fase 1 van Toegepaste Informatica tot 2022
- Algoritmisch denken
- 2011 januari examen
- 2012 januari examen
- 2014 januari examen
- 2015 januari examen
- 2017 januari examen
- 2019 juni examen
- 2020 augustus examen
- 2020 januari examen
- Algoritmisch denken 2
- Beginselen van objectgericht programmeren
- 2008 januari examen
- 2012 januari examen
- 2014 januari examen
- 2015 januari examen
- 2016 januari examen
- 2017 januari examen
- 2019 januari examen
- 2020 januari examen
- Algemene tips
- Samenvatting Pieter Van der Elst
- Besturingssystemen 1
- 2008 samenvatting David Machiels
- 2010 herhalingsvragen boek Stallings
- 2010 juni examen
- 2010 samenvatting van Onbekend
- 2011 juni examen
- 2012 augustus examen
- 2012 juni examen
- 2013 augustus examen
- 2013 Juni examen
- 2014 juni examen
- 2015 Juni examen
- 2016 juni examen
- 2017 augustus examen
- 2019 FAT 16 oplossingen
- 2019 juni examen
- 2020 augustus examen
- 2020 handige scripts - ISW
- 2020 januari examen
- 2020 juni examen
- 2020 PE
- FAT 16 berekenen
- Bomen en grafen
- Business process management
- Computernetwerken 1
- 2009 juni examen
- 2010 juni examen
- 2011 augustus examen
- 2011 juni examen
- 2012 augustus examen
- 2012 juni examen
- 2013 juni examen
- 2014 juni examen
- 2015 juni examen
- 2017 januari examen
- 2019 DNS taak
- 2019 januari examen
- 2019 Packet Tracer VLSM info
- 2019 samenvatting - Axel Hamelryck
- 2020 augustus examen
- 2020 januari examen
- 2020 samenvatting - Lars Lemmens
- Computernetwerken 2
- 2009 januari examen
- 2010 augustus examen
- 2010 januari examen
- 2011 augustus examen
- 2011 januari examen
- 2012 augustus examen
- 2012 januari examen
- 2013 augustus examen
- 2013 januari examen
- 2013-2014 samenvatting - Filip Scheir
- 2014 augustus examen
- 2014 januari examen
- 2015 augustus examen
- 2016 januari examen
- 2017 juni examen
- 2018 juni examen
- 2019 extra oefeningen + oplossingen - Lars, Martijn, Jonas
- 2019 juni examen
- 2019 oplossingen labo 0 - Lars Lemmens
- 2019 oplossingen labo 1 - Lars Lemmens
- 2019 oplossingen labo 2 - Lars Lemmens
- 2019 oplossingen labo 3 - Lars Lemmens
- 2019 oplossingen labo 4 - Lars Lemmens
- 2019 oplossingen labo 5 - Lars Lemmens
- 2019 oplossingen labo 6 - Lars Lemmens
- 2019 oplossingen labo tussentest - Lars Lemmens
- 2019 oplossingen Testexamen - Lars Lemmens
- 2019 samenvatting - Lars Lemmens
- 2020 juni examen
- 2020 juni examen - versie 2
- 2021 juni examen
- Algemeen
- Computersystemen
- 2007 oktober examen
- 2009 januari examen
- 2010 januari examen
- 2010 samenvatting commando's - Mattias
- 2011 januari examen
- 2012 januari examen
- 2013 januari examen
- 2015 januari examen
- 2017 januari examen
- 2018 januari examen
- 2018 oefeningen hoofdstuk 3 rijen oplossingen
- 2018 oefeningen hoofdstuk 4 de stapel oplossingen
- 2019 oplossingen oefeningen
- 2019 samenvatting - Axel Hamelryck
- 2020 augustus examen
- 2020 januari examen
- 2021 januari examen
- Algemeen
- Assembly testomgeving
- Databanken - dataquerying
- OO programmeren
- 2010 juni examen
- 2011 augustus examen
- 2011 juni examen
- 2016 juni examen
- 2017 samenvatting
- 2019 oplossingen alle labo's - Martijn Meeldijk
- 2020 juni examen
- Algemeen
- Probleemoplossend denken
- 2009 januari examen
- 2010 januari examen
- 2011 januari examen
- 2011 juni examen
- 2012 januari examen
- 2013 januari examen
- 2014 januari examen
- 2017 januari examen
- 2020 augustus examen
- 2020 januari examen
- 2020 oefeningen - Sigfried Seldeslachts
- 2020 januari examen
- Scripttalen
- 2010 juni examen
- 2011 juni examen
- 2012 juni examen
- 2013 juni examen
- 2018 juni examen
- 2020 augustus examen
- 2020 juni examen
- 2021 januari examen
- Technieken van datamodellering
- 2017 januari examen
- 2019 januari examen
- 2020 januari examen
- Algemeen
- Bungalowpark voorbeeldoplossing
- Webontwikkeling 1
- Webontwikkeling 2
Algoritmisch denken
2011 januari examen
- Je kreeg een robotprog code en 3 verschillende plattegronden. Je moest de weg van het robotje + zijn eindplaats en richting aangeven. Ook werden er sommige vakjes "gemarkeerd".
- Van een code kunnen afleiden wat voor soort algoritme het is (Bubblesort, Quicksort,...). De code was dan nog niet 'optimaal' en er moesten nog kleine verbeteringen aan worden gebracht. Ook moest je hierbij de complexiteit uitleggen ervan.
- Zelf een programma schrijven (Je had 25 leerlingen, 6 vakken, elk vak onthoud het grootste cijfer en hoe vaak deze persoon al dit vak had gehad. De leerkracht moest simpel een punt kunnen ingeven voor een vak en jouw programma moest dit dan wegschrijven in een array. Het 2de programma moest uit de array's lezen en een output tonen.
Alternatieve versie:
- Vrij eenvoudige pseudocode om twee-dimensionaal array te bewerken. Lees de vraag goed na, er zaten addertjes in. - Rij van cijfers analyseren, kijken welk sorteeralgoritme het is, en dan het algoritme uitschrijven in pseudocode. - Robotprog: code volgen en voor drie plattegronden zeggen waar de robot staat, in welke richting, of hij crasht en op hoeveel een teller staat.
2012 januari examen
1ste vraag: je hebt een computerlokaal met maximaal 27 pcs, die hebben allemaal een nummer. Je moet 4 methoden schrijven: -voegPcToe -verwijderPc -isPcAanwezig -hoeveelPcsAanwezig
2de vraag: je krijgt een ongesorteerde rij van 5 elementen en je moet daar bubble sort op toepassen. Je krijgt daar een tabel bij waar je stap per stap moet tonen welke elementen je verwisselt. je moet dan op de gesorteerde rij binair zoeken toepassen
Andere mogelijkheid:
Je moet een briefje trekken met daar de naam van één sorteeralgoritme op. Die moet je dan mondeling uitleggen aan de hand van een aantal speelkaarten. Je moet ook de complexiteit van het sorteeralgoritme kunnen geven.
3de vraag: schrijf mbv het stappenplan dat als bijlage zit de volgende methode. Doe enkel de eerste 4 stappen van het stappenplan
4de vraag: test volgende methode: een methode die het gemiddelde berekent. Die klopt helemaal niet, er staat bijvoorbeeld "for(int i=0;i<=rij.length;i++){" en die <= is dus fout. Dan moet je die fouten ook nog verbeteren
Met mevrouw Lens
1ste vraag
Je krijgt de volgende opgave 'Je moet een programma maken voor een klant. De bedoeling is dat je een boodschappenlijstje maakt.' Leg uit hoe je dit maakt en maak de java functie om producten aan dit lijstje toe te voegen. Vervolgens krijg je een array van goederen met de winkel waar ze het goedkoopst zijn. Schrijf de java code van hoe je een boodschappenlijstje kan genereren per winkel. De functie moet als parameters de arraylist van opgave 1 en de naam van de winkel krijgen. De retourwaarde is de gemaakte arraylist.
2de vraag
Je krijgt een array. Leg uit wat bucket sort doet, stap voor stap en geef de verschillende stappen in de array. Vervolgens, leg uit: binair zoeken. In hoeveel stappen vind met het gevraagde getal en pas dit weer toe op de array.
3de vraag
Zelfde als hierboven.
4de vraag
Je krijgt een volledige functie, leg stap voor stap uit wat deze doet en geef per stap een paar testgetallen zodat de leerkracht kan zien dat je deze begrijpt.
2014 januari examen
Marina Lens
1. Mondeling
Een bepaald zoek/sort algorithme uitleggen:
- selection sort + lineair/binair zoeken
- insertion sort
- bubble sort + optimilisaties
- merge sort
- quick sort
--> Je krijgt een aantal speelkaarten, deze gebruik je om te tonen hoe het sortalgorithme werkt. Dan moet je vragen over de code beantwoorden (code wordt NIET gegeven), en uiteindelijk iets kort zeggen over de complexiteit van dit Algorithme (bvb. C van Bubble Sort = n^2, waarom? omdat je een for lus binnen een andere for lus hebt - dat is voldoende uitleg voor Mvr. Lens).
2. Schriftelijk
1. Datastructuren
Vraag: Je moet een foto album aanmaken. Een foto album bestaat uit max. 50 mappen, met in elke map max. 250 foto's. Je moet van iedere map de naam bijhouden, bvb. "Barcelona". Je kunt geen 2 of meer mappen hebben met dezelfde naam. Voor elke foto moet je de naam (bvb. "Barcelona Strand 1") bijhouden, en de grootte ervan in KB. Ook hierbij mogen er geen 2 foto's zijn met dezelfde naam.
--> Teken de datastructuren en declareer ze in Javascript.
Mogelijke Oplossing:
var namen = new Array(50);
var inhouden = new Array(50);
for (var i = 0; i < inhouden.length; i++){
......inhouden[i] = new Array(250);
......for(var j = 0; j < inhouden[i].length; j++){
............inhouden[i][j] = new Array(2);
......}
}
var mappen = [namen,inhouden]
2. Functies
A. Vraag: Schrijf de functie om, gegeven de naam (bvb. "strand") en grootte (bvb. "56" //kb) van een foto en de naam van een map, deze foto toe te voegen aan deze map. Indien deze map niet bestaat moet deze worden aangemaakt. Deze functie moet true of false returnen (true = gelukt, false = niet gelukt). Schrijf alle functionaliteiten hiervoor op.
Mogelijke Strategie?
function vindMapIndex(mapNaam){
// gegeven de naam van een map, return index; als deze map niet bestaat, return index -1}
function vindLegeFotoIndex(mapIndex){
// gegeven het index van een map, return de eerste index in de map waar nog geen foto staat; indien de map vol is (= geen lege indexen), return -1}
function voegMapToe(mapNaam){
//gegeven mapNaam en indien vindMapIndex(mapNaam)==-1 (dus map bestaat nog niet), maak nieuwe map op eerst volgende lege plaats (gemakkelijkst is om deze lege plaats te vinden door in de rij van namen te kijken waar eerste "undefined" staat)
//returned index van deze nieuwe map}
function voegFotoToe(mapNaam,fotoNaam,aantalKB){ //hoofdfunctie voor deze vraag
...var toegevoegd = false;
...var mapIndex = vindMapIndex(mapNaam);
...if (mapIndex==-1 /*map bestaat niet*/) mapIndex=voegMapToe(mapNaam); //maakt nieuwe map en bewaar index
...if(mapIndex!=-1){
......var fotoIndex = vindLegeFotoIndex(mapIndex);
......if(fotoIndex!=-1){
.........inhouden[mapIndex][fotoIndex][0] = fotoNaam;
.........inhouden[mapIndex][fotoIndex][1] = aantalKB;}
.........toegevoegd = true; //foto is toegevoegd
......}
...}
...return toegevoegd;
}
B. Vraag: Maak een functie die een rij terug geeft met daarin de naam van iedere map en de totale grootte van ieder van deze mappen. Simpel? Neen, want er is een "catch": De rij moet gesorteerd zijn op grootte van map, van kleinste naar grootste. Dus eerste map in deze rij moet de kleinste zijn, 2de de 2de kleinste, etc.. Maak alle functionaliteiten die hierbij nodig zijn.
Mogelijke strategie?
1. Een functie maken die een nieuwe rij returned met daarin de grootte van map 1, map 2, map 3, ... map 50.
De indexen hiervan moeten hetzelfde zijn als de indexen van de namen van de mappen.
Vb. nieuweRij = [505,550,612,65]
Als je namen rij ["Barcelona","Madrid","Spanje","Strand"] is, dan komt 505 overeen met de map "Barcelona", 550 met "Madrid" etc..
2. Maak een aangepaste sort functie (bvb. bubbleSort) die twee rijen als parameters mee neemt. Dit is eenvoudiger dan het klint. De sort vergelijkt alleen de groottes enz. van de grootte rij, het enig dat je moet bijvoegen is dat wanneer dit algorithme een rij hersorteerd (dus rij1[i] naar rij1[j] beweegt bvb.), dat hij ook de namen rij hersorteerd. Uiteindelijk krijg je de namen hersorteerd volgens de grootte van iedere map (deze grootte rij is dan natuurlijk ook gesorted).
3. Maak de hoofdfunctie voor deze vraag die een 2D rij maakt. Eerste D is de namenrij (die gesorteerd wordt met ons aangepaste sort algorithme) en de tweede D is de rij met groottes van deze mappen (die ook gesorteerd is door ons sort algorithme). LET OP: Deze nieuwe rij moet maar evenlang zijn als het aantal mappen die in gebruik zijn, dus niet alle 50 max. aantal mappen (var aantalMappen = vindLegeMapIndex() //aparte functie die gewoon in namen rij kijkt en de eerste lege index ('undefined') teruggeeft).
C. Vraag: Maak een functie die, gegeven n en m, een rij terug geeft met daarin een collage van n*m foto's. Deze collage bestaat uit willekeurige foto's uit willekeurige mappen. Wel bevat het geen 2 dezelfde foto's. Deze collage is een rij die bestaat uit strings. Een string moet er bvb. als volgt uitzien, "Barcelona\Beach1.jpg". Maak alle functionaliteiten die hiervoor nodig zijn.
Mogelijke strategie?
Deze vraag valt goed mee:
function checkString(string,array){
...var stringFound = false;
...for (var i = 0; i < array.length && stringFound == false; i++){
......if(array[i]==string) stringFound = true;
...}
...return stringFound;
}
function collage(n,m){
...var uitArray = new Array(n*m);
...for (var i = 0; i < uitArray.length; i++){
......var aantalMappen = (vindLegeMapIndex());
......var mapIndex = parseInt(Math.random()*aantalMappen);
......var mapString = namen[mapIndex];
......var aantalFotos = (vindLegeFotoIndex(mapIndex));
......var fotoIndex = parseInt(Math.random()*aantalFotos));
......var fotoString = inhouden[mapIndex][fotoIndex][0]; //0 is waar naam zich bevindt
......var finalString = mapString + "\" + fotoString + ".jpg"; //"\\" ipv "\"?
......if(checkString(finalString,uitArray)==false){ //zorg dat deze foto niet al in collage staat
.........uitArray[i] = finalString;
......}
......else{ i--; }
...}
...return uitArray;
}
Greetje Jongen
Vraag 1a:
Schrijf een functie die een markt genereert, deze markt heeft rijen en in elke rij een identiek aantal kraampjes.
Elk kraampje heeft een categorie, kunst, brol, food. Niet alle plaatsen zijn bezet.
Vraag 1b:
Schrijf een functie die in een string de totale aantallen van alle categorieen teruggeeft,
dus bv: “Aantal kraampjes met brol: 22, aantal kraampjes met food: 33, aantal kraampjes met kunst: 25, aantal onbezette kraampjes: 21”.
Vraag 2:
De organisator wil dingen fair houden en dus geen kraampjes van dezelfde categorie op de plaatsen N – Z – O – W van een gegeven kraampje,
schrijf een functie die dit controlleerd voor een gegeven categorie en true teruggeeft indien de plaatsing correct is.
Vraag 3:
De koning komt langs op de markt, deze wandeld niet graag en stapt dus van de linkerbovenhoek naar rechts,
dan van rechts naar links op de volgende rij, de volgende links naar rechts en zo verder. Hij wil geen lege/onbezette kraampjes tegenkomen.
Schrijf een functie die een voorgestelde markt (als 2D array) meekrijgt en deze herorganiseert zodat alle lege kraampjes in de laatste rijen staan.
(Wat niet gezegd werd op het examen was dat er dan geen rekening moest gehouden worden met de “Faire” positionering van de kraampjes,
dus mochten kraampjes van dezelfde categorie WEL naast elkaar staan)
2015 januari examen
(Lector: F. Vogels)
Er waren 5 vragen (op de PC):
- Maak een grid aan
- function createGrid(width, height, value){
- var grid = new Array(width);
- for(var i = 0; i < grid.length; i++){
- grid[i] = new Array(height);
- for(var j = 0; j < grid[i].length; j++){
- grid[i][j] = init;
- }
- }
- return grid;
- }
- Pas de kleurencombinatie aan van het grid
- roteer het grid 180°
- /
- Recursievraag
- Je kreeg een getal als parameter en elk cijfer van dat getal moest je -1 doen
- Vb: 459 => 348
- Indien je cijfer 0 was dan werd dat cijfer een 9
- Je kreeg een getal als parameter en elk cijfer van dat getal moest je -1 doen
2017 januari examen
De eerste oefeningen waren allemaal gebaseerd op een spel 4-op-een-rij. 'V' stelt een leeg veld voor, 'G' een gele schijf en 'R' een rode schijf. Deze werden in een 2-dimensionale array geplaatst.
1. Maak een rooster. Maak een rooster waarvan de afmetingen (rijen en kolommen) worden meegegeven. Het rooster is volledig leeg.
Voorbeeld:
aantalRijen: 3, aantalKolommen: 5
Verwacht resultaat:
V V V V V
V V V V V
V V V V V
2. Controleer op zwevende schijven.
Controleert of er ergens rode of gele schijven staan waar nog een lege plaats onder is. De functie geeft true terug als er geen zwevende schijven zijn.
Voorbeeld:
V V V V V
V G V G R
G R V V R
Hier is een zwevende schijf, namelijk die op kolom 4, waar de 'G' boven een leeg vak 'V' hangt.
3. Zoeken naar leeg veld.
Zoekt naar het eerste lege veld in een bepaalde kolom, van onder naar boven te zoeken.
Voorbeeld:
V V V V R
G V V G R
R V G R G
Het eerste lege element op kolom 2 is 3 (cel op de onderste rij). Het eerste lege element op kolom 4 is 1.
4. Roteren.
Schrijf een functie om het raster 90° met de klok mee te draaien.
Voorbeeld:
V V R V R R G V
G G R V G wordt R G V
R R G G G G R R
G V V
G G R
5. Recursieve vraag
Een visboer heeft een aquarium met een bepaalde capaciteit. Op week 0 is dit volledig vol. Iedere week verkoopt hij 60 vissen, en komen er 5% bij. Schrijf een recursieve functie om voor een bepaalde week het aantal vissen te berekenen.
2019 juni examen
Examen door Van Hee:
Dit examen was met P5.js en bestond uit 3 opdrachten.
1. Fotobewerking
Je krijgt een foto en moet het eerste deel ervan rood kleuren, het tweede deel groen en het derde deel blauw.
2. Zwevende letters
Laat het programma in het begin 100 random letters aanmaken, deze zweven constant rond met een bepaalde snelheid als ze de rand raken veranderen ze van richting. Als de letters 10px van elkaar zijn dan moeten ze samen gevoerd worden tot 1 woord en zweven ze verder. Laat telkens ook nieuwe letters bijmaken als er een letter samengevoegd wordt of weg gaat.
3. ????
2020 augustus examen
Het examen van Augustus 2020 met dank aan ISW: Examen Algo augustus 2020.zip
P5 met Van Hee (Niet meer van toepassing) met dank aan ISW en Beddegenoodts Elias:
2020 januari examen
Het examen van Januari 2020 met dank aan ISW: Examen Algo Januari 2020.zip
P5 met Van Hee (Niet meer van toepassing) met dank aan ISW:
Algoritmisch denken 2
Dit vak wordt momenteel niet meer gegeven
2011 juni examen
Frans Sanen
Mondeling
Maak een programma dat auto's bijhoudt. Elke auto heeft één of meer eigenaars. Maak methodes om auto's toe te voegen, een eigenaar op te vragen aan de hand van een nummerplaat, en een methode om alle auto's af te printen.
Vraag a: Welk Collection heb je gekozen en teken het klassediagram. Vraag b: Werk de klasses uit en schrijf ook een main methode om aan te tonen dat je alles kan uitvoeren.
Schriftelijk
Testing: Gegeven een methode berekenBMI(lengte, gewicht). Schrijf alle test cases.
Geheugen tekenen: Gegeven een stuk code en teken per stap het geheugen.
Elke Steegmans
Mondeling
Ze willen een puntenlijst bijhouden met studenten. Een student heeft een naam, punten, studentennummer en reeksnummer. Er moet gesorteerd kunnen worden op naam en punten. Ook moeten gegevens makkelijk kunnen worden toegevoegd. Zorg ook dat de puntenlijst kan weg worden geschreven naar een "puntenlijs.txt".
Vraag a: Welk Collection heb je gekozen en waarom? Arraylist. Je kan dan op meer dan 1 ding sorteren. vraag b: Werk de klasses uit en schrijf ook een main methode om aan te tonen dat je alles kan uitvoeren.
Schriftelijk
Testing: Gegeven een methode divideBreuk(teller,noemer). Schrijf alle test cases.
Geheugen tekenen: Gegeven een stuk code en teken per stap het geheugen.
Marina Lens
Mondeling
Vraag 1 (6/10): Er wordt gevraagd om een kaartspel te programmeren. Een kaartspel bestaat uit 52 kaarten en een kaart bezit een nummer (1-13), type (Klaveren, Ruiten, Schoppen, Harten) en kleur (Zwart, Rood). Het moet mogelijk zijn om het kaartspel op te slaan in een database.
Vraag A: Welke Collections gebruik je voor deze datastructuur? Hierbij worden er API's voorzien van List, Map en Set (enkel van de superklasses). Hashset, elk kaart komt maar 1 keer voor.
Vraag B: Stel het klassendiagram op en werk elke klasse uit op papier. Ontwerp ook een main methode die al de functionaliteiten van je andere klasses gebruikt.
Schriftelijk
Vraag 2 (2/10): Stel de klasse Euro (zonder de java-implementatie te zien) waarin we kunnen rekenen met Euro's. In deze klasse bevindt er zich een methode subtract(double bedrag). Werk nu voor deze methode alle testcases uit.
Vraag 3 (2/10): Schrijf een recursief programma dat tussen alle letters van een woord een * plaatst. Zo wordt 'hallo' dus 'h*a*l*l*o'. Achter de laatste letter van het woord mag dus geen * komen.
Oplossing van Tom Stroobants:
public static void main(String[] args) {
test n = new test();
String hello = "hello";
System.out.println("Resultaat: " + n.recursie(hello,hello.length()));
}
public String recursie(String woord,int l)
{
System.out.println(woord + " " + l);
if(l > 1)
{
woord = recursie(woord.substring(0,l-1) + "*" + woord.substring(l-1),l-1);
}
return woord;
}
/*
hell*o 4
hel*l*o 3
he*l*l*o 2
h*e*l*l*o 1
Resultaat: h*e*l*l*o
*/
2012 juni examen
Elke Steegmans
Mondeling
Een oefening dat ze een verzameling wil bijhouden van javaboeken en je moet makkelijk kunnen tussenvoegen en elk boek mag maar 1 exemplaar bevatten - Welke collectie - Declareer de nodige rijen - implementeer de methode om te kunnen tussenvoegen - Leg uit hashcode, linkedHashset, rehashing, hashSet
Welke orde(O) heb je bij het toevoegen bij een Hashset
Schriftelijk
- Geheugen tekenen - sorted een code, en je moest zeggen wat er uitgevoerd werd na een bepaalde lijn
Jan Pellegrims
Mondeling
Theorie (3pt)
Geef een gedetailleerde beschrijving van de volgende begrippen (uitleg + tekening/code) a. Indirecte recursie b. Rehashing
Praktijk (3pt)
Een vraag over een koeienschoonheidswedstrijd a. Welke collectie b. Waarom? c. Wat kan deze collectie? (kenmerken van de collectie) d. Implementeer met belangrijkste methoden
Schriftelijk
Theorie (3pt)
Geef de kenmerken van Set, Map en List.
Praktijk (3pt)
Implementeer een klasse voor een oefening over een wachtrij met klanten. Sommige klanten zijn 'goede klanten' en mogen voorsteken. Klasse klant is gemaakt, implementeer klasse Aanschuifsysteem met methoden nieuweKlant(Klant klant) en bedien(). Bij het bedienen moet de naam op een scherm weergeven worden (System.out.println) en de klant moet uit de wachtrij verwijderd worden.
2013 juni examen
Pieter Hens
Mondeling
(2 vragen, 3 punten elk) -Wat is Rehashing (leg uit en maak er een schets bij van hoe het werkt en waarom het gebeurt) -Wat is een goede Hashcode? + een hashcode schrijven voor een klasse Persoon (int leeftijd, String voornaam, String naam). (Goede hashcode zou bv kunnen zijn: leeftijd*5+voornaam.hashcode()+achternaam.hashcode())
Schriftelijk
(2 vragen, 1ste op 2 punten, 2de op 4 punten) - een Klasse die overerft van de klasse List en je moet de add methode override en zorgen dat er op de juiste plaats wordt toegevoegd(volgorde op basis van een comparator) - Verder gaand op de vorige vraag moet je een controller klasse maken die dan de lijst gebruikt die je had gemaakt om dan toe te voegen op de juiste plaats waarbij je eerst kijkt naar leeftijd en anders op natuurlijke sortering van String.
2014 juni examen
Marina Lens
Mondeling
(3 Vragen, samen op 6 punten)
A. Wat is het verschil tussen een TreeSet en een HashSet.
B. Een klasse T implementeert de Comparable interface door een compareTo method die objecten vergelijkt op instantie-variabele1. Hoe kan men een List<T> sorteren op basis van een andere instantie variabele (instantie-variabele2)
C. Leg uit hoe de TreeSet geïmplementeerd is. Toon aan hoe het toevoegen van een object gebeurt a.d.h. van een voorbeeld
Schriftelijk
(6 punten) ...
2015 juni examen
Marina Lens
Mondeling
(3 Vragen, samen op 6 punten)
A. Wat is het verschil tussen een TreeMap en een HashMap.
B. Stuk code met een TreeMap en een HashMap - Teken de geheugenstructuur
C. Stuk code waarbij de print methode moet geimplementeerd worden (keys van HashMap tonen met de values)
D. Output van print methode geven (opletten hoe het gesorteerd is)
Schriftelijk
(6 punten) ...
Klasse waarbij je de resultaten van een aantal studenten moet uitlezen uit een file en een output moet geven in de vorm van:
Aantal niet deelgenomen: ...
categorie 1 (bv 0-4): aantal
categorie 2 (bv 4-8): aantal
categorie 3 (bv 8-12): aantal
categorie 4 (bv 12-16): aantal
categorie 5 (bv 16-20): aantal
Totaal aantal deelnames: ...
In de methode om deze output te genereren krijg je als variabele (int interval) mee waarmee je dan de verschillende categorieën moet maken. Als 2e vraag hierbij moet je dezelfde methode bijna vlekkeloos overnemen, maar nu moeten er in plaats van de aantallen, de namen van de studenten getoond worden.
Duid aan wat correct is:
* Een LinkedList kan met Random Access
* Een stack kan geimplementeerd worden met LinkedList
* ...
* ...
Beginselen van objectgericht programmeren
2008 januari examen
- Maak voor de examenopdracht een UML klassendiagramma. Werk elke klasse uit en maak voor elke klasse een Testklasse (zonder gebruik te maken van JUnit)
Omschrijving examenopdracht G&T ziet een gedroomde kans om mee in de GSM wereld te stappen en ‘low–cost’ operator te worden in België. Zo een beetje als Aldi-talk maar dan enkel voor SMS berichten. Als goede bedrijfsleiders willen we onze klanten serieus opvolgen en het project bijsturen indien nodig. Aan jullie de eer om het geheel te informatiseren. De uit te werken klassen: De klasse Operator bevat:
- een naam (bv. “G&T communication”)
- een ArrayList <Abonnee> : een lijst met al de Abonnee-objecten in onze firma.
De klasse Abonnee bevat:
- een gsm-nummer (String)
- een naam (String)
- een tarief (Tarief)
- een tabel favorieten van 3 favoriete gsm-nummers. (In de toekomst kan het aantal favoriete GSM nrs wijzigen)
- een lijst SMS_en, d.i. een ArrayList <SMS> of tabel van SMS objecten.
- 2 constructoren: eentje met en één zonder Tarief object.
Als er geen tarief wordt meegegeven dan wordt er default een Tarief object geïnitialiseerd met prijs 5 (cent) en geen gratis sms’en.
- setTarief (tarief:Tarief)
- isFavoriet (gsmNr:String) : boolean. Deze methode controleert of een bep. Gsm-nummer is ingesteld als favoriet van dit Abonnee object. Je geeft een boolean terug.
- addSMS (sms:SMS): boolean. Deze methode voegt een SMS object toe, na eerst een check of dit nummer niet reeds in de lijst SMS-en staat. Geeft een boolean terug of dit al dan niet gelukt is.
- voegFavorietToe (i:int,nr:String) Deze methode voegt een gsm nr. (String) toe aan je tabel OP DE PLAATS die je meegeeft met de integer parameter.
Let op: i moet >= 1 en <= 3 en enkel als de plaats vrij is kan je toevoegen!!!
• veranderFavoriet(i:int, nr:String): boolean Deze methode verandert een favoriet op plaats i (i>=1 en i<=3). Enkel als er al een GSM nr. staat kan je veranderen!!! Deze methode geeft een boolean terug.
- berekenSMSFact(maand:int, jaar:int):double Deze methode geeft je de prijs (double) terug van de opgegeven maand en opgegeven jaar. Bv. 12.56 je moet je eurocenten dus herleiden naar euro’s.
- toString():String Deze methode geeft je een String notatie van de Abonnee klasse. Je dient mee te geven: je instantievariabelen en een overzicht van de favoriten. Je gebruikt hiervoor de toString() van de desbetreffende klasses.
Return voorbeeld: Abonnee : 0477/406003
Bob Base
4 cent/SMS aantal gratis: 50
Favorieten : 0477/123456 0476/456789 0474/345678
Opmerking. Werk in de klasse Abonnee een methode uit die een aantal SMS berichten random genereert: public void randomSMS (int aantal, int jaar, int vanMaand, int totMaand). Deze methode genereert zowel SMS berichten naar favorieten als naar een dummy Gsm nr (0499/999999)
De klasse SMS bevat:
- naarGSMNr: String
- datum: Datum
- uur: Tijd
- equals (sms:SMS): boolean Deze methode controleert wanneer 2 SMS objecten gelijk zijn. SMS objecten zijn gelijk als de datum en het uur gelijk zijn. De methode geeft een boolean terug.
- toString():String Deze methode geeft een String notatie van je klasse SMS.
Return voorbeeld: 0477/123045 02-10-2008 12:03
De klasse Tarief bevat:
- prijs:int
- aantalGratis.:int
- constructor Tarief (prijs:int, aantalGratis:int)
- de nodige getters en setters
• equals (tarief:Tarief): boolean. Deze methode gaat na wanneer 2 Tarief objecten gelijk zijn. Tarief objecten zijn gelijk als prijs en aantal gratis gelijk is. De methode geeft een boolean terug. - toString():String: String notatie van de Tarief klasse.
Return voorbeeld 4 cent/SMS aantal gratis: 50
Nog even wat achtergrond info over tarief:
- per maand zijn de eerste aantalGratis SMS’en gratis.
- De prijs voor 1 bijkomend sms is prijs eurocent.
- De prijs voor 1 SMS naar één van je favorieten is 50% van de gewone prijs afgekapt naar onder dus 5 eurocent wordt 2 eurocent of 7 eurocent wordt 3 eurocent.
2012 januari examen
GEGEVEN
Maak een Stageinformatiesysteem waarin wordt opgeslagen welke stages er vrij zijn en waar studenten kunnen toegewezen worden aan een stageplaats. (Evenals verwijderd worden...) Je krijgt een blad waarop de verschillende klassen staan die je moet maken/vervolledigen(Klassendiagram).Dit zijn:
- Klasse Student
- Klasse Datum
- Klasse Stage
- Klasse Stageinformatiesysteem
Een student heeft naam en nummer. Beiden moeten steeds ingegeven worden.(Constructor met String naam en int nummer). Een student kan voor enkele maanden stage doen in een bedrijf. In de klasse Stage is dan ook een begindatum gegeven.
GEVRAAGD
1) Klassediagram met correcte pijlen aanvullen
2) Schrijf de klasse Student volledig met getters, setters, toString en equals
3) Schrijf voor de andere klassen enkel de methodes die vetgedrukt zijn in het klassediagramma. Van de andere methoden mag je aannemen dat ze feilloos werken en zijn geschreven volgens de regels van de kunst. Zie de testklassen (in bijlage) om te weten wat er juist verwacht wordt.
Klasse Datum is gegeven op 1 methode na: Toevoegen van aantal maanden aan een datum.
!OPGELET: Hierbij moet rekening gehouden worden met: Als datum = 31 januari+1 maand --> wordt 28 OF 29 februari.
4) Schrijf de UI klasse en maak volgende objecten aan:
- 2 studenten
- 2 stages
- 1 StageInformatieSysteem
- Elke student krijgt stage
- 2 stages worden toegevoegd aan het Stageinformatiesysteem.
2014 januari examen
Situatie: Professor Weetal heeft een programma nodig voor zijn examens te maken. Elke vraag is een meerkeuzevraag en heeft een vraagstelling (String), een lijst van mogelijke antwoorden (String[]) en het juiste antwoord (int indexnummer). Een lijst van deze vragen wordt een examen. Voor elke vraag die gesteld wordt verandert de volgorde van vragen willekeurig maar moet het juiste antwoord wel nog steeds overeenkomen met de verwisselde mogelijke antwoorden. Elke vraag in de examenreeks moet ook in een willekeurige volgorde overeenkomen. Voor elk juist antwoord krijgt de leerling +1. Voor elk fout antwoord -0.75. Beide scores moeten weergegeven worden. Bv: Je score was 3.0/5 met giscorretie is dit 1.25/5
Vraag: Schrijf beide klassen (Vraag & Vragenreeks/Examen) uit, schrijf de main methode en maak de klassendiagrammen.
2015 januari examen
8 Januari (Lector: F.Vogels)
Het examen ging door op de PC.
Je moest 3 klassen maken:
- e-mailAccount
- e-mailAdress
Er werden 2 klassen gegeven:
- spamFilter
- time
Je moest zorgen dat de testklasses volledig klopte.
2016 januari examen
14 Januari (Lector: E. Steegmans)
Klasse diagram maken op papier aan de hand van een tekstje.
Fout vinden in de code van 2 kleine programma's + uitleggen waarom het fout is.
Reisprogramma maken aan de hand van UML en javadocs.
3 klasses:
- Land
- Etappe
- Reisweg
(zorgen dat de testklasses klopen)
Dan nog 1 programma waarin je de vorige 3 klasses implementeerd:
- ReisAPP
(ook aan de hand van een tekstje, dus niet UML of javadocs)
2017 januari examen
9 Januari (Lector: M. Lens)
Het examen bestond uit 3 vragen:
1. Maak aan de hand van volgende informatie 4 klassen:
Het is de bedoeling om kooklogboeken bij te houden. Elk kooklogboek heeft een naam die moet beginnen met "Kooklogboek van " met daarna de naam van de eigenaar. Een kooklogboek bevat ook etentjes. Je moet ook het totaal aantal nagerechten in een kooklogboek kunnen krijgen en de totale gemiddelde score.
Een etentje bevat een gastlijst (= een lijst bestaande uit gasten), gerechten en een score. Gasten mogen niet toegevoegd worden als er al gerechten zijn toegevoegd aan het etentje. Wanneer er min. 1 vegetarische gast op de gastlijst staat en er een niet-vegetarisch gerecht wordt toegevoegd, dat mag niet. Gasten en gerechten worden pas na de aanmaak van een etentje toegevoegd, wordt dus niet meegegeven met de constructor. Je moet ook alle gerechten van een etentje kunnen krijgen en de gastlijst. Ook moet je gerechten, gasten en scores toevoegen. (score is de som van alle scores die gegeven zijn aan het etentje, dus bij addScore(4) en daarna addScore(5) wordt score 9. Score mag ook negatief zijn/worden.)
Een gerecht heeft een naam (mag niet leeg zijn) en is vegetarisch of niet. Het heeft ook een soort die hoofdgerecht, voorgerecht of nagerecht is. Het mag ingegeven worden als " HooFdGerEcht", maar moet worden opgeslagen met kleine letters. De naam van een gerecht mag later aangepast kunnen worden, ofdat het vegetarisch is mag niet kunnen aangepast worden. Naam en ofdat het vegetarisch is moet ook opgevraagd kunnen worden.
Een gast heeft een naam (geen checks voor nodig) en is vegetarisch of niet. De naam mag niet kunnen veranderd worden, ofdat de gast vegetarisch is wel. De naam en ofdat de gast vegetarisch is moet opgevraagd kunnen worden.
2. Maak aan de hand van deze klassen een KookLogboekApp:
Maak 2 etentjes met gasten en gerechten en voeg deze toe aan een kooklogboek. Laat daarna het kooklogboek zien in de console. Maak daarna een derde etentje aan met een fout erin. Laat de foutmelding zien in een dialoogbox (= JOption Messagebox).
Het aangemaakte kooklogboek is van Elke met volgende etentjes:
Etentje1:
Gast Stijn en Elke (beide vegetarisch). Eten vegetarische lasagne (hoofdgerecht) en chocomousse (nagerecht). Scores worden gegeven van 8 en 10.
Etentje2:
Gast Jan en Mieke (beide niet-vegetarisch). Eten tomatensoep (voorgerecht) en pasta (hoofdgerecht) en pudding (nagerecht). Scores worden gegeven van 8 en -1.
Etentje3:
Gast Elke en Mieke (veg. en niet-veg.). Eten biefstuk (hoofdgerecht).
In de console:
Kooklogboek van Elke
Etentje 1
Gerechten:
hoofdgerecht: Vegetarische Lasagne - V
nagerecht: Chocomousse - V
Gasten:
Stijn - vegetarisch
Elke - vegetarisch
Etentje 2
Gerechten:
voorgerecht: tomatensoep - V
hoofdgerecht: pasta
nagerecht: pudding - V
Gasten:
Jan
Mieke
Het aantal nagerechten is: 2
De gemiddelde score is: 6,25
3. Teken het geheugen (Stack & Heap) van de KookLogboekApp na het uitvoeren van de laatste lijn code op papier.
2019 januari examen
Het examen bestond uit 2 delen:
Deel 1:
Vraag1) Geef het verschil tussen het gebruiken van == en .equals. (best met voorbeeld met stack en heap).
Vraag2) Waarvoor wordt get methode gebruikt?
Vraag3) Schrijf 2 constructoren voor een gegeven klasse één met 3 parameters en één met 2 parameters. Hoe noemt het als er 2 constructoren zijn?
Vraag4) Je krijgt de uitleg van 3 klassen Rit, Chauffeur en Bedrijf en moet aan de hand hiervan een UML schema opstellen.
(Voor dit deel heb je ongeveer 45 minuten van de 3 uur)
Deeel 2:
Je krijgt bij het afgeven van deel 1 het juiste UML-schema en mag nu op de pc de klasse gaan implementeren aan de hand van de teksten en dit schema.
2020 januari examen
Het examen bestond uit 2 delen:
Deel 1:
Je krijgt de uitleg van 3 klassen (iets meer dan één pagina) Tocht, Deelnemer en Controlepunt en moet aan de hand hiervan een UML-schema opstellen.
(Voor dit deel heb je ongeveer 45 minuten van de 3 uur)
Deel 2:
Je krijgt bij het afgeven van deel 1 het juiste UML-schema en mag nu op de pc de klassen gaan implementeren aan de hand van de teksten en dit schema.
De uitvoer zag er als volgt uit:
Dodentocht 2020: 2020-08-20
Wandelroute:
1. Grote Markt, (50.84511, 4.45197), EHBO POST
2. Campus Proximus, (53.429712, 4.75126)
(Zo waren er 5 controlepunten)
3 deelnemers hebben zich ingeschreven, namelijk:
1. Jan Janssen heeft de tocht beëindigd in 15 uur en 30 minuten.
2. Klaas Claes heeft de tocht nog niet beëindigd, laatste controlepunt: 2
3. ...
Daarnaast waren er nog verschillende methodes die je moest voorzien zoals geef het laatste controlepunt voor een bepaalde deelnemer, kunnen controleren of een deelnemer is gestopt, deelnemer toevoegen, controlepunt toevoegen, totale tijd van een deelnemer berekenen, tussen twee controlepunten zonder EHBO-post moet er zeker een controlepunt met EHBO-post zijn, ... Tot slot moest je bij de klasse Tocht ook gebruik kunnen maken van constructor overloading (1: datum + aantal controlepunten, 2: enkel datum (controlepunten is dan automatisch 15)).
De examen opgaves met dank aan ISW en Avermate Ben: Januari (1).zip
Algemene tips
Ga zo vaak mogelijk naar de les, maak de opdrachten en vraag hulp indien nodig, scoor goed op testen en haal de simpele punten door je opdrachten af te maken. Het examen wordt op papier gemaakt, vergeet zeker en vast niet je getters en setters correct te schrijven.
VANAF 2015 wordt dit examen op de PC gemaakt, moet je methodes maken aan de hand van een UML en javadocs.
Samenvatting Pieter Van der Elst
datum van upload: onbekend
Samenvatting_BOP_Pieter_Van_der_Elst (1).docx
Besturingssystemen 1
2008 samenvatting David Machiels
Inleiding
Het besturingssysteem is de softwarelaag tussen de toepassingssoftware en de uiteindelijke uitvoering van de machine-instructies.
Situering
Voor de gebruiker van een computersysteem is de toepassingslaag het belangrijkste onderdeel. Het computersysteem wordt slechts gebruikt omdat het deze software kan uitvoeren. Nochtans is de toepassingssoftware slechts een klein onderdeel van het volledige computersysteem.
Hardware
De hardware zorgt voor de uitvoering van bevelen, die door software d.m.v. machine-instructies worden gegeven. Deze instructies worden meestal niet rechtstreeks uitgevoerd door fysische onderdelen maar via de microprogrammatie of microcode: een verzameling van kleine programma’s in machinetaal die door de processoren begrepen worden en toelaten dat relatief ingewikkelde operaties via één machine-instructie kunnen worden uitgevoerd. Microcode is een voorbeeld van wat men firmware noemt: in ROM opgeslagen software. Microcode heef niet één specifieke taak, maar dient om het schrijven van programma’s in machinetaal te vereenvoudigen door vaak voorkomende taken aan te bieden in één oproep.
Evolutie
Zonder besturingssysteem
Programma’s werden in machinetaal geschreven, en de computer kon maar 1 programma inladen en dan uitvoeren. Pas als een programma afgelopen was kon het volgende geladen worden. Na een tijd stelde men vast dat de geschreven programma’s veel gelijkaardige routines bevatten, bijvoorbeeld voor in- en uitvoer. Hierdoor begonnen fabrikanten van computersystemen bibliotheken met vaak gebruikte routines bij hun producten te leveren. Er moest een planning worden opgesteld om te bepalen wie de computer mocht gebruiken. Als een programma vroeger dan voorzien klaar was, stond het systeem stil tot de programmeur die het volgende tijdsblok gereserveerd had aankwam. Dat zo’n duur tijdens dergelijke “idle time” niet gebruikt werd wilde men natuurlijk zo veel mogelijk vermijden. Wanneer een programma langer moet rekenen dan voorzien ontstaat er ook een probleem. Bovendien bestaat de kans dat een programma door een programmeerfout vastloopt. Het computersysteem wordt dan ook niet gebruikt terwijl de programmeur de fout opspoort.
Een mens als besturingssysteem?
Om de planningsproblemen te ondervangen werd na verloop van tijd een menselijke operator ingeschakeld. Programmeurs brengen de uit te voeren programma’s naar de operator. Het laden en starten van de verschillende programma’s is nu de taak van de operator. De operator bezorgt de programmeur het resultaat van zijn programma, of eventueel de inhoud van het geheugen op het moment dat er een fout optrad. Dit noemt men de zogenaamde core dump.
Er kunnen prioriteiten toegekend worden. De operator kan hiermee rekening houden bij het bepalen van de volgorde waarin de programma’s gestart worden. De operator kan gegevens bijhouden, bijvoorbeeld van de gebruikte computertijd per programma. Deze kan eventueel gefactureerd worden aan de gebruikers.
Computersystemen worden steeds sneller, maar de menselijke operatoren niet. Hierdoor worden zij meer en meer de vertragende factor.
Bovendien kunnen de door de fabrikant geleverde bibliotheken alsmaar meer en complexere taken vervullen. Zo wordt de vertraging van de menselijke operator gedeeltelijk weggewerkt. Als de bibliotheken ook nog proberen te voorkomen dat er misbruik wordt gemaakt van de beschikbare hulpmiddelen kunnen we stellen dat ze evolueren naar de eerste besturingssystemen.
De eerste besturingssystemen
We kunnen eigenlijk pas van een besturingssysteem spreken vanaf het moment dat de zogenaamde residente monitors gebruikt worden, omdat zo’n residente monitor instaat voor de controle van het systeem, en constant in het geheugen gehouden wordt.
De residente monitor zorgt ervoor dat een uit te voeren programma in het geheugen wordt geladen en gestart. De operator moet wel nog steeds zorgen voor het aanbieden van de uit te voeren programma’s, maar de rest van het beheer is overgenomen door de residente monitor.
Uit de codebibliotheken die bij de computersystemen geleverd worden evolueren ook specifieke besturingsroutines voor randapparaten, device drivers genaamd. Door deze drivers wordt het geven van opdrachten aan randapparaten eenvoudig. Een programma moet gewoon de juiste functie van de driver aanroepen. Samen met de opkomst van de hogere programmeertalen zorgden de device drivers ervoor dat het voor veel meer geïnteresseerden mogelijk werd om computers te gebruiken.
De eerste besturingssystemen groeien uit tot eenvoudige batchbesturingssystemen. De term batch wijst op de gebruikswijze van dit soort systemen: men biedt een stel programma’s als een globaal pakket aan het besturingssysteem aan.
Multiprogrammatie en Time Sharing
Batchbesturingssystemen kennen een steeds groter wordend efficiëntieprobleem. Terwijl het programma dat ze aan het uitvoeren zijn wacht op het voltooien van in- of uitvoer, wordt de processor van het computersysteem niet gebruikt.
Multiprogrammatie zorgt voor de oplossing. Terwijl een programma moet wachten op een externe gebeurtenis laat het besturingssysteem de processor verder werken aan een ander programma. Een reeks programma’s is samen in het geheugen aanwezig en worden om de beurt uitgevoerd tot ze moeten wachten.
Wanneer een multiprogrammatiesysteem wordt uitgebreid met een spoolingsysteem (SPOOL: Simultaneous Peripheral Operation OnLine) dat een aantal jobs kan klaarhouden op een snel extern geheugen en de simultane uitvoer van verschillende jobs op een ordelijke manier kan afhandelen komt men tot een zeer krachtig besturingssysteem.
Er is echter nog een groot gebrek aan interactiviteit. Als het resultaat niet is wat men verwachtte, moet men het programma wijzigen en opnieuw laten uitvoeren. De schijnbaar simultane uitvoer van programma’s bij multiprogrammatie laat ook toe om verschillende gebruikers tegelijk op interactieve wijze met een computer te laten werken. Elke gebruiker beschikt dan over een in- en uitvoerapparaat, verbonden met de centrale verwerkingseenheid. Omdat de processor afwisselend gedurende korte tijd aan elke gebruiker wordt toegewezen krijgt elke gebruiker de indruk over de volledige capaciteiten van het systeem te beschikken. Deze vorm van multiprogrammatie wordt timesharing genoemd. Het belangrijkste verschil is dat er bij timesharing niet gewacht wordt tot een programma moet wachten om de processor aan een ander programma toe te kennen. Door dat de gebruiker op een time sharing systeem rechtstreeks met de computer kan communiceren, krijgt hij bijna onmiddellijk feedback van kleinere opdrachten. Door dat de gebruikers typisch niet tegelijkertijd pieken veroorzaken in het processorgebruik lijkt het systeem voor ieder van hen performant te werken. Voor het accepteren van invoer via een toetsenbord moet de processor zeer weinig werk verrichten, dus terwijl de ene gebruiker een opdracht typt, is er processorkracht over voor het inlezen van de toetsenborden van andere gebruikers, of het werken aan eerder gegeven opdrachten.
Besturingssystemen voor minicomputers
In de jaren ’60 kwamen de minicomputers op de markt.
Bij mainframes was het de gewoonte dat een fabrikant een besturingssysteem ontwikkelde telkens hij een nieuw model op de markt bracht. Dit was voor de fabrikant een zware inspanning, maar voor de gebruiker betekende het ook telkens grote conversieproblemen als er naar nieuwere en krachtigere computers overgeschakeld werd.
In 1964 lanceerde IBM voor het eerst een familie van computersystemen. De System/360 reeks van mainframes omvatte modellen met verschillende verwerkingscapaciteiten, maar ze waren allemaal gebaseerd op dezelfde architectuur. Alle modellen gebruikten dan ook hetzelfde besturingssysteem: OS/360. Omdat OS/360 voor allerlei soorten toepassingen moest gebruikt worden, werd het een zeer ingewikkeld besturingssysteem. Dit noemt men multimode-systemen.
De PDP’s (Programmed Data Processor) van Digital Equipment waren een zeer succesvolle reeks van minicomputers. In de wetenschappelijke wereld raakt intussen stilaan UNIX bekend, een nieuw besturingssysteem dat niet door een computerconstructeur werd ontwikkeld en waar geen commerciële bedoelingen aan vastzaten. De belangrijkste nieuwigheid is dat het, mits enkele kleine aanpassingen, op elke hardware bruikbaar kon worden gemaakt en daarbij naar de gebruiker toe steeds dezelfde interface aanbood. Het werd niet ontwikkeld in een assembleertaal maar in een daarvoor ontwikkelde hogere programmeertaal genaamd C.
De PC en het Internet
Aan het eind van de jaren 70 dook de microcomputer op. Toen IBM zijn microcomputer lanceerde en hiervoor een nieuw besturingssysteem genaamd MS-DOS ontwikkelde, bleek dit zo’n succes te zijn dat de meeste andere constructeurs deze architectuur overnamen. Men kon nu toepassingssoftware ontwikkelen die op zowat 90% van de zich massaal verspreidende microcomputers kon worden gebruikt.
Er moest dringend werk worden gemaakt van de vereenvoudiging van de gebruikersinterface. Vandaar de ontwikkeling van GUI (Guided User Interface) waarmee op een symbolische manier bevelen konden worden gegeven aan de computer.
- In 1984 kwam de Apple Macintosh SE op de markt, de eerste computer met een GUI.
- In 1985 was er de eerste versie van Windows, met een grafische laag bovenop DOS.
De stijgende performantie van de microcomputer was ideaal voor multitasking: time sharing voor één gebruiker. De gebruiker kan verschillende opdrachten tegelijk laten uitvoeren en deze laten samenwerken. De processortijd werd door het systeem verdeeld over al de opdrachten.
Men introduceerde ook netwerken. Eerst LAN, dan WAN en uiteindelijk het Internet.
Voorbeelden van besturingssystemen
Aangezien besturingssystemen sinds OS/360 niet meer specifiek voor één bepaalde machine ontworpen worden, zijn ze nu meestal verbonden met één van de drie besproken types: mainframes, minicomputers of microcomputers.
IBM is nog steeds één van de grote spelers op de mainframe-markt, en er worden nog steeds mainframes ontwikkeld. Nu worden de IBM mainframes zSeries genoemd. De besturingssystemen zijn in de loop der jaren voor deze ontwikkeld met klinkende namen als MVS, VM en SE.
Ook minicomputers zijn nog steeds te verkrijgen en in gebruik. Men spreekt nu ook soms van midrange systems. IBM noemt ze iSeries.
Voor microcomputers waren er in de jaren ’80 drie families.
- Op IBM-compatibele PC’s had je de keuze tussen MS-DOS van Microsoft en OS/2 van IBM.
- Voor Macintosh was er System 7.
OS/2 is van de markt verdwenen en MS-DOS is geëvolueerd naar de verschillende versies van Windows. Windows was eerst slechts een grafische toevoeging aan MS-DOS, maar de recentere versies zijn volledige besturingssystemen. Voor Macintosh heb je tegenwoordig MacOS nodig.
Er zijn ook besturingssystemen die niet aan één van de drie categorieën gebonden zijn.
- Allereerst is er UNIX dat men op de meest diverse hardwaren aantreft, zij het in allerlei varianten.
- Op mainframes vind je AIX (IBM) als gast onder VM.
- Op VAX minicomputers werd Ultrix gebruikt
- Terwijl voor microcomputers SCO UNIX of HPUX beschikbaar is. Voor PC’s is er sinds 1991 ook het steeds populairdere GNU/Linux.
Functies van een besturingssysteem
Twee grote taken: het gebruiksgemak maximaliseren en de efficiëntie van het systeem maximaliseren.
- Toegang tot apparaten eenvoudig maken
- Informatie bewaren en overzichtelijk weergeven
- Operaties en gegevens beveiligen
Wat betreft de hardware:
- De onderlinge communicatie tussen de onderdelen organiseren
- De goede werking van de onderdelen bewaken
- Hulpmiddelen rechtvaardig verdelen
Merk op dat het besturingssysteem ook een programma is dat door de processor uitgevoerd moet worden. We kunnen stellen dat de tijd dat het besturingssysteem de processor gebruikt verloren gaat voor de gebruiker. Efficiëntie is dus een belangrijke vereiste voor het besturingssysteem, om de hoeveelheid overhead te beperken.
Een derde taak is het streven naar hardwareonafhankelijkheid. Als het besturingssysteem een uniforme interface aanbiedt aan de bovenliggende toepassingssoftware en de gebruiker kan de hardware aangepast worden zonder overgangsproblemen. De eerste stap naar hardwareonafhankelijkheid was de introductie van device drivers.
Onderdelen van een besturingssysteem
Apparaatbeheer
De toegang tot de randapparatuur moet door het besturingssysteem geregeld worden, om conflicten te vermijden. Als 2 programma’s tegelijkertijd naar de printer sturen zou men vreemde resultaten krijgen.
Geheugenbeheer
Programma’s mogen niet in mekaars geheugenindex schrijven of lezen. Het beschikbare werkgeheugen is bovendien beperkt en het besturingssysteem moet ook streven naar een efficiënt gebruik ervan.
Procesbeheer
Het verdelen van de beschikbare processortijd over de verschillende processen die uitgevoerd moeten worden. Hier wordt gezorgd voor multiprogrammatie en multitasking.
Communicatie
De communicatie tussen processen op het computersysteem. Maar ook voor eventuele communicatie met andere computersystemen via een netwerk.
Gebruikersinterface
Om het gebruik van de computer te vereenvoudigen moet het besturingssysteem ook zorgen voor een adequate gebruikersinterface. Dit kan een tekstinterface of een grafische omgeving zijn.
Basismechanismen van een besturingssysteem
Kernel- en gebruikerstoestand
Programma’s die deel uitmaken van het besturingssysteem worden uitgevoerd in kerneltoestand. Wanneer de processor zich in kerneltoestand bevindt, beschikt hij over al zijn mogelijkheden. Wanneer de processor niet in kerneltoestand is, maar in gebruikerstoestand, zijn bepaalde instructies niet toegelaten. Tussen de machine-instructies zijn er namelijk een aantal die men geprivilegieerde instructies noemt. Deze laatste kunnen enkel worden gebruikt in kerneltoestand en zijn daarvoor voorbehouden aan het besturingssysteem. Wanneer een programma probeert om in gebruikerstoestand een geprivilegieerde instructie uit te voeren zal een fatale fout optreden. Op die manier kunnen allerlei delicate operaties op een gegarandeerd veilige manier worden uitgeoefend. Wanneer het besturingssysteem een gewoon programma laat uitvoeren zal het de processor eerst naar gebruikerstoestand brengen alvorens het programma te starten. In de toestandsbeschrijving van de processor is één bit voorzien om de toestand aan te geven waarin deze zich bevindt: user- of kernel mode.
Interrupts
Het besturingssysteem komt slechts in actie na een signaal vanuit de hardware of na een vraag vanuit de hoger gelegen software. Men zegt dan ook dat een besturingssysteem gebeurtenisgestuurd of event driven is.
Interrupts
- Wanneer vanuit de hardware behoefte is aan een tussenkomst in het besturingssysteem treedt een interrupt of onderbreking op.
- Als de software de hulp van het besturingssysteem nodig heeft wordt er een software interrupt aangeroepen of system call.
Een interrupt is een elektrisch signaal naar de processor, of een gebeurtenis binnenin de processor zelf. Als de harde schijf bijvoorbeeld een leesopdracht voltooid heeft, zal de schijfbesturingseenheid dit via een interruptsignaal naar de processor aan het besturingssysteem melden.
- Schijfbesturingseenheid ontvangt een leesopdracht
- Wanneer de leesopdracht voltooid is, stuurt de schijfbesturingseenheid een interrupt naar de interrupt controller
- De interrupt controller geeft de interrupt door aan de processor. Wanneer er een interrupt met hogere prioriteit wordt afgehandeld is het mogelijk dat de schijfinterrupt hierop moet wachten.
- Interrupt controller stuurt het volgnummer van de bron van de interrupt naar de processor, zodat die weet welk apparaat de interrupt veroorzaakte.
- De processor zoekt het adres op van de juiste Interrupt Handler in de tabel met interrupt-vectoren.
- De inhoud van bevelenteller, alle registers en de processorstatus worden op de stapel gezet.
- Adres van Interrupt Handler wordt in de bevelenteller geplaatst en de processor wisselt naar kerneltoestand.
- Sprong naar het adres van de Interrupt Handler en de handler wordt uitgevoerd. Deze code in de interrupt handler handelt het verzoek af. Deze handler is onderdeel van het besturingssysteem.
- Als het werk erop zit herstelt de interrupt handler de bevelenteller, registers en processortoestand en schakelt de processor terug in gebruikerstoestand. Het programma dat in uitvoering was voor de interrupt wordt verder gezet.
Het gevolg van een interrupt is dus dat een stuk code uitgevoerd wordt, dat specifiek bestemd is voor de opgetreden interrupt: de Interrupt Handler.
Stappen 6 en 7 worden een context switch genoemd. Een context switch wijzigt de toestand van de processor zodat die een ander programma kan uitvoeren, en bovendien zo dat de toestand weer hersteld kan worden om verder te gaan met de uitvoering van het programma dat ervoor in uitvoering was.
Merk op dat dit door de processor zelf afgehandeld wordt, en niet door een stukje machinecode uit te voeren.
Externe interrupts komen van hardware buiten de processor:
- Klokinterrupts: De interne klok van de computer signaleert hiermee aan de processor dat een bepaalde tijdsperiode is verstreken
- I/O-interrupts: Wanneer een randapparaat een I/O-operatie is uitgevoerd meldt de besturingseenheid die het randapparaat bestuurt, op deze manier het einde van de I/O-operatie
- Keyboard interrupts: Telkens wanneer een toets op het klavier wordt ingedrukt heeft dit een interrupt tot gevolg, die tot doel heeft het bestemmende karakter te laten inlezen in een buffer zodat het programma waarvoor het bestemd is eraan kan.
Interne interrupts worden veroorzaakt door de processor en bestaan in twee groepen:
- Uitzonderingen of exceptions zijn het gevolg van een fout tijdens de uitvoering van een instructie zoals het delen van een getal door nul, het adresseren van een ongeldig adres of een poging om in gebruikerstoestand een geprivilegieerde opdracht uit te voeren.
- Traps of software interrupts zijn het gevolg van de uitvoering van speciaal daarvoor voorziene instructies in een programma. Als een programma bijvoorbeeld gegevens wil inlezen van op de harde schijf zal het dit via een software interrupt aan het besturingssysteem vragen.
Interrupts identificeren
Hoe wordt nu bepaald welke interrupt handler dient te worden uitgevoerd wanneer een interrupt optreedt? Bij exceptions wordt de interrupt door de processor zelf veroorzaakt, en kan de processor de inhoud van de conditiecode in zijn toestandsbeschrijving nagaan.
Wanneer een programma in uitvoering een trapinstructie doet wordt de nodige informatie meegegeven om de juiste interrupt handler te kiezen.
In 8086 assembler programma’s voor MS-DOS wordt vaak “int 21h” opgeroepen. Deze software interrupt zorgt ervoor dat MS-DOS een interrupt handler uitvoert.
Bij hardware interrupts ligt de oorzaak buiten de processor, en moeten we op zoek naar de bron van de onderbreking. Dat kan op 3 algemene manieren:
- Als iedere controller een eigen interruptlijn heeft, bepaalt de lijn waarop het interruptsignaal verschijnt meteen welke handler er moet worden uitgevoerd.
- Als de controllers via één lijn met de processor verbonden zijn kan de controller d.m.v. een bit in één van zijn registers aangeven of hij een interrupt heeft verstuurd. Na de context switch wordt een routine uitgevoerd die aan software polling doet: achtereenvolgens elke controller controleren tot de afzender van de interrupt wordt gevonden.
- Bij de derde manier zijn alle controllers via één interruptlijn en één zogenaamde acknowledge-lijn met de processor verbonden. Zodra een hardware-interrupt optreedt zendt de processor via deze acknowledge-lijn een signaal naar de eerste controller. Indien deze de interrupt veroorzaakte stuurt hij een identificatiecode naar de processor; in het andere geval geeft hij het signaal door naar de volgende controller, die hierop op dezelfde manier reageert. Deze werkwijze, daisy chaining genoemd, is erg snel omdat ze volledig via de hardware verloopt.
Prioriteiten voor interrupts
Wanneer twee of meer interrupts tegelijkertijd optreden, moet er gekozen worden welke interrupt eerst afgehandeld wordt. Vaak wordt gekeken naar de vereiste interrupt latency. Dit is de maximale tijd waarbinnen de interruptafhandeling begonnen moet zijn.
Hoe we de prioriteit van interrupts kunnen bepalen hangt af van de gebruikte identificatiemethode.
- Bij gebruik van meerdere interruptlijnen zal de processor zelf moeten beslissen aan welk signaal hij eerst aandacht zal besteden.
- Bij software polling zal de volgorde waarin de controllers worden nagekeken bepalend zijn voor de prioriteit.
- Bij daisy chaining is het de volgorde waarin de controllers zijn aangesloten op de acknowledgelijn die dit bepaald. Een duidelijk nadeel is dat een verandering in prioriteit een hardwarematige ingreep vereist.
Een tweede vraag die we ons moeten stellen is of we nieuwe interrupts willen toelaten tijdens het afhandelen van een interrupt. Vaak wordt een vlag voorzien waarmee alle interrupts tijdelijk geblokkeerd worden. Andere systemen accepteren alleen interrupts met een hogere prioriteit.
System Calls
System calls of systemaanroepen leggen een link tussen de overige software en het besturingssysteem. Bij alle activiteiten uitgevoerd in kerneltoestand is immers zeer frequent de tussenkomst nodig van het besturingssysteem om operaties te kunnen uitvoeren die alleen in kernel-toestand mogelijk zijn.
Het uitvoeren van een system call
Essentieel bij een system call is het overschakelen van de processor naar kerneltoestand. Dit gebeurt altijd via een trapinstructie, waardoor wordt vermeden dat na het instellen van de kerneltoestand het gebruikersprogramma de controle zou kunnen behouden. De trapinstructie zorgt er voordat de gepaste systeemroutine wordt gestart. Daartoe wordt als operand voor de trapinstructie een code meegegeven, die in een register wordt geplaatst.
Omdat de trap functioneert als een interrupt zal een interrupt handler worden gestart in kernel mode, die de meegegeven code zal vertalen naar het beginadres van een specifieke systeemroutine. Aan de hand van de code wordt tevens bepaald hoeveel bytes aan informatie als parameters aan de systeemroutine moeten worden doorgegeven. Deze bytes worden dan klaargezet, waarna de systeemroutine kan worden opgeroepen. Zodra de opdracht voltooid is wordt een eventueel resultaat op een afgesproken plaats gedeponeerd, waarna de processor wordt teruggeschakeld naar user mode en tenslotte terugkeert naar het opgeroepen programma.
Beschikbare system calls
- Opstarten en beëindigen van programma’s
- Laten wachten van programma’s op een gebeurtenis
- Toekennen en vrijgeven van geheugen
- Bestandsbeheer
- Besturing en beheer van apparaten
- Uitwisselen van informatie
- Communicatie
Voorbeeld
In Linux wordt de read-system call genaamd read (file.desc, buffer, nbytes) opgeroepen.
- Oproepend programma zet de waarden van de parameters op de stapel.
- Read functie wordt aangeroepen
- Functie zet system call nummer in het juiste register en voert een trapinstructie uit
- Besturingssysteem zoekt juiste routine op voor de system call
- Besturingssysteem start systeemroutine
- Systeemroutine zet resultaat op voorziene plaats, verlaat kernel mode en geeft controle terug aan read-functie
- Read-functie ontvangt de gegevens, zet ze op hun plaats en geeft controle terug aan oproepend programma
- Uitvoer programma gaat verder
Stappen 3 tem 6 worden uitgevoerd in kernel mode.
Bootproces
Basic Input/Output System (BIOS)
Het eerste programma dat de processor uitvoert is het Basic Input/Output System, vaak afgekort tot BIOS. Het zorgt dat er communicatie mogelijk is tussen enkele onderdelen van het computersysteem, in de eerste plaats tussen secundaire opslagapparaten en het werkgeheugen. Het Basic Input/Output System dankt zijn naam aan het feit dat het naast deze communicatie ook zorgt voor uitvoer op het scherm, en de mogelijkheid tot invoer via het toetsenbord.
Aangezien net de BIOS ervoor moet zorgen dat de opslagapparaten bruikbaar worden kan de BIOS-code niet op een dergelijk apparaat worden opgeslagen. Daarom wordt deze in een ROM-chip op het moederbord bewaard. Tegenwoordig wordt hiervoor EEPROM gebruikt. BIOS is een voorbeeld van firmware.
Omdat een processor altijd de opdracht uit het werkgeheugen inleest waarvan het adres in de bevelenteller staat, wordt de inhoud van de BIOS-chip beschikbaar gesteld via een deel van het adresbereik van het werkgeheugen. Hiervoor is een deel van het Upper Memory gereserveerd: van F0000h tot FFFFFh. In sommige systemen blijft dit deel van het werkgeheugen leeg en wordt van de ROM-chip gelezen. Andere systemen kopiëren de inhoud van de chip naar dit gedeelte van het werkgeheugen omdat RAM sneller is dan ROM. Dit noemt men ROM shadowing.
Wanneer een processor geactiveerd wordt zal hij altijd beginnen met de instructie op adres FFFF0h. Hier staat dan de jump instructie naar de eigenlijke opstartcode.
Power-On Self Test
De BIOS-opstartcode begint met het testen van de vitale systeemonderdelen. Het geheel van deze test wordt Power-On-Self-Test of POST genoemd. De aanwezigheid of correcte werking van bijvoorbeeld processor, werkgeheugen en toetsenbord worden getest. De feedback gebeurt d.m.v. geluidsignalen die we beeps noemen. Bij problemen kan men aan het aantal beeps en hun duur horen wat de oorzaak is.
Opstartvolgorde
Als de POST succesvol voltooid is zal de BIOS-code beginnen met het laden van het besturingssysteem. Wanneer een computersysteem meerdere opslagapparaten bevat moet in de BIOS aangegeven zijn vanop welk apparaat een besturingssysteem geladen moet worden. Het besturingssysteem kan op een harde schijf staan, maar ook op een diskette, CD-ROM of USB-opslagapparaat. In welke volgorde op alle aanwezige apparaten gezocht moet worden staat in de zogenaamde opstartvolgorde of boot sequence. Omdat deze instellingen gewijzigd moeten kunnen worden kunnen ze niet samen met de code van de BIOS bewaard worden op de ROM-chip. Voor de veranderlijke instellingen is er een afzonderlijke CMOS-chip voorzien, die door een batterij onder spanning gehouden wordt wanneer het systeem uitgeschakeld is. Zo gaan de instellingen niet verloren.
Partities
Als in de opstartvolgorde wordt verwezen naar de harde schijf is de vraag weer hoe we het besturingssysteem terugvinden op zo’n schijf. De code in de BIOS zal een sprong uitvoeren naar de opstartcode opgeslagen in de eerste sector van de schijf, de Master Boot Record. Deze code wordt vaak Initial Program Loader (IPL) genoemd.
Een harde schijf kan logisch ingedeeld worden in partities. Hierdoor kunnen we meerdere besturingssystemen op één schijf bewaren, of kunnen we op één schijf verschillende bestandssystemen gebruiken.
In de partitietabel wordt het begin- en eindpunt en het type van iedere partitie opgeslagen. Op het PC-platform vind je de partitietabel in de MBR, achter de opstartcode. Er is dan nog plaats voor 4 maal een partitiebeschrijving en een magic number van 2 bytes. Dit magic number is een controlegetal en moet altijd als waarde 0xAA55 hebben, anders wordt de MBR als ongeldig beschouwd.
Elk van de 4 elementen van de partitietabel beschrijft een partitie, en bevat de volgende velden:
- Active geeft aan of deze partitie moet gebruikt worden om van te booten of niet (Windows)
- Start cylinder / kop / sector adres van de eerste sector van de partitie
- Type indicatie van het gebruikte bestandssysteem
- End cylinder / kop / sector adres van de laatste sector van de paritie
- Lengte lengte van de partitie
De partities die in de partitietabel gedefinieerd worden noemen we primitieve partities. Om meer partities toe te laten introduceerde men logische partities. Er is geen plaats om de partitietabel uit te breiden, dus wordt een primaire partitie onderverdeeld in logische partities. Een primaire partitie die verder onderverdeeld wordt noemen we extended partitie.
In de partitietabel geven de types 0x05 of 0x0f een extended partitie aan. Het start-veld bevat dan het adres van de eerste sector van de eerste logische partitie. Iedere logische partitie verwijst naar de volgende logische partitie. Als limiet voor het aantal logische partities wordt vaak 24 opgegeven. De gelinkte lijst kan langer zijn maar aangezien DOS letters vanaf C toekent kan de lijst niet langer dan 24 partities lang zijn.
Een logische partitie bevat een Extended MBR met een eigen partitietabel. Zo’n EMBR bevat een partitietabel die de structuur van de tabel in de MBR volgt, maar slechts 2 partities beschrijft: één logische en een nieuwe extended partitie. Deze extended partitie bevat ook weer zo’n tabel die één logische en één extended partitie beschrijft, enz. De taak van de opstartcode in de MBR is om in de partitietabel de actieve partitie op te sporen. De eerste sector van deze partitie heeft Partition Boot Sector en bevat ook weer een stuk opstartcode. De code in de MBR zal de code in de PBS inladen en dan een sprong naar deze code uitvoeren. Het is deze code die uiteindelijk het besturingssysteem op de partitie zal inladen en starten.
Bestandssystemen
Computersystemen hebben er naast gegevensverwerking een taak bij gekregen: gegevensopslag. Het onderdeel van het besturingssysteem dat instaat voor permanente opslag is het bestandssysteem. De eisen die men hieraan stelt zijn:
- Persistente gegevensopslag
- Eenvoudige organisatie en logische ordening van gegevens
- Een zo snel mogelijke gegevenstoegang
- Zo goed mogelijk gebruik maken van de beschikbare capaciteit
- Het beveiligen van de gegevens (geen toegang tot gegevens v/e andere gebruiker)
Fysische en logische gegevensordening
Fysische ordening: Sectoren
Eén sector is de kleinst adresseerbare eenheid voor gegevensopslag op een harde schijf. Hoe de gegevens over de sectoren van de harde schijf verdeeld zijn noemen we de fysische ordening van gegevens.
Logische ordening: Bestanden
Een gebruiker wil een logische gegevensordening, die er voor zorgt dat gegevens gemakkelijk terug te vinden zijn. Een bestand is een persistent opgeslagen logische verzameling gerelateerde gegevens.
Het bestandssysteem vertaalt het logische beeld van de gebruiker en de bijbehorende operaties in de fysische schijftoegangen. Zo wordt een bestand altijd voorgesteld als een aaneengesloten reeks gegevens, zelfs al is dit in de fysische ordening niet zo is. Het opzetten van de nodige gegevensstructuren voor de fysische ordening van een bestandssysteem op een partitie noemt men formatteren.
Bestanden
Een bestand is een verzameling gerelateerde gegevens, die door een gebruiker of applicatie op een bepaalde manier geïnterpreteerd worden. Het bestandssysteem verzamelt alle gegevens over een bestand in de bestandsbeschrijving of file descriptor.
- De naam
- De adressen van de gebruikte sectoren
De lengte van de naam kan beperkt zijn door de beschikbare ruimte in de file descriptor. Welke karakters toegelaten zijn hangt af van de gebruikte codering (ASCII of Unicode) en het vermijden van tekens die een speciale betekenis hebben in het systeem. Ook de hoofdlettergevoeligheid kan van belang zijn. Sommige systemen leggen bovendien een vaste structuur op de naam, bijvoorbeeld de “8+3”-structuur van MS-DOS: elke bestandsnaam kan 8 tekens lang zijn en een extensie van 3 tekens hebben.
Naast de bestandsnaam worden in de file descriptor allerlei andere bestandskenmerken bijgehouden.
- De grootte van het bestand
- De tijdstippen waarop het bestand is aangemaakt of gewijzigd
- De eigenaar van het bestand
- Op welke manier toegang tot het bestand wordt geregeld
Om de plaats te kunnen terugvinden waar de gegevens op het extern geheugenmedium worden bijgehouden moet er ook een plaatsaanduiding bijgehouden worden. Het kan ook interessant zijn om te weten of het bestand in gebruik is, en of er een kopie bestaat.
Directories
Om een overzicht mogelijk te maken in de massale hoeveelheden informatie is het noodzakelijk dat bij elkaar horende bestanden gegroepeerd worden in directories. Directories zijn een toevoeging aan het logische beeld dat de gebruiker van de opgeslagen gegevens krijgt.
Er is ook een fysische gegevensstructuur op de schijf, die de bestandsbeschrijvingen van de bestanden bevat. Structuur van het bestandssysteem
Lineaire directory
De meest eenvoudige organisatievorm. De bestandsbeschrijvingen van alle in het bestandssysteem aanwezige bestanden worden in één enkele directory opgenomen. Nadelen:
- Indien het bestandssysteem een groot aantal bestanden bevat zullen de basisbewerkingen veel tijd vragen.
- Een dergelijke lange lijst van bestanden is uiterst onoverzichtelijk.
- Aan elk bestand wordt een unieke naam gegeven.
Voordeel:
- Bij schijfgeheugens kan de directory op de meest gunstige plaats van de schijf worden gezet, zodat snelle toegang kan worden verkregen.
Lineaire directories zijn slechts bruikbaar in kleine bestandssystemen in omgevingen met één gebruiker.
Hiërarchisch bestandssysteem
Hierbij wordt de volledige verzameling bestanden opgesplitst in een aantal kleine groepen, die elk hun eigen directory hebben. Een directory bevat dus bestanden of andere directories. De directories waarnaar een directory verwijst noemen we subdirectories.
Het is niet meer nodig dat elk bestand een unieke naam heeft. Bestanden in verschillende directories kunnen dezelfde naam hebben. Nadelen:
- Men moet aangeven waar het bestand zich bevindt in de hiërarchische structuur.
- Sommige bewerken worden complexer. Het opzoeken van een bestand waarvan alleen de naam bekend is vereist nu het recursief doorlopen van de volledige directorystructuur.
- Ook het schrappen stelt een probleem: wat gebeurt er met de bestanden en subdirectories waarnaar vanuit deze directory wordt verwezen? Indien deze mee moeten worden vernietigd moet dit eveneens op een recursieve manier gebeuren.
Pad: de opsomming van alle directories die moeten doorlopen worden vanaf de hoofddirectory om de directory waarin de file wordt beschreven te bereiken. Working directory: de directory waarin de gebruiker zich bevindt Relatief pad: Een pad dat vertrek van de huidige werkdirectory Absoluut pad: Een pad dat vertrekt vanuit de wortel van de boomstructuur
Boomstructuur
De meest eenvoudige hiërarchische structuur. Naar ieder bestand in het systeem leidt er juist één uniek pad. We gebruiken de term boomstructuur omdat deze structuur zich vertakt als een boom.
Algemene structuur
Wanneer we toch meer dan één pad naar een bestand toelaten krijgen we een algemene structuur. Dit betekent dat een ebstand een element van twee verschillende directories kan zijn, of dat een directory een subdirectory is van twee of meer directories.
De algemene structuur laat toe dat er lussen gecreëerd worden in het bestandssysteem. Iedere recursieve operatie op het bestandssysteem, zoals het zoeken naar een bestand, zal oneindig doorgaan in zo’n lus als het recursief algoritme niet detecteert dat het een bepaalde directory al heeft behandeld.
Een bijkomend probleem betreft het achterblijven van onbereikbare bestanden in het systeem na het verwijderen van de directory. Een directory moet steeds bereikbaar zijn vanuit de wortel. Als mogelijke oplossing voor dit probleem zouden we kunnen beslissen om altijd recursief alle subdirectories te verwijderen, zelfs al lijken ze nog bereikbaar. Maar dan stuiten we op een tweede probleem. Als we alle onderliggende directories recursief verwijderen, zullen we uiteindelijk een directory verwijderen die hoger in de hiërarchische structuur ligt dan de directory die we oorspronkelijk wilden verwijderen. Omwille van deze problemen worden dergelijke lussen in het bestandssysteem zelden toegelaten. Men krijgt dan een acyclische structuur.
Acyclische structuur
De acyclische structuur is nog steeds algemener dan de boomstructuur, maar er mogen geen lussen voorkoen. Lussen vermijden kan op twee manieren. We kunnen bij iedere operatie die een lus zou kunnen veroorzaken een controle uitvoeren. De operatie wordt enkel toegelaten als er geen lus ontstaat. Operaties in het bestandssysteem worden dan wel complexer en dus trager.
Een eenvoudigere oplossing is het verbieden van meervoudige verwijzingen naar directories. Wanneer enkel bestanden vanuit twee directories kunnen benaderd worden is het onmogelijk een lus te creëren.
Aaneengesloten bestanden
Vanaf een bepaald adres worden alle bytes van de file achtereenvolgens op de schijf gezet, in een reeks op elkaar volgende sectoren. We noemen dit een aaneengesloten bestand. Er ontstaat een belangrijk probleem: Er is voldoende grote vrije ruimte nodig om het bestand een plaats te kunnen geven. Naarmate het gebruik van de schijf voortduurt zal er door het verwijderen van bestanden een steeds groter aantal afzonderlijke vrije ruimten ontstaan. De omvang van de grootste vrije ruimte zal daarbij ook steeds kleiner worden. Men zegt dan dat er fragmentatie ontstaat.
Om een geschikte locatie te kiezen moeten we in de eerste plaats de grootte van het bestand kennen. Aangezien een bestand kan groeien naarmate de tijd vordert, is de grootte niet gekend op het moment dat het bestand aangemaakt wordt. De enige oplossing is om op de een of andere manier een schatting te maken van de uiteindelijke grootte.
Er zijn 3 algoritmes om een element van de tabel te kiezen wanneer een nieuw bestand bewaard moet worden:
- Het First Fit algoritme kiest de eerste vrije ruimte die voldoende groot is voor het bestand.
- Het Best Fit algoritme kiest de kleinste vrije ruimte die groot genoeg is voor het bestand.
- Het Worst Fit algoritme kiest de grootste beschikbare vrije ruimte.
Het belangrijkste voordeel van het werken met aaneengesloten bestanden is ongetwijfeld de hoge snelheid waarmee deze bestanden kunnen worden verwerkt. Door het gebruik van op elkaar volgende sectoren zal een bestand zich meestal binnen één cilinder van de schijf bevinden en moet de arm van de schijf zich niet bewegen.
Een ander voordeel is de mogelijkheid om niet alleen sequentiële, maar ook directe toegang tot een bepaald deel van het bestand te krijgen. Als we het startadres s van het bestand en de blokgrootte b kennen dan kan op eenvoudige wijze het adres a worden berekend van het blok dat de byte op positie B binnen het bestand bevat: A = s + B/b Ernstige nadelen:
- Een eerste moeilijkheid is de verplichting een schatting te geven van de grootte van elk nieuw bestand. Regelmatig zal bij het schrijven naar een ebstand blijken dat de voorziene ruimte niet volstaat.
- Dan kan het programma afgebroken worden om met een betere schatting te worden hernomen of kan het programma onderbroken worden om het bestaande deel van het bestand naar een grotere vrije ruimte te kopiëren.
- Fragmentatie zorgt ervoor dat het bijna onmogelijk is de capaciteit van de schijf volledig te gebruiken. In dat geval zal reorganisatie van de gegevens op de schijf noodzakelijk zijn. Dit defragmenteren kan eventueel ook zonder tweede harde schijf, maar is een tijdrovend proces.
Niet-aaneengesloten bestanden
De oplossing voor dit probleem kan gevonden worden in het verdelen van het bestand in kleinere stukken. Het gevolg is natuurlijk dat delen van eenzelfde bestand over de schijf zullen worden verspreid. De lees/schrijfkop moet zich vaak verplaatsen, wat erg tijdrovend is.
Blokken
Het bestandssysteem groepeert een aantal sectoren in een blok, ook soms cluster genoemd.
- Een verdeling in grotere eenheden zorgt ervoor dat het bestand in minder delen gesplitst wordt. Hierdoor wordt het bestand minder sterk verspreid dus moet de leeskop minder verplaatsingen maken.
- Bovendien zal de adresinformatie die we nodig hebben om de verschillende delen van het bestand terug te vinden, kleiner zijn omdat het aantal delen kleiner is.
Kleinere eenheden hebben dan weer als voordeel dat het plaatsverlies aan interne fragmentatie kleiner zal zijn. Bij het verdelen van een bestand over een aantal blokken zal het laatste blok zelden volledig gevuld zijn. Het laatste stuk van dit laatste blok is onbruikbaar om andere gegevens op te slaan, en gaat dus verloren.
Wanneer we bestanden opsplitsen moet het bestandssysteem natuurlijk ook bijhouden waarde verschillende delen van het bestand opgeslagen zijn.
Bestanden als gelinkte lijsten
De file descriptor bevat het adres van het eerste blok van het bestand, en elk blok bevat een verwijzing of pointer naar het volgende blok. Het laatste blok van het bestand bevat een speciale pointer die aangeeft dat de lijst stopt, soms nul-pointer genoemd (vaak 999). De vrije blokken worden ook d.m.v. een gelinkte lijst bijgehouden. Ieder vrij blok bevat het adres van het volgende vrije blok. Voordeel:
- Adresinformatie neemt weinig plaats in beslag.
Nadeel:
- De vaststelling dat directe toegang hier niet mogelijk is. De enige manier om bij een bepaald deel van een bestand te komen is immers de ketting van verwijzingen te volgen tot bij de gezochte plaats. De toegangssnelheid is erg laag.
- Het verwijderen van een bestand verloopt erg traag omdat de ketting van alle blokken moet doorlopen worden om de nul-pointer te vervangen door een verwijzing naar het eerste blok van de lijst met vrije blokken.
Door in de bestandsbeschrijving ook een pointer naar het laatste blok bij te houden kunnen we het verwijderen van een bestand versnellen.
Wanneer er iets misloopt met een verwijzing gaat een deel van het bestand verloren, of kan het bestand onterecht verwijzen naar een deel van een ander bestand. Om dergelijke problemen te vermijden wordt soms gewerkt met een dubbel gelinkte lijst, waarin ieder blok ook verwijst naar het vorige blok in de lijst. Een foutieve verwijzing kan hersteld worden door de lijst van achter naar voor te doorlopen.
Bestanden met indexblokken
Dit probleem kan worden opgelost door de adressen van de verschillende onderdelen van een bestand te verzamelen in een speciaal daarvoor voorbehouden blok op de schijf: een indexblok. In de file descriptor staat dan de plaatsaanduiding van dit indexblok.
Iedere bestandsbeschrijving in de directory bevat het adres van een indexblok.
Elk van deze blokken bevat de adressen van de blokken met de eigenlijke gegevens van het bestand. Ook de vrije blokken worden bijgehouden in een indexblok. Indien één blok niet volstaat kan men een gelinkte lijst van indexblokken creëren of kan men een hiërarchische index-structuur opbouwen. Hierbij verwijst het eerste indexblok niet naar delen van het bestand, maar naar indexblokken die de adressen van de blokken met gegevens bevatten. Voordeel:
- De toegangssnelheid. Wanneer een bestand geopend wordt kan het indexblok volledig in het geheugen geladen worden. Zelfs bij seriële toegang is er sprake van een snelheidswinst omdat er niet moet gewacht worden tot het bestandssysteem het adres van het volgende blok uit het vorige blok gelezen heeft.
Nadeel:
- De indexblokken nemen schijfruimte in. Dit komt omdat er per bestand één blok extra nodig is: het indexblok. Dit plaatsverlies is vooral merkbaar wanneer er veel kleine bestanden zijn.
Daarom wordt in de bestandsbeschrijving vaak plaats voorzien voor een klein aantal adressen van blokken van het bestand. Als de hoeveelheid benodigde blokken onder dit aantal blijft, moet er geen indexblok gebruikt worden.
De toegangssnelheid kan verder geoptimaliseerd worden door extents te gebruiken. Een extent is een verzameling opeenvolgende blokken op de schijf. Hierdoor zullen grotere delen van een file op een zelfde plaats van de schijf terecht komen, zodat het lezen of schrijven minder onderbroken hoeft te worden voor een verplaatsing van de leeskop. Het adres van het eerste blok en de lengte van de extent zijn voldoende.
Bestanden beschrijven in een file map
We beschrijven de inhoud van de schijf in een aparte tabel. Deze tabel, de file map, wordt voor ieder blok van de schijf aangegeven of het vrij is, en indien niet tot welk bestand het behoort.
De eenvoudigste versie van een file map is een bitvector. Met ieder blok komt een bit overeen: 1 betekent dat het blok in gebruik is, 0 dat het blok vrij is. Vergeleken met indexblokken zorgt zo’n bitvector van vrije blokken voor minder plaatsverlies. De vaste lengte van de bitvector (1 bit blok) is wel nadeling als er weinig vrije blokken zijn. Dan ziet de bitvector er zo uit: 111…111101111..111.
Met elk blok komt een element van de tabel overeen. De elementen, behorend bij de blokken die samen een bestand vormen, bevatten pointers zodat ze een gelinkte lijst vormen. Het laatste element in de lijst bevat een code om het einde van het bestand aan te geven. De plaatsaanduiding in de file descriptor bestaat uit de index van het element dat overeenstemt met het eerste blok in de file.
Voordeel:
- De mogelijkheid om de volledige beschrijving van een schijf in het centrale geheugen te brengen. We werken eigenlijk weer met een gelinkte lijst, maar nu is de volledige lijst van adressen al beschikbaar in het werkgeheugen.
Men kan er ook op een eenvoudige wijze voor zorgen dat een bestand zo goed mogelijk gegroepeerd blijft: de combinatie van de beschrijving met de adresgegevens van het bestand in één tabel laat toe bijkomende ruimte voor het bestand te zoeken.
Directories (2)
Een directory is een verzameling bestandsbeschrijvingen. Er zijn verschillende fysische structuren mogelijk om deze bestandsbeschrijvingen op een schijf op te slaan: een gewone tabel, een gesorteerde tabel, een hashtabel of een gelinkte lijst.
Tabel
Wanneer we deze bestandsbeschrijvingen in een tabel bijhouden, zal vooral het opzoeken van een bestandsbeschrijving vrij veel tijd vragen. We moeten de tabel doorlopen tot we het gezochte element vinden. Het toevoegen van een file descriptor kan zeer snel gebeuren, aangezien die gewoon achteraan kan bijgeplaatst worden.
Gesorteerde tabel
Om het opzoeken in een tabel te versnellen kan de tabel gesorteerd worden. Het is dan mogelijk om het binair zoeken toe te passen: bekijk het middelste element, en dan weet je of het gezochte element ervoor of erachter ligt. Zo kan je onmiddellijk de helft van de tabel negeren, en op dezelfde manier verder zoeken in de overgebleven helft. Doordat we de tabel gesorteerd moeten houden zal het toevoegen van de file descriptors natuurlijk trager verlopen. Dit zoeken kan ook binair, maar dan moeten alle achterliggende elementen nog opgeschoven worden om plaats te maken voor de nieuwe bestandsbeschrijving. Bij het verwijderen moeten we de lege plaats opvullen door alle volgende elementen een plaats naar voor te schuiven.
Hashtabel
De positie in de tabel wordt berekend met behulp van de hashfunctie. In dit geval zal de gekozen hashfunctie de bestandsnaam transformeren naar een geheel getal. De bestandsbeschrijving zal dan op deze positie in de hashtabel bewaard worden. Wanneer we een bestandsbeschrijving zoeken, bereken we de hashwaarde van de bestandsnaam, en we kennen onmiddellijk de positie waarop de gezochte file descriptor staat. Een mogelijk probleem zijn collisions of botsingen. Wanneer de hashfunctie voor twee verschillende bestandsnamen dezelfde positie teruggeeft.
Hoe groter de hashtabel, hoe meer posities en hoe meer mogelijke uitkomsten van de hashfunctie, en hoe minder kans op een botsing. Het nadeel is natuurlijk dat er meer plaats verloren gaat voor de grotere tabel. In gunstige omstandigheden levert de hashfunctie dus onmiddellijk de plaats van een op te zoeken file descriptor. Ook het toevoegen of verwijderen van file descriptors kan zeer snel gebeuren.
Gelinkte lijst
In de tabel verwijst ieder element naar de positie van het volgende. We moeten dan alleen de startpositie kennen. Bijvoorbeeld: index 1 is de startpositie voor de directory, index 2 is de startpositie voor de vrije plaatsen in de tabel. Een verwijzing naar 0 geeft het einde van de lijst aan.
Wat betreft het opzoeken van een element is deze structuur te vergelijken met de klassieke tabel. Het moet sequentieel gebeuren.
Bij het toevoegen of verwijderen kunnen we gewoon de verwijzingen aanpassen, en alle elementen kunnen op hun plaats blijven staan. Het geringe plaatsverlies door de verwijzing naar de volgende bestandsbeschrijving levert dus snelheidswinst bij deze operaties.
Voorbeeld 1: FAT
Het FAT-bestandsysteem is het oorspronkelijke bestandssysteem van het MS-DOS besturingssysteem.
File Allocation Table
FAT staat voor File Allocation Table. Deze FAT is een file map met daarin de nodige informative over ieder blok van de schijf. Een FAT-partitie bevat een boot sector, 2 kopieën van de FAT, en een datagebied dat de directories en bestanden bevat.
Wanneer een blok onderdeel van een bestand is bevat het overeenkomstige FAT-element het adres van het volgende blok van het bestand. Het laatste blok van een bestand wordt aangeduid met de End Of File-code OxFFFF, en een vrij blok met 0x0000.
Het getal in de naam van deze systemen duidt aan hoeveel bits er gebruikt worden voor ieder element in de FAT. In een FAT12-systeem bevat ieder element van de FAT dus 12 bits.
Het aantal bits dat een FAT-element bevat bepaalt welke adressen er gebruikt worden voor de blokken. In een FAT-12 tabel zijn er voor ieder element 212 of 4096 mogelijkheden. We stellen dus vast dat de maximale adresseerbare schijfcapaciteit bepaald wordt door het beschikbaar aantal bits voor het adres, maar dat ook de blokgrootte een belangrijke rol speelt.
De totale grootte van de FAT-tabel speelt ook een belangrijke rol, aangezien we omwille van de performantie de volledige tabel in het werkgeheugen willen houden.
FAT12:
- De grootte van de tabel is dan 212 x 12 bits, dus 49152 bits of 6 KB.
Voor FAT32 wordt dit 232 x 32 bits, wat overeenkomt met 16GB. Door de blokgrootte te vergroten kunnen we dus oftewel zorgen voor een grotere adresseerbare schijfcapaciteit, of voor een kleinere FAT-tabel.
Partitiegrootte Blokgrootte 33 tot 64MB 512B 65 tot 128 MB 1KB 129 tot 256MB 2KB 257MB tot 8GB 4KB 8GB tot 16 GB 8KB 16GB tot 32GB 16KB Meer dan 33GB Niet ondersteund.
Voor meer dan 32GB is NTFS vereist.
Directories
De logische structuur van het FAT-besturingssysteem is een boomstructuur. Fysisch wordt een directory voorgesteld als een gewone tabel. Deze tabel wordt op dezelfde manier opgeslagen op de schijf als een gewoon bestand: blokken waarop de directory-tabel staan worden via een gelinkte lijst in de FAT bijgehouden.
In FAT12 en FAT16 staat de rootdirectory onmiddellijk na de 2 kopieën van de FAT. In FAT32 is dit niet meer verplicht. In de directory-tabel neemt iedere bestandsbeschrijving 32 bytes in.
- Naam
- Extensie
- Attributen
- Tijdstip creatie
- Hoogste bytes startadres
- Startadres
- Grootte
Het attributenveld verdient nog wat aandacht. Elk van de 8 bits komt overeen met een bepaald attribuut, en duidt aan of dit attribuut op het element van toepassing is. Eén van de attributen is het “directory”-attribuut. Als hier 1 staat beschrijft dit element een subdirectory, anders een bestand. Voor ieder bestand zijn er de read-only, hidden, system en archive attributen.
Het Volume Label wordt normaal slechts voor één speciaal element van de root-directory gebruikt. Hiervan is handig gebruik gemaakt om in Windows de mogelijkheid te voorzien om langere bestandsnamen te gebruiken in FAT-besturingssystemen.
De lange naam wordt verspreid over bepaalde delen van meerdere tabelelementen. Het volumeattribuut van deze elementen wordt op 1 gezet, zodat MS-DOS ze negeert.
Voorbeeld 2: NTFS
NTFS staat voor New Technology File System. NTFS bestandsnamen kunnen 255 tekens lang zijn, en de tekens worden m.b.v. unicode bewaard.
Master File Table
NTFS maakt gebruik van een Master File Table (MFT) In deze tabel wordt voor ieder bestand 1 bestandsbeschrijving bijgehouden. Deze beschrijving bevat naast de bestandsnaam, de grootte en de toegangsdata informatie over de toegangsrechten tot het bestand.
De MFT bevat één record per bestand, en niet één record per blok op de schijf. Hierdoor is de grootte van het MFT variabel. Standaard wordt 12,5% van de partitie voorzien voor de MFT, en 87,5% voor data. Wanneer het datagebied echter vol is, en de MFT neemt niet de voorziene 12,5% in, kan deze ruimte ook voor data worden gebruikt.
Header | Standard Information | File Name | Datagebied | … | Security Descriptor
Een record in de MFT bevat attributen. Welke overige attributen gebruikt worden staat niet vast in de specificatie van de NTFS. De gebruikte attributen op de partitie worden in het systeembestand $AttrDef bijgehouden.
De standaardinformatie omvat de grootte van het bestand, de toegangsdatums en andere eigenschappen. De toegangsrechten worden bewaard in de security descriptor. Omdat attributen geen vaste lengte hebben is er een hoofding nodig die de structuur van het record beschrijft.
Wanneer de inhoud van een attribuut te groot wordt om in het MFT-record te bewaren wordt het attribuut non-resident gemaakt. Dit betekent dat de inhoud van het attribuut in vrije blokken in het datagebied bewaard wordt, en dat het MFT-record een verwijzing naar deze blokken bevat.
Het data-attribuut in een MFT-record bevat verwijzingen naar blokken in het datagebied. Om de toegangssnelheid te verhogen en de hoeveelheid adresinformatie te beperken wordt gebruik gemaakt van extents, die in de context van NTFS vaak data runs of streams genoemd worden.
Voor kleine bestanden wordt de inhoud van het bestand zelf binnen het data-attribuut in het MFT-record opgeslagen. Zo gauw het bestand is opgezocht is directe toegang mogelijk zonder schijftoegangen. Dit gebeurt typisch voor bestanden kleiner dan 1,5KB.
Wanneer een bestand zo groot wordt dat de verschillende data runs niet meer binnen het data-attribuut kunnen beschreven worden is het mogelijk om het data-attribuut zelf buiten het MFT-record op te slaan. Door deze flexibele structuur is er bij NTFS geen sprake van een maximale bestandsgrootte.
Directories
De logische structuur van NTFS is een boomstructuur, net als bij FAT. Voor directories wordt ook een record in de MFT aangemaakt. Een directory-record heeft extra attributen die verwijzingen bevatten naar de bestanden en subdirectories. Net als bij gewone bestanden worden deze gegevens voor een kleinere directory in het record bijgehouden.
De fysische structuur van de inhoud van een directory wordt bijgehouden m.b.v. B-bomen. Ingewikkelde shit die niet in de cursus staat.
Second Extended Filesystem
Het Extended Filesystem wordt beschouwd als het standaard-bestandssysteem van Linux.
Inodes
Net zoals Linux zelf is het Extended Filesystem, en dus ook de opvolgers ervan, gebaseerd op Unix. De blokken van de schijf worden ingedeeld in 4 soorten:
- Bootblok
- Superblok
- Inodeblokken
- Datablokken
In het bootblok staat bootstrap code die het besturingssysteem moet laden en opstarten. Het heeft geen specifieke functie in het bestandssysteem. Het superblok bevat globale gegevens over het bestandssysteem en enkele instellingen.
Met ieder bestand in ext2 wordt een bestandsstructuur geassocieerd, die inode wordt genoemd. Hierin vinden we alle metadata en de verwijzingen naar de datablokken waarin de inhoud van het bestand opgeslagen is. Achter het superblok staat een lijst met inodeblokken, soms ook I-list genoemd. De overige blokken in het bestandssysteem worden gebruikt om de inhoud van bestanden in weg te schrijven.
Een inode bevat dus allerlei gegevens, waaronder de eigenaar van het bestand en de toegangsrechten. Merk op dat de bestandsnaam niet in de inode wordt bewaard. De bestandsnamen vinden we in de directories, samen met een verwijzing naar de inode.
Een ext2-bestandsnaam kan tot 255 tekens bevatten. Zoals gezegd is een directory een bestand met daarin een lijst va bestandsnamen gekoppeld aan een inode. Het inode-nummer wordt opgeslagen, gevolgd door 2 variabelen die respectievelijk de lengte van de entry en de naam aangeven. Als laatste wordt de eigenlijke bestandsnaam opgeslagen. Doordat de lengte van de bestandsnaam gekend is kan er naar het volgende element gesprongen worden.
Bestanden kunnen in ext2 niet-aaneengesloten gealloceerd worden. In de inode is ruimte voorzien om de adressen van 13 blokken te bewaren. De eerste 10 zijn directe blokadressen, die verwijzen naar datablokken. Het 11de adres verwijst naar een indexblok, waarin de adressen van datablokken opgeslagen kunnen worden. Het 12de en 13de adres in de inode zijn respectievelijk dubbel en driedubbel indirect. Het 11de adres verwijs dus naar een datablok met daarin adressen van indexblokken.
Het grote voordeel van deze structuur is dat de adresinformatie voor kleine bestanden volledig in het werkgeheugen beschikbaar is. Met bestanden die maximaal 10 datablokken in beslag nemen kan dus erg snel gewerkt worden. De maximale bestandsgrootte in bytes wordt gegeven door:
- Smax = [12 + (b/4) + (b/4)² + (b/4)³]b
Vrije blokken en inodes
In het superblok worden tabellen bijgehouden met de adressen van een aantal vrije datablokken en een aantal vrije inodes. In deze tabellen is echter niet voldoende plaats om alle vrije elementen te bewaren. Wanneer bijvoorbeeld een bestand moet worden uitgebreid, wordt een adres van een vrij blok uit de tabel in het superblok genomen. Bij het verwijderen van een bestand worden de adressen van de vrijgekomen blokken in de tabel ingeschreven. Indien de tabel leeg is op het ogenblik dat een blok aan de file moet worden toegekend zal de tabel uit het eerste blok in de gelinkte lijst naar het superblok worden gekopieerd. Het hierdoor vrijgekomen blok wordt aan het bestand toegevoegd. Als de tabel helemaal gevuld is met adressen, en er wordt een blok vrijgegeven, dan wordt de tabel uit het superblok naar het vrijgekomen blok gekopieerd, waarna dit als eerste blok in de gelinkte lijst wordt opgenomen.
Voor vrije inodes wordt een gelijkaardige methode gebruikt. In het superblok staat een tabel voor 100 nummers van vrije inodes. Wanneer een nieuw bestand wordt aangemaakt vindt men hier het nummer van een beschikbare inode. Bij het verwijderen van een bestand wordt het nummer van de vrijgekomen inode toegevoegd aan de tabel.
Het veld voor het bestandstype staat op 0 als de inode niet in gebruik is. Wanneer de tabel in het superblok leeg is, kan de kernel de i-list doorlopen en de nummers van de 100 eerste vrije inodes in de tabel plaatsen.
Om het zoeken naar vrije inodes zo efficiënt mogelijk te laten verlopen, wordt de positie van de laatst gevonden vrije inode apart bijgehouden, om de volgende zoektocht vanop die positie te kunnen starten. Wanneer er een inode vrijkomt door het verwijderen van een bestand zijn er 2 mogelijkheden. Als de positie van deze inode voor de opgeslagen positie komt wordt de opgeslagen positie erdoor vervangen. Als de positie erna komt moet er niets gebeuren, want dan wordt de nieuwe vrije inode sowieso gevonden bij één van de volgende zoektochten. Harde en zachte links
Omdat de bestandsbeschrijving niet in de directory bewaard wordt, kan men op een eenvoudige en effectieve manier eenzelfde bestand via verschillende paden aanspreken. Men laat in dit geval 2 bestanden verwijzen naar eenzelfde inode, en dus ook naar hetzelfde bestand. Dit wordt een hard link genoemd.
Voor symbolische links wordt verwezen naar een ander pad, niet naar een inode.
Bij het verwijderen mogen de inode en datablokken pas verwijderd worden als er geen enkel link meer is. Daarom wordt in een inode een teller met het aantal links bijgehouden. Bij symbolic links is dit niet nodig. Wanneer het bestand waarnaar een symbolic link verwijst verwijderd wordt, blijft de link bestaan. Deze wordt dan wees of orphan genoemd.
Bijzonderheden
Ext 2 heeft enkele specifieke eigenschappen.
Het aantal inodes wordt bepaald bij het aanmaken van het bestandssysteem. Het kan gebeuren dat je geen nieuw bestand kan aanmaken, hoewel er toch datablokken beschikbaar zijn. Een ext2 bestandssysteem heeft dus een maximum aantal bestanden. Standaard wordt er één inode aangemaakt voor iedere 4096 bytes beschikbare schijfruimte. Als de gemiddelde grootte van je bestanden kleiner is dan 4 kB, kan je dus snel met een tekort aan inodes kampen.
Bij het creëren van het bestandssysteem wordt een deel (standaard 5%) toegekend aan de beheerder of root. Zo kan een gebruiker niet alles volschrijven. Een laatste bijzonder bestandstype is de zogenaamde device file. Deze bestanden bevatten geen data, maar stellen een systeemapparaat voor. Zo kan men communiceren met een apparaat door te lezen of schrijven van of naar de bijhorende device file.
2010 herhalingsvragen boek Stallings
Hoofdstuk 1
1.1 Benoem en beschrijf beknopt de vier belangrijkste elementen van een computer.
- - De processor beheert de werking van de computer en voert de functies voor gegevensverwerking uit
- - Het hoofdgeheugen bevat gegevens en programma’s? Dit geheugen is meestal vluchtig. Hoofdgeheugen wordt ook wel reëel of primair geheugen genoemd.
- - I/O-modules verplaatsen gegevens tussen de computer en zijn externe omgeving. De externe omgeving bestaat uit uiteenlopende apparaten zoals secundair geheugen, diskettes, communicatieapparatuur en werkstations.
- - De systeembus verzorgt de communicatie tussen de processors, het hoofdgeheugen en de I/O-modules.
1.2 Definieer de twee belangrijkste categorieën processorregisters.
- - Registers die zichtbaar zijn voor de gebruiker: bieden de programmeur om in machine- of assembleertaal verwijzingen naar het hoofdgeheugen te minimaliseren door registergebruik te optimaliseren.
- - Stuur en statusregisters: worden gebruikt door de processor voor het besturen van de werking van de processor en door geprivilegieerde routines van het besturingssysteem.
1.3 Wat zijn, in algemene termen, de vier te onderscheiden acties die een machine-instructie kan specificeren?
- - Processorgeheugen: gegevens kunnen worden overgebracht van de processor naar het geheugen of van het geheugen naar de processor
- - Processor-I/O: gegevens kunnen worden uitgewisseld met een randapparaat door ze over te sturen tussen de processor en een I/O-module.
- - Gegevensverwerking: de processor kan een rekenkunde of logische bewerking uitvoeren op gegevens
- - Besturing: een instructie kan de volgorde van uitvoering wijzigen. Bv in instructie 149 staat dat er naar 182 moet gesprongen worden.
1.4 Wat is een interrupt?
Een interrupt is feitelijk een onderbreking. Hiermee kan de processor andere instructies uitvoeren terwijl een tragere bewerking aan de gang is. Als deze bewerking gedaan is, stuurt het betreffende apparaat een interrupt, waardoor de processor weet dat hij verder kan gaan met bv de I/O.
1.5 Op welke manier worden de verschillende interrupts afgehandeld?
Indien bedoeld bij meervoudige interrupts:
- o Uitschakelen van interrupts terwijl er een interrupt wordt verwerkt, na afhandeling doet de processor deze
- o Nesten van interrupts: als er een interrupt bezig is, en er komt een nieuwe aan, met een hogere prioriteit, dan wordt deze genest, hierna wordt er verder gegaan met de eerste.
1.6 Welke kenmerken onderscheiden de verschillende elementen van een geheugenhiërarchie?
Als men van boven naar onder de hiërarchie doorloopt, gebeurd het volgende:
- a. De kosten per bit dalen
- b. De capaciteit neemt toe
- c. De toegangstijd neemt toe
- d. De frequentie van de processortoegang tot het geheugen neemt af
1.7 Wat is cachegeheugen?
Een klein, snel geheugen tussen de processor en het hoofdgeheugen. Het bevat een klein gedeelte van het hoofdgeheugen dat hierdoor veel sneller bereikbaar is. De cache werkt dus als een buffer tussen het hoofdgeheugen en de processor, waarmee een intern geheugen ontstaat met 2 niveaus, Dit geeft betere prestaties dan met 1 niveau. (Dankzij lokaliteit).
1.8 Benoem en beschrijf beknopt drie technieken voor I/O-bewerkingen.
- Geprogrammeerde I/O: Processor doet oproep voor I/O-bewerking, I/O-module geeft echter geen waarschuwing wanneer deze klaar is, de processor zal zelf periodiek moeten kijken of de module al klaar is. Instructieset bevat daarom volgende categorieën:
- o Besturen: extern apparaat activeren en vertellen wat het moet doen
- o Status controleren
- o Lezen en schrijven
- Tijdverslinden proces dat de processor onnodig bezighoudt
- - Interruptgestuurde I/O: Processor geeft opdracht voor I/O en gaat dan verder met iets anders, wanneer I/O-module klaar is, stuurt de module een interrupt, processor voert dan de gegevensoverdracht uit en hervat de vorige verwerking.
- Dit is efficiënter doordat de processor niet meer nodeloos moet wachten, maar het verbruikt nog steeds veel processortijd.
- - Directe geheugentoegang (DMA): De processor geeft een opdracht tot I/O, de DMA-module handelt de bewerking verder af zonder tussenkomst van de processor. Als dit klaar is stuurt de DMA-module een interrupt naar de processor. De processor is dus enkel betrokken bij het begin en het einde.
Hoofdstuk 2
2.1 Wat zijn de drie doelen van een ontwerp van een besturingssysteem?
- - Gemak: het maakt een computer makkelijker te gebruiken.
- - Efficiëntie: dankzij een besturingssysteem kunnen de systeembronnen efficiënt gebruikt worden
- - Flexibiliteit: Een besturingssysteem moet zo zijn gemaakt dat het ontwikkelen, testen en introduceren van nieuwe systeemfuncties zo goed mogelijk is.
2.2 Wat is de kernel van een besturingssysteem?
De nucleus, dit bevat de meest gebruikte functies in het besturingssysteem. Bevindt zich in het hoofdgeheugen.
2.3 Wat is multiprogrammering?
Meerdere programma’s in het geheugen laden, en wanneer er een programma wacht op I/O, overschakelen naar een ander.
2.4 Wat is een proces?
- - Een programma dat wordt uitgevoerd
- - Een geactiveerd programma dat op een computer draait
- - De entiteit die kan worden toegewezen aan en worden uitgevoerd door een processor
- - Een eenheid van activiteit die wordt gekenmerkt door een enkelvoudig e, sequentiële verwerking (thread), een actuele toestand en een aantal bijbehorende systeembronnen
2.5 Hoe wordt de uitvoeringscontext van een proces door het besturingssysteem gebruikt?
Het wordt apart gehouden van het proces zelf. Hierin zitten bv registerinhouden.
2.6 Benoem en beschrijf beknopt vijf opslagmanagementverantwoordelijkheden van een standaardbesturingssysteem.
- - Procesisolatie: Het besturingssysteem moet voorkomen dat onafhankelijke processen elkaars geheugen, gegevens of instructies, verstoren.
- - Automatische toewijzing en beheer. Programma’s moeten waar nodig dynamisch worden verdeeld over de geheugenhiërarchie
- - Ondersteuning voor modulair programmeren.
- - Bescherming en toegangsbeheer. Door et delen van geheugen ontstaat de mogelijkheid dat een programma de geheugenruimte van een ander programma adresseert. Soms is dit gewenst, soms brengt het de stabiliteit in gevaar. Het besturingssysteem moet toestaan dat gedeelten van het geheugen op verschillende manieren toegankelijk zijn.
- - Langetermijnopslag. Veel gebruikers en toepassingen vereisen middelen voor het opslaan van informatie gedurende langere perioden.
2.7 Bespreek het verschil tussen een reëel en virtueel adres?
Het virtuele adres wordt door het proces gebruikt om een woord aan te spreken, het bestaat uit een paginanummer en de offset. Het reëele adres is het eigenlijke adres binnen het geheugen.
2.8 Beschrijf de round-robin schedulingtechniek.
Alle processen in een wachtrij krijgen om beurten wat tijd van de scheduler.
2.9 Bespreek het verschil tussen een monolithische kernel en een microkernel.
Monolytische kernel is één kolossale kernel, deze verzorgt het overgrote deel van de functionaliteit van een besturingssysteem. Dit is meestal ook maar één groot proces met gedeelde adresruimte. Een microkernel is een kleine kernel die slechts enkele essentiële functies bevat, de andere diensten worden verzorgd door processen (of servers) die worden uitgevoerd in gebruikersmodus en worden behandeld zoals elk ander proces.
2.10 Wat is multithreading?
Een techniek waarbij een proces dat een toepassing uitvoert, wordt verdeeld in draden (threads) die tegelijkertijd kunnen uitgevoerd worden.
Een thread omvat een context (programmateller, registers,..) en een eigen gegevensruimte. Een thread wordt sequentieel uitgevoerd.
Een proces is een verzameling van een of meer threads.
Hoofdstuk 3
3.1 Wat is een instructiespoor?
De volgorde van instructies die voor een proces worden uitgevoerd
3.2 Welke algemene gebeurtenissen geven aanleiding tot het creëren van een proces?
- - Nieuwe batchtaak
- - Interactieve aanmelding (logon)
- - Gecreëerd door het besturingssysteem om een dienst te verzorgen
- - Verwekt door een bestaand proces
3.3 Geef een korte definitie van iedere toestand in het procesmodel van figuur 3-6.
- - Actief (running): proces wordt uitgevoerd
- - Gereed (ready): proces dat meteen uitgevoerd kan worden als het de gelegenheid krijgt
- - Geblokkeerd (blocked) een proces dat niet uigevoerd kan worden totdat een bepaalde gebeurtenis optreedt
- - Nieuw (new): een proces dat onlings is gecreeerd maar nog niet door het systeem is toegevoegd aan de verzameling met uitvoerbare processen
- - Einde (exit): een proces dat door het besturingssysteem wordt ontslagen uit de groep uitvoerbare processen
3.4 Wat wordt bedoeld met het preëmptief onderbreken van een proces?
Een proces keert terug van kernelmodus naar gebruikersmodus maar de kernel onderbreekt het preemptief* om een proces met hogere prioriteit dat gereed staat in te roosteren. Ten opzichte van het toedelen (dispatching) vormen de processen in de twee toestanden preempted en ready to run in Memory echter één wachtrij.
preemptief: zonder dat het volledig is uitgevoerd of moet wachten op een gebeurtenis
3.5 Wat betekent het begrip swappen en wat is het doel ervan?
Het verplaatsen van een deel of het geheel van een proces van het hoofdgeheugen naar schijf.
Om plaats in het hoofdgeheugen vrij te maken door geblokkeerde processen naar de schijf te verplaatsen en deze dan de status opgeschort (suspended) mee te geven.
3.6 Waarom bevat figuur 3-9 twee geblokkeerde toestanden?
Er is een geblokkeerde toestand die nog in het hoofdgeheugen zit, de andere is al geswapped, en bevindt zich nu op de schijf.
3.7 Geef vier kenmerken van een opgeschort proces.
- - Het proces is niet onmiddellijk beschikbaar voor uitvoering
- - Het proces kan al of niet wachten op een gebeurtenis.
- - Het proces werd in de toestand Opgeschort geplaatst door het proces zelf of door een ander om de uitvoering van het proces te verhinderen
- - Het proces kan deze toestand niet verlaten tenzij een ander hiervoor expliciet een opdracht geeft
3.8 Voor welke soorten entiteiten houdt het besturingssysteem informatietabellen bij vanuit beheersoverwegingen?
-
- - Geheugen
- - I/O
- - Bestand
- - Proces
3.9 Geef drie algemene informatiecategorieën in een procesbesturingsblok.
- Procesidentificatie
- Processortoestandinformatie
- Registers
- stack
- Procesbesturingsinformatie
- o Toestand
- o prioriteit
3.10 Waarom zijn twee verwerkingsmodi (gebruiker en kernel) nodig?
Het besturingssysteem en de belangrijkste tabellen van het besturingssysteem, zoals de procesbesturingsblokken moeten beschermd worden tegen verstoringen door gebruikersprogramma’s. In de kernelmodus heeft de software volledige controle over de processor en alle bijbehorende instructies, registers en geheugen. Dit is niet gewenst voor gebruikersprogramma’s.
3.11 Welke stappen voert het besturingssysteem uit bij het creëren van een nieuw proces?
- Het besturingssysteem wijst een unieke procesidentificatie toe aan het nieuwe proces.
- Het besturingssysteem wijst ruimte toe aan het proces
- Het procesbesturingsblok moet worden geïnitialiseerd
- De juiste koppelingen moeten worden ingesteld
- Soms moeten andere gegevensstructuren worden gemaakt of uitgebreid
3.12 Wat is het verschil tussen een interrupt en een val (trap)?
Interrupt wordt veroorzaakt door een of andere gebeurtenis die zich buiten het actieve proces bevindt en daarvan onafhankelijk is, bv voltooiing I/O
Val hangt samen met een fout of uitzonderingsconditie die wordt gegenereerd binnen het actieve proces zelf, bv ongeldige poging tot bestandstoegang
3.13 Geef drie voorbeelden van een interrupt.
- - Klokinterrupt: Proces heeft maximaal toegestane uitvoeringstijd benut
- - I/O-interrupt: Een I/O actie is opgetreden. Indien dit een gebeurtenis is waar ene proces op wacht, wordt dit proces van geblokkeerd naar gereed veranderd
- - Geheugenfout: Processor krijgt een verwijzing naar een woordadres in het virtuele geheugen dat zich niet in het hoofdgeheugen bevindt. Processor geeft opdracht tot overzetten van secundair naar hoofdgeheugen en gaat dan verder met een ander proces. Als het overzetten klaar is, komt er een interrupt.
3.14 Wat is het verschil tussen een moduswisseling en een proceswisseling?
Moduswisseling is het wisselen van gebruikers naar kernel modus voor bv een interrupt, een proceswisseling is het veranderen van een status van een proces. Bv, van geblokkeerd naar gereed.
Hoofdstuk 12
12.1 Wat is het verschil tussen een veld en een record?
Een veld is een basiselement van gegevens, het bevat één waarde, bv achternaam, datum.
Een record is een verzameling gerelateerde velden die door bepaalde toepassingsprogramma’s als een eenheid kunnen worden behandeld. Het bevat dus velden.
12.2 Wat is het verschil tussen een bestand en een database?
Een bestand (file) is een verzameling vergelijkbare records. Gebruikers en toepassingen behandelen het bestand als één entiteit en verwijzen ernaar aan de hand van een naam. Heeft een unieke bestandsnaam.
Een database is een verzameling gerelateerde gegevens. Er bestaan expliciete relaties tussen gegevenselementen. Het bestaat uit een of meerdere bestanden.
12.3 Wat is een systeem voor bestandsbeheer?
Een verzameling systeemsoftware die diensten verzorgt voor gebruikers en toepassingen bij het gebruiken van bestanden.
12.4 Welke criteria zijn van belang bij het kiezen van een bestandsorganisatie(=logische structuur)?
- - Korte toegangstijd
- - Gemak van bijwerken
- - Efficiënt gebruik van opslagruimte
- - Onderhoudsgemak
- - Betrouwbaarheid
12.5 Noem en beschrijf in het kort vijf vormen van bestandsorganisatie.
- - Stapelbestand: eenvoudigste soort bestandsorganisatie, het is een stapel (pile). Gegevens worden verzameld in de volgorde waarin ze binnenkomen. Geen structuur, dus altijd volledig doorzoeken.
- - Sequentieel bestand: Vaste indeling van records, alle records hebben dezelfde lengte een bestaan uit hetzelfde aantal velden met vaste lengte in specifieke volgorde. Bevat een sleutelveld.
- - Index-sequentieel bestand: Omzeilt nadelen van sequentieel. Behoudt de hoofdkenmerk: records zijn ingedeeld op volgorde op basis van het sleutelveld. Hieraan zijn 2 kenmerken toegevoegd: een index naar het bestand voor het ondersteunen van willekeurige toegang en een overloopbestand (overflow file)
- - Geïndexeerd bestand: Dit gebruikt meerdere indexen, één voor elk veldtype dat zou kunnen worden gebruikt bij het zoeken.
- - Direct of hashed bestand: gebruikt mogelijkheid van schijven om directe toegang te geven tot elk blok met een bekend adres. Sleutelveld in elke record is vereist. Wordt vaak gebruikt als snelle toegang vereist is.
12.6 Waarom is de gemiddelde zoektijd voor het vinden van een record bij een index-sequentieel bestand minder dan bij een sequentieel bestand?
Het maakt gebruik van verwijzingen, waardoor men sneller op een bepaald veld kan uitkomen. Bv een sequentieel bestand van één miljoen records. Het zoeken naar een bepaalde sleutelwaarde vereist gemiddeld een half miljoen recordtoegangen. Als er nu echter een index met duizen ingangen wordt gemaakt. Dan kost het zoeken van de records gemiddeld 500 toegangen tot het indexbestand, en dan nog eens 500 tot het hoofdbestand. De gemiddelde zoeklengte wordt dus verminderd van een half miljoen tot duizend.
12.7 Wat zijn gebruikelijke bewerkingen die men kan uitvoeren bij een directory?
- - Zoeken
- - Creëren
- - Verwijderen
- - Weergeven
- - Bijwerken
12.8 Wat is het verband tussen een padnaam en een werkdirectory?
De volledige padnaam elke keer uitspellen is vervelend, hiervoor gebruikt men de werkdirectory van waaruit men relatief verwijst naar een bestand.
12.9 Wat zijn gangbare toegangsrechten die kunnen worden toegekend of geweigerd aan een individuele gebruiker van een bepaald bestand?
- - Geen
- - Kennis
- - Uitvoeren
- - Lezen
- - Toevoegen
- - Bijwerken
- - Beveiliging wijzigen
- - Verwijderen
12.10 Noem en beschrijf in het kort drie manieren van blokvorming.
- - Blokvorming met vaste lengte: Hierbij worden records met vaste lengte gebruikt en wordt een geheel aantal records opgeslagen in een blok. Er kan ongebruikte ruimte zijn aan het einde van elk blok; dit wordt aangeduid als interne fragmentatie
- - Gekoppelde blokvorming met variabele lengte: hierbij worden records met variabele lengte gebruikt en deze worden samengepakt in blokken, alle ruimte wordt gebruikt. Sommige records kunnen daarbij twee blokken omspannen, waarbij het vervolg wordt aangegeven door een verwijzing naar het volgende blok
- - Niet-gekoppelde blokvorming met variabele lengte: hierbij worden records met variabele lengte gebruikt, maar deze worden niet gekoppeld opgeslagen. De meeste blokken bevatten loze ruimte, omdat het onmogelijk is de rest van een blok te gebruiken als de volgende record groter is dan de resterende ruimte
12.11 Noem en beschrijf in het kort drie vormen van bestandstoewijzing
- - Aaneengesloten toewijzing: Een aaneengesloten verzameling blokken wordt toegewezen aan een bestand op het moment dat het bestand wordt gecreëerd. Tabel voor bestandstoewijzing bevat maar één ingang voor elke bestand te bevatte, die het beginblok en de lengte aangeeft.
- - Kettingtoewijzing: Toewijzing vindt plaats op basis van aparte blokken. Elk blok bevat een wijzer naar het volgend blok in de ketting. Tabel voor bestandstoewijzing bevat maar één ingang voor elke bestand te bevatte, die het beginblok en de lengte aangeeft.
- - Indextoewijzing: Hierbij bevat de tabel voor bestandstoewijzing een afzonderlijke index van één niveau voor elk bestand; de index heeft één ingang voor elke portie die aan het bestand is toegewezen
2010 juni examen
Strypsteen
- Leg het bootproces van een computer uit met als actieve partitie Windows XP. (11 stappen)
- Interruptverwerking bestaat uit 9 stappen.
- Bij welke 4 stappen word de stack gebruikt ?
- Geef ook bij elke stap welke hardware of software deze stap uitvoert
- Leg multiprogramming uit (schema gegeven, gewoon in te vullen)
- Processen
- Waarom zij er opgeschorte processes ?
- Welke 2 soorten opgeschorte proccessen zijn er ?
- Leg de 2 processen uit.
- Hoe komt een proces in deze statussen?
- Oefening op Fat 12
Geens
- Bespreek unix procestoestand diagram: entiteiten en relaties
- Bespreek en los op: unix inode(-12?)
- leg bootproces uit en leg connectie met linux of windows
- inzichtvraag: fat-labo: een vriend gaat op vakantie maar wist perongeluk wat foto's van zijn camera met flashkaartje. Welke tips heb je voor hem? hoe kan je de foto's recupereren met enkel een hex-editor. Leg stap voor stap uit.
2010 samenvatting van Onbekend
Hoofdstuk 1 Overzicht van computersystemen
Interrupts
Onderbreken de normale verwerking van een processor
De meeste I/O apparaten zijn trager dan de processor, de processor moet dus wachten op het apparaat. -> verspilling van processortijd
4 klassen van Interrupts:
- Programma: resultaat van uitvoering van een instructie. Bv delen door nul
- Timer: gegenereerd door een timer binnen de processor
- I/O: gegenereerd door een I/O-controller om de normale voltooiing van een bewerking of foutcondities te melden
- Hardwarefout: geheugenpariteitsfout, uitvallen van stroom, ..
Processor controleert of er een interrupt is opgetreden, indien dit zo is dan onderbreekt de processor het huidige programma en voert hij een routine uit voor interruptafhandeling
Interruptverwerking
1. Apparaatcontroller of andere systeemhardware geeft een interrupt
2. Processor voltooit de uitvoering van de huidige instructie
3. Processor bevestigt de ontvangst van de interrupt
4. Processor plaatst het programmastatuswoord (PSW) en de programmateller (PC) op de besturingsstack
5. Processor laadt nieuwe PC-waarde op basis van de interrupt
6. Sla het restant van de informatie over de processtatus op
7. Verwerk de interrupt
8. Herstel de informatie over de processtatus
9. Herstel het oude PSW en de oude PC
1 te.m. 5: Hardware
6 t.e.m. 9: Software
Multiprogramming
Processor heeft meer dan één programma om uit te voeren. Als de processor wacht op een I/O-module, gaat hij beginnen aan de uitvoering van een ander proces. Krijgt hij een interrupt dan gaat hij terug naar de eerste. Volgorde hangt af van hun relatieve prioriteit.
Komt er dus hierna een ander programma met hogere prioriteit, zal het tweede programma moeten wachten.
I/O technieken
1. Geprogrammeerde I/O
I/O-module doet de gevraagde actie, bv enkele bytes in buffer plaatsen. Hierna plaatst het de juiste bits in het I/O statusregister. Er komt geen interrupt. De processor moet regelmatig kijken of de I/O-instructie voltooid is.
=> tijdsverslindend proces dat de processor onnodig bezighoudt
2. Interruptgestuurde IO
I/O-module stuurt een interrupt wanneer het klaar is om gegevens uit te wisselen. Processor slaat context van het huidige programma op en begint aan de interruptafhandeling
=> Geen nodeloos wachten, maar gebruikt nogaltijd veel processortijd doorat de processor elk geschreven of gelezen woord langs de processor moet.
3. Directe geheugentoegang (DMA)
Verstuurt een blok data meteen van of naar het geheugen. Een interrupt wordt gestuurd wanneer de overdracht compleet is. Dit is veel efficiënter.
Hoofdstuk 2 Overzicht van besturingssystemen
Besturingssysteem: Programma dat de uitvoering van toepassingsprogramma’s regelt en de functie vervult van een interface tussen de gebruiker van de computer en de computerhardware.
Drie doelstellingen:
- Gemak: gemakkelijker te gebruiken
- Efficiëntie: Systeembronnen efficiënt gebruiken
- Flexibiliteit: ontwikkelen,testen en introduceren van nieuwe systeemfuncties mogelijk
Besturingssysteem verzorgt volgende diensten:
- Ontwikkelen van programma’s
o Editors en debuggers
- Uitvoeren van programma’s
- Toegang tot I/O-apparaten
- Beheerde toegang tot bestanden
- Toegang tot het systeem
- Opsporen en afhandelen van fouten
o Interne en externe hardwarefouten
o Softwarefouten
o Verzoek van toepassing waaraan het besturingssysteem niet aan kan voldoen
- Administratie
o Gebruiksstatistieken
o Prestatieparameters bewaken
o Anticiperen op behoefte
o Toerekenen van kosten
Het besturingssysteem is verantwoordelijk voor beheer van systeembronnen.
Het werkt hetzelfde als gewone computersoftware: het is een programma dat wordt uitgevoerd door de processor.
Het geeft de besturing veelvuldig uit de handen en is voor het terugkrijgen afhankelijk van de processor.
Kernel
Deel van het besturingssysteem dat zich in het hoofdgeheugen bevindt.
Het bevat de meest gebruikte functies. Wordt ook wel eens nucleus genoemd.
Evolutie van besturingssystemen
Een besturingssysteem zal zich om een aantal redenen in de loop van de tijd ontwikkelen:
- Hardwarevernieuwing en nieuwe typen hardware. Bv Paginerende hardware, grafische werkstations
- Nieuwe diensten: wensen van gebruikers
- Verbeteringen: verbeteren van fouten in BS
Seriële verwerking
Men werkte meteen met de hardware, er was geen besturingssysteem. Het werd bestuurd via een bedieningspaneel met lampjes, schakelaars, een invoerapparaat en een printer.
Twee problemen:
- Scheduling: reserveren van machinetijd. Reserveerde je een uur, en had je maar 45 min nodig was het verspilling, had je meer nodig, dan moest je stoppen.
- Insteltijden: één programma bestond uit meerdere stappen, zat hier een fout in, dan moest je teruggaan naar het begin.
Eenvoudige batchsystemen
Gebruik van een monitor. Dit is software die de volgorde controleerde. Gebruiker gaf meerdere opdrachten aan operator, deze maakte hier een batch van en gaf deze aan de monitor. Na uitvoering hiervan werd er teruggegaan naar de monitor die dan weer verder ging met het volgende programma.
Job Control Language: Speciaal type van programmeertaal (jobbesturingstaal) die wordt gebruikt voor het opgeven van instructies aan de monitor. Zoals welke compiler te gebruiken, welke data te gebruiken.
Hardwaremogelijkheden:
- Geheugenbeveiliging: Een gebruikersprogramma mag het geheugengebied met de monitor niet wijzigen
- Timer: Een taak krijgt maar een bepaalde tijd voor een taak, verloopt deze wordt er een interrupt gestuurd.
- Geprivilegieerde instructies: Sommige instructies mogen enkel door de monitor uitgevoerd worden
- Interrupts: interrupts verhogen de flexibiliteit bij het afstaan en verkrijgen van besturing aan en van gebruikersprogramma’s
Geheugenbeveiliging:
Gebruikersprogramma’s worden uitgevoerd in gebruikersmodus: bepaalde instructies mogen niet uitgevoerd worden.
Monitor wordt uitgevoerd in kernelmodus: geprivilegieerde instructies mogen uitgevoerd worden, beveiligde geheugengebieden mogen benaderd worden.
Timesharing systemen
Multiprogramming gebruiken om meerdere interactieve jobs af te handelen. Meerdere gebruikers gebruiken hetzelfde systeem dmv terminals. Elke gebruiker krijgt kleine periodes van processortijd wanneer dit nodig is.
Belangrijke prestaties
Vijf belangrijke intellectuele prestaties verricht op het gebied van:
- Processen
- Geheugenbeheer
- Bescherming en beveiliging van informatie
- Scheduling en beheer van bronnen
- Systeemstructuur
Processen
- Een programma dat wordt uitgevoerd
- Een geactiveerd programma dat op een computer draait
- De entiteit die kan worden toegewezen aan en worden uitgevoerd door de processor
- Een eenheid van activiteit die word gekenmerkt door een enkelvoudige sequentiële verwerking (thread), een actuele toestand en een aantal bijbehorende systeembronnen
Vier hoofdoorzaken van fouten:
- Onjuiste synchronisatie: proces wacht op I/O maar signaal komt niet of dubbel aan
- Mislukte wederzijdse uitsluiting: Twee processen mogen niet hetzelfde bestand tegelijk aanpassen
- Niet-vastomschreven programmawerking: als er gedeeld geheugen is tussen 2 programma’s, en een van de twee overschrijft dit op onvoorstelbare wijze, kan het andere onstabiel worden.
- Dodelijke omarming (deadlock): twee programma’s zitten vast omdat ze op elkaar wachten.
Proces bestaat uit drie delen:
- Een uitvoerbaar (executable) programma
- De bijbehorende gegevens die het programma nodig heeft (variabelen, werkruimte, buffers)
- Uitvoeringscontext van het programma (inhoud gegevensregisters, programmateller, prioriteit,..)
Geheugenbeheer
Vijf hoofdtaken:
- Procesisolatie: onafhankelijke processen mogen elkaars geheugen niet verstoren
- Automatische toewijzing en beheer: programma’s moeten juist verdeeld worden over geheugenhiërarchie
- Ondersteuning van modulair programmeren
- Bescherming en toegangsbeheer
- Langetermijnopslag
Virtueel geheugen
- Zorgt voor opslag op lange termijn, informatie word opgeslagen in bestanden
- Geheugen op logisch niveau adresseren
Paginering
- Proces opdelen in een aantal blokken van vaste lengte (pagina’s)
- Virtueel adres bestaat uit paginanummer en een relatieve locatie binnen de pagina (offset)
- Een pagina kan zich overal in het hoofdgeheugen bevinden
- Reëel adres is het geheugenadres
Bescherming en beveiliging van informatie
Vier categorieën:
- Beschikbaarheid: beveiligen van systeem tegen onderbrekingen
- Vertrouwelijkheid: Geen gegevens lezen waarvoor ze geen toestemming hebben
- Gegevensintegriteit: bescherming van gegevens tegen ongewenst gebruik
- Authenticiteit: correcte verificatie van identiteit en geldigheid van gegevens
Scheduling en beheer van bronnen
Drie overwegingen:
- Rechtvaardigheid: evenredige en rechtvaardige toegang tot een bron
- Gedifferentieerd reactievermogen: onderscheid maken tussen verschillende klassen taken die een andere afhandeling vereisen. Bv I/O voorlaten om het apparaat vrij te maken voor andere processen
- Efficiëntie: Doorvoer maximaliseren, antwoordtijd minimaliseren en zoveel mogelijk gebruikers tegelijk ondersteunen
Systeemstructuur
Het systeem is een serie van niveaus. Elk niveau heeft een eigen deelverzameling van functies. Elk niveau is afhankelijk van het volgende lagere niveau voor meer primitieve functies.
Dit splitst het probleem in beter hanteerbare deelproblemen.
Moderne besturingssystemen
Microkernelarchitectuur
Slechts enkele essentiële functies worden toegewezen aan de kernel. Waaronder adresruimten, communicatie tussen processen (IPC) en basisscheduling. Rest wordt afgehandeld door servers.
Multithreading
Proces wordt onderverdeeld in draden die tegelijkertijd kunnen uitgevoerd worden.
Een draad is een inzetbare eenheid werk, het wordt sequentieel uitgevoerd. Een proces is een verzameling van een of meer threads.
Symmetrische multiprocessing
- Meerdere processors
- Deze processors delen hetzelfde hoofdgeheugen en dezelfde I/O-voorzieningen
- Alle processors kunnen dezelfde functies uitvoeren
Het besturingssysteem van een SMP verdeelt processen of threads over alle processors.
Voordelen:
- Prestaties: meerdere processen tegelijkertijd actief
- Beschikbaarheid: het uitvallen van één processor stopt het systeem niet
- Stapsgewijze groei: de prestaties kunnen verbeteren door extra processoren toe te voegen
- Schaalbaarheid
Hoofdstuk 3 Beschrijving en besturing van processen
Vereisten waaraan een besturingssysteem moet voldoen in termen van processen:
- Het besturingssysteem moet de uitvoering van meerdere processen verweven om de processortijd te maximaliseren en tegelijk zorgen voor een aanvaardbare antwoordtijd.
- Het besturingssysteem moet bronnen toewijzen aan processen
- Communicatie tussen processen en creëren van processen door de gebruiker ondersteunen
Wat is een proces?
Concepten
1. Een computer bestaat uit een verzameling hardwarebronnen
2. Computerprogramma’s zijn ontwikkeld om een bepaalde taak uit te voeren
3. Het is inefficiënt om toepassing te schrijven voor een specifiek computersysteem
4. Het besturingssysteem werd ontwikkeld als veilige en consistente interface voor toepassingen
5. Het besturingssysteem is een uniforme, abstracte representatie van bronnen die door toepassingen benut kunnen worden.
Beheren van uitvoering van toepassingen:
- Bronnen beschikbaar maken voor verschillende toepassingen
- Fysieke processor schakelt tussen verschillende toepassingen, zodat deze allemaal verder worden uitgevoerd
- Processor en I/O-apparaten efficiënt kunnen worden gebruikt
Elementen van een proces:
- Identificatienummer
- Toestand
- Prioriteit
- Programmateller
- Geheugenwijzers
- Contextgegevens
- I/O-toestandinformatie
- Beheersinformatie
Dit wordt opgeslagen in een procesbesturingsblok. Dit wordt gecreëerd en beheerd door het besturingssysteem. Hierdoor is multiprogrammering mogelijk, de huidige waarden worden dan opgeslagen in het procesbesturingsblok.
Procestoestanden
Spoor van een proces: Volgorde van instructies die voor dat proces worden uitgevoerd
Dispatcher wijst de processor wisselend toe aan een ander proces.
Procesmodel met twee toestanden
Proces kan zich in twee toestanden bevinden: Actief en niet-actief
Creëren van processen
Redenen:
- Nieuwe batchtaak
- Interactieve aanmelding
- Gecreëerd door het besturingssysteem om een dienst te verzorgen
- Verwekt door een bestaand proces
Beëindigen van processen
Redenen:
- Normale voltooiing
- Tijdslimiet overschreden
- Onvoldoende geheugen beschikbaar
- Overtreding geheugengrens
- Beschermingsfout
- Rekenkundige fout
- Tijd verstreken
- I/O-fout
- Ongeldige instructie
- Geprivilegieerde instructie
- Onjuist gebruik van gegevens
- Ingreep van de gebruiker of het besturingssysteem
- Beëindiging van het ouderproces
- Verzoek van het ouderproces
Procesmodel met vijf toestanden
De dispatcher kan niet zomaar het proces selecteren dat het langst in de wachtrij zit want het kan op geblokkeerd staan.
- Actief
- Gereed
- Geblokkeerd
- Nieuw
- Einde
Opgeschorte processen
De processor is sneller dan I/O, dus alle processen zouden op I/O kunnen wachten. Deze programma’s worden verplaatst van het hoofdgeheugen naar een wachtrij Opgeschort op de schijf zodat er plaats is voor andere processen.
Twee nieuwe toestanden:
- Geblokkeerd – opgeschort: het proces bevindt zicht in het secundaire geheugen en wacht op een gebeurtenis
- Gereed – opgeschort: het proces bevindt zich in het secundaire geheugen maar is beschikbaar voor uitvoering zodra het in het hoofdgeheugen is geladen
Definitie:
1. Het proces is niet onmiddellijk beschikbaar voor uitvoering
2. Het proces kan al of niet wachten op een gebeurtenis. Wacht het, dan is deze toestand Geblokkeerd onafhankelijk van de toestand Opgeschort en zal het optreden van de blokkerende gebeurtenis het proces niet automatisch geschikt maken voor uitvoering
3. Het proces werd in de toestand Opgeschort geplaatst door het proces zelf of door een ander (ouderproces of besturingssysteem) om de uitvoering van het proces te verhinderen
4. Het proces kan deze toestand niet verlaten tenzij een ander hiervoor expliciet een opdracht geeft
Redenen voor het opschorten van processen:
- Swapping
- Andere reden van het besturingssysteem
- Verzoek van een interactieve gebruiker
- Timing
- Verzoek van het ouderproces
Beschrijvingen van processen
Beheersstructuren in het besturingssysteem
Om te beheren moet het besturingssysteem informatie bezitten over de huidige status van elk proces en elke bron. Hiervoor maakt en onderhoudt het tabellen met informatie over elke entiteit die het beheert.
Geheugentabellen bevatten volgende informatie:
- De toewijzing van hoofdgeheugen aan processen
- De toewijzing van secundair geheugen aan processen
- Eventuele beschermingsattributen van segmenten voor toegang tot gedeelde geheugengebieden
- Alle informatie die nodig is voor het beheren van het virtuele geheugen
I/O-tabellen worden gebruikt voor het beheren van I/O-apparaten en kanalen. Een apparaat kan op een bepaald moment beschikbaar of toegewezen zijn. Wordt er een I/O-bewerking uitgevoerd, dan moet het besturingssysteem kennis hebben van de status van de bewerking. Ook de locatie in het hoofdgeheugen die als bron of bestemming van de I/O-opdracht wordt gebruikt.
Bestandstabellen verschaffen informatie over het bestaan van bestanden, hun locatie, hun huidige status en andere attributen. Een groot deel hiervan wordt bijgehouden door het bestandsbeheersysteem.
Procestabellen worden bijgehouden om processen te beheren. Het bevat de locatie van het proces en de volgende attributen:
- Programma
- Gegevens
- Stack
Dit geheel noemen we het procesbeeld (process image).
Procesbesturingsblok
Procesidentificatie
Identificatiecodes
- Identificatiecode van proces
- Identificatiecode van het ouderproces
- Identificatiecode van gebruiker
Processortoestandsinformatie
Registers die zichtbaar zijn voor de gebruiker
Stuur en statusregisters
- Programmateller
- Conditiecodes
- Statusinformatie
Stackwijzers
Procesbesturingsinformatie
Scheduling en toestandsinformatie
- Procestoestand
- Prioriteit
- Scheduling gerelateerde informatie
- Gebeurtenis
Gegevensstructuur
Communicatie tussen processen
Procesprivileges
Geheugenbeheer
Eigendom en gebruik van bronnen
Procesbesturing
Creëren van processen
1. Het besturingssysteem wijst een unieke procesidentificatie toe aan het nieuwe proces
2. Besturingssysteem wijst ruimte toe aan het proces
3. Het procesbesturingsblok moet worden geïnitialiseerd
4. De juiste koppelingen moeten worden ingesteld
5. Soms moeten andere gegevensstructuren worden gemaakt of uitgebreid
Wisselen van processen
Wanneer wisselen?
- Klokinterrupt: proces heeft maximale tijd overschreden
- I/O-interrupt: I/O-actie is opgetreden
- Geheugenfout: verwijzing naar woord in virtuele geheugen dat zich niet in het hoofdgeheugen bevindt.
- Val: Een fout of uitzonderingsconditie wordt gegenereerd. Kan proces naar Einde-status brengen
- Supervisoraanroep: bv het openen van een bestand
Wisselen van status
- Opslaan van context van processor
- Aanpassen van procesbesturingsblok van het actieve proces
- Procesbesturingsblok verplaatsen naar juiste wachtrij (Gereed, geblokkeerd, ..)
- Ander proces selecteren
- Procesbesturingsblok van geselecteerd proces aanpassen
- Bijwerken van gegevensstructuren voor het geheugenbeheer
- Context van dit proces terugbrengen naar oorspronkelijke staat
Uitvoering van het besturingssysteem
Procesloze kernel: uitvoeren van kernel buiten alle processen. Het besturingssysteem wordt uitgevoerd als een afzonderlijke entiteit die werkt in een geprivilegieerde modus.
Uitvoering binnen gebruikersprocessen: uitvoeren in de context van een gebruikersproces. Er is een aparte stack voor beheren van aanroepen ren returns terwijl het zich in kernelmodus bevindt.
Op processen gebaseerd besturingssysteem
Het besturingssysteem is een verzameling van systeemprocessen. Nuttig in een omgeving met meerdere processors of computers.
Hoofdstuk 12 Bestandsbeheer
Bestandsbeheersystemen bestaan uit systeemhulpprogramma’s die worden uitgevoerd in kernelmodus.
Overzicht
Bestanden en bestandssystemen
Drie eigenschappen van bestanden:
- Langdurig bestaand
- Deelbaar tussen processen
- Structuur
Volgende functies zijn beschikbaar:
- Maken
- Wissen
- Openen
- Sluiten
- Lezen
- Schrijven
Vier begrippen:
• Veld
- Basiselement van gegevens
- Bevat één waarde
- Onderscheidt zich door een lengte en een gegevenstype
• Record
- Collectie van gerelateerde velden
- Wordt behandeld als een eenheid
• Bestand
- Een verzameling vergelijkbare records
- Één entiteit
- Bestandsnaam
- Toegangscontrole mogelijk
• Database
- Verzameling gerelateerde gegevens
- Expliciete relaties aanwezig tussen gegevenselementen
Standaardbewerkingen:
- Retrieve_All
- Retrieve_One
- Retrieve_Next
- Retrieve_Previous
- Insert_One
- Delete_One
- Update_One
- Retrieve_Few
Systemen voor bestandsbeheer
Manier waarop gebruiker of toepassing een bestand mag benaderen. Programmeur moet geen speciale software ontwikkelen voor elke toepassing.
Volgende doelstellingen:
- Voorzien in de behoeften en vereisten voor het gegevensbeheer van de gebruiker
- Zoveel mogelijk garanderen dat de gegevens in bestanden geldig zijn
- Prestaties optimaliseren
- Voorzien in I/O-ondersteuning voor diverse soorten opslagapparaten
- Minimaliseren of elimineren van de mogelijkheid dat gegevens verloren gaan of vernietigd worden.
- Voorzien in een gestandaardiseerde verzameling interfaceroutines voor I/O
- Ondersteuning van I/O bieden aan meerdere gebruikers
Minimale verzameling van eisen:
- Elke gebruiker moet bestanden kunnen creëren, verwijden en wijzigen
- Elke gebruik moet gecontroleerde toegang kunnen krijgen tot bestanden van andere gebruikers
- Elke gebruiker moet kunnen bepalen welke soorten toegang zijn toegestaan voor zijn bestanden
- Elke gebruiker moet de structuur van zijn bestanden kunnen aanpassen tot een vorm die aansluit op het op te lossen probleem
- Elke gebruiker moet gegevens kunnen verplaatsen tussen bestanden
- Elke gebruiker moet een reservekopie van zijn bestanden kunnen maken en de bestanden in geval van schade kunnen herstellen
- Elke gebruiker moet toegang kunne krijgen tot zijn bestanden via een symbolische naam
Architectuur van bestandssystemen
Apparaatstuurprogramma’s
- Communiceert op laagste niveau rechtstreeks met randapparaten
- Verantwoordelijk voor starten van I/O-bewerkingen en verwerken van voltooiing
Basisbestandsysteem is het volgende niveau
- Fysieke I/O
- Behandelt de gegevensblokken die worden uitgewisseld
- Verzorgt plaatsing van blokken en bufferen van die blokken
Supervisor voor basis-I/O
- Verantwoordelijk voor het starten en beëindigen van alle bestand-I/O
- Houdt besturingsstructuren bij
- Selecteert apparaat waarop I/O wordt uitgevoerd
- Verzorgt scheduling van toegangen om prestaties te optimaliseren
- Onderdeel van besturingssysteem
Logische I/O
- Verschaft gebruikers toegang to records
- Algemene voorziening voor record-I/O
- Houdt basisgegevens over bestanden bij
Toegangsmethode
- Verschillende toegangsmogelijkheden voor verschillende structuren en verschillende methoden om gegevens te verwerken en lezen
Functies van bestandsbeheer
- Geselecteerd bestand identificeren en vinden
- Gebruiken van directory die de locatie van alle bestanden beschrijft plus bijbehorende attributen
- Op een gedeeld systeem zorgen voor toegangscontrole van gebruikers
- Gebruik maken van blokken voor toegang tot bestanden
- Bestanden toewijzen aan vrije blokken
- Beheren van vrije opslagruimte zodat bekend is welke blokken beschikbaar zijn
Bestandsorganisatie en –toegang
Bij het kiezen van een bestandsorganisatie zijn diverse criteria belangrijk:
- Korte toegangstijd
- Gemak van bijwerken
- Efficiënt gebruik van opslagruimte
- Onderhoudsgemak
- betrouwbaarheid
- Korte toegangstijd
Stapelbestand
- Data wordt opgeslagen in volgorde waarin het binnenkomt
- Functie is slechts gegevensmassa te vergaren en op te slaan
- Records kunne verschillende velden hebben
- Geen structuur
- Om een record te zoeken moet het heel bestand doorzocht worden
Sequentieel bestand
- Vast formaat voor records
- Alle records hebben dezelfde lengte
- Alle velden zijn dezelfde(lengte en positie)
- Veldnaam en lengte zijn attributen
- Een bepaald veld wordt sleutelveld genoemd
- Unieke identificatie
- Records opgeslagen in sleutelvolgorde
- Nieuwe records worden in een logbestand geplaatst
- Batchverwerking wordt uitgevoerd om beide bestanden samen te voegen
Index-sequentieel bestand
- Index voorziet in een opzoekmogelijkheid waarmee snel de nabijheid van de gewenste record kan worden bereikt
- Bevat sleutelveld en verwijzing naar hoofdbestand
- Index wordt doorzocht naar hoogste sleutelwaarde die gelijk of kleiner is dan de gewenste sleutelwaarde
- Zoektocht gaat verder in hoofdbestand op positie aangeduid door verwijzing
- Vergelijking tussen sequentieel en index-sequentieel
- Bv een sequentieel bestand van één miljoen records. Het zoeken naar een bepaalde sleutelwaarde vereist gemiddeld een half miljoen recordtoegangen. Als er nu echter een index met duizen ingangen wordt gemaakt. Dan kost het zoeken van de records gemiddeld 500 toegangen tot het indexbestand, en dan nog eens 500 tot het hoofdbestand. De gemiddelde zoeklengte wordt dus verminderd van een half miljoen tot duizend.
- Nieuw record wordt toegevoegd aan een overloopbestand
- Record in hoofdbestand dat dit voorafgaat wordt aangepast met een verwijzing naar overloopbestand
- Bestanden worden samengevoegd bij een batchverwerking
- Meerdere indexen voor het zelfde sleutelveld is mogelijk
Geïndexeerd bestand
- Bevat meerdere indexen voor verschillende sleutelvelden
- Kan een index bevatten met een verwijzing naar elke record
- Kan een gedeeltelijke index bevatten
Direct of hashed bestand
- Directe toegang tot een blok op een gekend adres
- Sleutelveld nodig voor elke record
Bestandsdirectory’s
Bevat informatie over bestanden:
- Attributen
- Locatie
- Eigenaarschap
Directory is een bestand beheerd door het besturingssysteem.
Verzorgt vertaalslag tussen bestandsnamen en bestanden zelf
Informatie-elementen van een directory:
Basisinformatie
- Bestandsnaam
- Bestandstype
- Bestandsorganisatie
Adresinformatie
- Volume
- Beginadres
- Gebruikte grootte
- Toegewezen grootte
- Eigenaar
- Toegangsinformatie
- Toelaatbare acties
Gebruiksinformatie
- Datum gecreëerd
- Identiteit van maker
- Datum laatste leestoegang
- Identiteit van laatste lezer
- Datum laatste wijziging
- Identiteit voor laatste wijziging
- Datum laatste reservekopie
- Huidig gebruik
Simpele structuur
- Lijst van ingangen, één ingang voor elk bestand
- Sequentieel bestand met de naam van elk bestand dat dienst doet als sleutel
- Geeft geen hulp bij het organiseren van bestanden
- Verplicht gebruiker voorzichtig te zijn om niet twee keer dezelfde naam te gebruiken
Twee-niveau schema
- Een directory voor elke gebruiker en een hoofddirectory
- Hoofddirectory bevat ingang voor elke gebruiker
- Bevat adres en toegangscontrole-informatie
- Elke gebruikersdirectory is een eenvoudige lijst met bestanden van die gebruiker
- Voorziet geen hulp bij structureren
Hiërarchische of boomstructuur
- Hoofddirectory met gebruikerdirectories eronder
- Elke gebruikersdirectory kan meerdere subdirectories en bestanden bevatten
- Bestanden kunnen gevonden door een pad te volgen van de hoofddirectory langs subdirectories. Dit is de padnaam
- Meerdere bestanden kunnen dezelfde naam hebben zolang ze een unieke padnaam hebben
- De huidige directory is de werkdirectory
- Er wordt relatief ten opzichte van de werkdirectory verwezen naar bestanden
Gemeenschappelijk gebruik van bestanden
Toegangsrechten
- Geen
- Kennis
- Uitvoeren
- Lezen
- Toevoegen
- Bijwerken
- Beveiliging wijzigen
- Verwijderen
Eigenaar:
- Heeft alle voorgaande rechten
- Kan rechten uitdelen aan anderen volgens de volgende klassen van gebruikers:
- Specifieke gebruiker
- Gebruikersgroepen
- Alle
Gelijktijdige toegang
- Gebruiker kan een heel bestand vergrendelen wanneer het bijgewerkt wordt
- Individuele records vergrendelen tijdens bijwerken
- Wederzijdse uitsluiting en deadlocks zijn problemen voor gedeelde toegang
Blokvorming van records
Records = logische toegang
I/O: blokken op schijf
Grote blokken versus Kleine Blokken
Drie methoden:
- Blokvorming met vaste lengte: Hierbij worden records met vaste lengte gebruikt en wordt een geheel aantal records opgeslagen in een blok. Er kan ongebruikte ruimte zijn aan het einde van elk blok; dit wordt aangeduid als interne fragmentatie
- Gekoppelde blokvorming met variabele lengte: hierbij worden records met variabele lengte gebruikt en deze worden samengepakt in blokken, alle ruimte wordt gebruikt. Sommige records kunnen daarbij twee blokken omspannen, waarbij het vervolg wordt aangegeven door een verwijzing naar het volgende blok
- Niet-gekoppelde blokvorming met variabele lengte: hierbij worden records met variabele lengte gebruikt, maar deze worden niet gekoppeld opgeslagen. De meeste blokken bevatten loze ruimte, omdat het onmogelijk is de rest van een blok te gebruiken als de volgende record groter is dan de resterende ruimte
Beheer van secundaire opslag
- Ruimte moet toegewezen worden aan ebstanden
- Moet bijhouden welke ruimte vrij is voor toewijzing
Bestandstoewijzing
Maximumgrootte van een bestand bij de creatie?
Moeilijk om de maximale grootte te voorspellen
Vaak de neiging om de bestandsgrootte te overschatten
Methoden van bestandstoewijzing
- Aaneengesloten toewijzing (=Bij aaneengesloten toewijzing wordt één aaneengesloten verzameling blokken toegewezen aan een bestand op het moment dat het bestand wordt gecreëerd.
- Tabel voor bestandstoewijzing bevat maar één ingang voor elke bestand te bevatte, die het beginblok en de lengte aangeeft.
- Externe fragmentatie zal voorkomen
- Samenpakken is nodig
- Kettingtoewijzing; is het tegenovergestelde van aaneengesloten toewijzing. De toewijzing vindt meestal plaats op basis van afzonderlijke blokken. Elk blok bevat een wijzer naar het volgende blok in de ketting.
- Tabel voor bestandstoewijzing bevat maar één ingang voor elke bestand, die het beginblok en de lengte aangeeft.
- Geen externe fragmentatie
- Beste voor sequentiële bestanden
- Niet goed voor lokaliteit (cache)
- Indextoewijzing; Hierbij bevat de tabel voor bestandstoewijzing een afzonderlijke index van één niveau voor elk bestand. De index heeft één ingang voor elke portie die aan het bestand is toegewezen.
- Tabel voor bestandstoewijzing bevat bloknummer van index
Inodes
- Informatieknooppunt: (information node)
- Controlestructuur die sleutelinformatie bevat voor een bepaald bestand
Windows file system
Kernzaken van NTFS
- Herstelbaarheid
- Beveiliging
- Grote schijven en grote bestanden
- Meervoudige gegevensstromen
- Algemene indexvoorzieningen
NTFS volume en bestandsstructuur
- Sector: kleinste fysieke opslageenheid op de schijf
- Cluster: een of meer aaneengesloten sectoren
- Volume: een logische partitie op schijf
Hoofdstuk 6: Bootproces
Het besturingssysteem is een programma dat op extern geheugen staat en moet gekopieerd worden naar het werkgeheugen (= inladen). Het besturingssysteem inladen is een speciale procedure, want om iets in te laden moet er al programmatuur zijn.
Partities
Deel van de harde schijf: opeenvolgende cilinders.
- Maximum 4 primaire partities.
- In partities indelen gebeurt bij het begin van de installatie van het besturingssysteem.
- Eventueel kan men achteraf partities wijzigen, mits speciale tools.
In een partitie kan je een besturingssysteem installeren.
Er kan maximum 1 partitie actief zijn.
Bij opstarten zal het besturingssysteem starten in de actieve partitie.
MBR
= Master Boot Record (Record = sector).
MBR bevat:
- MBR-startprogramma (Initial Program Loader, IPL)
- Partitietabel
- Magisch getal
Bij het booten start het besturingssysteem in de actieve partitie
Partitietabel
De partitietabel kan 4 partitie-records bevatten die ieder een primaire partitie beschrijven. De partitietabel bevat per partitie:
- Bootable flag : actief / niet actief
- Cylinder/Head/Sector van 1e sector
- Partitie-type : geeft aan welk bestandssysteem op de partitie staat
- Cylinder/Head/Sector van laatste sector
- LBA-nummer van 1e sector
- LBA-nummer van laatste sector
Logische partities
4 primaire partities is soms te weinig. Een primaire partitie kan onderverdeeld worden in logische partities (= extended)
EMBR
= Extended Master Boot Record
EMBR voor de extended partities
EMBR voor elke logische partitie
Elke EMBR heeft 2 items:
- Info over de partitie zelf
- Info over de rest
Welke info?
- Type
- Chs 1e sector
- Chs laatste sector
- Grootte
PBR
Partitie wordt geformatteerd (bestandssysteem opgeven)
1e sector van de partitie is de Partition Boot Sector (sector = record; PBR = PBS)
PBR bevat:
- Sprongbevel (spring x aantal bytes verder, naar PBR-startprogramma)
- Info over de partitie
- PBR-startprogramma
Wat gebeurt als je computer start?
1. Interne voeding wordt geïnitialiseerd
- Testen van de geleverde spanningen
- Reset-signaal naar CPU sturen
2. Wanneer spanning O.K.: “Power Good” signaal naar moederbord (= stoppen met reset)
3. Processor begint bevelen uit te voeren
- Welke mode?
• Reële mode (Intel)
- Welk bevel?
• Op adres FFFF:0000
- Wat betekent dit?
FFFF0 segmentadres
+0000 verplaatsing
FFFF0 (in register CS staat FFFF)
FFFF0 is een adres in het werkgeheugen, toegewezen aan het BIOS (vroeger ROM, nu EEPROM).
BIOS EEPROM:
- Soms nog “CMOS” genoemd (Complementary Metal-Oxide Semiconductor)
- Eigenlijk is “de CMOS” 1 van de weinige chips in een computer die geen CMOS-technologie gebruikt
- Vroeger CMOS-geheugen dat door batterijen onder spanning werd gehouden
- Bevat:
• Opstartvolgorde
• Informatie over randapparaten
• BIOS-paswoord
• …
Processor begint met BIOS-startprogramma (op adres FFFF0)
• Wat doet dit startprogramma?
4. Power on self test uitvoeren, POST controleert vitale systeemonderdelen :
- CPU
- Toetsenbord (verbonden, controller O.K.?)
- RAM (lezen, schrijven)
- Video,…
5. Bios-startprogramma gaat na wat het boot-apparaat is
6. MBR kopiëren naar werkgeheugen (bevat IPL)
7. Sprong naar 1e bevel in IPL
8. IPL :
- Leest partitietabel (gaat na welke de actieve partitie is)
- Kopieert PBR (met PBR-startprogramma) van deze partitie naar werkgeheugen
- Sprong naar bevel vanaf 1e byte van PBR
9. 1e bevel in PBR : sprong naar PBR-startprogramma
10. PBR-startprogramma : ntldr inladen
- Indien niet gevonden : “ntldr missing” op het scherm zetten
11. Ntldr : processor naar protected mode en Windows starten
2011 juni examen
Geens
- Verklaar volgende begrippen en geef onderliggend verband
- MBR
- Partitietabel
- EMBR
- PBR
- Vraag 2: Interrupts
- Geef de instructiecyclus met interrupt
- Geef de stappen van een interruptverwerking (9 stappen)
- Hoe werkt multiprogrammering met interrupts?
- Vraag 3: Geheugen
- Dilemma van geheugen snelheid/capaciteit/kosten
- Principe van lokaliteit
- Leg uit: LRU
- Vraag 4: Geef het procestoestandschema van 2 opschortingen
- Vraag 5: bestandbeheer
- 3 zinnen, zeggen of ze waar of fout waren en waarom
- De 3 soorten geheugenblokken en hun voor en nadelen
- Vraag 6: FAT12
- Je krijgt een descriptortabel en een klein stukje van de FAT tabel.
- Geef de filesize
- Geef de eerste cluster
- Geef de nummers van de clusters van de dataclusters
- Met 512 bytes clusters, hoeveel overschot heb je in de datatabel
- Geef de Engelse term voor fragmentatie.
Strypsteen
- Idem examen Geens voor vraag 1, 2, 4 en 6
- leg uit:
- Failed Mutual Exclusion
- Deadlock
- Hoe het splitsen van een proces in drie onderdelen het management van processen vereenvoudigd heeft.
- inode met 13 blokken, adres grootte van 4b, block grootte van 400b:
- Hoe groot mag een bestand zijn als het geen indirecte toegang mag gebruiken (13 * 400b = 5,2 kb)
- Hoe groot mag een bestand zijn als het één niveau van indirecte toegang mag gebruiken (400b/4b) = 100 + 12 blocks, 112 blocks * 400b = 44.8kb
- Hoe groot mag een bestand zijn als het drie niveaus van indirecte toegang mag gebruiken (12 * 100 * 100 * 100 * 400b)= 480mb
edit: dees is fout volgens mij ze... dit is wat het zou moeten zijn:
-
- Hoe groot mag een bestand zijn als het geen indirecte toegang mag gebruiken: 10*400b = 4kb
(Moet het niet 12*400 zijn? Er zijn 12 blokken voor directe toegang.)
-
- Hoe groot mag een bestand zijn als het één niveau van indirecte toegang mag gebruiken: 4kb + 256*400b = 106,4kb
(Waar komt 256 vandaan? Uitleg had mooi geweest --> bekijk pagina 627 van uw boek. Het grijze kadertje)
-
- Hoe groot mag een bestand zijn als het drie niveaus van indirecte toegang mag gebruiken: 4kb + 106,4kb + 256*256*400b + 256*256*256*400b = 6,7 GB
2012 augustus examen
Strypsteen
- 1) Leg het bootproces van een computer uit met als actieve partitie Windows XP. (11 stappen)
- 2) Teken het procestoestandschema met 2 opschortingen, en benoem alle pijlen.
- 3) Leg uit:
- Deadlock
- Failed Mutual Exclusion
- Symmetrische multiprocessing
- Resident monitor
- 4) Welke 2 manieren zijn er om interrupts te behandelen? + Schets. En geef voor-en nadelen.
- 5) UNIX-inode met 13 blokken: 10 indirecte. Adres grootte van 1024 bytes (1kb), block grootte van 4b.
- Hoe groot mag een bestand zijn als het alleen de niveaus van indirecte toegang mag gebruiken?
- Hoe groot mag een bestand zijn als men alle niveaus mag gebruiken?
Toon berekening.
- 6) Vraag over LINUX.
- 7) Vraag over FAT 12.
2012 juni examen
Strypsteen
- 1) Geef de verschillende klassen (4) interrupts. Teken de instructiecyclus met interrupts.
- 2) Verklaar volgende begrippen + Schets
- Interne fragmentatie
- Externe fragmentatie
- Aaneengesloten bestandstoewijzing
- Kettingtoewijzing
- Indextoewijzing
- 3) Batchmultiprogramming versus Timesharing: Wat is hun hoofddoel?
- 4) Leg het bootprocess van een PC uit, van POST tot en met het PBR-startcommando.
Leg de afkortingen die je gebruikt ook uit
- 5)a) Teken het procestoestandschema met 2 opschortingen.
b) Waarom is toestand opgeschort toegevoegd?
c) Geef onderlinge verbanden tussen de toestanden met opschortingen.
2013 augustus examen
Strypsteen
deel 1: opstarten
1) geef de 11 stappen bij het opstarten van een windows xp partitie.
deel 2: batchsystemen
2) wat zijn de 4 hardware features die essentieel zijn voor bij een monitor?
3) leg uit aan de hand van vorige vraag de kernel en user mode.
4) wat zijn de voordelen en nadelen van vaste grootte en variabele grootte geheugen?
deel 3: processen
5) een proces wordt preëmptief behandeld. wat is het en wanneer gebeurt het?
6) wat gebeurt er als een proces van toestand geblokkeerd opgeschort naar geblokkeerd word verplaatst?
7) wat gebeurt er als een proces wordt verplaatst van gereed naar gereed opgeschort?
deel 4: Linux
deel 5 : fat
8) Hoe groot is de file?
9) Wat zijn de fat-entry nummers?
10) Wat zijn de dataclusters die erbij horen?
deel 6: Active Directory
11) Er zijn verschillende group policies van GP01 - GP05. Wat als de "disable command prompt" in de group policy?
OU | GP | status |
---|---|---|
gt | GP01 | disabled |
GP02 | not configured | |
TI | GP03 | enabled |
GP04 | disabled | |
KHL | GP05 | not configured |
wat is de status van:
- gt: enabled / disabled
- TI: enabled / disabled
- KHL: enabled / disabled
12) Leg uit: permissies zijn cumulatief. Hoe werkt dit met 'Deny'?
2013 Juni examen
Voorbeeldexamenvragen
Geef de diensten die het besturingssysteem aanbiedt :
- Programma-ontwikkeling
- Programma-uitvoering
- Toegang tot I/O-apparaten
- Beheerde toegang tot bestanden
- Toegang tot het systeem
- Opsporen en afhandelen van errors
- Administratie
Welke zijn de oorzaken tot ontwikkeling van een besturingssysteem:
- Hardwarevernieuwing
- Nieuwe diensten
- Verbeteringen
Geef de hoofdtaken van het beheer van opslag :
- Procesisolatie
- Automatische toewijzing en beheer
- Ondersteuning modulair programmeren
- Bescherming en toegangsbeheer
- Langetermijnopslag
Geef de 4 categorieën van beveiliging die door het besturingssysteem gebruikt worden :
- Beschikbaarheid
- Gegevensintegriteit
- Authenticiteit
- Vertrouwelijkheid
Welke zijn de 3 doelen m.b.t. scheduling van processen:
- Rechtvaardigheid
- Efficiëntie
- Gedifferentieerd reactievermogen
Complexe besturingssystemen hebben standaard altijd meer problemen als simpele, geef deze problemen bij complexe besturingssystemen:
- Altijd te laat uitgebracht
- Altijd gevoelig voor virussen etc.
- Altijd geplaagd door bugs
- Prestaties vaak niet zoals verwacht
Maak de lijst van niveaus binnen een besturingssysteem:
1. Elektronische schakelingen
2. Instructieset
3. Procedures
4. Interrupts
5. Primitieve processen
6. Lokale secundaire opslag
7. Virtueel geheugen
8. Communicatie
9. Bestandsysteem
10. Apparaten
11. Directory’s
12. Gebruikersprocessen
13. Shell
Geef de elementen van een PCB (procesbesturingsblok):
- Identificatienummer
- Toestand
- Prioriteit
- Programmateller
- Geheugenwijzers
- Contextgegevens
- I/O-toestandsinformatie
- Beheersinformatie
Geef de 4 redenen voor het starten van een proces:
- Nieuwe batchtaak
- Interactieve aanmelding (logon)
- Gecreëerd door besturingssysteem omwille van een dienst
- Verwekt door bestaand proces
Geef alle redenen voor het beëindigen van een proces:
- Normale voltooiing
- Tijdslimiet overschreden
- Onvoldoende beschikbaar geheugen
- Overtreding geheugengrens
- Beschermingsfout
- Rekenkundige fout
- Tijd verstreken
- I/O-fout
- Ongeldige instructie
- Geprivilegieerde instructie
- Onjuist gebruik van gegevens
- Ingreep van gebruiker/besturingssysteem
- Beëindiging ouderproces
- Verzoek van ouderproces
Wat zijn de kenmerken van een opgeschort proces:
- Niet onmiddellijk beschikbaar voor uitvoering
- Kan wachten op gebeurtenis
- Werd in opgeschorte toestand geplaatst om uitvoering te verhinderen
- Kan opgeschorte toestand niet verlaten zonder expliciete opdracht door ander proces
Welke zijn de redenen voor het opschorten van een proces:
- Swapping
- Andere reden van besturingssysteem
- Verzoek interactieve gebruiker
- Timing
- Verzoek ouderproces
Geef de structuur van de creatie van een proces:
1. Procesidentificatie toewijzen aan nieuw proces
2. Ruimte toewijzen aan het proces
3. PCB initialiseren
4. Juiste koppelingen instellen
5. Eventueel andere gegevensstructuren maken / uitbreiden
Geef de volledige tabel van elementen van de standaard bestandsdirectory:
- Basisinformatie
- Bestandsnaam
- Bestandstype
- Bestandsorganisatie
- Adresinformatie
- Volume
- Beginadres
- Gebruikte grootte
- Toegewezen grootte
- Toegangscontrole-informatie
- Eigenaar
- Toegangs-informatie
- Toelaatbare acties
- Gebruiksinformatie
- Datum gecreëerd
- Identiteit maker
- Datum laatste leestoegang
- Identiteit laatste lezer
- Datum laatste wijziging
- Identiteit laatste wijziging
- Datum laatste reservekopie
- Huidig gebruik
Geef de structuur van het wisselen van processen:
1. Opslaan context huidig proces
2. Bijwerken PCB (toestand veranderen
3. PCB naar juiste wachtrij verplaatsen
4. Selecteren van nieuw proces
5. Bijwerken PCB geselecteerde proces (toestand op actief zetten)
6. Bijwerken gegevensstructuren voor geheugenbeheer
7. Terugbrengen context van dit proces dat voorheen was opgeslagen
Geef de kenmerken van NTFS:
- Herstelbaarheid
- Beveiliging
- Grote schijven en bestanden
- Meervoudige gegevensstromen
- Algemene indexeringsvoorziening
Piphi
- 1) (Opstarten):
- FAT - 16 C// en D// schijf gegeven.
- Zeggen wat wat is.
- 1ste 2 bytes van iets kunnen geven.
- 2) (Leg uit):
-
- Multiprogramming, time-sharing, real-time transactie systeem
-
- 3):
- Geef beheersstructuren proces:
- Geef van iedere categorie een voorbeeld:
- 4) (Processen):
- Schema tekenen met 2 opgeschorte toestanden
- Leg de pijlen uit die met de opgeschorte toestanden te maken hebben
- 5) (Bestanden):
- Geef structuur
- Veld (field): ....
- Record: ....
- Bestand (file): ....
- Database: ...
Strypsteen
1),2),3),4) Hetzelfde als PiPhi
Ook nog bij 2) : De problemen dat destijds ontstonden door deze ontwikkelingen. (Onjuiste syncronisatie, mutual exclusions, niet-vastomschreven programmawerking en deadlocks; uitleg geven moest niet)
- 5) (bestanden)
- UNIX-inode met 15 blokken ( 12 indirect )
- Adres grootte van 8B block grootte van 8KB
Antwoord (gemeenschappelijk deel): aantal adressen dat in een block op de schijf kunnen: block grootte / adres grootte = 8KB / 8B = 1024
-
-
- Hoe groot mag een bestand zijn als het alleen de niveaus van indirecte toegang mag gebruiken?
-
8KB / block * ( 12 * 1024 blokken ) = 98304 KB = 96 MB
-
-
- Hoe groot mag een bestand zijn als men alle niveaus mag gebruiken?
-
8KB / block * ( ( 3 + 12 * 1024 ) blokken ) = 98328 KB = 96.02 MB
Dit hangt er wel van af wat ze precies bedoelen, als "alle niveaus" direct + enkelvoudig indirect is, is het antwoord het bovenstaande... vraag wat er wordt bedoeld aan de lector
bron waarop ik me baseer om deze berekeningen te doen : http://stackoverflow.com/questions/4383493/what-is-the-maximum-file-size-in-each-of-these-cases
6) Vraag in verband met de verschillende lagen
2014 juni examen
Strypsteen
1. Tekening van de harde schijf, er staan overal nummertjes en jij moet dan zeggen wat dit is of hoe groot iets is.
2. Geef de verschillende soorten interrupts
- Programma
- Timer
- I/o
- Hardwarefout
3. Geef de hardware features van een resident monitor
- geheugenbeveiliging
- timer
- geprivilegieerde instructies
- interrupts
4. Wat is deadlock + geef een vb
- 2 processen hebben dezelfde 2 bronnen nodig hebben om verder uitgevoerd te kunnen worden.
- Ze hebben elk al 1 bron maar wachten op elkaar tot als het ene proces de bron vrijgeefd.
5. Er is een foto gegeven van hoe er blokvorming ontstaat.
- Duid aan waar de blokvorming optreedt
- Benoem de delen die hier mee in contact komen
6. Waarom gaat een procestoestand van geblokkeerd/suspend => geblokkeerd
- Dit is zeldzaam maar gebeurt meestal wanneer een hoge-prioriteit proces op iets wacht dat bijna klaar is..
- Dan kan BS deze al naar RAM brengen zodat die sneller uitgevoerd zal kunnen worden nadat event waarvoor die wacht plaats vindt.
- Wat zorgt ervoor dat een proces van geblokkeerd => gereed gaat
- Als de gebeurtenis optreedt waar het proces op wacht
7. Invul oefening over bitmap, waar ge 0 (vrije plek) en 1 (plek is bezet) moet invullen
8. Bestandstoewjzing oefening:
- Er zijn 100 blokken, hoeveel lees en schrijf bewerkingen worden er uitgevoerd voor de volgende methodes:
- Aaneengesloten toewijzing
- Kettingtoewijzing
- Indextoewijzing
9. Geef de drie soorten uitvoeringen van het besturingssyteem en teken het(+ wat uitleg)
- Procesloze kernel
- Uitvoering binnen gebruikersprocessen
- Op processen gebaseerd besturingssysteem
duur 90 min
Opdracht linux: Opdracht 1: In de directory /home/ldapusers staan home directories voor alle gebruikers. Toon al deze directories.(enkel de namen) Opdracht 2: Laat deze lijst gebruikers weggeschreven worden naar een bestand users.txt in je eigen home directory. Opdracht 3: Gebruik Gzip om deze lijst te comprimeren naar users.gz Opdracht 4: Vraag de bestandsgroottes op van user.txt en users.gz
Active directory: 1 maak nieuwe gebruikersgroep aan met naam BS1 2 Voer er stud1 en lect 1 toe als leden 3 maak nieuwe subdirectory in bestand op c schijf 4 verwijder de leesrechten (users) van dat bestand 5 zorg ervoor dat leden uit groep BS1 leesrechten krijgen 6 Zorg dat ook alle lectoren volledige controle krijgen over bs1
2015 Juni examen
Strypsteen
1. Overzicht van 2 partities (1 primaire en 1 extended). Benoem/beschrijf een aantal onderdelen (o.a. PBR, boot sector, EMBR) en geef de grootte van het lege deel na de MBR.
2. Teken een schema van een interrupt. Waarin verschilt een interrupt van een gewone subroutine?
3. Benoem alle onderdelen van fig. 2.11 in het handboek.
4. Geef 4 mogelijke voordelen van Symmetrical Multi Processing.
5. Hoeveel lees- en schrijfbewerkingen zijn er nodig om een blok in het midden toe te voegen bij 100 aaneengesloten, gelinkte en indexblokken + verantwoord.
6. Inodes van 12 blokken, een single, een double en een triple indirect pointer. Blokken van 8kB en adressen van 8B. Geef de grootte bij geen, 1 en alle indirecte pointers.
- Geen: 12 directe verwijzingen naar elk 8kB geeft 96kB.
- single indirect + direct: 8kB/8B adressen/blok = 1000 adressen/blok => 1000*8kB (S indirect) + 96 kB (direct) = 8.096.000B = 8MB
- S,D,T indirect en direct: [1000^3 (T indirect) + 1000^2 (D indirect) + 1000 (S indirect) + 12 (direct)] * 8kB = 1.001.001.012 * 8000B = 8.008.008.096.000B = 8TB
7. Van welke status naar welke status gaat een proces als het preëmptief behandeld wordt en waarom?
8. Uit welke 3 onderdelen bestaat een procesbesturingsblok + geef van elk onderdeel een voorbeeld.
2016 juni examen
Strypsteen
1. Wat is een trap?
2. Welke zijn de 3 minimum services van een microkernel?
3. Wat is het grootste nadeel van een microkernel?
4. Geef alle kenmerken van een procescontrollerblok.
5. Wat is een interrupthandler?
6. Wat is het verschil tussen acilic tree en tree bij directorys?
2017 augustus examen
Strypsteen
2u tijd, volledig schriftelijk, niks meenemen.
1. Geef 11 stappen van bootproces (windows)
2. Leg uit soft (symbolic) en hard links. Leg uit: dangling pointers.
3. Geef limitaties BIOS.
4. Welke info op PCB? Welke processen in ready queue? Hoe wordt er naar verwezen?
5. Hoe gebeurt hardware interrupt? Geef alle stappen in schema. Leg uit: trap.
6. Waarom gaat een procestoestand van geblokkeerd/suspend => geblokkeerd? Wat zorgt ervoor dat een proces van geblokkeerd => gereed gaat? Waarom toestand van running naar ready?
7. Inodes van 10 blokken, een single, een double en een triple indirect pointer. Blokken van 8kB en adressen van 4B. Geef de grootte bij geen, 1 en alle indirecte pointers.
8. 100 blokken bestandssysteem, hoeveel lees/schrijf I/O operaties voor directe, gelinkte en geïndexeerde allocatie.
9. AD vraag
10. FAT vraag
2019 FAT 16 oplossingen
GPT
find the disk GUID:
F2 5A 52 C8 C3 C6 A4 94 46 0D 3C E6 87 7D 61 D7
calculate the maximum partition size (use the first and last usable LBA's):
first: 0022 (34)d
last: 00 4F DE (20446)d
max bytes: 10 450 944
single partition entry:
128 bytes
PARTITION ENTRY
The size: 18 398 blocks or 9 419 776 bytes
first block: block #2048
offset: 0x100000
PARTITION LAYOUT
How many copies of the FAT are there?
2
How large is one FAT?
72 sectors, 36 864 bytes
How many file/directory entries can be stored in the root directory?
512 items
How large is the root directory? (32 bytes/entry)
512 * 32 = 16 384 bytes, of 32 sectoren
Compute the offsets of the following sections
Boot Sector = 0x1000000
FAT 1 = 0x101000
FAT 2 = 0x10A000
Root dir = 0x113000
Data section = 0x117000
DIRECTORY ENTRY
INTERPRET
filename = PROGRAMS Attributes = Directory last write time = 3:25:44 last write date = 26/10/2005 first logical cluster = 0140
LIST (name, attributes, size and first cluster)
BS LABO - volume- 0000 (first cluster)
hello.txt - archived - 13 bytes - 0002h
docs - Directory - 0 bytes - 0003h
system - directory - 0 bytes - 0004h
building.jpg - none - 79829 bytes - 25h
nala.jpg - Read-only - 69508 bytes - C1
bill.jpg - archived - 13024 bytes - 15E
FAT how many clusters will the file bill.jpg occupy?
#clusters = 26 clusters
first physical cluster of bill.jpg?
logical = 15E => offset = (15E - 2)*200 + 0x117000 = 0x142800
RECONTSTRUCT POEM 1) 151 2) 01D6 3) 0195 4) 018a 5) 15d 6) 1ae 7) 023a 8) 1fe (9) FFFF)
poem: i feel like i haven't been read right
for 10 years of drops from heights
waiting for scandisk
to repair me
your os says let's go
but my boot sector says no
if you want to read me, there's a proper way
I'm a floppy in a disk drive, you gotta format me the right way
LONG FILENAMES 1) DOCS subdirectory = ox117000 + ((0003 - 2 )*200) = 0x117200 2) short = QUESTI~1 3) long = "questions exam operating systems (2017)"
RECOVERING DELETED FILES SYSTEM subdirectory = 0x117000 + ((0004 - 2) * 200) = 0x117400
directx.log
first cluster = 0020 (offset data 0x11AC00)
2019 juni examen
Arne Walschap
Leg volgende begrippen grondig uit:
- trashing
- daisy chaining
- timesharing
- master file table
- PU-gebonden processen
dan open vragen:
waarom kan je met een RAM van 8GB een programma/bestand van 10GB downloaden (iets met virtual host)
5 eigenschappen EUFI
5 doelstellingen scheduling
paginatie tabel tekenen en uitleggen (werkgeheugen onderverdeeld in 4 frames en geheugengrootte is 16 bytes)
processor kan niet in de toekomst kijken, voor welk scheduling strategie is dit een probleem + wat is de oplossing
verschil tussen boomstructuur en acyclische structuur
welk interrupt request is gemaskeerd en welke kunnen niet gemaskeerd zijn (interne synchroon en externe asynchroon)
xxx Kirito-kun <3
2020 augustus examen
De opgave van het examen in augustus met dank aan ISW:
2020 handige scripts - ISW
Een paar handige scripts met dank aan ISW:
2020 januari examen
Tiebe Van Nieuwenhove
1) Waarom is een besturingssysteem dat interrupts gebruikt sneller. Verklaar en maak een tekening.
2) Concreet begint de processor instructies uit te voeren vanaf adres 0xFFFFFFF0. Wanneer de processor het geheugenadres 0xFFFFFFF0 opvraagt aan de geheugen controller, zal die echter geen bytes vanuit het werkgeheugen halen. Vanwaar haalt hij ze en wat is de naam die hier aan gegeven wordt?
3) Wat is een aaneengesloten bestand? Vergelijk dit met de niet-aaneengesloten bestanden.
4) Leg uit hoe het Best Fit en Worst Fit werken. Geef een voorbeeld waar we dezen zouden kunnen gebruiken.
5) Leg uit wat 2-level paging is en maak een tekening.
6) Maak een tijdlijn van met de volgorde waarin de verschillende processen uitgevoerd worden voor Round Robin & Shortest Remaining Time
7) Leg volgende begrippen uit:
- Trap
- Starvation
- Interne fragmentatie
2020 juni examen
(Corona) - R. Swennen & F. Vogels
Het examen was een open-internet examen met 2 delen en een maximale tijd van 2h36. Door corona was het theorie en praktijk examen samengevoegd tot 1 examen. Deel 1 was meer praktisch en voor deel 2 moest je op een .docx maken met gegeven vragen (en hun antwoorden).
Deel 1
Active Directory
- Welk van de volgende services heeft AD nodig? kies één uit: DHCP, WINS, DNS, LDAP, geen van bovenstaande
- Welke van de onderstaande uitspraken is waar? kies één uit: Een domain maakt altijd deel uit van een site, een domain maakt altijd deel uit van een forest, een forest maakt altijd deel uit van een tree, een tree maakt altijd deel uit van een domain
- Waarop kunt u de eigenschap Block Inheritance instellen? kies één uit: Policy, GPO, OU, geen van bovenstaande
FAT
- Adres van eerste FAT tabel
- Adres van root directory
- Adres data region
- Totale grootte van FAT16 volume in bytes
- ...
- Stel dat bij unix de i-node 13 blok-adressen bevat: 10 directe, 1 indirect, 1 dubbel-indirect en 1 drievoudig-indirect. Stel dat de blokgrootte 4 Kbytes is en dat de blok-adressen 64 bits zijn. Wat is de maximale bestandsgrootte (in X KBytes) als er geen gebruik gemaakt wordt van indirecte adressen? Antwoord in Kbytes
Er was een FAT16 image meegegeven hier uit moest je wat info uit halen en op xToledo invullen. (Dus niet het HTML bestand) Bestand met dank aan ISW:
Scheduling strategieën
- Geef start/omlooptijd van proces Round Robin (RR)/Shorest Remaining Time (SRT)
Deel 2
- Leg aan de hand van een concreet voorbeeld uit wat het verschil is tussen interne én externe fragmentatie
- Leg in detail uit of een besturingssysteem, multiprogrammatie moet ondersteunen om efficiënt gebruik te kunnen maken van interrupts
- Leg het onderling verband uit tussen volgende termen: kernel-toestand, gebruikerstoestand en system calls
2020 PE
Tiebe Van Nieuwenhove
Active directory
- Maak in de OU Employees de OU education aan. Maak in education 2 OU's die op hetzelfde niveau zitten: students & teachers.
- Maak in teachers een user Teacher 1 aan en in students Student 1 aan.
- Maak een groep Locker Access waar Student 1 in zit en een groep Coffee Room waar Teacher 1 in zit. Voeg de gebruikers van de groep Coffee Room toe aan de groep Locker Access (DIT MAG JE NIET HANDMATIG VOOR ELKE GEBRUIKER DOEN!)
- Theorie: Wat is het verschil tussen een Organized Unit en een Security Group?
2.
- Zorg ervooor dat de computers niet opnieuw automatisch opstarten wanneer er nog gebruikers ingelogd zijn na updates.
- Maak een shortcut op de desktop van alle gebruikers in het domein naar de website: jynupper.com
- Installeer op alle computers van de Teachers het programma emacs.
- Enforce these Password policies
-
- - Wachtwoorden moeten minimaal 8 charachters lang zijn, moeten elk jaar verandert worden en de laatste 5 wachtwoorden moeten onthoud worden.
- - Wachtwoorden van teachers moeten minimaal 10 tekens lang zijn en moeten elk half jaar verandert worden.
- - Studenten mogen hun wachtwoord maar om de 7 dagen veranderen
- Stel dat de GPO om aan de de Control panel zo geconfigureerd is:
-
GPO status Kunnen ze aan de terminal? Domein Disabled ja / nee Employees Not Configured ja / nee Teachers Enabled ja / nee Students Not Configured ja / nee
FAT
We kregen een .bin bestand zoals tijdens de oefenzitting en er was gegeven dat een sector 512 bytes lang is en er is 1 sector per cluster. De FAT paritie start vanaf 0x11000, de data partitie start vanaf 0x25000.
1. Geef het unieke identificatienummer van de partitie.
2. Geef het Volume Serial Number.
3. Geef de short name, long name, last write date, last write time, attributen, eerste cluster van het volgende bestand:
4150 0075 006E 0074 0042 000F 006D 5300
3100 2E00 7800 6C00 7300 0000 7800 0000
5055 4E54 4253 7E31 584C 5324 001E EC7C
8A2A 332B 0000 A845 2B2B 4400 89EA 0000
4. Geef de opeenvolgende clusternummers van het bestand dat begint bij de logische cluster 0x07b6.
5. Geef de eerste 10 bytes van het bestand van de vorige oefening.
FAT 16 berekenen
Voor FAT16 te berekenen kan je kijken op https://github.com/ISW-Leuven/fat16 met dank aan ISW
Hieronder staat de repo gekopiëerd:
FAT16
This repo contains a few things to help you find / calculate FAT16 properties, ...
Disclaimer
The info in this repo may contain errors. Please do not rely on this and always check it for yourself!
GPT Header
GPT Partition Entry
Boot Sector
Disk Layout
- Boot Sector Address [HEX] =
First LBA
(GPT Entry, DEC) *512
- Size of cluster [BYTES] =
Bytes per sector
*Sectors per cluster
- First FAT Address [HEX] =
Boot Sector Address
+Size of cluster
[IN DEC] - Root Directory Address = First FAT Address + (
Small number of sectors
*Sectors per cluster
) [HEX] - Root Directory Size [BYTES] =
Number of possible root entries
*Directory Entry size
(often 32 bytes) - Data Region Address =
Root Directory Address
+Root Directory Size
[IN HEX] - Total FAT16 Volume in Bytes =
Small number of sectors
*Bytes per sector
Files
- To find the next cluster index =
First FAT Address
+Previous Cluster
* 2 - File contents of the cluster =
Start of data region
+cluster_size
*(cluster_index - 2)
Time
- First 5 bits for hours
- Next 6 bits for minutes
- Last 5 bits for seconds (you have seconds multiply by 2 to get the value, eg.: 00011 => 3, 3 * 2 => 6 seconds)
Date
- First 7 bytes years since 1980 (eg.: if value in dec is 28, 1980 + 28 = 2008)
- Next 4 bits for the month
- Last 5 bits for the day
Sources
- UCLL
- Pieter Philippaerts
Bomen en grafen
2017 oefeningen
hier is een groot deel van de oplossing voor de oefeningen van 2016-2018 met dank aan Yanice Slegers:
Github: Oefeningen Slegers Github
2020 augustus examen
De examenopgave van augustus 2020 met dank aan ISW en Lukas De Ruysscher: 1 September.zip
2020 juni examen
het examen van juni 2020 met dank aan ISW
Praktijk
Het praktijk gedeelte bestond uit twee vragen. Het examen gebeurt op eigen laptop. Zorg dus dat je jouw labo's op je laptop hebt staan!
Er is een lege versie en opgeloste versie (gemaakt door Sigfried).
Vraag 1 - Trees
Je moest toevoeg (addNode
) methode van een ternary implementeren.
Meer info over ternary tree op: https://en.wikipedia.org/wiki/Ternary_tree
bestanden: 11 Juni.zip
(Lennert merkte op dat de praktijk opgaven niet in de zip zat, enkel het schriftelijk gedeelte, dus hier is de praktijk opgaven ^^ 20200611_nm_praktijk_MBI72a.docx)
Algemeen
Het examen bestaat uit twee delen, een eerste schriftelijk deel en een tweede praktisch deel. Het tweede deel is vergelijkbaar met de oefeningen uit de labo's, dit is op eigen laptop, dus kan je makkelijk je code van de labo's erbij nemen. Het eerste deel test in hoeverre je geleerd hebt en de oefeningen zelf gemaakt hebt.
Business process management
2013 juni examen
Het vak werd gegeven door Pieter Hens die zijn leerstof uitstekend wist over te brengen. De examens waren volledig schriftelijk.
Juni 2013
- Teken een procesmodel adhv een gegeven case(de een was korter, de ander was langer)
- Verschil tss XOR en event-based gateway + voorbeeld
- Unbounded uitleggen
- Een procesmodel en je moest zeggen wat er fout liep en een oplossing geven voor dit probleem
- De eigenschappen van sound geven en je kreeg een tekening en je moest deze eigenschappen controleren adhv een Reachability Graph
2015 juni examen
Het vak werd gegeven door Pieter Hens die zijn leerstof uitstekend wist over te brengen. De examens waren volledig schriftelijk.
Juni 2015
- Een deel juist of fout vragen over de theorie aan de hand van een model: geen punten op juist of fout maar wel op je uitleg waarom dit fout is.
- Een deel van dit model uitleggen in normale woorden (dus niet technisch).
- Gegeven een case: duid alle dingen aan die out of scope zijn, alle actors, alle end states. Teken het model hierna.
- Enkele vragen over de theorie.
- Een deel over activiti, gegeven een model in bpmn20.xml formaat; upload het onder activiti en geef al de stappen, deploy het in activiti en geef al de stappen & start een procesinstantie ervan; copy/paste een screenshot met de status van het proces, Het proces wordt geblokkeerd omdat er een task approved moet worden; welke users kunnen deze approven en hoe heb je dit gevonden?, een error + mogelijke fix uitleggen.
2019 januari examen
1. Modelleer oefening
Loops/Iteraties, Event-gateway, Boundary events, ... zijn allemaal nodig.
2. Vragen theorie
a: Leg de Loop activity uit en geef een voorbeeld
b: Leg de Multiple Instance Activity uit en geef een voorbeeld
3. Gegeven een proces model
a: Wat is er mis met dit model
b: Waarom is dit fout?
c: Is dit model bounded en wat wilt dat zeggen?
d: Is dit model live en waarom wel/niet?
e: Hoe zou je het model verbeteren
4. Gegeven een omschrijving van een proces en 4 proces models.
Is het model een juiste omschrijving van het proces, wel of niet.
Zo niet, waarom?
a: Hoe verander ik een interrupting boundary-event naar een
non-interrupting boundary event in Signavio.
b: Geef 3 voldoende verschillende vragen die beantwoord kunnen worden
door de Signavio Workflow Accelerator (Proces analyse).
2019 juni examen
Het examen is nu mondeling en schriftelijk (grotendeels schriftelijk). Het vak werd gegeven door Johan Strypsteen
examen 2
1. Modelleer oefening
Loops/Iteraties, Event-gateway, Boundary events, ... zijn allemaal nodig.
Lector (Mark in dit geval) vroeg hoe je een bepaald deel op andere manieren kon oplossen. !Tip: ken je benamingen goed!
verhaal: volledig proces van een klant dat bij een bedrijf bestelt. Controleer magazijn, bestel indien nodig bij.
Klant kan cancelen, dingen moeten nagevraagd worden bij leveranciers en klant. indien antwoord te lang duurt wordt het gecancelled etc.
a: Geef 4 attributen van signavio
b: geef de 4 parameters van simulate in Signavio
3. gegeven volgend schema, beantwoord de vragen
a: Is dit een bound schema
b: Waarom wel/niet?
c: Is dit schema live
d: Hoe kan he zorgen dat dit schema wel in orde is?
4. Theorie
versie 2: Wat is een signal event
versie 1: Wat is een call activity
examen 1
1. Modelleer oefening
Loops/Iteraties, Event-gateway, Boundary events, ... zijn allemaal nodig.
a: Hoe verander ik een interrupting boundary-event naar een
non-interrupting boundary event in Signavio.
b: Hoe start je een signavio workflow accelerator project? (geef alle stappen)
3. Deadlocks & Unbound
Gegeven is een schema en duidt aan waar er deadlocks en unbound events zijn.
4. Theorie
Wat is het voordeel van Business Process in een INFORMATIESYSTEEM?
Computernetwerken 1
2009 juni examen
Algemeen examen voor alle reeksen
- Geef 4 verschillen tussen CSMA/CA en CSMA/CD.
- Invultekst over de verschillende OSI-lagen en hun ProtocolDataUnits
- Leg uit:
- Wat is het verschil tussen een trilling en een golf?
- Wat is de stelling van fourier?
- Wat is de significantie van het 3 dB punt?
- Leg uit pulsverbreding en wat kan er tegen gedaan worden?
- Los op:
- Gegeven een IP-adres ??, van welke netwerkklasse is dit IP-adres?
- Geef alle IP-adressen die tot deze klasse behoren.
- Gegeven een IP-adres (in de vorm x.x.x.x/x), welke IP-adressen behoren er tot dit netwerk?
- Welk subnetmasker behoort er bij dit subnet?
- Gegeven Routeringstabel van router D en een update bericht van router F. Geef de routetabel van router D na update van router F.
2010 juni examen
Algemeen examen voor alle reeksen
- Invultekst over de verschillende OSI-lagen en hun ProtocolDataUnits
- Invultekst over bandbreedte, bitsnelheid (Ook over specifieke getallen zoals bv bij een telefoonlijn)
- Afbeelding van een RJ45 aansluiting. Zeggen of de draden goed aangesloten zijn en of de kabel zal werken.
- IP-pakket en Ethernetframe schrijven voor 4 verbindingen (Pc1->router1->switch->router2->pc2)
- Wat betekent Authentication, Authorisation en Accounting
2011 augustus examen
- Invultekst over eerst bekabeling en dan stukje over coax en csma/cd.
-
- 2 gegeven ip's met 2 subnetmaskers. De ip's zaten in een ander subnetwerk en je moest het #submasker aanpassen zodat ze naar elkaar konden pingen.
- Hoe kan je ze laten pingen zonder subnetmask aan te passen maar door een apparaat toe te voegen (router)
- welke instellingen moet je bij zetten om de router te laten werken
- wat moet je op de router instellen
- Waarom gedraagt een access point zich als een brug?
-
- Wat is het verschil tussen een trilling en een golf?
- Wat is de stelling van fourier?
- Wat is de significantie van het 3 dB punt?
- waarin kunnen trillingen van elkaar verschillen
- wat betekent een signaal ruisverhouding van 30db?
- Gegeven Routeringstabel van router D en een update bericht van router F. Geef de routetabel van router D na update van router F.
- Welke protocol gebruik je om van de ene naar de andere laag te gaan (van naam naar 3e en van 3e naar 2e). + Waarom verschillen deze
- Subnetting
2011 juni examen
- Als je een hub verandert naar een switch is dit dan veiliger, zo ja leg uit.
- Je kreeg 4 verschillende IP-adressen, je moest zeggen welk van deze 4 een multicast adres waren. Je kreeg een ip adres en moest dan een multicast adres schrijven voor dit ip adres
- 34.11.12.13 - 134.11.12.13 - 234.11.12.13 - 334.11.12.13
- (01005E)h (0...)b
- Invultekst van modulatie, boring shit, golven, trillingen en bekabeling. Specifieke cijfers nodig.
- Verschillende types modulatie
- Bandbreedte wordt gedefineerd als:
- Welke modulaties gebruikt QAM (2 amplitudes en 8 fasen)
- .... zorgt ervoor dat het aantal modulaties niet oneindig is (verzwakking?)
- Formule Nyquist (2B) hoe wordt dit uitgedrukt (eenheid)
- Formule Shannon (B * log2(1 + S/N)
- Hoeveel kanalen ADSL heeft en hoe dit is onderverdeeld (256 kanalen elk 4kHz)
- De transmissiesnelheid van data op een telefoonlijn
- Een golf heeft 2..., 2...,2... (amplitudes, frequenties, fasen)
- ...
- Je had PC1 -(1)-> Router 1 -(2)-> Switch -(3)-> Router 2 -(4)-> PC2 je moest het traject van een Ethernet frame met een IP-pakket uitleggen. Je moest de MAC-adressen en IP-adressen tussen elke route (1,2,...) uitleggen.
- MAC zender
- MAC bestemmeling
- IP zender
- IP bestemmeling
- De connectie van een computer (abc.khleuven.be) op school naar youtube.com uitleggen (DNS-servers, naamservers) en de caches waren leeg.
- Leg uit crosstalk en hoe TP dit verminderde.
2012 augustus examen
- Ethernet:
- a. Uit hoeveel cijfers bestaat een MAC-adres?
- b. Hoe kan je aan de adressen zien dat 2 Ethernet-kaarten van dezelfde fabrikant zijn?
-
- a. Welke zijn de 3 eigenschappen waarin trillingen van mekaar kunnen verschillen?
- b. Wat is het verschil tussen een trilling en een golf?
- c. Wat betekent de eigenschap van Fourier?
- d. Wat betekent de formule van Shannon?
- e. Wat betekent een signaal/ruis-verhouding van 30 dB?
- Leg uit hoe NAT (network adress translation) kan gebruikt worden om één IP-adres te laten delen door meerdere gebruikers. Wat als meerdere gebruikers tezelfdertijd naar dezelfde site surfen?
2012 juni examen
- Waarom is 8B/10B codering beter dan Manchester-codering.
- Als een telefoonnet een verzwakking heeft van 1.5dB/km, na hoeveel km is de verzwakking gehalveerd.(2km)
- Wat is Q.a.m?
- Wat heb je nodig om een bitrate van 1Gb over UTP te verzenden?
- Hoe kan een ontvanger de zender vertragen via TCP?(venstergrootte)
- Leg de werking van ARP uit.
-
- a. Gegeven een IPv6 adres= 83A6:5401:54C4::1/23 Eerste en laatste adres hiervan geven.
- b. Schrijf volledig uit = 2001:4582:a::0132
- c. Wat is door RIR(=Regional Internet Registry) meegegeven?
- d. Wat is door ISP(Internet Service Provider) meegegeven?
- Geef de Mac-adressen als Pc zwaan via een UTP-kabel een bericht naar Pc Eend stuurt die zich op een draadloos netwerk van het basisstation Snit bevindt.
- Routetabel van router X is gegeven, routetabel van Router Y is ook gegeven.
- Pas de routeringstabel van router X aan, nadat deze een rapport heeft ontvangen van router Y.
- Routeringstabel nog niet beschikbaar.
-
- Pc 1 heeft als IP-adres: 192.80.4.3 en als subnetmasker: 255.255.255.0
- Pc 2 heeft als IP-adres: 192.80.5.4 en als subnetmasker: 255.255.255.0
- Ze kunnen niet pingen naar elkaar.
- a. Los dit op door enkel de subnetmaskers aan te passen.
- b. Los dit op door extra apparatuur toe te voegen.
- c. (bij b) Wat moet er aangepast worden van adressen.
- d. Hoe zou je dit doen(geef voorbeelden)
2013 juni examen
Alle vragen op twee na staan al om de wiki, de twee nieuwe vragen zijn:
1. a) Leg tunneling uit
b) waarom is dit beter dan dual stack
2. oefening op subnetten, mac-adressen en IPv4 hoofding bij het verzenden van berichten
2014 juni examen
1. Wat is het veiligste een hub of een switch + leg uit. (switch)
Switch. Als men een switch gebruikt kan er niet aan packet sniffing worden gedaan.
2. Oefening op IPv4 en subnetten
3. a) Wat zijn de 2 socketten van TCP b) Iets met communicatie van TCP
4. Encapsulatie: zet de volgende begrippen in de juiste volgorde.
Data => segment => packet => frame => bits
5. Oefening op IPv6:
- Geef de afkorting van deze IPv6
- Geef de RIR en ISP
6. Leg uit hoe een computer interreageerd met de DNS server (je vraagt een website op vb www.aha.com)
Leg uit hoe hij aan het IP-adres komt.
7. Oefening op VLSM (lijkt op de packet tracer oefening)
2015 juni examen
1. Een webserver stuurt een html-pagina naar een browser. Geef de juiste volgorde van: a) bit, pakket, frame, data, segment? b) Ethernet, TCP, IP, HTTP c) Geef de algemene term hiervoor.
a) Data, Segment, Pakket, Frame, Bit
b) HTTP, TCP, IP, Ethernet
c) Data Encapsulatie
2. Mac adres aanvullen dat overeenkomt met een gegeven Ipv4 multicastadres
3. Wat is een TCP-socket
4. Wat is Collision Avoidance
5. Wat wordt er verstuurd om een TCP connectie te starten en te stoppen
Openen: Open-functie
Stoppen: Sluit-bevel
6. Welke 2 velden worden gebruikt in de TCP hoofding om te checken op correctheid.
-Controlebytes
-venstergrootte?
7. Hoe kan de ontvanger bij TCP de zender afremmen?
De ontvanger moet het venster verkleinen
8. IPv4-subnetting: hoeveel bits moeten van het host-gedeelte weggenomen worden om 5 subnetten te kunnen maken?
2^x >= 5 -> x = 3 -> 3 Bits
9. Gegeven 2 routers verbonden met een seriële kabel die ieder x aantal hosts zouden moeten bevatten. Bereken de subnetten.
VLSM toepassen. Vergeet niet dat de verbinding tussen de 2 routers ook toegewezen moet worden
aan een subnet (deze verbinding moet 2 hosts hebben).
Rest van de vragen ging over IPv6. Hoeveel bits deelt de RIR uit, hoeveel de ISP enz.
2017 januari examen
1. Wat is het nut van het length-veld in een ethernet-frame?
2. Het OSI-model is een protocol suite. Wat wordt er met dat laatste bedoeld?
3. Wat is het nut van het TTL-veld in een IP-pakket? (TTL = Time to live)
4. Hoe kan met NAT gebruiken in IPv4. Wat gebeurt er als meerdere pc's op hetzelfde netwerk allebei naar www.kmi.be surfen?
5. Oefening op IPv6
a) Wat is het eerste en het laatste IP van 2001:0200::/23?
b) Wat is de kortste manier om 2001:0000:0000:0006:0000:0000:0000:0001 te schrijven?
6. Wat is de minimale configuratie van een computer opdat die kan communiceren met een andere computer?
7. Oefening op subnetten. Gegeven 2 routers verbonden met een seriële kabel die ieder x aantal hosts zouden moeten bevatten. Bereken de subnetten.
VLSM toepassen. Vergeet niet dat de verbinding tussen de 2 routers ook toegewezen moet worden
aan een subnet (deze verbinding moet 2 hosts hebben).
2019 DNS taak
De oplossing met dank aan Grumpyxiii : DnsTaken-master.zip
De oplossing met dank aan ISW:
2019 januari examen
Cesuur: VLSM-oefening met telkens 1 pc in een netwerk, deze pc krijgt het laatste IP-adres van dit subnet) Swennen verwacht dat je dit kan oplossen en in packet tracer zetten binnen 1,5u, anders heb je weinig tijd voor het examen!
Elke vraag staat op 2 van de 10 punten
Examen 1
1. Leg uit hoe NAT (network adress translation) kan gebruikt worden om één IP-adres te laten delen door meerdere gebruikers. Wat als meerdere gebruikers tezelfdertijd naar dezelfde site surfen? Ook PAT!!!
2. Leg de werking van ARP uit. (een tekening zegt meer dan duizend woorden!)
3. Welke IP-adressen heb je nodig als je naar de website van KMI gaat? (er is geen DHCP)
4. Wanneer weet computer A zeker dat er zich bij CSMA/CD geen botsing heeft voorgedaan en waarom?
5. Leg uit: TCP is connectivity based.
Examen 2
1. Schets het opzetten van een TCP-verbinding.
2. De ARP verie van IPv6 schetsen.
3. DNS-oefening --> leg de stappen uit als gebruiker naar www.cosci.be gaat.
4. Schrijf een ipv6 adres zo kort mogelijk en een andere volledig. (gratis 2 punten)
5. Hoe kan de ontvanger bij TCP de zender afremmen? venster verkleinen.
2019 Packet Tracer VLSM info
Dit is de oplossing voor de Packet tracer oefening van het Januari examen in 2019
Het PKT bestand: examenJanuari2019.pkt
Video over gebruik Packet Tracer: Youtube link
2019 samenvatting - Axel Hamelryck
Met dank aan de Github van Martijn en natuurlijk Axel Hamelryck
Computernetwerken_axelele_2019.pdf
2020 augustus examen
De opgave van het augustus examen met dank aan ISW en Sigfried Seldeslachts: 24 Augustus.zip
2020 januari examen
600px-Opgave_VLSM-vraag_computernetwerken_1.png
2. Leg uit waarom het OSI referentiemodel een protocol suite is.
3. Hoe kan een ontvanger de zender vertragen via TCP?
4. De naam van een pc in een pc-klas is alfa.ucll.be. De gebruiker surft naar www.cosci.be. Welke zijn de verschillende stappen bij de naam-resolutie (geen enkele DNS-server heeft een naam in zijn cache)?
5. Oefening: schrijf een gegeven IPv6 zo kort mogelijk en voluit.
6. De ARP verie van IPv6 schetsen.
2020 samenvatting - Lars Lemmens
Met dank aan de Github van Martijn en natuurlijk Lars Lemmens
Alle afbeeldingen staan in de powerpoint!
Hoofdstuk 1
1.1 Protocollen
-
Programma dat luistert en wacht tot een ander programma het initiatief neemt = serverprogramma.
-
Programma dat het initiatief neemt = cliëntprogramma.
-
Communicatie van computerprogramma's moeten er vastgelegde afspraken zijn →
-
Welke berichten er kunnen verstuurd worden
-
Wat elk bericht betekent
-
Wat de onderlinge verhoudingen zijn tussen de berichten, o.a. hoe op elk bericht kan gereageerd worden
-
Geheel van afspraken → protocol
-
Principe verdeel & heers toegepast → afspraken voor een bepaald deel i.v.m. computercommunicatie
-
Afspraken over wijze waarop een bit voorgesteld wordt.
-
Afspraken i.v.m. foutcontrole.
-
Afspraken om meerdere PC's dezelfde fysieke verbinding te laten gebruiken zonder elkaar te storen
-
Verschillende afspraken vastgelegd → verschillende protocollen samen → protocolstack
-
Protocol gebruikt voor WWW = HyperText Transfer Protocol.
Schematische voorstelling HTTP-berichten: (figuur 1.1)
1.2 Protocollagen
- Netwerk kan gezien worden als → infrastuctuur die gedistribueerde applicaties voorziet van diensten
- Waarom kan eenzelfde browser gebruikt worden bij verschillende netwerken = browser moet bericht niet zelf omvormen tot een bitrij + bitrij niet zelf op netwerk zetten, zal bericht afleveren aan programmatuur op lager niveau dat bericht omvormt tot een bitrij en deze op netwerk plaatst, idem voor inkomende berichten.
- Netwerkprogrammatuur opgedeeld in verschillende lagen:
Bovenste laag = applicatielaag | Communicatieboodschappen uitgewisseld tussen toepassingen die gebruik maken van netwerk → applicatieboodschappen direct gevolg van interactie tussen applicatie & gebruiker |
---|---|
Onderste laag = Fysieke | verstuurt de bitrij op het netwerk en zet ontvangen signalen van het fysieke communicatiemedium om in een bitrij. |
-
Indeling in lagen 2 belangrijke voordelen:
-
De complexiteit kan verdeeld worden d.m.v. abstractie
-
Meerdere toepassingen kunnen gebruik maken van dezelfde programmatuur van de onderliggende laag
-
Communicatie in figuur 1.1 = abstract / virtueel → berichten worden afgeleverd aan en ontvangen van een tussenlaag. De bovenste van de tussenlagen.
-
Een stuk van bericht, opgedeeld door tussenlagen = segment
-
Redenen om grotere berichten op te delen in segmenten
-
De kans dat een segment een fout bevat is kleiner en wanneer dit het geval is moet enkel dit segment opnieuw verstuurd worden.
-
Meerderen kunnen het netwerk tezelfdertijd gebruiken = netwerk kan segmenten van verschillende communicaties door elkaar versturen.
1.3 TCP/IP
-
Voor lagen tussen toepassingslaag en fysieke laag wordt bijna altijd TCP/IP gebruikt.
-
Geheel van afspraken =
-
Elke computer moet een uniek IP-adres hebben van 4 cijfers die tussen 0 en 255 liggen.
-
Een computer wordt aangeduid d.m.v. zijn IP-adres.
-
Een proces op een computer wordt aangeduid door het poortnummer.
1.3.1 TCP/IP toepassingen
-
Toepassingen hebben volgende eigenschappen gemeen :
-
Client- en serverprogramma's.
-
Gecommuniceerd via TCP/IP.
-
Berichten die uitgewisseld worden, zijn vastgelegd in een protocol.
-
Protocolspecificatie inkijken = Request For Comment opvragen via FTP.
-
Internet RFC's : Cliënt en server voeren protocollen uit die in een computernetwerk het volgende regelen
-
Boodschappen en de volgorde ervan die worden verstuurd
-
Boodschappen en de volgorde ervan die worden ontvangen
-
Structuur boodschappen
-
Protocollen moeten publiekelijk en gestandaardiseerd worden.
1.4 TCP/IP-model van de tussenlagen
-
De toepassingsprogramma's doen beroep op de programmatuur van een lager niveau. Meestal is dat het TCP-programma. Implementatie van TCP, transfer control protocol.
-
Verstuurt en ontvangt berichten die voldoen aan het TCP → deze berichten worden TCP-segmenten genoemd. (TCP-programmatuur wordt gebruikt door de toepasingsprogrammatuur en staat dus op een lagere laag)
-
TCP-programma's wisselen virtueel met andere machines segmenten uit
-
Er wordt gebruik gemaakt van programmatuur op een lagere laag: IP-programma. Implementatie van het IP (internet protocol). Berichten die voldoen aan het IP worden IP-pakketten genoemd
-
IP-programma cliënt en server communiceren virtueel
-
IP-programma's maken gebruik van programmatuur op een lagere laag: bv. de programmatuur of driver voor de netwerkkaart. De berichten die op die laag verwisselt worden zijn frames
-
Om frames van de ene naar de andere machine te sturen wordt er gebruik gemaakt van een lagere laag. Deze onderste laag gaat frames omzetten in bits.
-
De onderste laag die de frames in bits omzet gaat d.m.v spanningen (1 en 0) de data overzetten van de ene naar de andere machine
Applicatielaag ( HTTP, FTP) | Besturingssysteem met netwerktoepassingen |
---|---|
Presentatielaag (SSL, SSH) | Heeft betrekking op afspraken voor het coderen en decoderen van gegevens voor de toepassingslaag |
Sessielaag (Winsock, Sockets) | Heeft betrekking op de communicatie tussen tweetoepassingsprocessen |
Transportlaag (TCP, UDP) | Heeft betrekking op afspraken om een pakket zonder fouten van bron naar eindbestemming te sturen, maar op een hoger niveau dan de datalink-laag (er kunnen meerdere tussenstations zijn & omdat pakketten kunnen opgesplitst worden) |
Netwerklaag (IP, ICMP) | Heeft betrekking op het transport, de adressering en de routering van pakkettendoorheenhetnetwerkalsookophetopzettenvaneenroutevanbronnaar eindbestemming, nadat beide adressen fysiek bepaald zijn als fysischeadressen |
Datalink-laag (Ethernet, PPP) | Heeft betrekking op de datatransmissie en afspraken om fouten te corrigeren, of te melden. Ook de afspraken over de wijze waarop bits in pakketjes gebundeldenweeruitgepaktworden,afsprakenoverdewijzewaaropdehandshaking gebeurt. |
Fysieke (Coax, Fiber) | heeftbetrekkingopalleswatnodigisomdedatafysiekovereennetwerk te transporteren, inclusief de bekabelingsmethodes, maar niet de bekabelingzelf. |
- Ditmodelgeeftnietaanwelkeafsprakenergemaaktmoetenworden, wel** hoe men de afspraken moet indelen**.
- Afspraken ene laag mogen de afspraken voor andere laag niet** beïnvloeden**.
- Uitzondering fysische laag worden lagen → programmatuur geïmplementeerd.
- Programmatuurineenbepaaldelaag ziet** de programmatuur in de onderliggende laag als subroutines**.
- Elke laag communiceert minimaal met laag er onder / boven → alleen met die lagen → programmatuur ontwikkelt voor bepaalde laag → er vanuit compatibel met alle lagen compatibel
1.6 TCP/IP-model versus OSI-referentiemodel
OSI-model (theoretisch mode) | TCP/IP-model (reëel model) |
---|---|
Toepassingslaag | Toepassingslaag |
Presentatielaag |
| | Sessielaag | | | Transportlaag | Transportlaag | | Netwerklaag | Internetlaag | | Datalink-laag | Datalink-laag | | Fysieke laag | Fysieke laag |
-
Maar 4 lagen =
-
Toepassingslaag = bovenste 3 OSI
-
Transportlaag = zelfde als OSI
-
Internetlaag = zelfde als netwerklaag OSI
-
Netwerktoegangslaag = onderste 2 OSI
HOOFDSTUK 2: Datalinklaag: Netwerken en LANs
2.1 Terminologie: Link, node, netwerk, PDU
- Node = een apparaat dat informatie uitwisselt over een netwerk
- Link = communicatiekanaal tussen aangrenzende nodes → broadcastlink en point-to-point-link
- Broadcastcommunicatie = wanneer nodes verbonden zijn door middel van een gedeelde broadcastlink zal er een medium-acces-protocol nodig zijn die toegang tot de link en het verzenden van frames op deze link in goede banen zal leiden
- Point-to-pointcommunicatielink = deze wordt gebruikt wanneer twee nodes rechtstreeks met elkaar communiceren
- Netwerk = twee of meerdere nodes die geconnecteerd zijn op een gedeeld medium/link en die daardoor rechtstreeks met elkaar kunnen communiceren
- PDU = de data dat verstuur wordt tussen twee nodes en gespecifieerd wordt in een protocol
2.2 Diensten van de datalinklaag
Primaire functie in datalinklaag → ervoor zorgen dat de data over een gemeenschappelijke link uitgewisseld wordt.
Datalink voorziet 3 basisdiensten →
- Een duidelijk interface (API) met de netwerklaag voorzien en frames vormen.
- Frames versturen d.m.v. media access control: het coördineren van de verzending/ontvangst van frames door verschillende nodes over een gemeenschappelijke link
- Frames ontvangen en foutdetectie: het is zinloos om frames of PDUs die fouten bevatten te verwerken of verder door te sturen.
Frame bevat:
- Frameheader
- Framepayload, hierin pakket hoger gelegen laag
- Frametrailer (framefooter)
2.3 Implementatie van de datalinklaag
Datalinklaag →
-
Inhardware
-
op netwerkkaart(NIC)
-
op moederbord (NIC geïntegreerd opmoederbord)
-
Insoftware
-
Softwarecomponent van datalinklaag →driver vanNIC →Deze handelt adresinformatie en interruptafhandelingen van de NIC hardware af
2.4 Multiple-accesslinks en -protocollen
- Willekeurige-toegangsprotocollen
- De computer wil data verzenden, wacht tot link vrij is en begint met zenden. Mogelijke botsingen wanneer 2 of meerdere nodes op hetzelfde moment frames verzenden. Na botsing wordt toestand hersteld. Ook wel toegang door contentie genoemd. Ethernet is hier een voorbeeld van.
- Deterministiche toegangsprotocollen
- Een computer wacht tot hij toegang krijgt. Als een PC toegang krijgt → zekerheid dat geen andere PC's zullen storen → vaak gebruik gemaakt van een token. Token = bewijs van toegang tot het verzenden van frames op de link. → Maar 1 token dus botsingen niet mogelijk
Types LAN: Ethernet, token bus, tokenring,… Ethernet = meestgebruikt
2.5 Ethernet: fysiek
-
Ethernetkaart → uniek adres
-
Bestaat uit 48 bits → 12 Hexadecimale cijfers = MAC-adres (Medium Access Control)
-
Of uit LAN-adres
-
Op ethernetkaarten UTP-kabel gestoken die verbonden is met switch of hub
-
Switch bevat 4,8,12,... poorten → poorten: aansluiting voor TP-kabel
-
RJ-45 = connector
-
TP-kabel 8 draden waarvan bij 100Mbit/s 4 gebruikt van worden
-
Crossover-cable → omwisseling tussen 2 PC's → 1-3, 3-1, 6-2, 2-6
-
Meerdere PC's verbinden → switch → alles wat door draad 1 & 2 vezonden wordt → in switch via 3 & 6 doorgestuurd → via rechte kabel verbonden met elkaar
2.6 Ethernet frames
- Via Ethernet kunnen pc's Ethernet-frames naar elkaar versturen en van elkaar ontvangen. Een Ethernet-frame is een bitrij en bevat:
- Adres van de bestemmeling en de zender (het MAC-adres van 6 bytes)
- Type (2 bytes)
- Data (max. 1500 bytes, ook maximum transmission unit (MTU) genoemd)
- Eventueel opvulbytes (lengte frame min. 64 bytes en max. 1518 byes)
- Controle-informatie ( frame sequence checksum ) die nagaat of er geen fouten bij overdracht zijn gemaakt (4 bytes)
- Om ethernetkaart te kunnen gebruiken → drivers nodig → drivers die frame versturen & ontvangen
- verschil fysieke laag & datalink → op fysieke laag bestaan bits → bits groeperen tot frames → frames versturen → frames versturen en ontvangen op datalinklaag
- Preambule: Aan ethernetframe → preambule (7 bytes) & SFD ( start of frame delimiter, 1 byte) → samen
2.7 Ethernet a.k.a CSMA/CD
-
Versturen van frames →drivers moeten zich aan afspraken houden →het CSMA/CD protocol
-
CSMA/CD →Carrier Sense Multiple Access / Collision Detection
-
Vroeger → elke PC verbonden via 1 coax kabel → bus(-broadcast)netwerk
-
Elke bit die op kabel ging passeerde elke PC
-
Op uiteinden kabel een terminatie (kabelafsluitingen → voorkomen signalen weerkaatsen)
-
Later →coax kabel vervangen door hub (alle pc's verbonden aan hub)
-
Hub → verstuurt elk signaal dat binnenkwam naar alle andere pc's buiten naar de pc van wie hij het signaal kreeg → elk bit dat wordt gestuurd passeert ook elke pc
-
Ethernet principe → frame passeert alle PC's → alleen PC voor wie frame bestemd is mag frame lezen → elke kaart leest bestemmingsadres frame
-
Is dit mijnadres
-
Is dit mijn broadcast-adres → 12 F's
-
Is dit multicast-adres voor mijn groep → afgesproken adres voor groep kaarten
-
Ja → Frame wordt gelezen
-
Afspraken (protocol) voor Ethernetkaarten → CSMA/CD
-
Carrier Sensing
-
MA → Multiple Access → meerdere knooppunten tegelijk toegang tot link
-
(Carrier = (gegevens)drager)→Als er twee frames tegelijk op de kabel worden geplaatst, is er een botsing
-
Om een botsing ( collision ) te voorkomen moet een kaart eerst nagaan (to sense ) of de kabel ( carrier ) vrij is
-
Niet vrij → wachten tot kabel vrij is
-
Collision Detection
-
Kaarten moeten kabel inspecteren om detecteren of er botsing is
-
Botsing → frames verloren → Kaart JAM signaal sturen een bepaalde tijd → Zo weet elke kaart op netwerk dat er botsing was
-
Na botsing → kaarten die iets wouden sturen wachten willekeurige tijd voor ze weer opnieuw iets sturen
Nog botsingen mogelijk bv:
- PC A & B → 1km van elkaar verwijderd
- Tijd voor eerste bit van frame is bv. 10µs om van A naar B te gaan
- Als B 9,9µs nadat A begonnen is een frame wilt sturen, zal B opmerken dat de bus vrij is
- Na 0,5µs → botsing; nog 0,5 µs later zal B merken dat er een botsing is
- A zal pas 19,9µs na het versturen van eerste bit vaststellen dat er botsing is
- Als er een botsing is weet de zender dit reeds tijdens het versturen van het frame omdat een frame altijd uit 64 bytes bestaat
- 64 bytes sturen neemt genoeg tijd om te weten of er een botsingis
- Lengte van ethernet kabel speelt eenrol
- Botsing frames → frame verloren
- Restant gebotst frame → runt
- Na sturen 64ste byte → normaal geen botsing meer
- Wel nog mogelijk, noemt late collision
- NIET opgemerkt door kaarten → frame niet opnieuw herverstuurd
- Programma van hoger niveau (op OSI) zal dit moeten oplossen
2.8 Snelheid
- Snelheid → bitsnelheid → aantal bits dat per seconde kan verstuurd worden → ook wel (digitale) bandbreedte genoemd
- Niets te maken met snelheid waarmee bits reizen (dat is 2/3 van lichtsnelheid)
- Bandbreedte →snelheid waarmee de bits elkaar mogen opvolgen om zonder fouten onderscheiden te worden bij de ontvanger
ALS
- Kabel niet langer is dan 2500m (5km in 5µs)
- Een frame minstens uit 64 bytes bestaat
- Bitsnelheid 10Mbit/sec bedraagt
DAN
- Een frame van de ene kant van de kabel naar de andere kantreizen
- Dit frame daar botsen
- Het signaal dat door botsing ontstaat de zender weer bereiken, vooraleer de zender het volledige frame van minstens 64 bytes verstuurd heeft
- Ontwikkelregel bij CSMA/CD → Als een kaart frame op bus plaatst, gaat kaart na of het botst → als eerste 64 bytes van frame volledig op bus kunnen geplaatst worden zonder dat kaart vaststelt dat er een botsing is, is kaart zeker dat er geen botsing meer kan zijn
2.9 Switch
- CSMA/CD in kort → er kan niet meer dan 1 keer frames verstuurd worden, anders is er een botsing
- Kan beter → intelligente hub (→ Switch ) gebruiken die botsingen 'verminder'
- Als ethernet frame in switch aankomt, leest switch eerste adres van bestemming → frame dan vestuurd naar poort waarop bestemming zich bevindt
SWITCH ( geschakeld Ethernet)
-
Krijgt frame en kijkt naar bestemming ervan. Het frame wordt alleen naar de poort van de bestemmeling verzonden.
-
Kent ethernet en kan een frame analyseren en het adres herkennen
-
Werkt op laag 3 van het OSI-model (Netwerk)
HUB (gedeeld Ethernet)
-
Leest geen adressen en stuurt elk inkomend signaal (frame) naar elke poort (behalve die vanwaar het frame is binnengekomen)
-
Elektrisch apparaat dat alleen een bit herkent (elektrische spanning)
-
Werkt op laag 2 van het OSI-model (Datalink)
-
Met switch → sniffen ( wanneer iemand alle frames doet lezen op zijn netwerkkaart) vermeden
-
Geheugen switch → inhoud adresseerbaar (CAM-geheugen) → opgeslagen info MAC-adressen → aan switchpoort bv. Hub of andere switch zitten d.w.z → op 1 poort meerdere MAC-adressen mogelijk
-
Microsegment
-
1 kabel die 1 pc verbindt met switch (geen hub, maar een switch) → microsegment genoemd → dus als segment beschouwd worden
-
Frame behandeling
-
Cut-through switching
-
Zodra switch eerste bytes van frame met bestemmingsadres gelezen heeft → switch frame verder sturen op poort waar bestemmeling zich bevind
-
Store-and-forward switching
-
Switch leest hele frame & checkt op fouten (Via CRC) → geen fouten → frame verstuurd
-
Fragment-free switching
-
Pas nadat switch eerste 64 bytes gelezen heeft → frame verder sturen
2.9.1 Virtuele Switch (VLAN)
-
Goedkope switch → geen mogelijkheid tot configuratie
-
Duurdere switch → wel mogelijkheid tot configuratie
-
Afsluiting van poorten om VLAN's (virtual local area network) te configureren
-
Configuratie
-
Broadcasts → beperkt tot VLAN (bv. Management, verkoop)
2.10 Soorten Ethernet
- Oude ethernet van 10 Mbit/s → verdwenen
- Opvolger → Fast Ethernet
2.10.1 Fast Ethernet
- Ook CSMA/CD als protocol
- 100 Mbit/s
- Niet via coax
- Kan zich aanpassen aan het oude Ethernet
- 10 keer sneller → lengte 10 keer korter → max. 250m
2.10.2 Gigabit Ethernet
- Ook CSMA/CD als protocol (een netwerkkaart luistert of er een botsing is terwijl ze bits op het netwerk zet)
- 1000 Mbit/s
- 100 x sneller → lengte 100 x korter → max. 25m
- Full duplex = verbinding waar tegelijk info van zender naar ontvanger en andersom kan
2.11 Gesctructureerde bekabeling
2.11.1 Fysieke structuur
-
Er bevinden zich evenveel RJ45 contactpunten als er computers moeten aangesloten worden.
-
Er loop van elk contactpunt een TP-kabel naar een centraal schakelpaneel.
-
Een pc wordt fysisch opgenomen in het netwerk door de netwerkkaart via een TP-kabel te verbinden met het contactpunt en het overeenkomstig contactpunt op het schakelpaneel te verbinden met een poort van de switch.
-
Bekabeling van pc's tot schakelpaneel = horizontale bekabeling.
-
Schakelpaneel = Horizontal Cross Connect = distributiebekabeling.
-
Standaarden van Electronic Industries Association / Telecommunication Industries Association =
-
Kabel van pc tot stopcontact = max 10m.
-
Kabel tussen stopcontact en schakelpaneel = max 90m.
-
Kabel tussen schakelpaneel en switch = max 5m.
-
Verbinden van verschillende verdiepingen met elkaar of met de servers = verticale bekabeling = backbone.
-
Switches aangesloten op contactpunten met UTP naar centraal schakelpaneel = Vertical Cross Connect.
-
Als lengte verticale bekabeling meer dan 100m bedraagt, kan men geen TP-kabels gebruiken.
2.11.2 Hiërarchische structuur
- Netwerk enige omvang = onderscheid tussen =
- Toegangsnetwerk = het netwerk dat de pc's verbindt tot aan de eerste switch inclusief die switch.
- Distributienetwerk = het netwerk dat die switches, waarop geen gebruikers voorkomen.
- Kernnetwerk = verbinding tussen distributienetwerken, bestaande uit routers en snelle verbindingen.
2.12 Brug
- Gebruikt om 2 Ethernet-LAN's rechtstreeks te verbinden.
- Brug is intelligent zoals een switch = nagaan van adres van zender en bestemmeling. Als ze op dezelfde poort aangesloten zijn, dan wordt het frame niet verstuurd via de andere poort.
- Kan verschillende type's LAN's verbinden. Complexe taak bij omzetten
- 802.3 = wachten tot drager vrij is en fouten corrigeren.
- 802.5 = wachten tot men het recht krijgt om te zenden.
- Ook kunnen de maximale frame-lengtes verschillen.
- Apparaat dat netwerken kan koppelen in de datalink-laag.
- Switch wordt soms multiport bridge genoemd.
2.13 Frametypes
- 4 Types:
- Ethernet II
- IEEE 802.3
- IEEE 802.2
- SNAP ( = Subnet Access Point)
2.14 Fysieke voorstelling bits
- Om bitrijen te versturen → 1 of ander fysiek signaal & medium gebruikt worden → bv (elektrische spanning op draad) → aantal bits per seconde verstuurd kan worden → afhankelijk bandbreedte
2.14.1 Frametypes
Non return to zero of NRZ → Bits worden voorgesteld door gebruik van 2spanningsniveaus: (0 Volt) =0 & (5 Volt) =1 Bitrij 1001110101 →
2.14.2 Manchester coding
- 0 wordt voorgesteld door sprong van laag naar hoog, 1 als sprong van hoog naar laag.
- Halfweg elke bit is er een sprong → laat toe dat klok van de ontvanger perfect gelijk loopt met klok van de zender.
- Voordeel = voorstelling van een bit bevat ook klok-informatie.
- Nadeel = pulsen zijn maar half zo breed → 2 keer zoveel bandbreedte nodig.
- Techniek oude versie van Ethernet.
Hoofdstuk 3 Internet Protocol ( IP)
-
LAN-frames kunnen niet naar buiten gestuurd worden.
-
Eerste stap naar meer gebruiksvriendelijk netwerk = IP-programmatuur (volgens het Internet Protocol )=
-
Elke computer heeft een uniek adres.
-
Computers kunnen IP-pakketten naar elkaar sturen.
-
IP-pakket wordt verstuurd naar een computer waarvan het IP-adres gekend is.
-
IP-pakket wordt ingepakt in een frame dat verstuurd wordt, het type frame hangt af van het netwerk.
-
IP-pakket = waar ze vandaan komen, waar ze naartoe moeten.
-
PC krijg IP-adres van 32 bits → netwerknummer & computernummer
-
De netwerktechnologie (Ethernet, Token Ring, ATM ,... ) die gebruikt wordt om het netwerk op te zetten, speelt geen rol meer.
-
IP zorgt voor versturing van IP-paketten zonder garanties → = niet verbindingsgeoriënteerde, best-effort service
-
IP betekent strikt genomen: het geheel van afspraken
-
IP wordt ook gebruikt in de betekenis van: de implementatie of het computerprogramma van deze IP afspraken
3.1 IPv4-adressen
- Klasse A = 7 bits gebruikt voor netwerknummer, max 128 netwerken. Eerste bit van adres is 0.
- Klasse B = 14 bits gebruik voor netwerknummer, max 16834 netwerken. Eerste twee bits van adres zijn 10.
- Klasse C = 21 bits gebruikt voor netwerknummer, meer dan 2 miljoen netwerken. Eerste drie bits van adres zijn 110.
- Multicast-adressen = adres begint met 1110.
- Geen computer met nummer 0. Computernummer gelijk aan 0 stelt het hele netwerk voor. Computernummer met allemaal enen = broadcastnummer.
- NIET LANGER DE EERSTE BITS VAN HET IP-ADRES DIE BEPALEN HOEVEEL BITS HET NETWERKNUMMER VOORSTELLEN → / NOTATIE → basisadres / aantal bits = CIDR ( Classless Interdomain Routing)
3.2 IP-pakket
-
Gebruikers IP-programmatuur = programma's uit transportlaag of uit hogere lagen.
-
Afzender en bestemmeling niet op hetzelfde fysisch netwerk = tussenkomst van router nodig.
-
Versturen IP-pakketten (datagrammen) = verbindingloze dienst.
-
Bestaat uit hoofding en datadeel. Lengtes van deze delen liggen niet vast. IP specifieert =
-
Welke velden moeten en mogen voorkomen.
-
Aantal bits voor elk veld voorzien.
-
Waar elk veld begint.
-
Wat inhoud van de velden kan zijn.
-
Wat deze inhouden betekenen.
-
Hoofding van een IPv4-pakket bevat o.m. =
-
Versie (4 bits).
-
Lengte van de hoofding (4 bits : aantal woorden van 32 bits) = hangt af van aantal opties.
-
Totale lengte van het pakket (16 bits).
-
Differentiated Services = eerste 6 bits zijn Differentiated Services Code Point (type van toepassing weergeven), laatste 2 bits zijn Explicit Congestion Notification (melden van router of congestie komt/is).
-
Identificatie (16 bits) = nummer door zender toegekend.
-
Resterende bestaanstijd = zender vult deze tijd in, pakket door router verstuurd = tijd met 1 verminderend, als 0 = pakket weggegooid = afzender krijgt foutmelding = voorkomt dat bij een fout een pakket zou blijven ronddraaien in het netwerk.
-
Protocolnummer = voor welke module wordt pakket verstuurd.
-
CRC = wordt alleen voor hoofding berekend = router kan fout vaststellen = pakket vernietigen = elke router moet dit opnieuw berekenen.
-
IP-adres afzender (32 bits).
-
IP-adres bestemmeling (32 bits)
-
Fragmentatie offset: Helpt eindbestemmingsapparaat fragmenten in juiste volgorde te plaatsen om het originele pakket te maken → 13 bits breed → van 0 tot 8191 gaan
3.3 ARP
- Programma's die diensten van IP gebruiken → gebruiken IP adressen
- IP maakt gebruik van datalink-laag & fysieke laag om bestemming te bereiken
- Niveau onder IP-laag → fysieke adressen / MAC adressen
- IP adres moet omgezet worden naar een MAC-adres → broadcast frame sturen
- ARP broadcast wordt gestuurd op netwerk
- Elke PC krijg ARP request en checkt of het zijn IP is
- PC met juiste IP antwoordt een ARP-boodschap terug met zijn MAC-adres in de 6 lege bytes van de ARP boodschap.
3.4 Subnetten & VLSM
- Een subnet bestaat uit computers die deel uitmaken van hetzelfde fysiek netwerk.
- DE REST ZELF KUNNEN
3.5 Router
-
Router bevat programmatuur tot en met 3e laag OSI
-
IP-pakketten van een computer van subnet X naar een computer van subnet X
-
IP-pakketten van een computer van subnet Y naar een computer van subnet Y
-
IP-pakketten van een computer van subnet X naar een computer van subnet Y (en omgekeerd)
3.5.1 Verbinden van netwerken
-
Ethernet-LAN's in elkaars buurt verbonden worden door hubs/switches → kan leiden tot grote belasting van netwerk → hub stuurt alle frames door. Een switch stuurt nog altijd het broadcast-frame verder
-
Om netwerken verschillende soorten te verbinden router gebruikt. Een router stuurt het broadcast-frame niet verder. Om deze reden routers ook gebruikt als netwerken van dezelfde soort zijn.
3.6 IP routering
- Om te weten waar IP-pakket naartoe moet → routetabel geeft → voor elk IP-bestemmingsadres de machine die next hop is naar deze bestemming
- Next hop
- het IP-adres van een router
- een aanduiding dat directe aflevering mogelijk is ( router heeft netwerk aansluiting met netwerk bestemmeling)
- Besluit: De routetabel als volgt gebruikt. Voor gegeven IP-adres, zoek in tabel tot er een net gevonden wordt, waartoe dit IP-adres behoort. Gebruik aangegeven next hop. Indien geen gevonden → foutboodschap. Zoeken van net kan gedaan worden door masker in item van tabel te lenen met gegeven IP-adres. Als resultaat hetzelfde is dan item, dan is next hop gevonden
3.7 ICMP
-
Vereist voor elke implementatie van TCP/IP en specifieert =
-
Structuur van de boodschappen.
-
Hoe de boodschappen geïnterpreteerd moeten worden.
-
Deze boodschap wordt verstuurd als datadeel van een IP-pakket.
-
Vooral gebruikt om fouten te signaliseren = wordt verstuurd naar afzender als een router een IP-pakket niet verder kan sturen.
-
Geen foutmeldingen over foutmeldingen = voorkomen van stroom van deze berichten = eerst nagaan of datadeel van IP-pakket dit soort bericht al bevat ( hoofding van IP-pakket geeft dit aan ).
-
Structuur = ICMP-data
-
(hoofding en eerste 64 bytes van datadeel van IP-pakket waarvoor dit bericht gestuurd wordt OFWEL ander afhankelijk van type vb antwoord op echo-verzoek) / ICMP-hoofding:
-
type: 1 byte
-
code: 1 byte (meer info over type)
-
(CRC 2 bytes).
-
Echo-verzoek wordt verstuurd na een ping van een gebruiker.
-
Bij boodschap bestemming onbereikbaar geeft de code de oorzaak daarvan aan.
3.8 DHCP
-
Communiceren via TCP/IP vereist dat =
-
Deze protocol-suite geïnstalleerd is.
-
De computers een IP-adres hebben.
-
Aantal redenen om IP-adres niet vast op te slaan in de computer =
-
Computer heeft geen harde schijf.
-
Computer is mobiel en wordt in verschillende netwerken opgenomen.
-
Meer computers in netwerk dan IP-adressen.
-
IP-adressen kunnen best centraal beheerd worden door een server.
-
Computer vraagt IP-adres aan server = vroeger BOOTstrap Protocol (liet geen dynamische toekenning van IP-adressen toe) = nu DHCP = computers kunnen IP-adres huren voor één sessie.
-
Specifieert de boodschappen die kunnen uitgewisseld worden. DHCP-boodschappen worden via UDP (niet verbindingsgerichte tegenstanden van TCP) verstuurd.
-
UDP-bericht versturen naar niet gekend IP-adres = broadcast = aanvraag voor IP-adres aan alle computers van het netwerk via UDP-bericht naar poort 67. Bestemmingspoort voor antwoord is 68.
3.9 IPv6
- 128 bits.
- Geen subnetmasker, aantal netwerkbits expliciet aangegeven.
3.9.1 Adresnotatie
- 8 keer 4 hexadecimale cijfers, gescheiden door een dubbel punt.
- Leidende nullen mogen weggelaten worden.
- Één opeenvolging van nullen mag vervangen worden door 2 dubbele punten.
3.9.2 IPv6-hoofding
-
40 bytes.
-
Opties gebruiken = extra hoofdingen = na Ipv6-hoofding en voor de data.
-
Volgende velden =
-
Versie (0.5 byte).
-
Trafiek klasse (1 byte) = DS-veld.
-
Stroomlabel (1.5 byte) = stroom van IP-pakketten met zelfde stroomlabel.
-
Lengte (2 bytes) = lengte in aantal bytes van rest van het pakket. Max 65535 bytes.
-
Volgende hoofding (1 byte) = wat komt na IPv6-hoofding = TCP-hoofding, UDP-hoofding, Encapsulating Security Payload (gebruikt voor encryptie), extra IP-hoofding (hop-by-hop opties hoofding, fragment-hoofding, routering-hoofding, bestemmingsopties-hoofding). Zelfde functie als protocolveld bij IPv4 maar met extra opties.
-
Hop-limiet (1 byte) = TTL-veld IPv4.
-
Adres afzender (16 bytes).
-
Adres ontvanger (16 bytes).
3.9.3 Fragmentatie
- Niet langer mogelijk voor routers om pakketten te fragmenteren als maximale frame-lengte te klein is ( Maximal Transfer Unit ).
- Pakket te groot = router stuurt ICMP-bericht naar afzender.
- Afzender moet zelf nagaan hoe groot pakketten mogen zijn en moet ze zelf fragmenteren = extra hoofding = fragment-hoofding.
IPv6 adressen toekennen
-
CIDR-notatie = 2000::/3 = alle IP-adressen waarvan de eerste 3 bits hetzelfde zijn.
-
Regional Internet Registry = 5 verschillende = deze kennen blokken van IP-adressen toe aan ISP's =
-
RIPE = Europa, Midden-Oosten, Noord-Azië.
-
ARIN = Noord-Amerika.
-
LACNIC = Latijns-Amerika.
-
APNIC = China, India tot Australië.
-
AfriNIC = Afrika.
-
Grote van deze blokken = /23. RIR's kennen blokken van /32 toe aan ISP's.
-
Elke ISP kent blokken van /48 toe aan zijn klanten/bedrijven.
-
Van een IPv6-adres =
-
Eerste 48 bits = ISP.
-
Laatste 80 bits = toegekend aan bedrijf.
3.9.4 IPv6 subnetten
- Eerste16bitsvan/48bloktoekennenaansubnet.Laatste64bitskenmerkendemachineuit hetsubnet.
3.9.5 Soorten IPv6 adressen en bereik
- Globaal** unicast**=eerste3bits=001danglobalroutingprefix(45bits),subnet-id(16 bits),host-id.Alsbestemmingsadresvanpakketzichbuitensubnetbevindtenrouter juist geconfigureerd is = router verstuurd pakket op andersubnet.
- Lokale** link**=behorentotFE80::/10,anderebitsafgeleidvanMAC-adres,doorrouter niet op ander subnet verder gestuurd, communiceren met apparaten op het subnet, gebruikt voor automatische adresconfiguratie en om vast te stellen welke andere apparaten erzijn.
- Lokale** site**=zitteninrangeFEC0::/10,pakkettenenkelverdergestuurdopandersubnet als dit een subnet is binnen dezelfde site, aparte toepassing = als Microsof IPv6- besturingssysteem geïnstalleerd = automatisch gezocht naar DNS-server op adressen : FEC0:0:0:FFFF::1, FEC0:0:0:FFFF::2,FEC0:0:0:FFFF::3.
3.9.6 Configuratie van global unicast adres
- SLAAC → Stateless Address Autoconfiguration
- Stateless → geen DHCP server die bijhoudt welke IPv6 adressen al gebruikt zijn
- Statisch → manueel admin IP-adres geeft
- Dynamisc
- SLAAC: gebruik info in Router Advertisement voor IPv6adres
- Alleen prefix →gebruik van EUI-64 of randomgeselecteerd
- SLAAC+DHCPv6:AdresverkregenviaSLAAC;additioneleinformatiewordtverkregen via een DHCPv6 server, zoals een DNSserver
- DHCPv6 alleen: zoeken van DHCPv6 server
3.9.7 Configuratie van link lokal adres
- Link local adres wordt dynamisch gecreëerd gebruik makende van prefix FE80::/10 en interface ID of MAC-adres of random gegenereerd
3.9.7 Multicast IPv6 adressen
IPv6 Multicast hebben prefix FF00::/8
Twee types multicast adressen →
- Assignedmulticast
- Adressen die zijn toegewezen aan specifieke functies zoals DHCPv6server
- Solicited nodemulticast
- Vergelijkbaarmetall-nodesmulticastaddress,komtovereenmetlaatste24bitsvan het IPv6 unicastaddress
- Gecreëerd wanneer global unicast of link-local unicast adressen wordentoegekend
- FF02:0:0:0:0:1:FF00::/104 combineren met de laatste 24 bits van het unicastadres.
- Wie is lid van de multicastgroepFF02:0:0:0:0:1:FF00::C?
- Wordt gebruikt om mac-adressen op tevragen 2 voorbeelden van IPv6 multicast→
- FF02::1 All-nodes multicast group
- Alle IPv6-enabled devices behorenhiertoe
- Analoog aan alle IPv4 broadcast adres
- FF02::2 All-routers multicastgroup
- Alle IPv6 routers behorenhiertoe
- ipv6unicast-routingglobalconfigurationmodecommand(packettracer) Opvragen macadressen bij IPv6→
- Bij Ipv6, vb. pakket voor2001:🔤def1
- Vraag : "wie is 2001:🔤def1" versturen naar solicited nodeadres
- ???-Laatste24bitszijnbc:def1-Vraag:"wieis2001:🔤def1"wordtverstuurdnaar ff02:0:0:0:0:1:ffbc:def1
- Alle nodes waarvan adres eindigt op bc:def1 krijgenvraag
- 1 nodeantwoordt
3.9.8 IPv4 en IPv6 samen
- Dual** stack**=zowelIPv4enIPv6wordengeïnstalleerdengeconfigureerd=indiennodig pakket opnieuw gelicht en ingepakt in pakket van andereversie.
- Tunnel =oplossingvoordualstackwantdaarbijkomthetoorspronkelijkebericht(hoofding) niet goed aan = ganse IPv6 inpakken als data in IPv4-pakket en het zo versturen = IntraSite Automatic Tunnel Addressing Protocol –** tunnel**.
- Dual stack waar je kunt, tunnel waar je** moet.**
- Niet ganse protocolstapel die anders is = alleen het netwerkprotocol is** anders**.
- Lagenstructuur=opéénlaagwordtietsveranderdmaarditheeftgeeninvloedopdeandere lagen.
EXTRA:
- ICMPv6bevat4nieuweprotocollenalsonderdeelvanNeighborDiscoveryProtocol(NDor NDP):
- Router Solicitationmessage
- Router Advertisementmessage
- Neighbor Solicitationmessage
- Neighbor Advertisementmessage
- Router Solicitation and Router Advertisement Message – Sent between hosts androuters.
- RouterSolicitation(RS)message–RSmessagesaresentasanIPv6all-routersmulticast message.
- RouterAdvertisement(RA)message–RAmessagesaresentbyrouterstoprovideaddressing information
Hoofdstuk 4: transportlaag
4.1 Diensten die de transportlaag levert
- IP levert geen garantie op correcte aflevering vanpakketten.
- Om bruikbaar te zijn voor toepassingen = betrouwbare verbindingnodig.
- Extra programmatuur in transportlaag. 2 protocollen=
User Datagram** Protocol.**
- Transmission Control** Protocol**
- IP-module vervult volgende taken=
- Gegeven IP-pakket naar gegeven IP-adressturen.
- Uit inkomend IP-pakket datadeel nemen en doorgeven aan ICMP-module,transportlaag of eventueel eentoepassingsprogramma.
- In lagen boven IP-laag = meerdere processen gebruiken tezelfdertijd IP-module = sommigen viaUDPofTCPandererechtstreeks.IP-module weet via protocolveld in IP-hoofding aan wie de inkomende data moet afgeleverd** worden.
- UDP- en TCP-module worden gebruikt door meerdere processen tezelfdertijd = worden onderscheiden door **poortnummers.Houdenperpoorteen wachtrij bijvaninkomendedata die gelezen kan worden doorproces.
4.2 UDP (User Datagram Protocol)
- Berichten kunnen verloren gaan of fouten bevatten of in de verkeerde volgordeaankomen.
- UDP voegt volgende functies toe aan IP=
- Mogelijkheid werken metcontrolebytes.
- Gebruik poortnummers = toelaten multiplexing = meerdere processen kunnenIP- module tezelfdertijdgebruiken.
- ProgrammakancommunicerenmetprogrammaopanderemachineviaUDP=deze programma's zullen zelf foutcontrole en behandeling** verzorgen**.
- Voordeel UDP = weinig belasting , gebruik van broadcasting.
- TCP =betrouwbaarder.
- Structuur UDP-bericht
- Hoofding
- Bron (poortnummer verzendend proces),
- Bestemming (poortnummer ontvangend proces),
- Lengte (aantal bytes in bericht)
- Controle-veld (controle-bytes = 0000→geencontrolegebeurd,alswelcontrolegebeurden0→anderecodevoor0 gebruikt).
- Datadeel
- Inhoud controleveld berekenen
- Pseudo-hoofdingtoevoegenaanUDP-bericht(IP-adresvanbronenbestemming+ protocolnummer).
- Controleveld voorlopig op 0000gezet.
- Om ontvangende UDP-module controleveld laten berekenen = IP-adres afzender doorgeven. Als meer dan één IP-adres = hetgene doorgeven via welk het isbinnengekomen.
4.3 TCP
-
TCP brengt zekerheid
-
TCP werkt full duplex → bytestroom van zender naar ontvanger en omgekeerd op zelfde moment
-
IP geen correcte volgerde → TCP herstelt volgorde
- Een programma levert bytes aan TCP-module
- Module regelt TCP-segmentatiestroom (flow control)
- TCP-module neemt datastroom van gebruikersproces
- Deelt datastroom in blokken
- Verstuurt elk blok appart in een IP-datagram of pakket
! TCP-module bepaalt de segmentatiestroom en hoe groot de datablokken mogen zijn
! TCP-verbinding is een bytestroom en geen berichtenstroom
→ TCP-module weet niet wat die bytes betekenen
- De TCP-module plaatst de ontvangen bytes in een buffer
- Als genoeg bytes → TCP-segment gestuurt naar de andere machine
- Andere machine bewaart deze in een buffer (als deze correct en in volgorde zijn)
- Programma kan bytes lezen uit deze buffer
! UDP heeft geen verbinding, maar TCP wel (virtueel circuit)
TCP-verbinding = tussen 2 eindpunten → socket → socketadres
- Socketadres:
- IP-adres van de host
- Poortnummer
Bv. [(192.18.16.7, 317);(180.17.126.5, 25)]
! Socket kan door verschillende verbindingen op zelfde moment gebruikt worden
4.3.1) Het TCP protocol
- Elke byte in een TCP verbinding heeft eigen volgnummer (4 bytes)
- Zendende en ontvangende TCP-modules wisselen data via segmenten
- TCP-segment heeft header (20 bytes) gevolgd door 0 of meerdere databytes
- De databytes kunnen samengenomen worden uit meerdere schrijfacties van of naar socket
TCP = betrouwbaar:
- Eindpunt TCP-verbinding moet een ACK (bevestiging) sturen als alle data correct is ontvangen
- d.m.v foutcontrole
- ACK bevestiging vermeldt byte dat verwacht wordt
- Bv. X, d.w.z alles tot X-1 is correct ontvangen en zender mag vanaf byte met nr. X verder sturen
! Als een segment correct, maar voor zijn beurt aankomt kunnen we niet checken of deze juist is. Bevestiging is byte en niet segment gerelateerd
! Als er fout is → geen bevestiging → segment opnieuw versturen na voorafgelegde tijd → RTT (round trip time) = tijd dat nodig is voor segment van zender naar ontvanger en een bevesteging van ontvanger naar zender te sturen
(Hoe belaster het netwerk hoe groter RTT)
-
Venster
-
Verzendende proces levert bytes aan TCP-module → ontvangende proces leest deze bytes in volgorde waarin ze aangekomen zijn
-
! Wanneer zender een segment stuurt → start timer
-
Ontvanger stuurt een segment (indien data aanwezig steekt dit ook in het segment) naar zender met bevestigingsnummer v/d volgende byte die hij verwacht en resterende venstergrootte
-
! Als timer op is voordat bevestiging is ontvangen → segment opnieuw verzenden
-
TCP houdt aan zendende zijde rij bytes bij → TCP-module verstuurt byte → toegevoegd aan ri
-
De rij heeft 3 delen (fig4.1)
-
TCP houdt 3 wijzers bij (pointers)
-
De bytes die:
-
Verstuurd zijn en waarvan de (correcte) aankomst nog niet bevestigd is
-
De bytes die mogen verstuurd worden maar nog niet verstuurd zijn
-
= venster
-
! De wijzers genaamd bevestigd en grens, begrenzen het venster
-
Bv. De ontvangende TCP-module meldt dat de bytes tot nr. 500 correct zijn ontvangen
-
→ Bevestigd krijgt waarde 500 en grens zal met 300 stijgen
-
! Een bevestiging bevat ook info die zegt of het venster vergroot of verkleint
-
Het venster dient voor stroomcontrole (flow control)
-
De zender kan zoveel bytes sturen als het venster groot is
-
De ontvangende zijde moet die kunnen opslaan
-
! Door het venster te verkleinen kan men de zender afremmen (bv. zodat ontvanger niet overbelast geraakt)
-
Poorten
-
! Zoals UDP, gebruikt TCP poorten voor de communicatie met de toepassingen
-
TCP-segmenten
-
PDU dat verstuurt wordt door TCP-module heet segment
-
Segment heeft header (20 bytes + eventueele TCP opties mogelijk)
-
Headerveld:
-
Poortnummer zendend proces
-
Poortnummer ontvangend proces
-
Bytevolgnummer (4 bytes) → nr van byte dat nog net niet verstuurd is
-
Lengte header → geeft aan uit hoeveel 32 bit woorden de header bestaat (hangt af van extra TCP opties)
-
Bevestigingsnummer: volgnummer v/d byte die verwacht wordt in andere richting
-
6 één bit TCP-vlaggen (zie uitgebreide cursus p76)
-
Venstergrootte → geeft de datastroom aan die mag gebruikt worden
-
Controlebytes = die van UDP
-
Lengte van het segment
-
Eventueele opties → extra functionaliteiten voor TCP-protocol
-
Een verbinding tot stand brengen
(zie cursus p77)
-
Stroomregulering geregeld door sliding window
-
De waarde van het window geeft aan hoeveeldata er mag verzonden worden
-
! Als waarde venster = 0 dan is ontvanger niet in staat data te ontvangen
-
Verbinding beëindigen
-
Uitzonderlijk via reset → een eindpunt geeft aan de het een reset wilt:
-
Eigen proces verwittigd dat verbinding verbroken wordt
-
Er wordt een reset-segment (RST-bit = 1) naar ander eindpunt gestuurd
-
Buffers worden opgeheven
-
Eindpunt ontvangt reset-segment:
-
Verwittigd het proces
-
Buffers worden opgeheven
Normaal beëindigen (omdat full duplex → gezien als 2 simplex verbindingen)
- TCP-module (A) na sluit-bevel:
- Overblijvende data in buffer versturen
- Wachten tot B ontvangst bevestigt
- Een FIN-segment sturen (FIN-bit = 1 en bytevolgnummer bv. X)
- TCP-module (B) ontvangt FIN-segment :
- Een ACK-segment teruggestuurd (ACK-bit = 1 en bytevolgnummer X+1)
- Eigen proces verwittigd dat er geen data meer zal komen van A
- Geen data meer van A ontvangen, maar B kan nog steeds sturen
- A ontvangt data van B
- TCP-module (B) ontvangt sluit-bevel:
- Een FIN-segment sturen (FIN-bit = 1 en bytevolgnummer bv. Y)
- TCP-module (A) ontvangt FIN-segment :
- A zendt ACK-segment (ACK-bit = 1 en bytevolgnummer Y+1)
- A heft verbinding op
→Er zijn 2 FIN en 2 ACK-segmenten nodig voor een TCP-verbinding te stoppen op normale manier
4.3.2) TCP state diagramma
Zie cursus p81
4.3.3 TCP tijdsbeheersing
- Wanneer een TCP-module een segment stuurt, wordt er een timer gestart. Wanneer de ontvangende TCP-module het segment bevestigd heeft alvorens de teller verlopen is, wordt de teller gestopt. Als die er niet op tijd geraakt wordt het segment opnieuw gestuurt
- ! Tijd te veel → systeem werkt traag
- ! Tijd te weinig → onnodig opnieuw versturen van segmenten
→ Tijd van de teller dynamisch d.m.v algoritme dat snelheid van netwerk analyseert
4.3.4) TCP congestie management
- Als netwerk teveel pakketten verwerkt dan dat het kan afhandellen → congestie
- Congestievenster en flow-control-venster worden tegelijkertijd bijgehouden
- Als ontvangende TCP-module zegt dat hij max. 64KB kan bufferen en dus ontvangen, maar congestievenster zegt dat het max. 32KB kan zijn → zal er maar 32KB verzonden worden
4.3.5 Protocolstapel
Afkorting TCP/IP gebruikt voor het geheel van protocollen
Met protocol-suite/protocol-stapel wordt het geheel van protocollen bedoeld
Computernetwerken 2
2009 januari examen
- De 3 eerste berichten van een TCP-verbinding.
- Leg uit:
- BGP
- Tunnel en transport mode bij IPSec
- Tier 1, 2 en 3
- Internet Exchange
- Leg uit: Probleem bij firewall bij FTP
- jitter bij voip uitleggen
- je krijgt een ip6-adres waar nullen of andere getallen weg zijn, en jij moet het omzetten naar het normale ip6-adres
vb: ABCD:1234::4567:48 = ABCD:1234:0000:0000:0000:0000:4567:0048 - vragen over kerberos (kan ze niet zo meer zeggen maar er was een vraag over)
- wat is onweerlegbaarheid
- hoe kan je dit doen met RSA
- waarom kan dat niet met met symetrishe encrypty
- Invulvraag over subnetten + Omgekeerd wildcardmask.
2010 augustus examen
Theorie
- Verdeel 10.34.0.0/16 in subnetten voor minstens 600 computers
- Gegeven: TCP logs, je moet kunnen uitleggen wat er gebeurd
- Leg Kerberos in schemavorm uit. Wat is een ticket? Waarom kan deze niet nagemaakt worden?
- Wat is PGP? Hoe zorgt dit voor integrieit en authentificatie?
- Wat is onweerlegbaarheid?
- Waar of niet waar?
Een isp moet betalen voor zijn internetverbinding
IP-telefonie gaat via UDP
Bij https wordt alles met het certificaat van de server versleutelt
Praktijk
- Schrijf een oneliner die in usr/share/dict/dutch alle woorden zoekt die zonder letter en zonder cijfer beginnen (dus é à - mogen wel), geef daar de 8ste van.
- Schrijf een oneliner die /ldapusers/kubeh/geheim/geheim.txt decodeerd met cypher -aes128 en dit in het bestand ontcijferd.txt in je homedirectory zet.
- In de map van Kubeh staan er 5 gecrypteerde tekstbestanden, 1 ervan kan je ontcijferen met de publieke sleutel kubeh.pub, welke? Geef de (meerdere) commando's die je gebruikte.
- Gebruik je kennis over het HTTP protocol om met netcat, grep en echo de grootte te weten van de afbeelding hallo.png die op onze webserver staat met poort 8000 (debbie.nwlab.khleuven.be)
2010 januari examen
Praktijk
Alles moet in 1 commando!
- Maak de bestandsstructuur ~/dir1/dir2/dir3/dir4/ als dir1 nog niet bestaat (in 1 commando!).
if [ ! -d dir1 ];then mkdir -p dir1/dir2/dir3/dir4; fi
- Decrypteer een file met een AES-algoritme en een gegeven paswoord en schrijf de uitvoer naar een file.
- verplaats 10 '.jpg'-bestanden van een gegeven map naar je home dir en verander de extensies van jpg naar avi (in 1 commando!).
mv /home/ldapusers/512345/Gegevenmap/*.jpg .. | rename -f 's/\.jpg$/.avi/' /home/ldapusers/512345/*.jpg
- haal uit een woordenlijst alle woorden waar een x EN een y in voorkomen, geef enkel het 10de resultaat weer.
- geef alle 10 letterwoorden met 10 unieke letters weer. (TIP: back referencing)
Theorie
- Subnetten verdelen en in CIDR vorm kunnen opschrijven
- 10.20.0.0 verdelen in subnetten die elk minstens 365 hosts bevatten
- Gegeven: TCPdump fragment. IP-adres van de DNS server zoeken; enkele stappen uitleggen en de waarde van de volgende ACK-bit berekenen. (goed kijken naar de vorige lijen --> Waarde kan je zo aflezen)
- Beschrijf in schemavorm hoe Kerberos authenticatie werkt. Is deze bestendig tegen een replay aanval? Waarom wel/niet?
- Wat is een digitale handtekening? Hoe zorgt dit voor integriteit en authenticiteit.
- Wat is onweerlegbaarheid? Hoe zorgt het voor authenticatie en integriteit?
- IPv6 adres voluit schrijven vb: A5C2:CBE5:C::ABB5:ABBC
- Juist of fout? Licht toe met 1 zin:
- NAT werkt niet met IPsec (AH) in tunnelmode , met esp wel
- DMZ is enkel beveiligd door controle van de router, op elke server moet nog beveiliging opkomen, op DMZ moet de buitenwereld op kunnen, op het bedrijfsnetwerk niet en is dus beter beschermd. Wel kan een firewall die meer als 2 interfaces gebruikt ook de DMZ beveiligen
- De routetabellen van de AS'en worden manueel bijgewerkt wrong... routetabellen worden up-to-date gehouden door dat ze naar elkaar berichten zetten die voldoen aan het BGP (inmiddels versie 4)
- Een ISP heeft er belang bij om een peering overeenkomst te hebben met elke andere ISP?
- VOIP gebruikt UDP en enkel udp omdat voIP een real-time toepassing
- PGP heeft certificaten en genereert een zogenaamde digitale vingerafdruk die kan gebruikt worden om na te gaan of een gebruiker echt is
- Via een certificaat is de eindgebruik zeker dat de server waarmee hij verbinding heeft gemaakt effectief de gevraagde server (en houder van het certificaat) is.
2011 augustus examen
Theorie
- 4 ip-adressen van subnetten: (6.3.64.0/21, 6.3.72.0/21, 6.3.80.0/21, 6.3.88.0/21)
- Geef het subnetmasker van subnet 1
- Geef het wildcardmasker van subnet 1
- Geef het kleinste netwerk waar deze 4 subnetten afkomstig kunnen van zijn (6.3.64.0/19)
- Welke twee protocollen worden bij ip-telefonie gebruikt. Leg deze uit en geef voobeelden van de verzonden signalen (of iets in die trend was de vraag)
- Juist/fout
- een ipv6 adres, is deze wel of niet correct (was correct)
- Als een wiskundige een algoritme bedenkt om uit een getal snel de vermenigvuldiging van 2 priemgetallen te krijgen. Wordt RSA makkelijk om te kraken.
- SSL wordt gebruikt bij HTTPS (of iets in die zin, het was correct)
- Geef de volledige naam van de afkortingen en leg kort uit.
- PGP
- DMZ
- VPN
- Wat zijn de voor- en nadelen van zowel symmetrische als asymmetrische encryptie. Hoe kan men deze het beste combineren.
- Indien Alice contact wilt maken met Bob. Hoe kan ze er dan voor zorgen dat Trudy niet als 'man in the middle' fungeert. En dus haar publieke sleutel aan Alice doorgeeft en doet alsof ze Bob is.
Praktijk
- Maak vanuit de directory /home/user/tmp de file resources met daarin de file images in de file /home/user. U moet echter in dezelfde directory blijven(tmp)
Oplossing : mkdir -p ../resources/images
- Zorg ervoor dat u een leeg bestand kan aanmaken waarin de datum dat het werd aangemaakt in de titel komt. Stel dat u bijvoorbeeld dit commando zou runnen op 7 september 2011 moet het bestand er als volgt uitzien: versie_070911.txt
Oplossing: touch versie_`date +%d%m%y`.txt
- Stel dat u een file report.txt heeft van enkele alineas. Zorg ervoor dat alle regels die test bevatten NIET worden getoond.
Oplossing : grep -v 'test' report.txt
- Zorg ervoor dat u alle WOORDEN die exact uit 4 karakters bestaat uit het document report.txt naar het bestand output.txt worden weggeschreven.
Oplossing: grep -Eo '[ ]+[^ ]{4}[ ]+' report.txt > output.txt
- Versleutel een bestand topSecret.txt met 256-bit AES-encryptie en cipher-block chaining en geef als uitvoerbestand topSecret.aes
Oplossing: openssl enc -aes-256-cbc -in topSecret.txt -out topSecret.aes -k xfile
- Geef een lijst bestanden in een directory met twee kolommen (bestandsnaam en grootte), gesorteerd op grootte.
Een oplossing: ls -l -S | awk {'print $8 " " $5;'}
2011 januari examen
- IP-adressen met subnetmaskers berekenen
- IPv4 versus IPv6: wat is het verschil, en wat is er beter aan v6?
- Verklaar:
- Persistent HTTP
- BGP (Border Gateway Protocol)
- RTP (Realtime Transport Protocol)
- Signature-based IDS (Intrusion Detection System)
- Er worden 4 subnetten gegeven die aan een router zijn verbonden. Stel de ACL (Access Control List) op met vijf restricties/permissies). Het wildcard masker moet gekend zijn!
- Vragen over restricties.
- Cipher Block Chaining: wat is het?
- Diffie-Hellman in schemavorm uitleggen. Hoe kan je daar misbruik van maken (Man In The Middle).
- PGP in schema: wat gebeurt er als je de hash wegdoet, is dan integriteit en confidentialiteit en authenticiteit nog in orde? Wat is er symmetrisch en assymetrisch aan? Wat kan Trudy doen om toch de boodschap teweten te komen en wat is de oplossing (certificaten gebruiken)?
2012 augustus examen
Theorie
- Analyse van pakketten
- Zoek IP-adres van de DNS server
- Hoeveel TCP connecties worden er opgebouwt?
- In pakket x wordt een http request gedaan. In welk pakket nog en waarom ziet er dat niet uit zoals in pakket x?
- Hoeveel data is verstuurd tijdens de connectie tussen x en y die in pakketten a tot b wordt beëindigd? Kijken naar SYN en ACK bytes
- Schema van een netwerk
- Leg volgende begrippen uit aan de hand van een schema (schema moet je zelf tekenen) : intern net, demiliteraized zone, firewall, router, webserver.
- Plaats een ACL waarbij enkel inkomende verbindingen op poort 80 geaccepteerd worden op het schema om de webserver beter te beveiligen.
- Schrijf een gegeven IPv6 adress voluit.
- Encryptie
- Geef 2 algoritmes waarbij het niet belangrijk is dat de data geheim is. Leg beide kort uit.
- Geef een voorbeeld van een service die met UDP werkt en wat zijn de voordelen hiervan.
- Waar of niet waar
- Een wiskundige vind een snelle manier om een product in 2 priemgetallen op te splitsen, is het RSA in gevaar?
- Door de komst van asymmetrische sleutels zijn symmetrische sleutels eigenlijk niet meer nuttig.
- Een IPSEC AH (Authentication Header) zorgt ervoor dat de header van een IP-pakket niet meer veranderd kan worden door een digitale handtekening (iets in die trand).
- Leg kort uit
- Ticket (Kerberos)
- Diffie Helman
- Internet exchange
- VPN
Praktijk
1. op debbie.vlan77.be staat 1 vd volgende poorten open: 1234,2345,3456,4567. Hoe kan je dit vinden in 1 lijn
2. schrijf de output die men krijgt bij verbinding met deze poort weg in ~/tmp/vraag2.txt
3. doe een ping, die dit 12 keer stuurt en om de 0,5 seconde
4. (bepaald comando, weet niet meer dewelke) geeft alle actieve bestanden, geef een lijst met diegene die het meest actief zijn.
5. iets van bob en alice willen met elkaar veilig communiceren (ze hebben al een sleutel)
2012 januari examen
Theorie
- Analyse van pakketten
- Zoek IP-adres van de DNS server
- Wat gebeurd er in pakketten x tot y (was de 3-way handshake)
- In pakket x wordt een http request gedaan. In welk pakket nog en waarom ziet er dat niet uit zoals in pakket x?
- Hoeveel data is verstuurd tijdens de connectie tussen x en y die in pakketten a tot b wordt beëindigd? Kijken naar SYN en ACK bytes
- Wat betekent de 301 status code van een http response
- Je krijgt de uitvoer van netstat te zien
- Wat is het IPv4 adres van de server
- Is de server een webserver?
- Welke poort kan je alleen aanspreken met een IPv4 adres? Kijken naar poorten in tcp en tcp6-output
- Is [IPv6-adres local van bovenstaande netstat uitvoer] het IPv6 adres van de server? (Was onwaar omdat de poort erbij stond)
- Alice wil veilig communiceren met Bob via zijn publieke sleutel. Hoe kan ze zeker zijn dat ze met Bob communiceert en niet met Trudy die de pakketten probeert te onderscheppen. Geef twee manieren hoe de uitwisseling veilig kan gebeuren en leg kort uit.
- Een IPv6 adres voluit in hexadecimaal uitschrijven
- Juist of fout + leg uit
- Een pakketfilter ontdekt geen virussen
- Het Session Initiation Protocol dient om media (audio/video) te versturen
- Het IPSEC AH beschermd de gehele IP header
- Door de komst van asymmetrische sleutels zijn symmetrische sleutels eigenlijk niet meer nuttig.
- Geef een voorbeeld van een service die met UDP werkt en leg uit waarom.
- Verklaar
- Ticket (Kerberos)
- Onweerlegbaar
- ACL (Access Control List)
- Peering
Praktijk
- Van elk hoofdstuk zo goed als 1 vraag
- Vragen:
- Toon met alleen netcat, grep en echo de grootte van een foto die op het internet staat. (Oplossing Tom)
- Port-scan met netcat op 1 poort met alleen een handshake. Als de poort open is moet hij "Poort open" tonen, anders niets.
- if nc -z debbie.vlan77.be 80; then echo "Poort open"; fi
- Toon het e-mailadres van een certificaat
- openssl x509 -in ABAecom_=sub.__Am._Bankers_Assn.=_Root_CA.crt -email -noout
- Verifieer met gpg enkele files.
- gpg --import <publickey>
- find /home/test/gpg/ -type f -name 'tekst*\.txt\.asc' -exec gpg --verify {} \;
- Toon hoeveel woorden beginnen met be en eindigen met en
- grep -E '^be(.*)en$' /usr/share/dict/dutch | wc -w
2013 augustus examen
Theorie
- Analyse van pakketten
- Zoek IP-adres van de DNS server
- Hoeveel TCP connecties worden er opgebouwd?
- In pakket x wordt een http request gedaan. In welk pakket nog en waarom ziet er dat niet uit zoals in pakket x?
- Hoeveel data is er verstuurd wanneer je aan pakket x en y zit?
- Je verstuurt een mail via de server mx debbie, zeg hier bij wat er gebeurt en maak gebruik van de volgende termen: smtp, DNS protocol, routering, ARP protocol, client-server model.
- Uitleggen bij een packet filter en een inspection firewall hoe dat je die kunt omzeilen als je gebruik maakt van passive ftp
- Bob en Alice hebben elk een publieke sleutel, twee manier geven hoe dat Trudy deze niet kan onderscheppen
- Waar of niet waar
- Zonder CBC is bij AES niet mogelijk om afbeeldingen te beveiligen
- Bij handshake heeft men 2 nonces(ofzoiets)
- Iets van een versleuteling bij https
- Door de komst van asymmetrische sleutels zijn symmetrische sleutels eigenlijk niet meer nuttig.
- Leg uit het is beter om IP spoofing te gebruiken bij een DOS dan gewoon de documenten te stelen(ofzoiets)
- Termen uitleggen
- Content type(http header)
- jitter
- http hijacking
- een tekening waarbij je moest zeggen wat er gebeurt
Praktijk
- Een variant op ping waarbij je een automatische ICMP doet
- Een reeks van mappen aanmaken(vb tmp/dir1/dir2/dir3 als dir 1 ng niet bestaat)
- Een code kraken die op een website staat
- je hebt bestanden cert.pem en cert.key je moest er voor zorgen dat die de juiste permissies kregen met chmod
- Een oefening met tshark
2013 januari examen
Theorie
- Analyse van pakketten
- Zoek IP-adres van de DNS server
- Hoeveel TCP connecties worden er opgebouwt?
- In pakket x wordt een http request gedaan. In welk pakket nog en waarom ziet er dat niet uit zoals in pakket x?
- Zet wat er gebeurt als je naar www.khleuven.be surft met je browser en gebruik hierbij de volgende termen: HTTP protocol, DNS protocol, routering, ARP protocol.
- Waar of niet waar + woordje uitleg.
- Een wiskundige vind een snelle manier om een product in 2 priemgetallen op te splitsen, is het RSA in gevaar?
- Door de komst van asymmetrische sleutels zijn symmetrische sleutels eigenlijk niet meer nuttig.
- Een IPSEC AH (Authentication Header) zorgt ervoor dat de header van een IP-pakket niet meer veranderd kan worden door een digitale handtekening.
- Leg de volgende termen uit: FTP in passive mode, VPN, en nog 2 anderen.
- Een video player streamt een video, maar deze blijft steeds haperen. Geef 2 manieren om dit te vermijden. (Jitterbuffer is er 1 van)
- Geef in schema vorm een woordje uitleg over recursieve en niet recursieve DNS queries.
2013-2014 samenvatting - Filip Scheir
De samenvatting voor 2013-2014 met dank aan Filip Scheir: Samenvattingen-20210617T081040Z-001.zip
2014 augustus examen
- Het verschil tussen ECB en CBC en waarom dat het een beter is dan het andere
- Waarom dat P2P beter is in het distruburen van files dan client-server
- Prefetchen uitleggen
- Kan er gezegd worden dat een CA een "Thrusted Thirth Party" is bij PKI
- Leg onweerlegbaarheid uit bij het gebruik van PGP
- Het belang van een nonce binnen authenticatie
- Wat is de cryptografische functie een CA
- Het verschil tussen end-to-end vertraging en pakketjitter
- Waar/Niet waar + Uitleg
- Kan Jitter (Variatie Delay) opgelost worden door gebruik te maken van QoS
- Als een hacker de Publieke Sleutel van een website in handen krijgt heeft deze toegang tot alle sessies, en alle voorgaande sessies als deze werden opgenomen (Sniffing)
- Een Packet-filter kan geen virussen tegenhouden
- Voorbeelden van applicatie gateway zijn web cache en een server
- Als je zo snel mogelijk een bestand wil versturen naar een verre locatie (+15 hops) dan gebruik je TCP
- Er zijn minder regels bij een packetfilter om een bepaalde TCP communicatie toe te staan tussen client-server dan bij stateful inspection firewall
- In een DMZ (Demilitarized Zone) staan geen interne servers
- Bij VoiP loopt verkeer van alle gesprekken via de SIP proxys
- Een systeem dat gebruikt maakt van HMAC is gevoelig voor replayaanvallen
2014 januari examen
- Waarom maakt een website gebruikt van cookies. Leg uit met behulp van een schema.
- Waarom is een gedistribueerde hashtabel een 'HASH'-tabel?
- Alle voordelen en nadelen van UDP en TCP uitleggen, en 2 voorbeelden geven waarom/wanneer je gebruik zou maken van UDP of TCP.
- Hoe werkt pgp en hoe garandeert het integriteit en authenticatie? Leg uit Onweerlegbaarheid/Non-repudiation
- Leg DASH & Manifestbestand uit + onderlinge relatie.
- Noem de twee soorten redundantie bij videocompressie?
- Hoe werkt een leaky bucketsheduler?
- Vraag 8 (Waar/Niet)
- Kan Jitter (Variatie Delay) opgelost worden door gebruik te maken van QoS?
- Als bij een diefstal de Private Sleutel van een Certification Authency (CA) gestolen wordt, heeft dit dan invloed op vooraf uitgedeelde certificaten door deze sleutel?
- Als een hacker de Private Sleutel van een website in handen krijgt heeft deze toegang tot alle sessies, en alle voorgaande sessies als deze werden opgenomen (Sniffing) ?
- Een Packet-filter kan geen virussen tegenhouden.
- ...(nog een 8 tal)
2015 augustus examen
- Bespreek de 2 manieren die er zij om weergavevetraging tegen te gaan bij jitter + schema.
- Hoe helpt leaky bucket bij iets van bandbreedte + schema?
- Als netwerkbeheerder bij ICMP-ZERO moet je de firewall configureren zodat de DMZ niet kan gemapt worden door middel van traceroute. Teken deze configuratie en schrijf in pseudocode de FW-regels.
- Een audiostukje is gesampeld aan 16 000 samples per seconde. Er zijn 12 000 verschillende niveaus. Wat is de bitrate wanneer het CMP gecodeerd is? Toon ook de berekening.
- Leg volgende bewering uit: IPsec is een veiligheidsdeken.
waar of niet waar + leg uit (hierop krijg je punten)
- In de HTTP header field byterange krijgt de gebruiker een indicatie van de grootte van het object.
- Het deffel-hillman algoritme is een hashfunctie.
- Een hasfunctie is veiliger dan een checksom.
- Een DNS requests kan enkel interactieve requests aanvragen. (ja zo stond dat op het examen. Ik weet het, die zin klopt niet).
2016 januari examen
Theorie
- Dit examen werd in 2017, 2018 en 2019 getoond als voorbeeldexamen.
Deel 1: meerkeuzevragen
Principe: Per vraag zijn er vier tot 6 stellingen gegeven. Duid telkens aan welke allemaal juist zijn. Het aantal juiste mogelijkheden wordt gegeven. Elke aangeduide mogelijkheid moet juist zijn. Als de juiste antwoorden bv. zijn 'A, F & G' en je duidt 'A, B & G' aan dan is dit volledig fout. De vragen werken ook volgens het principe van eliminatie; er worden ook stellingen over ongeziene stof gegeven en door te elimineren wat je weet van de geziene stof kan je besluiten of de onbekende dingen juist zijn.
1) Welke dingen zijn van toepassing op IPsec transportmode:
- Tussen eindstations
- Unicast
- Enkel payload
Tussen gatewaysMulticast(Zie tekst over IPsec)Hele pakket(Is tunnelmode)
2) Welke twee protocollen zorgen voor confidentialiteit van uitgewisselde data
- SSH
- HTTPS
3) Welk systeem kan aanvallen inline tegenhouden. Bv. hacker wilt website defacen via Joomla Exploit.
- IPS (Intrusion Prevention System)
IDS(Intrusion Detection System)PocketfilterStateful Inspection FirewallVirusscanner
4) Beweringen over Telnet
- Machines op afstand beheren (e.g. router)
Telnet is geen protocolTelnet heeft een beveiligde verbindingMet Telnet kun je veilig inloggen
5) Iets over access lists
6) Welke tools om mail te versturen
- Netcat
- Telnet
POP3(Lezen)ESP(IPsec)SSTP(type)
7) Beweringen over IPsec-verbinding
- Wanneer client achter NAT-gateway zit dan kan AH niet gebruikt worden.
- IPsec VPN-tunnel die gebruik maakt van AH biedt geen confidentialiteit.
- Gebruiker die via VPN van thuis toegang wil krijgen tot intern bedrijfsnetwerk gebruikt daarvoor best een ESP IPsec verbinding in tunnel mode.
8) ACC’s
- Specifiekere ACC’s vanboven
- Zelfde trafiek filteren -> meer regels dan Sateful Inspection Firewall
9) Beweringen over NAT
- Portforwarding is een soort van NAT (Voorbeeldje met Plex)
10) Iets over diensten die IPsec levert. Mensen struikelden hier over het woordje diensten, want in de lijst stonden implementaties ook.
11) Welke zijn block cyphers? Dit was een kutvraag volgens Swennen. Afleiden door reductie.
12) Alice mailt Bob. Je moet blijkbaar zo’n constructies kunnen begrijpen:
- Ḳ^+^~B~(K~C~)+K~S~((Ḳ^-^~A~(H(m))+m))
13) Applicaties bovenop UDP
- DNS
- SIP
14) Beweringen over HTTP
- Body is soms leeg (Bv. Conditional Get)
15) Welke functies noodzakelijk voor IPsec?
- IKE om de SA af te spreken
- Diffie-Helman om shared-secret af te spreken
16) Welk van onderstaande servers ook application gateway
- HTTP-proxy
- SIP-proxy
17) Packet Jitter
- Variatie in delay
- Buffering kan negatieve effecten reduceren
- Jitter buffering zorgt voor algemene vertraging
18) Router die QoS algoritme WFQ samen met ???? kan garantie leveren op
- Delay
SnelheidPacketsizeThroughput
19) HTTP-conversatie, er stond geen 200 dus dat was sowieso al niet goed
- Server geen idee welke website.
20) Router in welke laag OSI-model? Hier was Swennen het meest in teleurgesteld!!!
- Laag 3
21) Beweringen ESP IPsec
- Tunnel mode wordt gebruikt tussen host en security gateway
- Tunnel mode wordt gebruikt tussen 2 security gateways
- Transport mode zal de originele IP header niet versleutelen
22) TCP source ports.
- 20
- 21
- 10000
23) Welke van de volgende zaken worden niet voorzien door TCP (transmission control protocol)?
- Timing
- Security
Deel 2: open vragen
- 1) In bijlage staat een wiresharkoverzicht van een verbinding.
-
- 1a) Hoeveel verbindingen werden er gemaakt? Aan wat zie je dit?
-
-
-
- Twee. Dit vind je door SYN, SYNACK, ACK te tellen.
-
-
-
- 1b) In pakket 8 zien we dat er een HTML-request is. In welk pakket is dit nog zo en waarom zien we dit niet zo als in pakket 8?
-
-
-
- Andere is HTTPS.
-
-
-
- 1c) Hoeveel data (bytes) is er verstuurd in de connectie die op lijn 29 wordt beëindigd.
-
-
-
- ACK = 2626 -> seq 2626 = aantal bytes
-
-
- Ergens was er ook nog een vraag over (a * b)mod^n^. Hierbij moest je niet rekenen, is formule die je zo kunt omzetten.
- 2) Geef een volledig schema over hoe mail van bij Alice die op haar mailclient (Mozilla Thunderbird) zit vanuit een telenetnetwerk tot aan Bob (ucll) geraakt. Volgende zaken moeten minstens voorkomen
- DNS records, DNS, TLD, IMAP, SMTP, (nog iets denk ik maar ben het vergeten).
-
- Die lijst met dingen die je moet aanduiden staat er niet voor niets. Die helpt je je antwoord logisch op te bouwen. Zie dat je eerst op kladblad tekent.
2017 juni examen
Theorie
- 8 moeilijke doordenk multiple choice vragen (met meerdere mogelijke juiste antwoorden, en je moet ze allemaal juist hebben)
- DNS query response gegeven van alle servers waarlangs de DNS query gaat. Leg uit met schema wat er gebeurt, wanneer wie welke responses geeft, welke queries iteratief/recursief zijn.
- Waarom wordt er bij SSL/TCL zowel symmetrische als asymmetrische encryptie gebruikt? Leg uit met een schema van SSL en zeg waar welke gebruikt wordt (toy of echte SSL)
Praktijk
Praktijkexamen 22/05/2017
- Give a list of all words with 14, 15 or 16 unique letters. The output format should look like this:
-
- Words with 14 letters: word1 word2 word3
- Words with 15 letters: word4 word5
- ...
for n in 14 15 16; do echo "Words with $n letters:" $(grep -P "^.{$n}$" dutch | grep -vP '(.).*\1'); done
- Give a list of the usernames tried in ftp_bruteforce.pcap. You can only use tshark and sort (Step by step solution: https://wiki.uclllabs.be/index.php/TShark_Tutorial#Exercises)
tshark -r ftp_bruteforce.pcap -Y 'ftp.request.command == USER' -T fields -e ‘ftp.request.arg’ | sort -u
- Give the current time (format: Time= hh:mm:ss (dd-mm-yyyy))
echo 'Time=' $(date +'%T (%x)') | tr / -
- Write a oneliner to decode the following file "secret" (contents: RGUgcHVudGVuIG9wIGRlemUgdnJhYWcgemlqbiBhbCBiaW5uZW4uCg==)
The file ends with '==' indicating base64 padding: openssl enc -d -base64 < secret
- Write a oneliner to display the fingerprint, serial and public key of wiki.uclllabs.be
echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -fingerprint -serial -pubkey -noout
Praktijkexamen 24/05/2017
- There is a website running - https://darthvader.uclllabs.be/nw2/lab1 - which is only accessible from 193.191.177.1. That is the IP address of leia.uclllabs.be. Create an ssh tunnel between server leia and the webserver darthvader
ssh -L 10000:darthvader.uclllabs.be:443 user@leia.uclllabs.be -p 22345
- Give a list of words with 5 letters that are also palindromes.
grep -P '^(.)(.).\2\1$' dutch
- Show the file /etc/debconf.conf on screen without comment lines (i.e. lines starting with a #).
grep -vP '^#' /etc/debconf.conf
- Give a list of the usernames tried in ftp_bruteforce.pcap. You can only use tshark and sort (Step by step solution: https://wiki.uclllabs.be/index.php/TShark_Tutorial#Exercises)
tshark -r ftp_bruteforce.pcap -Y 'ftp.request.command == USER' -T fields -e ‘ftp.request.arg’ | sort -u
- Write a oneliner to display the fingerprint, serial and public key of wiki.uclllabs.be
echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -fingerprint -serial -pubkey
2018 juni examen
Theorie
- 8 multiple choice vragen
- DNS
- Waarom wordt er bij SSL/TCL zowel symmetrische als asymmetrische encryptie gebruikt? Leg uit met een schema van SSL en zeg waar welke gebruikt wordt.
Praktijk
Praktijkexamen 23/05/2018
- 1. A simulated phone is running at http://darthvader.uclllabs.be/nw2/phone/. Create a oneliner to bruteforce the pincode. Tip: pincode range: 1200-1300.
for i in {1200..1300}; do if wget -q http://darthvader.uclllabs.be/nw2/phone/ --http-user=admin --http-password=$i; then echo $i; break; fi;done;
- 2. Ontcijfer de volgende boodschap: RGUgcHVudGVuIG9wIGRlemUgdnJhYWcgemlqbiBhbCBiaW5uZW4uCg== (deze boodschap staat in het bestand /home/logs/secret | base64 -d
cat /home/logs/secret | base64 -d
- 3. Show the file /etc/debconf.conf on screen without comment lines (i.e. lines starting with a #).
cat /etc/debconf.conf | grep -Ev "^#"
- 4. Use Netcat to download an image from "http://darthvader.uclllabs.be/nw2/images/". You can use a browser to choose an image. check the echo -ne options or use printf. If needed, slow down netcat with option -i. The image part in the HTTP stream starts after a blank line.
echo -ne "GET /nw2/images/image1.jpg HTTP/1.0\r\n\r\n" | nc darthvader.uclllabs.be 80 > image1.jpg; cat image1.jpg | tail -n +13 > imagetester.jpg
- 5. Perform a zone transfer of the cnw2.uclllabs.be zone to see which hostnames you need to use. Use "dig axfr cnw2.uclllabs.be @ns2.uclllabs.be". Sort the output and format it as follows:
-
- *.1.cnw2.uclllabs.be. 3600 IN A 193.191.176.1
- *.2.cnw2.uclllabs.be. 3600 IN A 193.191.176.2
- *.3.cnw2.uclllabs.be. 3600 IN A 193.191.176.3
- *.4.cnw2.uclllabs.be. 3600 IN A 193.191.176.4
- *.5.cnw2.uclllabs.be. 3600 IN A 193.191.176.5
- *.6.cnw2.uclllabs.be. 3600 IN A 193.191.176.6
- *.7.cnw2.uclllabs.be. 3600 IN A 193.191.176.7
- *.8.cnw2.uclllabs.be. 3600 IN A 193.191.176.8
- *.9.cnw2.uclllabs.be. 3600 IN A 193.191.176.9
- *.10.cnw2.uclllabs.be. 3600 IN A 193.191.176.10
dig axfr cnw2.uclllabs.be @ns2.uclllabs.be | awk '{print $1,$2,$3,$4,$5}' | grep "IN A" | sort -V
Praktijkexamen 22/05/2018
- 1) A simulated phone is running at http://darthvader.uclllabs.be/nw2/phone/. Create a oneliner to bruteforce the pincode. Tip: pincode range: 1200-1300
for pin in {1200..1300}; do if wget -q --http-user='admin' --http-password=$pin http://darthvader.uclllabs.be/nw2/phone; then echo $pin; break; fi; done
- Give a list of words with 5 letters that are also palindromes.
grep -P '^(.)(.).\2\1$' dutch
- Show the file /etc/debconf.conf on screen without comment lines (i.e. lines starting with a #).
grep -vP '^#' /etc/debconf.conf
- Give a list of the usernames tried in ftp_bruteforce.pcap. You can only use tshark and sort (Step by step solution: https://wiki.uclllabs.be/index.php/TShark_Tutorial#Exercises)
tshark -r ftp_bruteforce.pcap -Y 'ftp.request.command == USER' -T fields -e ‘ftp.request.arg’ | sort -u
- Write a oneliner to display the fingerprint, serial and public key of wiki.uclllabs.be
echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -fingerprint -serial -pubkey
2019 extra oefeningen + oplossingen - Lars, Martijn, Jonas
Met dank aan de Github van Martijn
Opgave: cnw2.pdf
Met dank aan Lars Lemmens
Oplossingen
Met dank aan Jonas Berx
Monitoraat Netwerken - By JONAS BERX
# Neem niet zomaar de code over, zoek zelf een oplossing :) (man ...) of (... --help)
# Google is ook nog altijd je vriend
# Niet alle oefeningen zijn 100% juist
# Please geen haat als je uitkomst niet klopt
# Ik ben maar een arm studentje uit UCLL dat graag op Netwerken erdoor wilt zijn
# XXX JONAS XXX
#
1) wget -q -O - http://crl3.digicert.com/TERENASSLCA3.crl | openssl crl -inform DER -text -noout | grep "Revocation Date" | wc -l
2) ssh -p 22345 rNummer@leia.uclllabs.be
3) ping 127.0.0.1 -c $(ls | grep \.crl$ |wc -l)
4) tshark -r Cnw2_ftp_bruteforce.pcap -Y 'ftp.request.command==PASS' -T fields -e 'ftp.request.arg' 2>/dev/null| sort | uniq -c | sort -rn | head -3 | cut -d ' ' -f 7
5) gebruik de filter : 'http.request.command==POST'
6) nc -z -n -v 193.191.177.1 1-66535 |& grep succeeded ----------- nmap -p- 193.191.177.1 --max-rate 50 (Max rate 50 is redelijk traag aangezien er +65000 poorten zijn)
7) who | awk '{print $1,$3}' | while read user time; do echo $user $(($(($(date +%s) - $(date -d "$time" +%s)))/60)) minutes; done | sort | uniq -c (Klopt niet 100% maar geeft je wel de tijd in minuten)
7A) who -H (Simpele oplossing beter te combineren met 7B)
7B) who | awk '{print $3,$4,$1}' | sort | head -1
8) tar -cvf archive.tar /home/LDAP/r0748969 | openssl enc -aes-128-cbc -in archive.tar -out archive.tar.aes; openssl enc -aes-128-cbc -in archive.tar.aes -out archive.tar.aes.aes (GOOGLE : Tar on the fly -> geen tussenbestanden)
9) ss -lnt4 | awk '/LISTEN/{print $4}' |cut -d ':' -f 2 | grep -vP '(.).*\1'
10) tshark -r Cnw2_ftp_bruteforce.pcap -Y 'ftp.response.code==230' (Juiste code wel : 230 maar niet juiste antwoord.. moet nog de login gegevens van de successfull login vinden)
11) #geen moeite in deze gestoken
12) grep -P '^([A-Za-z])([A-Za-z])\2\1$' (achteraf nog een dict toevoegen om in te zoeken)
14) ls -ld (-d staat voor directory)
15) String = "TGludXggUlVMRVM=" echo TGludXggUlVMRVM= | openssl enc -d -a
16) nmap 193.191.177.1 -p- -r --open -sT
39) cat /usr/share/dict/dutch | grep -vP '(.).*\1' | grep -P '^[a-zA-Z]{5}$' (voorlaatste)
#rest zal deze week er wel bijkomen.. Ik doe m'n best
#Good luck all
#De antwoorden hieronder zijn van het examen dat in de les overlopen is
Voor examen : History en dan nummer geven -> handig om op het examen niet je code over te schrijven maar gewoon het nummer van het command te geven.
-----------------------------------------------------------------------
!!!!!!!!!!!!!!!!!!!!!!!!!! 2>/dev/null = vuilnisbak !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
------------------------------------------------------------------------
EXAMENVRAGEN
1)for foo in 14 15 16; do echo "Words with $foo letters:" $(echo "grep -vP '(.).*\1' /usr/share/dict/dutch | grep -P '^.{$foo}$'"| sh);done
2) tshark -r Cnw2_ftp_bruteforce.pcap -Y 'ftp.request.command==USER' -T fields -e 'ftp.request.arg' | sort | uniq -c | sort -rn
3) date '+Time = %X (%X)' OF echo date : $(date +%Y.%m.%d)
4) cat secret | base64 -d of cat secret | openssl enc -d -a
5) echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -noout -pubkey -serial -fingerprint -enddate
2019 juni examen
Theorie
- 30 multiple choice vragen (waarvan 6-7 vragen letterlijk uit het voorbeeldexamen kwamen), hierbij zijn ook enkele vragen over de theorie in de labo's
DE VOLGENDE 3 VRAGEN WAREN EXACT HETZELFDE OP HET HEREXAMEN!
- Als er door ftp 6 files gedownload moeten worden hoeveel connecties dan op laag 4? (antwoord: 1 sessie)
- Hoe wordt er bij SSL/TCL ervoor gezorgd dat er geen truncation attack of lagere level encoding aanval kan gebeuren?
- Modulo rekenen (a*b)modn a=17023 b=90004, n = 1000? Zeg ook welke eigenschap van modulo rekenen je gebruikt? (oplossing: 23 * 4 = 92)
Praktijk
Praktijkexamen 1
- Companies like Google and Microsoft make heavily use of the X.509 subjectAltName extension. UCLL also uses this extension to add an alternative name *.ucll.be to the common name (ucll.be) of the certificate. Create a oneliner which calculates the amount of DNS Subject Alternate Names used in the SSL certificate of facebook.com.
echo | openssl s_client -connect facebook.com:443 | openssl x509 -text -noout | grep -o 'DNS' | wc -l
- Create a regular expression to match all words in a dictionary with 11 unique letters.
cat /usr/share/dict/dutch | grep -P '^[a-zA-Z]{11}$' | grep -vP '(.).*\1'
- Show the file /etc/debconf.conf on screen without comment lines (i.e. lines starting with a #).
cat /etc/debconf.conf | grep -vP '^#'
- Create a linux CLI oneliner to extract an overview of the different FTP usernames in the file ftp_bruteforce.pcap. You can only use the commands tshark and sort.
tshark -r ftp_bruteforce.pcap -Y 'ftp.request.command == USER' -T fields -e ‘ftp.request.arg’ | sort -u
- Create a CLI oneliner to find a match between different rsa private key files and their companion crt files. The output should look something like:
alfa.key matches to beta.crt gamma.key matches to delta.crt
for key in $(ls -1 *.key); do for crt in $(ls -1 *.crt); do if [ [ $(openssl rsa -in $key -noout -modulus | md5sum) == $(openssl x509 -in $crt -noout
-modulus | md5sum) ]]; then echo $key matches $crt; fi; done; done
--> er is een bestand '/home/logs' op leia waar je dit mee kan testen
Praktijkexamen 2
- Create a CLI oneliner to match all words with 14, 15 and 16 unique letters. The output should look like:
Words with 14 letters: bedrijfsomvang ... Words with 15 letters: ...
for foo in 14 15 16; do echo -e "Words with $foo letters:" && grep -P "^.{$foo}$" /usr/share/dict/dutch | grep -Pv '(.).*\1';done
- Bob needs to send a text file through an encrypted tunnel to Alice. Both already agreed on a shared
secret 'mysecret' using the Diffie Hellman algorithm. Alice wants to display the contents of the file directly on her screen in stead of storing it locally and then opening it. Use a suitable encryption algorithm. The data is sent over a medium which only allows ASCII text. Alice is logged in on debbie and Bob on the virtual machine.
- As a web server administrator you have been asked to give your manager a linux CLI oneliner to extract
the 5 IP adresses that contacted the web server the most. The apache log is located in /home/log. Create a correct oneliner. The output should look something like this: (count IPs) 8000 10.10.10.10 ... 82 81.30.45.89
cat /home/logs/apache_google.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -5
- Log into leia with a RSA key pair instead of logging in with your password.
- ?????
Praktijkexamen 3
- Use tshark to create an overview of the different HTTP servers in the file http.pcapng(you can find this file in /home/logs). Filter out all of the Apache servers. You can only use the commands tshark and sort.
- Create a oneliner which lists all palindromes with exactly 5 letters in a dictionary.
grep -P '^([a-zA-Z])([a-zA-Z])[a-zA-Z]\2\1$' /usr/share/dict/dutch
- Create a CLI oneliner using openssl to retrieve the certificate of the server facebook.com and to display only it's fingerprint, serial and public key.
echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -fingerprint -serial -pubkey -noout
- Bob needs to send a text file through an encrypted tunnel to Alice. Both already agreed on a shared secret 'mysecret' using the Diffie Hellman algorithm. Alice wants to display the contents of the file directly on her screen in stead of storing it locally and then opening it. Use a suitable encryption algorithm. The data is sent over a medium which only allows ASCII text. Alice is logged in on debbie and Bob on the virtual machine.
- Make the following directories with a oneliner ~/temp/dir1/dir2/dir3. The solution must be generic: It should work from any location.
mkdir -p ~/temp/dir1/dir2/dir3
2019 oplossingen labo 0 - Lars Lemmens
Met dank aan de Github van Martijn en natuurlijk Lars Lemmens
LABO 0
Exercise 24
Create 2 files with random text. Then create a third file containing the contents of the two other files
1) echo 'some random text' > file1 2) pwgen -n1 > file2 3) cat file1 file2 > file3
- The pwgen command generates passwords which are designed to be easily memorized by humans, while being as secure as possible.
- -n stands for minimum 1 number AND -1 stands for per line 1 password.
- '>' means overwrite a file
Exercise 25
List all home directories which are open for other users (group or others should have r,w or x rights)
• ls -l /home/LDAP/ | grep -v 'drwx------' | grep -v '^total' | tr -s ' ' | cut -d ' ' -f9 • ls -l /home/LDAP/ | grep -v 'drwx------' | grep -v '^total' | awk '{print $9}' • ls -l /home/LDAP/ | grep -vP '^(drwx------|total)'| awk '{print $9}' • ls -l /home/LDAP/ | awk '$1 !~ /drwx------|total/{print $9}'
- grep prints lines matching a pattern.
- -v stands for inverted match.
- -P stands for perl expression
- ^ matches position just before the first character of the string.
- The tr command replaces all occurrences of a character in a file, and print the result.
- -s replaces each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character
- The command cut removes sections from each line of files
- -d use DELIM instead of TAB for field delimiter
- -f(number) select only these fields
- awk '{print $(number)' prints the field with the matching number
Exercise 26
List all lines in the file /usr/share/dict/dutch containing the string 'rare'
Exercise 27
Only show the columns with filenames and permissions of the files in your homedirectory. (tip: use ls and cut)
• ls -l ~ | grep -v '^total' | tr -s ' ' | cut -d ' ' -f1,9
- grep prints lines matching a pattern.
- -v stands for inverted match.
- The tr command replaces all occurrences of a character in a file, and print the result.
- -s replaces each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character
- The command cut removes sections from each line of files
- -d use DELIM instead of TAB for field delimiter
- -f(number) select only these fields
Exercise 28
Sort the lines from 27 in reverse alphabetical order
• ls -l ~ | grep -v '^total' | tr -s ' ' | cut -d ' ' -f1,9 | sort -r -k2
- grep prints lines matching a pattern.
- -v stands for inverted match.
- The tr command replaces all occurrences of a character in a file, and print the result.
- -s replaces each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character
- The command cut removes sections from each line of files
- -d use DELIM instead of TAB for field delimiter
- -f(number) select only these fields
- The sort command sort lines of text files
- -r reverse the result of comparisons
- -k start a key at POS1 (origin 1), end it at POS2 (default end of line).
Exercise 29
Use the command cal to find out on which day of the week your birthday is in 2050 and write your output to a newly created file
• ncal -m 6 2050 | grep ' 9 ' | cut -d ' ' -f1 > file • cal -N -m 6 2050 | grep ' 9 ' | cut -d ' ' -f1 > file
- The command ncal displays a calendar and the date of Easter
- The command cal displays a calendar and the date of Easter
- -m displays the specified month
- The command cut removes sections from each line of files
- -d use DELIM instead of TAB for field delimiter
- -f(number) select only these fields
- '>' means overwrite a file
Exercise 30
Append the sentence 'THE END' to the file you created in the previous exercise without opening this file in an editor (hence: use a one-liner)
• echo 'THE END' >> file # >> makes a file and saves it
Exercise 31
Create a subdirectory TEST in your homedir. Now create some files in it using this command line (and make sure you understand what happens!)
for foo in `seq 1 9`; do touch "file $RANDOM"; done && touch 'file keep me'
How can you remove all files except the file “file keep me” with just one 'oneliner'"
1) mkdir ~/TEST; cd ~/TEST 2) for foo in {1..9}; do touch "file $RANDOM"; done && touch 'file keep me' • rm file\ [0-9]* • ls file\ [0-9]* | while read file; do rm "$file";done • ls -1 | grep -v 'file keep me' | xargs -d '\n' rm • find . -type f ! -name 'file keep me' -delete
- The for keyword indicates a for loop ==> SYNTAX : for WORD [ in WORDLIST ... ] ; do ACTIONS ; done
- The command touch creates a new empty file(s) or change the times for existing file(s) to current time
- The rm command removes files or directories
- Remove (unlink) the FILE(s)
- The while command continuously executes the list list-2 as long as the last command in the list-1 returns an exit status of zero.
- The command xargs builds and executes command lines from standard input
- -d stands for delimiter ==> This can be used when the input consists of simply newline- separated items, although it is almost always better to design your program to use --null where this is possible.
- The find command searches for files in a directory hierarchy
- -f stands for regular file
- -delete stands for Delete files; true if removal succeeded.
Exercise 32
List the name and permissions of the first 10 directories in /etc.
Sample output: drwxr-xr-x /etc/ drwxr-xr-x /etc/alternatives drwxr-xr-x /etc/apache2 drwxr-xr-x /etc/apache2/conf.d drwxr-xr-x /etc/apache2/mods-available drwxr-xr-x /etc/apache2/mods-enabled drwxr-xr-x /etc/apache2/sites-available drwxr-xr-x /etc/apache2/sites-enabled drwxr-xr-x /etc/apt d rwxr-xr-x /etc/apt/apt.conf.d" • ls -l /etc | head -10 | grep -v '^total' | awk '{print $1 " " $9}'
- The head command prints the first 10 lines of each FILE to standard output. With more than one FILE, precede each with aheader giving the file name. With no FILE, or when FILE is -, read standard input.
- grep prints lines matching a pattern
- -v stands for inverted match.
- awk '{print $(number)' prints the field with the matching number
Exercise 33
Same question as #32, but now also omit all error messages. "
• ls -l /etc 2>/dev/null | head -10 | grep -v '^total' | awk '{print $1 " " $9}'
- 2>/dev/null is used to redirect to a file
- The head command prints the first 10 lines of each FILE to standard output. With more than one FILE, precede each with aheader giving the file name. With no FILE, or when FILE is -, read standard input.
- grep prints lines matching a pattern.
- -v stands for inverted match.
- awk '{print $(number)' prints the field with the matching number
Exercise 34:
List the name and permissions of all files in the /etc directory containing the word 'host' in their name. Do this without the use of the commands grep and/or awk."
• find /etc/ -type f -name '*host*' 2>/dev/null | xargs -d '\n' ls -l # (recursive search) • find /etc/ -maxdepth 1 -type f -name '*host*' 2>/dev/null | xargs -d '\n' ls -l • ls -ld /etc/*host* | tr -s ' ' | cut -d ' ' -f1,9 # (also show files of type directory) • ls -ld /etc/*host* | sed -e '/^d.*/d' | tr -s ' ' | cut -d ' ' -f1,9
- The find command searches for files in a directory hierarchy
- -f stands for regular file
- -name stands for the name
- 2>/dev/null is used to redirect to a file
- The command xargs builds and executes command lines from standard input
- -d stands for delimiter ==> This can be used when the input consists of simply newline- separated items, although it is almost always better to design your program to use --null where this is possible.
- -maxdepth stands for the - levels of directories below the starting point
- The command cut removes sections from each line of files
- -d use DELIM instead of TAB for field delimiter
- -f(number) select only these fields
- The tr command replaces all occurrences of a character in a file, and print the result.
- -s replaces each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character
2019 oplossingen labo 1 - Lars Lemmens
Met dank aan de Github van Martijn en natuurlijk Lars Lemmens
LABO 1
In order to connect to a remote SSH server leia.uclllabs.be in this example, execute the following command
'user:~$' • ssh r1234567@leia.uclllabs.be -p 22345
The client configuration file can make your life easier because default command line options could be specified in this configuration file
Normally you would use the following command to log in to leia
'user:~$' • ssh -p 22345 r1234567@leia.uclllabs.be "FILE: ~/.ssh/config" Host leia HostName leia.uclllabs.be Port 22345 User r1234567
The following command creates an ssh tunnel. Local tcp port CPORT (on your laptop) will be tunneled through GATEWAY to SERVER port
'user:~$' • ssh -f GWUSERNAME@GATEWAY -L CPORT:SERVER:SPORT -N
-
The -f argument instructs the ssh instance to go into the background, and -N instructs it to not launch a shell.
-
The -L argument specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.
https://darthvader.uclllabs.be/nw2/lab1 which is only accessible from 193.191.177.1. That's the IP address of leia.uclllabs.be.
Try it yourself: There is a website running -'user:~$' • ifconfig | grep -B1 inet
- ifconfig configures a network interface
- The grep command grep searches the named input FILEs
- -B NUM prints NUM lines of leading context before matching lines
With this command, you can create an ssh tunnel between server leia.uclllabs.be and the webserver darthvader.uclllabs.be.
'user:~$' • ssh -p 22345 -f r0123456@leia.uclllabs.be -L 10000:darthvader.uclllabs.be:443 -N
- The -p argument shows which port to connect to on the remote host
- The -f argument instructs the ssh instance to go into the background, and -N instructs it to not launch a shell.
- The -L argument specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.
First find the ssh process to close:
'user:~$' • ps fauxw | grep darthvader
- The ps command reports a snapshot of the current processes
- The f argument does a full-format listing
- The a argument selects all processes except both session leaders and processes not associated with a terminal.
- The u argument selects by effective user ID (EUID) or name.
- The x arugment Lift the BSD-style "must have a tty" restriction, which is imposed upon the set of all processes when some BSD-style (without "-") options are used or when the ps personality setting is BSD-like.
- The w argument gives wide output
- grep searches the named input FILEs
Next send a sigterm signal to the correct pid (process identifier) = second column in ps fauxw output
'user:~$' • kill 12345
And if you need to close all running ssh sessions/tunnels use the following command:
'user:~$' • killall ssh
By default kill sends a SIGTERM signal (similar to clicking on the X to close a window (Chrome, Notepad, Gnome-terminal,..). If you need to force close an application, send the SIGKILL signal:
'user:~$' • kill -9 12345 'user:~$' • killall -9 ssh
Use a text based browser on leia to verify the remote website is accessible through the ssh tunnel.
'user:~$' • lynx https://localhost:10000/nw2/lab1-all-but-leia 'user:~$' • curl -k -s https://localhost:10000/nw2/lab1-all-but-leia/ | html2text
- The argument -k instructs curl not to verify the server certificate.
- The argument -s makes curl mute make sure that it doesn't show progress meter or error messages
OpenSSH has built-in support for dynamic port forwarding via the SOCKS proxy protocol. This command turns your SSH client (on your laptop) into a SOCKS proxy server: "
'user:~$' • ssh -f user@GATEWAY -D 10000 -N -p port
- The -f argument instructs the ssh instance to go into the background, and -N instructs it to not launch a shell.
- The -p argument shows which port to connect to on the remote host
- The -D argument specifies a local “dynamic” application-level port forwarding
There are 3 different levels of debug modes that can help troubleshooting issues. With the -v option SSH prints debugging messages about its progress.
This is helpful in debugging connection, authentication, and configuration problems. Multiple -v options increase the verbosity. Maximum verbosity is three levels deep.
'user:~$' • ssh leia -v 'user:~$' • ssh leia -vv 'user:~$' • ssh leia -vvv
This command will aid you in finding an available tcp port: "
'user:~$' • netstat -lnt | grep -oP ':\K[^:][0-9]+' | sort -un
- The command netstat prints network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
- The -l shows only listening sockets.
- The -n shows numerical addresses instead of trying to determine symbolic host, port or user names.
- The -t argument shows only TCP ports
- The command grep searches for PATTERNS in each FILE.
- The -o argument prints only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
- The -p argument Interpret I as Perl-compatible regular expressions (PCREs).
- : matches the character : literally (case sensitive)
- \K resets the starting point of the reported match.
- [^:] matches a single character not present in the list below
- [0-9] matches a single character present in the list below
- '+' matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
- The command sort sorts lines of text files
- The -u argument output only the first of an equal run
- The -n argument compares according to string numerical value
For instance, we can scan all ports up to 1000 by issuing this command:
'user:~$' • nc -vz leia.uclllabs.be 1-1000
- The command nc is a TCP/IP swiss army knife
- The -v argument is for verbose
- The -z argument is for zero-I/O mode [used for scanning]
"Messages returned by Netcat are sent to standard error. You can send the standard error messages to standard out, which will allow filtering the results. Stderr can be redirected to stdout via the 2>&1 bash syntax. Then use grep to filter
Alternatively you could use |& as a shorthand for 2>&1 |. "
'user:~$' • nc -z -n -v 193.191.177.1 1-1000 2>&1 | grep succeeded 'user:~$' • nc -z -n -v 193.191.177.1 1-1000 &| grep succeeded
- The command nc is a TCP/IP swiss army knife
- The -z argument is for zero-I/O mode [used for scanning]
- The -v argument is for verbose
- The -v argument is used for short version
Netcat is a very slow TCP port scanner as it will wait for a TCP timeout for every port it tries. Add option -w 1 to increase scanning speed, and execute this command on leia to circumvent slowdown due to firewalled ports.
Netcat isn't designed to scan for open ports, it's functionality is very limited. If you need to scan for open ports, use a real portscanner like Nmap"
'user:~$' • nmap -p1-1000 193.191.177.1
- The command nmap is a network exploration tool and security / port scanner
- The -p argument specifies which ports you want to scan
Once again, you need to choose one end of the connection to listen for connections.
However, instead of printing information onto the screen, you will place all information straight into a file
'user:~$' • nc -l -p 10000 > received_file
- The command nc is a TCP/IP swiss army knife
- The -l argument is used as listening mode
- The -p argument specifies which ports you want to scan
- The > overwrites a file
On the second computer, create a simple text file by typing: "
'user:~$' • echo "Hello, this is a file" > original_file
You can now use this file as an input for the Netcat connection you will establish to the remote listening computer.
The file will be transmitted just as if you had typed it interactively: "
'user:~$' • nc -l -p 10000 < original_file
On the receiving end, you can anticipate a file coming over that will need to be unzipped and extracted by typing: "
'user:~$' • nc -l -p 10000 | tar xzvf -
- The command nc is a TCP/IP swiss army knife
- The -l argument is used as listening mode
- The -p argument specifies which ports you want to scan
- The tar command is a GNU version of the tar archiving utility
- The -x argument extracts files from an archive
- The -z argument unzips the file
- The -v argument is for verbose
- The -f argument uses archive file
- The ending dash (-) means that tar will operate on standard input, which is being piped from Netcat across the network when a connection is made.
On the side with the directory contents you want to transfer, you can pack them into a tarball and then send them to the remote computer through Netcat:
'user:~$' • tar -czf - * | nc leia.uclllabs.be 10000
- The tar command is a GNU version of the tar archiving utility
- The -c argument creates a new archive
- The -z argument unzips the file
- The -f argument uses archive file
- The command nc is a TCP/IP swiss army knife
In the following example, we create a full backup of our home directory on leia (all files and folders) using tar - Netcat method.
Execute this on leia: "
'user:~$' • tar -cz ~ | nc -l -p 10000
- The tar command is a GNU version of the tar archiving utility
- The -c argument creates a new archive
- The -z argument unzips the file
- The command nc is a TCP/IP swiss army knife
- The -l argument is used as listening mode
- The -p argument specifies which ports you want to scan
And this on your laptop (the machine receiving backups):
'user:~$' • cd /path/to/where_I_want_to_store_my_backup 'user:~$' • nc leia.uclllabs.be 10000 | tar -xzf -
- The command nc is a TCP/IP swiss army knife
- The tar command is a GNU version of the tar archiving utility
- The -x argument extracts files from an archive
- The -z argument unzips the file
- The -f argument uses archive file w
This is just one example of transferring more complex data from one computer to another. Another common idea is to use the dd command to image a disk on one side and transfer it to a remote computer.
'user@leia:~$' • tar -cz ~ | pv | nc -l -p 10000 'user@laptop:~$' • nc leia.uclllabs.be 10000 | pv > backup.tar.gz
- The tar command is a GNU version of the tar archiving utility
- The command nc is a TCP/IP swiss army knife
- The -c argument creates a new archive
- The pv command monitors the progress of data through a pipe
- The -z argument unzips the file
- The > argument overwrites the file
- The pv command monitors the progress of data through a pipe
- The command nc is a TCP/IP swiss army knife
- The -l argument is used as listening mode
- The -p argument specifies which ports you want to scan
'user@leia:~$' • tar -cz ~ | pv | nc '-N' -l -p 10000 'user@laptop:~$' • nc -d leia.uclllabs.be 10000 | pv > backup.tar.gz
- The tar command is a GNU version of the tar archiving utility
- The command nc is a TCP/IP swiss army knife
- The -c argument creates a new archive
- The -d argument makes sure that it does not attempt to read from stdin.
- The -z argument unzips the file
'user@laptop:~$' • nc leia.uclllabs.be 10000 </dev/null | pv | tar xzf -
- The pv command monitors the progress of data through a pipe
- The -N argument shuts the network socket down after EOF on the input
- The -l argument is used as listening mode
- The -p argument specifies which ports you want to scan
- /dev/null is for error log
Exercise 1:
How do you verify if the packages openssh-server and openssh-client are installed on your Debian system? (Hint: dpkg -l ...)"
'user:~$' • dpkg -l openssh-server 'user:~$' • dpkg -l openssh-client
- The argument -l is used for list
Exercise 2:
How do you verify if the openssh-server is running?
'user:~$' • systemctl status ssh
Exercise 3:
How to check which port is used by the SSH server daemon? (Hint: netstat, ss or lsof)
'root #' • netstat -lntp | grep sshd 'root #' • ss -lntp | grep sshd 'root #' • lsof -i tcp | awk '$1=="sshd" && $10=="(LISTEN)" {print $9}' | cut -d ':' -f2 | sort -u
- The netstat command prints network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
- The -l argument is used as listening mode
- The -n argument shows numerical addresses instead of trying to determine symbolic host, port or user names.
- The -p argument shows the PID and name of the program to which each socket belongs
- The grep command prints lines matching a pattern
- The ss command is another utility to investigate sockets
- The lsof command lists open files
- The -i argument selects the listing of files any of whose Internet address matches the address specified in i.
- The awk command is used for pattern scanning and processing language
- The cut command removes sections from each line of files
- The -d argument use DELIM instead of TAB for field delimiter
- The -f argument selects only these fields
- The sort command sort lines of text files
- The -u argument outputs only the first of an equal run
Exercise 4:
How do you disconnect from a remote SSH session?
'user:~$' • exit 'user:~$' • logout 'user:~$' • <CTRL>+d
Exercise 5:
Is there a config file for the OpenSSH server? If so, where is it located in the file system tree?
Yes: '/etc/ssh/sshd_config'
Exercise 6:
Create and demonstrate a simple web server with Netcat.
'user:~$' • while true; do { echo -e "HTTP/1.1 200 OK\r\n$(date)\r\n\r\n<h1>hello world from $(hostname) on $(date)</h1>" | nc -vl -p 10000; } done
- The while command The while command continuously executes the list list-2 as long as the last command in the list list-1 returns an exit status of zero.
- The echo command displays a line of text
- The -e argument enables interpretation of backslash escapes
- The command nc is a TCP/IP swiss army knife
- The -v argument uses verbose
- The -l argument is used for listen mode, for inbound connects
- The -p argument is used for local port number
2019 oplossingen labo 2 - Lars Lemmens
Met dank aan de Github van Martijn en natuurlijk Lars Lemmens
LABO 2
What is the IP address of your computer?
What is the status code returned from the server to your browser?
When was the HTML file that you are retrieving last modified on the server?
'user:~$' • echo -ne 'HEAD /HTTP-Wireshark-file1.html HTTP/1.1\r\nHost: virtualhostname.x.cnw2.uclllabs.be\r\n\r\n' | nc localhost 80 | grep 'Last-Modified:' 'user:~$' • tshark -r http.pcapng -Y http -T fields -e http.last_modified
- The -n argument does not output the trailing newline
- The -e argument enables interpretation of backslash escapes
- The nc command is a TCP/IP swiss army knife
- The -r argument reads the packet date from infile
- The -Y command captures the link type
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
How many bytes of content are being returned to your browser?
What software and version is the web server running?
'user:~$' • tshark -r http.pcapng -Y http.server -T fields -e ip.src -e http.server | sort -u
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The sort command sorts lines of text files
- The -u argument output only the first of an equal run
Explain in detail the above tshark command.
What TCP ports are in use at the client and the server during your browsing session?
'user:~$' • tshark -r http.pcapng -Y http -T fields -e tcp.port | sort -u
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The sort command sorts lines of text files
- The -u argument output only the first of an equal run
Exercise 1:
Which HTTP method was used the most during the entire browsing session?
'user:~$' • tshark -r http.pcapng -Y http.request.method -T fields -e http.request.method | sort | uniq -c | head -1 | awk '{print $2}' 'user:~$' • tshark -r http.pcapng -Y http.request.method -T fields -e http.request.method | sort | uniq -c | awk 'NR=1{print $2}'
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The sort command sorts lines of text files
- The uniq command reports or omits repeated lines
- The -c argument prefixes lines by the number of occurences
- The head command shows output for only the first part of files
- The awk command is used for pattern scanning and processing language
In case you would like to automate this: With tshark and a Bash loop"
'user:~$' • tshark -r http.pcapng -Y 'http.request.method==GET' -T fields -e tcp.srcport | sort -u | while read PORT;do tshark -r http.pcapng -Y "tcp.dstport==$PORT && http.server contains Apache" -T fields -e ip.src;done | sort -u
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The sort command sorts lines of text files
- The -u argument output only the first of an equal run
- The -Y command captures the link type
Exercise 2:
How many HTTP GET request messages did your browser send?
'user:~$' • tshark -r http.pcapng -Y http.request.method==GET | wc -l
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The wc command prints a newline, word, and byte counts for each file
- The -l argument prints the newline counts
To which Internet addresses were these GET requests sent?
'user:~$' • tshark -r http.pcapng -Y http.request.method==GET -T fields -e ip.dst | sort -u
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The -Y command captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The sort command sorts lines of text files
- The -u argument output only the first of an equal run
Exercise 5:
Use Netcat to download these images. check the echo -ne options or use printf. If needed, slow down netcat with option -i. The image part in the HTTP stream starts after a blank line.
'user:~$' • echo -ne "GET /nw2/images/image1.jpg HTTP/1.1\r\nHost: darthvader.uclllabs.be\r\n\r\n" |\ nc darthvader.uclllabs.be 80 | sed '1,/^\r/d' > image1.jpg 'user:~$' • echo -ne "GET /nw2/images/image1.jpg HTTP/1.1\r\nHost: darthvader.uclllabs.be\r\n\r\n" |\ nc darthvader.uclllabs.be 80 | grep -A9999999999999999 -B0 -Pa 'JFIF' > image1.jpg
- The -n argument does not output the trailing newline
- The -e argument enables interpretation of backslash escapes
- The sed command is a stream editor for filtering and transforming text
- The nc command is a TCP/IP swiss army knife
- The -A argument prints NUM lines of trailing context after matching lines.
- The -B argument interprets PATTERN as a Perl regular expression (PCRE, see below).
- The -a argument processes a binary file as if it were text; this is equivalent to the --binary-files=text option.
Exercise 7:
Use httpie, a cURL-like tool for humans to inspect the various HTTP headers in request and responses. Connect to various websites and explain the use of the HTTP headers.
'user:~$' • http -v -a Rey:StarWars http://darthvader.uclllabs.be/nw2/private/
- The -v argument is for verbose
Exercise 8:
http://darthvader.uclllabs.be/nw2/phone/. Create a oneliner to bruteforce the pincode. Tip: pincode range: 1200-1300
A simulated phone is running at'user:~$' • for foo in {1200..1300}; do if wget -q --http-user='admin' --http-password=$foo http://darthvader.uclllabs.be/nw2/phone; then echo $foo;break;fi;done
- The wget command is the non-interactive network downloader
- The -q argument turns of the wget's output
- The --http-user AND --http-password specifies the username and the password on a http server
Exercise 9:
"Put the following text.txt on your web server. This text contains the string Goed bezig :-)
Write an HTTP request by using the Range header so your web server will only return this exact string 'Goed bezig :-)'. Try to do this by only using netcat
'user:~$' • curl http://your.server.name/output.txt -i -H "Range: bytes=1-" 'user:~$' • echo -ne "GET /output.txt HTTP/1.1\r\nHost: your.server.name\r\nRange: bytes=1-\r\n\r\n" | nc your.server.name 80
- The curl command is used to transfer a URL
- The -i argument includes the HTTP-header in the output
- The -H argument is used as a extra header to use when getting a web page
- The nc command is a TCP/IP swiss army knife
- The -n argument does not output the trailing newline
- The -e argument enables interpretation of backslash escapes
Exercise 10:
This can be accomplished by sending the output of tshark or tcpdump to STDOUT instead of a regular file. Direct this STDOUT stream to Wireshark running on your local computer.
'root #' • ssh myserver.X.cnw2.uclllabs.be tcpdump -nli eth0 not tcp port 22345 -s0 -w - | wireshark -nki - 'root #' • ssh myserver.X.cnw2.uclllabs.be 'tshark -nli eth0 -f "not tcp port 22345" -s0 -w -' | wireshark -nki -
- The ssh command is a remote login program
- The -n argument redirects stdin from /dev/null (actually, prevents reading from stdin).
- The -l argument specifies the user to log in as on the remote machine.
- The -i argument selects a file from which the identity (private key) for public key authentication is read.
- The -s argument may be used to request invocation of a subsystem on the remote system
- The -w argument Requests tunnel device forwarding with the specified tun(4) devices between the client (local_tun) and the server (remote_tun).
- The -n argument disables network object name resolution (such as hostname, TCP and UDP port names), the -N flag might override this one.
- The -k argument starts the capture session immediately.
- The -i argument sets the name of the network interface or pipe to use for live packet capture.
- The -f argument (in tshark command) sets the capture filter expression
Exercise 11:
Capture some HTTP traffic while browsing several websites and save it to the file http.pcapng.
You can also use the test capture in /home/logs on leia. create a CLI oneliner which parses the captured file http.pcapng and displays all HTTP server strings which do not contain Apache.
Only the commands tshark and sort are allowed.
'user:~$' • tshark -r http.pcapng -Y 'http.server && !(http.server contains Apache)' -T fields -e http.server | sort -u
- The -r argument reads the packet date from infile
- The -Y command captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The sort command sorts lines of text files
- The -u argument output only the first of an equal run
Exercise 12:
This exercise is a small variation of the previous one. Count and sort all HTTP server strings which do not contain Apache in HTTP responses on your GET requests.
'user:~$' • tshark -r http.pcapng -Y '!(http.request.method==GET)' -T fields -e tcp.srcport | sort -u | while read PORT;do tshark -r http.pcapng -Y "tcp.dstport==$PORT && http.server && !(http.server contains Apache)" -T fields -e http.server;done | sort | uniq -c | sort -rn
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The -Y command captures the link type
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The sort command sorts lines of text files
- The -u argument output only the first of an equal run
- The -T argument sets the format of the output when viewing decoded packet data.
- The uniq command reports or omits repeated lines
- The -c command prefixes lines by the number of occurrences
- The -r argument (in sort command) reverses the results of comparisons
- The -n compare according to string numerical value
2019 oplossingen labo 3 - Lars Lemmens
Met dank aan de Github van Martijn en natuurlijk Lars Lemmens
Labo 3
Match one or more d characters: d dd ddd dddd "
'user@:~$' • grep -P 'd+' file 'user@:~$' • cat file | grep -P 'd+'
- d matches the character d literally (case sensitive)
- The grep command prints lines matching a pattern
- The -P argument interprets PATTERN as a Perl regular expression
Color and colour are different spellings of the same word.
Color is the preferred spelling in American English, and colour is preferred in all other main varieties of English. The following regex matches both. "
'user@:~$' • grep -P 'colou?r' file
- colo matches the characters colo literally (case sensitive)
- u matches the character u literally (case sensitive)
- ? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)
- r matches the characters r literally (case sensitive)
Match wh following by one, two or three e character: 'whe whee wheee'
'user@:~$' • grep -P 'whe{1,3}' file
- The grep command prints lines matching a pattern
- The -P argument interprets PATTERN as a Perl regular expression
- whe matches the characters whe literally (case sensitive)
- {1,3} matches the previous token between 1 and 3 times, as many times as possible, giving back as needed (greedy)
Match either gray or grey
'user@:~$' • grep -P '{gray|grey}' file
- The grep command prints lines matching a pattern
- The -P argument interprets PATTERN as a Perl regular expression
- '{gray|grey}' must match gray or gray
Let's say you want to match a text like !abc! or !123!. Only these two are possible, and you want to capture the abc or 123.
'user@:~$' • grep -P '!(abc|123)!' file
- The grep command prints lines matching a pattern
- The -P argument interprets PATTERN as a Perl regular expression
- '{gray|grey}' must match !abc! or !123!
Search /usr/share/dict/dutch for all words which end in 'vuur', without matching the word 'vuur' itself.
'user@:~$' • grep -P '^.+vuur$' /usr/share/dict/dutch
- ^ asserts position at start of a line
- . matches any character (except for line terminators)
- matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
- vuur matches the characters vuur literally
List all words which contain 32 or more letters.
user@:~$' • grep -P '^.{32}$' /usr/share/dict/dutch
- ^ asserts position at start of a line
- . matches any character (except for line terminators)
- {32} matches the previous token exactly 32 times
- $ asserts position at the end of a line
List all words starting with the letter 'b', ending with the letter 'l' which are exactly 4 letters long. Capitalize the output
'user@:~$' • grep -E '^b.{2}l$' /usr/share/dict/dutch | tr [:lower:] [:upper:] 'user@:~$' • perl -ne 'print uc if /^b.{2}l$/' /usr/share/dict/dutch
- ^ asserts position at start of a line
- b matches the character b literally (case sensitive)
- . matches any character (except for line terminators)
- {2} matches the previous token exactly 2 times
- l matches the character l literally (case sensitive)
- $ asserts position at the end of a line
- The perl command is how to execute the Perl interpreter
- The -n argument causes Perl to assume the following loop around your program, which makes it iterate over filename arguments somewhat like sed -n or awk:
- The -e argument may be used to enter one line of program.
List all palindromes with exactly 4 characters
```
'user@:~$' • grep -P '^([A-Za-z])([A-Za-z])\2\1$' /usr/share/dict/dutch
'user@:~$' • perl -lne 'print if $_ eq reverse && length($_) eq 4' /usr/share/dict/dutch
```
- A-Z matches a single character in the range between A and Z (case sensitive)
- a-z matches a single character in the range between a and z (case sensitive)
- \2 matches the same text as most recently matched by the 2nd capturing group
- \1 matches the same text as most recently matched by the 1st capturing group
- $ asserts position at the end of a line
Exercise 1:
List all words out of the file /usr/share/dict/dutch which contain 4 or 5 consecutive vowels.
```
'user@:~$' • cat /usr/share/dict/dutch | grep -P '[aeiou]{4,5}'
```
- aeiou matches a single character in the list aeiou (case sensitive)
- {4,5} matches the previous token between 4 and 5 times, as many times as possible, giving back as needed (greedy)
Exercise 2:
Count the number of words out of the file /usr/share/dict/dutch which which start with 'ver', and end with 'en'. ('verplaatsen' is ok, 'overkomen' and 'vertrek' are not ok)
```
'user@:~$' • grep -P '^ver.*en$' /usr/share/dict/dutch | wc -l
```
- ^ asserts position at start of a line
- ver matches the characters ver literally (case sensitive)
- . matches any character (except for line terminators)
- '*' matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)
- $ asserts position at the end of a line
- The wc command prints newline, word, and byte counts for each file
- The -l argument prints the newline counts
Exercise 3:
In those annoying night television games people must guess words. Given are all the letters the word consist of and a list of dots, one for every letter.
E.g. We are looking for a 23 letter word with a 'v' in position 8: '.......v...............'. Use the letters 'enrtiscau' for the other positions."
```
'user@:~$' • cat /usr/share/dict/dutch | grep -P '[enrtiscau]{7}v[enrtiscau]{15}'
```
- enrtiscau matches a single character in the list enrtiscau (case sensitive)
- {7} matches the previous token exactly 7 times
- {15} matches the previous token exactly 15 times
Exercise 4:
Show 'System load = X Y Z' replacing X, Y and Z by the values displayed by the uptime command.
```
'user@:~$' • echo "System load =" $(uptime | awk -F': ' '{print $2}'| tr -d ',')
```
Exercise 5:
List the usernames of the students who logged in from outside of the UCLL network.
```
'user@:~$' • who | grep -Pv '(.*)\s+pts.*\s+\(10\.|tmux' | awk '/^r[0-9]/{print $1}' | sort -u
```
- . matches any character (except for line terminators)
- '*' matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)
- \s matches any whitespace character (equivalent to [\r\n\t\f\v ])
- r matches the character r literally (case sensitive)
-
- matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
- tmux matches the characters tmux literally (case sensitive)
- ^ asserts position at start of a line
- 0-9 matches a single character in the range between 0 and 9 (case sensitive)
Exercise 6:
How many times have students logged into leia from outside the UCLL network?
```
'user@:~$' • last | grep -Pv '.*?pts.*?\s+10\.' | awk '/^r[0-9]/{print $1}' | wc -l
```
- . matches any character (except for line terminators)
- *? matches the previous token between zero and unlimited times, as few times as possible, expanding as needed (lazy)
- pts matches the characters pts literally (case sensitive)
- r matches the character r literally (case sensitive)
- \s matches any whitespace character (equivalent to [\r\n\t\f\v ])
- '+' matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
- ^ asserts position at start of a line
Exercise 7:
Show the file /etc/debconf.conf on screen without comment lines (i.e. lines starting with a #)
```
'user@:~$' • cat /etc/debconf.conf | grep -vP '^#'
```
- ^ asserts position at start of a line
- '#' matches the character # literally (case sensitive)
Exercise 8:
List all unique IP addresses that contacted your Apache web server.
```
'user@:~$' • cat /var/log/apache2/wiki-ssl-access.log | awk '{print $1}' | sort -u
```
Exercise 9:
List all unique IP addresses that contacted the ssh daemon of your Apache web server.
```
'user@:~$' • cat /var/log/auth.log | grep -oP 'sshd.*?\K[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sort -u
```
- sshd matches the characters sshd literally
- . matches any character (except for line terminators)
- *? matches the previous token between zero and unlimited times, as few times as possible, expanding as needed (lazy)
- \K resets the starting point of the reported match. Any previously consumed characters are no longer included in the final match
- [0-9]{1,3} matches the previous token between 1 and 3 times, as many times as possible, giving back as needed (greedy)
- 0-9 matches a single character in the range between 0 and 9 (case sensitive)
- . matches the character . literally (case sensitive)
Exercise 10:
Create a regular expression to match all words in the dictionary /usr/share/dict/dutch which with 10 unique letters.
```
'user@:~$' • cat /usr/share/dict/dutch | grep -P '^.{10}$' | grep -vP '(.).*\1'
```
- ^ asserts position at start of a line
- . matches any character (except for line terminators)
- {10} matches the previous token exactly 10 times
- '*' matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)
- \1 matches the same text as most recently matched by the 1st capturing group
Exercise 11:
To combat spam, a mail server administrator wants to reject mail coming from home users. The IP addresses home users always seem to connect from have hostnames like this: ip.domain. Create a regex which matches all these host names.
```
'user@:~$' • cat mail.log | grep -oP 'NOQUEUE: reject: RCPT from \K[0-9]{1,3}.*?\[' | tr -d '['
```
- [0-9]{1,3} matches the previous token between 1 and 3 times, as many times as possible, giving back as needed (greedy)
- . matches any character (except for line terminators)
- *? matches the previous token between zero and unlimited times, as few times as possible, expanding as needed (lazy)
Exercise 12:
www.khleuven.be. Use log file /home/logs/apache_google.log. "
List all unique firefox 2.0.0.x versions used to connect to```
'user@:~$' • cat apache_google.log | grep -oP 'Firefox\/2\.0\.0\.[0-9]+' | sort -n -t '.' -k4 -u
```
- Firefox matches the characters Firefox literally (case sensitive)
- / matches the character / literally (case sensitive)
- 2 matches the character 2 literally (case sensitive)
- . matches the character . literally (case sensitive)
- 0 matches the character 0 literally (case sensitive)
- [0-9]+ matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
Exercise 13:
List all words with 14, 15 or 16 unique letters.
```
'user@:~$' • for foo in 14 15 16; do echo "Words with $foo letters:" $(echo "grep -vP '(.).*\1' /usr/share/dict/dutch | grep -P '^.{$foo}$'"| sh);done
'user@:~$' • for foo in 14 15 16; do echo "Words with $foo letters:" $(grep -vP '(.).*\1' /usr/share/dict/dutch | grep -P "^.{$foo}$");done
'user@:~$' • for foo in 14 15 16; do echo "Words with $foo letters:" && echo "grep -vP '(.).*\1' /usr/share/dict/dutch | grep -P '^.{$foo}$'"| sh;done
'user@:~$' • for foo in 14 15 16; do echo "Words with $foo letters:" && grep -vP '(.).*\1' /usr/share/dict/dutch | grep -P "^.{$foo}$";done
```
- . matches any character (except for line terminators)
- '*' matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)
- \1 matches the same text as most recently matched by the 1st capturing group
- ^ asserts position at start of a line
- $ asserts position at the end of a line
- foo} matches the characters foo} literally (case sensitive) $ asserts position at the end of a line
2019 oplossingen labo 4 - Lars Lemmens
Met dank aan de Github van Martijn en natuurlijk Lars Lemmens
Labo 4
What is the IP address of the client and what IP address is used by the server?
Which protocol was used to find the IP address of the FTP server.
Does FTP use UDP or TCP? Why?
Is the session using active or passive FTP?
Who chooses the FTP version, active or passive? Is it the client or the server?
Sketch the three-way handshake used to negotiate the initial sequence numbers. Do this both for the relative and the real sequence numbers.
What is the benefit in using relative sequence numbers in Wireshark/Tshark?
Which credentials were used to login to the FTP service?
'user@:~$' • tshark -r Cnw2_ftp.pcap -Y "tcp.srcport == $(tshark -r Cnw2_ftp.pcap -Y 'ftp.response.code == 230' -T fields -e tcp.dstport) && ftp.request.command == USER" -T -e ftp.request.arg
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
"Step 1:
When a user's login attempt is successful, the FTP server answers with FTP response code 230 <- Response code: User logged in, proceed (230).
This message is sent to the client using it's chosen TCP port. This very same TCP port is used by the client for every packet sent in the control connection.
So we know the client will use this port as TCP source port when profiding the FTP username. Thus the first step is to find this TCP port:
See Cnw2 theory - Chapter 2: Application Layer: Active vs Passive FTP
'user@:~$' • tshark -r Cnw2_ftp.pcap -Y 'ftp.response.code == 230' -T fields -e tcp.dstport
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
Step 2:
The port we just found is the TCP port the client uses for the FTP control connection.
When using this port as TCP source port in our display filter, we'll only list packets sent from client to FTP server
'user@:~$' • tshark -r Cnw2_ftp.pcap -Y "tcp.srcport == $(tshark -r Cnw2_ftp.pcap -Y 'ftp.response.code == 230' -T fields -e tcp.dstport)"
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- The -T argument sets the format of the output when viewing decoded packet data. The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
Step 3:
We're only interested in the packet containing the username, so let's add 'ftp.request.command == USER' to the display filter:
'user@:~$' • tshark -r Cnw2_ftp.pcap -Y "tcp.srcport == $(tshark -r Cnw2_ftp.pcap -Y 'ftp.response.code == 230' -T fields -e tcp.dstport) && ftp.request.command == USER"
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The server sends a 230 code in response to a command that has provided sufficient credentials to the server to grant the user access to the FTP server.
Step 4:
And finally use the tshark fields option to only display the username used:
'user@:~$' • tshark -r Cnw2_ftp.pcap -Y "tcp.srcport == $(tshark -r Cnw2_ftp.pcap -Y 'ftp.response.code == 230' -T fields -e tcp.dstport) && ftp.request.command == USER" -T fields -e ftp.request.arg debbie
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The server sends a 230 code in response to a command that has provided sufficient credentials to the server to grant the user access to the FTP server.
Which file was downloaded/uploaded from/to the FTP server? (delete as appropriate)
'user@~$' • tshark -r Cnw2_ftp.pcap -Y 'ftp.request.command == RETR' | grep -Po 'RETR \K.*'
- The RETR argument ==> client issues the RETR command after successfully establishing a data connection when it wishes to download a copy of a file on the server.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The -P argument interprets I as Perl-compatible regular expressions (PCREs).
- The -o argument prints only the matched (non-empty) parts of a matching line, with each such part on a separate output line.32
Can you reconstruct this file from the Wireshark packet dump? Open the file to verify it's contents are intact.
How many packets have their destination port set to 21?
'user@~$' • tshark -r Cnw2_ftp_bruteforce.pcap -Y 'tcp.dstport == 21' | wc -l
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- tcp.dstport == 21 => TCP port
- The wc command prints newline, word, and byte counts for each file
- The argument -l prints the newline counts
List all packets which have the PUSH bit set. What is the benefit in setting this bit?
'user@~$' • tshark -r Cnw2_ftp_bruteforce.pcap -Y 'tcp.flags.push == 1'
- The -r argument reads the packet date from infile
- tcp.flags.push == 1 => Which means "check if the Push flag is set". Filtering for just "tcp.flags.push" would again mean "check if there's a push flag field" (which there is, always)
How can you manually calculate the actual port advertised by the PASV/PORT command?
'user@~$' • tshark -r Cnw2_ftp.pcap -Y 'ftp.response.code == 227' | awk -F ',' '{print $5*256+$6}'
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- This is the response given by the server to the PASV command. It indicates that the server is ready for the client to connect to it for the purpose of establishing a data connection.
- The awk command is used for pattern scanning and processing language
- The -F argument
- 5 matches the character 5 literally (case sensitive)
- '*' matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)
- 25 matches the characters 25 literally (case sensitive)
- 6 matches the character 6 literally (case sensitive) + matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
- $ asserts position at the end of a line
- 6 matches the character 6 literally (case sensitive)
How many L4 sessions were created in the FTP session? Note: passive FTP was used in this session.
'user@~$' • tshark -r Cnw2_ftp.pcap -Y 'ftp.response.code == 230 || ftp.response.code == 227' | wc -l
- The server sends a 230 code in response to a command that has provided sufficient credentials to the server to grant the user access to the FTP server.
- This is the response given by the server to the PASV command. It indicates that the server is ready for the client to connect to it for the purpose of establishing a data connection.
- The wc command prints newline, word, and byte counts for each file
- The argument -l prints the newline counts
Try to answer these questions with 'cnw2_ftp_bruteforce.pcap: (file)'
How many password guesses were made?
'user@~$' • tshark -r Cnw2_ftp_bruteforce.pcap -Y 'ftp.request.command == PASS' -T fields -e ftp.request.arg | wc -l
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- So, to see all login attempts, try this filter: ftp.request.command==USER || ftp.request.command==PASS
- The wc command prints newline, word, and byte counts for each file
- The argument -l prints the newline counts
Did the attacker finally get in?
'user@~$' • tshark -r Cnw2_ftp_bruteforce.pcap -Y 'ftp.response.code == 230' | grep -q 'Response: 230' && echo YES || echo NO
- The server sends a 230 code in response to a command that has provided sufficient credentials to the server to grant the user access to the FTP server.
- The -q argument = quiet - do not write anything to standard output
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
Which usernames did he/she try?
'user@~$' • tshark -r Cnw2_ftp_bruteforce.pcap -Y 'ftp.request.command == USER' -T fields -e ftp.request.arg | sort -u
- The -r argument reads the packet date from infile
- The -Y argument captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The -u argument => with -c, checks for strict ordering; without -c, output only the first of an equal run
2019 oplossingen labo 5 - Lars Lemmens
Met dank aan de Github van Martijn en natuurlijk Lars Lemmens
LABO 5
Encrypting the self created file secret.txt using AES can be done like this: "
'user@:~$' • openssl enc -aes-128-cbc -in secret.txt -out secret.txt.aes
-The enc command is used for symmetric cipher routines
To decrypt the file created above and show the decrypted data on screen, use:
'user@:~$' • openssl enc -d -aes-128-cbc -in secret.txt.aes
To get a list of all available encryption algorithms in OpenSSL, type:
'user@:~$' • openssl list-cipher-commands
On more recent OpenSSL versions the command above will not work. The new syntax is as follows:
'user@:~$' • openssl list -help 'user@:~$' • openssl list -cipher-commands
Thus we need to tell our application that ecrypted_picture.bmp is indeed a bitmap. Bitmaps begin with a 54-byte header.
The idea is to extract the first 54 bytes of the unencrypted bitmap and overwrite the first 54 bytes of the encrypted one with the real header. See the following examples: "
AES in ECB mode
'user@:~$' 1) openssl enc -aes-128-ecb -in slimmerik.bmp -out slimmerik_ECB.bmp 'user@:~$' 2) dd if=slimmerik.bmp of=slimmerik_ECB.bmp bs=1 count=54 conv=notrunc
"We could, of course, automate this: "
'user@:~$' 1) dd if=slimmerik.bmp bs=1 count=54 > slimmerik_ECB.bmp && openssl enc -aes-128-ecb -k pass:t -in slimmerik.bmp | dd bs=1 skip=54 >> slimmerik_ECB.bmp 'user@:~$' 2) dd if=slimmerik.bmp of=slimmerik_ECB.bmp bs=1 count=54 && dd if=slimmerik.bmp bs=1 skip=54 | openssl enc -aes-128-ecb -k pass:t >> slimmerik_ECB.bmp
- The dd command converts and copy a file
- The -k argument forces nc to stay listening for another connection after its current connection is completed
AES in CBC mode
'user@:~$' 1) openssl enc -aes-128-cbc -in slimmerik.bmp -out slimmerik_CBC.bmp 'user@:~$' 2) dd if=slimmerik.bmp of=slimmerik_CBC.bmp bs=1 count=54 conv=notrunc
ROT13 encryption
'user@:~$' 1) alias rot13="tr '[A-Za-z]' '[N-ZA-Mn-za-m]'" 'user@:~$' 2) cat slimmerik.bmp | rot13 > slimmerik_rot13.bmpw
- Match a single character present in the list below [N-ZA-Mn-za-m]
- N-Z matches a single character in the range between N (index 78) and Z (index 90) (case sensitive)
- A-M matches a single character in the range between A (index 65) and M (index 77) (case sensitive)
- n-z matches a single character in the range between n (index 110) and z (index 122) (case sensitive)
- a-m matches a single character in the range between a (index 97) and m (index 109) (case sensitive)
You need a key pair to be able to use GnuGP. You can generate one with: "
'user@:~$' • gpg --gen-key
After your keypair is created you should immediately generate a revocation certificate for the primary public key using the option --gen-revoke.
If you forget your passphrase or if your private key is compromised or lost, this revocation certificate may be published to notify others that the public key should no longer be used
'user@:~$' • gpg --output revoke.asc --gen-revoke <mykey>
You can use your key pair to encrypt and sign, but without exchanging public keys this is useless. Others need your public key to verify your signatures and to send encrypted messages to you. You need their keys for the same purposes.
'user@:~$' • gpg --list-keys
You can export your public key using:
'user@:~$' • gpg --output <file> --export <email>
Now import some keys from classmates:
'user@:~$' • gpg --import <file>
You already have an automatically created encryption subkey. Now you will create another subkey for signing.
Instead of the master key the subkey will be used to verifying message signatures.
'user@:~$' • gpg --edit-key YOURMASTERKEYID
Exercise 1:
Bob needs to send a text file through an encrypted tunnel to Alice. Both already agreed on a shared secret 'secret' using the Diffie Hellman algorithm. Alice wants to display the contents of the file directly on her screen instead of storing it locally and then opening it. Use a suitable encryption algorithm. The data is sent over a medium which only allows ASCII text.
'Alice@leia:~$' • nc -l 10000 | openssl enc -a -d -aes-128-cbc -k pass:secret 'Bob@laptop:~$' • cat file | openssl enc -a -aes-128-cbc -k pass:secret | nc leia.uclllabs.be 10000
Exercise 2:
Bob needs to send a text file through an encrypted tunnel to Alice. Both already agreed on a shared secret 'secret' using the Diffie Hellman algorithm. Alice wants to display the contents of the file directly on her screen instead of storing it locally and then opening it. Use a suitable encryption algorithm. The data is sent over a medium which only allows ASCII text. "
Step 1:
As Bob needs to send an encrypted file to Alice, he will need her public key.
So in the first step Alice needs to generate a keypair, and export her public key so she could provide it to Bob. "
'Alice@Server ~ $' • gpg --gen-key 'Alice@Server ~ $' • gpg --output alice.gpg --export alice@uclllabs.be
Step 2:
Alice has exported her gpg public key to the file alice.gpg.
She sends this file e.g. by email to bob. Note that this file is no secret, it is just a public key. Now bob can import Alice's public key into gpg: "
'Bob@leia ~ $' • gpg --import alice.gpg
Step 3:
Bob is ready to sent his secret text file to Alice while providing confidentiality:
'Alice@Server ~ $' • nc -l -p 10000 | gpg --decrypt --quiet 'Bob@leia ~ $' • cat file.txt | gpg --encrypt --armor --output - --recipient alice@uclllabs.be | nc -N server.x.cnw2.uclllabs.be 10000
- The --encrypt argument encrypts data
- The --armor argument creates ASCII armored output
- The nc command is a TCP/IP swiss army knife
Exercise 3:
Same exercise as above, but now use gpg and netcat to create a simple chat application.
'Alice@Server ~ $' • nc -l -p 10000 | gpg --decrypt --quiet --allow-multiple-messages 'Bob@leia ~ $' • while read line; do echo $line | gpg --encrypt --armor --output - --recipient alice@uclllabs.be; done | nc -N server.x.cnw2.uclll
2019 oplossingen labo 6 - Lars Lemmens
Met dank aan de Github van Martijn en natuurlijk Lars Lemmens
LABO 6
Check the contents of the ucll.be wildcard certificate, and make sure you understand the chain of trust.
'user@:~$' • echo | openssl s_client -connect ucll.be:443 | openssl x509 -text -noout
- x509 - is a certificate display and signing utility
- The -text argument prints out the certificate in text form.
- The -noout argument prevents output of the encoded version of the request
We'll start this lab by making our very own SSL certificate. Before we can create a certificate we need to generate an RSA private key.
'user@:~$' • openssl genrsa -aes128 -out TomBola.keys 2048
- The genrsa command generates an RSA private key
Use the following command to remove the pass phrase:
'user@:~$' • openssl rsa -in TomBola.keys -out TomBola.keys
- The -in command specifies the input filename to read a request from or standard input if this option is not specified
- The -out command specifies the output filename to write to or standard output by default.
Now create the Certificate Signing Request.
'user@:~$' • openssl req -new -key TomBola.keys -out TomBola.csr
Lazy admins will probably prefer the following command, its result is the same as all three commands above combined:
'user@:~$' • openssl req -new -newkey rsa:2048 -keyout TomBola.keys -nodes -out TomBola.csr
- The -new command is used to generate a new certificate request
- The -newkey command creates a new certificate request and a new private key
- The -keyout command gives the filename to write the newly created private key to.
- The -nodes command is used if a private key is created it will not be encrypted.
- The -out command specifies the output filename to write to or standard output by default.
- The nodes argument -nodes tells OpenSSL not to encrypt the private key
This verification step is optional but recommended. Now we need somebody to sign our key. We will use our own private key for the signature, creating a self-signed certificate.
As a self-signed certificate is signed by itself it won't be trusted by client software like email clients and web browsers.
Only public keys of real Certificate Authorities (CA) are included in the browsers or OSs certificate stores.
'user@:~$' • openssl x509 -req -days 365 -in TomBola.csr -signkey TomBola.keys -out TomBola.crt
- The -req command is by default a certificate is expected on input. With this option a certificate request is expected instead.
- The -signkey command causes the input file to be self signed using the supplied private key.
- The -days command is used (when the -x509 option is being used) specifies the number of days to certify the certificate for.
If somehow you forgot which key/crt/csr files belong to each other, compare their modulus values. They should be the same. To ease the comparing process create a hash value first.
'user@:~$' • openssl x509 -in TomBola.crt -noout -modulus | md5sum; \ openssl req -in TomBola.csr -noout -modulus | md5sum; \ openssl rsa -in TomBola.keys -noout -modulus | md5sum
- The -in command specifies the input filename to read a certificate from or standard input if this option is not specified.
- The -noout command is used to prevent output of the encoded version of the request
- The -modulus command prints out the value of the modulus of the public key contained in the request.
- The -days command is used (when the -x509 option is being used) specifies the number of days to certify the certificate for.
As we need a Subject Alternative Name (SAN) field to specify additional names associated with our certificate the first step is to create a small openssl configuration file.
FILE: uclllabs_be.conf
[ req ]
default_bits = 4096
prompt = no
encrypt_key = no
default_md = sha512
distinguished_name = dn
req_extensions = v3_req
[ dn ]
C = BE
O = UC Leuven
CN = *.uclllabs.be
[ v3_req ]
subjectAltName = DNS:uclllabs.be
In the next step, we generate our CSR
'user@:~$' • openssl req -new -newkey rsa:4096 -nodes -out star_uclllabs_be.csr -keyout star_uclllabs_be.key -subj "/C=BE/ST=/L=/O=UC Leuven/CN=*.uclllabs.be" -sha512 -config uclllabs_be.cnf 'user@:~$' • openssl req -new -nodes -out star_uclllabs_be.csr -keyout star_uclllabs_be.key -config uclllabs_be.cnf
- The command req is a certificate request and certificate generating utility
- The -new argument generates a new certificate request
- The -newkey argument creates a new certificate request and a new private key.
- The nodes argument -nodes tells OpenSSL not to encrypt the private key
- The -out argument is specified then if a private key is created it will not be encrypted.
- The -keyout argument gives the filename to write the newly created private key to.
- The -subj argument replaces subject field of input request with specified data and outputs modified request.
- The -config argument allows an alternative configuration file to be specified
First check whether the certificate's common name corresponds with the server name, check the expiration date and check the chain of trust.
'user@:~$' • echo | openssl s_client -connect ucll.be:443 | openssl x509 -text -noout | grep -A2 Validity
- x509 - is a certificate display and signing utility
- The -text argument prints out the certificate in text form.
- The -noout argument prevents output of the encoded version of the request
http://crl3.digicert.com/TERENASSLCA3.crl
Second, verify the certificate is not listed on the included CRL (Certificate Revocation List):'user@:~$' 1) wget http://crl3.digicert.com/TERENASSLCA3.crl 'user@:~$' 2) openssl crl -in TERENASSLCA3.crl -text -noout
- The -in argument specifies the input filename to read from or standard input if this option is not specified
- The -text argument prints out the CRL in text form.
- The -noout argument doesn't output the encoded version of the CRL
Unfortunately, this does no seem to work. OpenSSL stops and spawns an error message
The reason is that TERENA published their CRL in DER format, and by default OpenSSL uses the PEM format. Lets convert the CRL to the correct format and try again:
'user@:~$' 1) openssl crl -inform DER -in TERENASSLCA3.crl -outform PEM -out TERENASSLCA3.crl.pem 'user@:~$' 2) openssl crl -in TERENASSLCA3.crl.pem -text -noout
- The -inform argument specifies the input format
- The -in argument specifies the input filename to read from or standard input if this option is not specified
- The -outform argument specifies the output format
- The -out argument specifies the output filename to write to or standard output by default.
The last two commands could be combined in one so the conversion from DER to PEM format is not necessary anymore:
'user@:~$' • openssl crl -inform DER -in TERENASSLCA3.crl -text -noout
And without first downloading the crl:
'user@:~$' • wget -q -O - http://crl3.digicert.com/TERENASSLCA3.crl | openssl crl -inform DER -text -noout
And with extracting the CRL URI automatically:
'user@:~$' • wget -q -O - $(echo | openssl s_client -connect ucll.be:443 2>/dev/null | openssl x509 -text -noout | grep -oP 'URI:\K.*\.crl'| head -1) | openssl crl -inform DER -text -noout
- The wget command is a non-interactive network downloader
- The -q command is used to turn off Wget's output
- The -o command is specified for the outpout document
- The -text argument prints out the CRL in text form.
- The -noout argument doesn't output the encoded version of the CRL
Let's find the serial number of our certificate:
'user@:~$' • openssl x509 -in cert.pem -text
shows our certificate and we find the certificate serial number being: "0d:d9:43:24:0a:84:a5:e6:36:94:ff:c7:eb:e8:1e:3f"
Or in one command with:
'user@:~$' • echo | openssl s_client -connect ucll.be:443 2>/dev/null | openssl x509 -text -noout | grep -A1 -i serial
- The -text argument prints out the CRL in text form.
- The -noout argument doesn't output the encoded version of the CRL
- The -A prints NUM lines of trailing context after matching lines.
- The -i command is used to ignore case
If we would like to verify this serial number manually we need to remove the colons or add colons to the serials in the crt.
Removing should be a peace of cake since the previous labs. Adding a colon every two characters is a bit more complex: "
'user@:~$' • echo 0d:d9:43:24:0a:84:a5:e6:36:94:ff:c7:eb:e8:1e:3f | tr -d ':' => OUTPUT: 0dd943240a84a5e63694ffc7ebe81e3f 'user@:~$' • echo 0dd943240a84a5e63694ffc7ebe81e3f | sed 's/..\B/&:/g' => OUTPUT: 0d:d9:43:24:0a:84:a5:e6:36:94:ff:c7:eb:e8:1e:3f
- The .. mean: look for exactly two characters.
- &: means: replace these two dots (their corresponding found characters) itself and add a colon. Thus ab becomes ab:
- The g at the end tells sed not to stop on the first occurrence
- And finally: /B makes sure that the .. only matches at the word boundary.
'user@:~$' • echo 0dd943240a84a5e63694ffc7ebe81e3f | sed 's/..//' => OUTPUT: d943240a84a5e63694ffc7ebe81e3f 'user@:~$' • echo 0dd943240a84a5e63694ffc7ebe81e3f | sed 's/../&/' => OUTPUT: 0dd943240a84a5e63694ffc7ebe81e3f 'user@:~$' • echo 0dd943240a84a5e63694ffc7ebe81e3f | sed 's/../&:/' => OUTPUT: 0d:d943240a84a5e63694ffc7ebe81e3f 'user@:~$' • echo 0dd943240a84a5e63694ffc7ebe81e3f | sed 's/../&:/g' => OUTPUT: 0d:d9:43:24:0a:84:a5:e6:36:94:ff:c7:eb:e8:1e:3f: 'user@:~$' • echo 0dd943240a84a5e63694ffc7ebe81e3f | sed 's/..\B/&:/g' => OUTPUT: 0d:d9:43:24:0a:84:a5:e6:36:94:ff:c7:eb:e8:1e:3f
Of course, much easier is to just use the -serial parameter of OpenSSL, it will be displayed in the correct format automatically:
'user@:~$' • openssl x509 -in cert.pem -serial -noout
- The -noout argument doesn't output the encoded version of the CRL
- The -serial command outputs the certificate serial number.
Of course it is even more easy to just let OpenSSL do all the hard work, just like we do with our web browsers and mailclients. It is the client software which verifies the certificate and not the user.
'user@:~$' • openssl verify -CAfile TERENASSLCA3.crl.pem -crl_check cert.pem cert.pem: C = BE, ST = Vlaams-Brabant, L = Leuven, O = UC Leuven, CN = *.ucll.be
- The verify command is used to verify certificate chains
- The -CAfile command is a file of trusted certificates.
- The -crl_check command checks end entity certificate validity by attempting to lookup a valid CRL
Now its time to do something with our newly created certificate (TomBola.crt). OpenSSL not only includes SSL/TLS client software but also a server, which can act as a very basic web server:
'user@:~$' • openssl s_server -accept 10000 -cert TomBola.crt -key TomBola.key -www -state
- The -www command sends a status message back to the client when it connects.
- The -state command prints out the SSL session states.
- The -cert command is to specify which certificate to use
- The -state argument is used to display the various SSL states and messages used to build the secure connection
'user@:~$' • openssl s_client -connect localhost:10000
Use the private key from your certificate with the following command-line
'user@:~$' • openssl dgst -sha256 -sign TomBola.key -out examenvragen.pdf.sha2 examenvragen.pdf
- The dgst function outputs the message digest of a supplied file or files in hexadecimal form. They can also be used for digital signing and verification.
- The -sign command digitally signs the digest using the private key in "filename".
When you receive the document it's signature can be verified with the following command:
'user@:~$' • openssl dgst -sha256 -verify TomBola.pub -signature examenvragen.pdf.sha2 examenvragen.pdf
- The dgst function outputs the message digest of a supplied file or files in hexadecimal form. They can also be used for digital signing and verification.
- The -signature command is used to verify the actual signature
Use the following OpenSSL command to extract the public key from the certificate and execute the command above to verify the integrity of the document and also authenticate its sender/creator.
'user@:~$' • openssl x509 -in TomBola.crt -pubkey -noout > TomBola.pub
Use Wireshark to analyze and observe the TLS handshake between your browser and a https site of your choice. Try to answer the following questions:
Which version of the SSL/TLS protocol is used?
Which signature hash algorithms are advertised as supported by your browser?
Which cipher suites are supported by the client (browser), and which are supported by the server?
Which cipher suite is chosen? Explain the different parts of the cipher suite.
Is it the client or the server who defines the cipher suite to be used?
If you need to see the contents of SSL/TLS encrypted packets you need to feed the correct decryption keys into Wireshark.
If you have access to the private key and no Diffie-Hellman is used to calculate the session keys (shared secrets), Wireshark can decrypt all data.
In most cases you do not have access to the private key or DHE is used to calculate the session keys, thus the above option will not work.
Fortunately, some browsers (like firefox) have the ability to save these session keys to a file, allowing Wireshark to decrypt all SSL/TLS data to/from any website:
'user@:~$' 1) export SSLKEYLOGFILE=/home/slimmerik/sslkey.log 'user@:~$' 2) firefox & 'user@:~$' 2) sudo wireshark -o ssl.keylog_file:/home/slimmerik/sslkey.log
# crl Certificate Revocation List (CRL) Management. # rsa RSA key management (private key). # csr Certificate Signing Request (CSR) Management. # x509 X.509 Certificate Data Management (public key certificate). # s_client Openssl SSL/TLS client (e.g. an https client) # s_server Openssl SSL/TLS server (e.g. an https server) # enc Encoding with Ciphers (encryption and decription).
Exercise 1:
Take a close look at the contents of cert.pem. It is a pem encoded digital certificate.
With the following OpenSSL magic the certificate can be displayed in a more human-friendly format."
'user@:~$' • openssl x509 -text -noout -in cert.pem
Exercise 2:
https://wiki.uclllabs.be. We could use the following set of commands:"
Let's say we would like to check the expiration date of the certificate used on'user@:~$' • openssl s_client -connect wiki.uclllabs.be:443 > tempfile
Now open the temp file with vim, your preferred text editor and delete all lines before -----BEGIN CERTIFICATE----- and after -----END CERTIFICATE-----.
Next use the command below to find the correct expiration date:
'user@:~$' • openssl x509 -noout -enddate -in tempfile
And if you managed to understand everything this far in this lab, you should be able to glue the above together in just one command line.
'user@:~$' • echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | perl -nle 'print if /BEGIN/../END/' | openssl x509 -noout -enddate 'user@:~$' • echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -noout -enddate
- The -enddate command prints out the expiry date of the certificate, that is the notAfter date.
Now with a few additions, the above could be used as a base for a fully automated certificate expiration checker
Create a textfile with all your domains in it for which ssl certificates are used. Of course this could be automated too.
There are of course less ugly ways for achieving the same
'user@:~$' • for foo in $(cat hosts); do if [[ $(echo $(date -d"$(echo | openssl s_client -connect $foo:443 2>/dev/null | openssl x509 -noout -enddate | cut -d'=' -f2 | awk '{print $2 " " $1 " " $4}')" +%s) - $(date +%s) | bc) -gt 0 ]]; then echo $foo: OK; else echo $foo: EXPIRED;fi;done
And now a shorter version with some more OpenSSL magic
'user@:~$' • for foo in $(cat hosts); do if echo | openssl s_client -connect $foo:443 2>/dev/null | openssl x509 -noout -checkend 0; then echo $foo: OK; else echo $foo: EXPIRED; fi;done
- The -checkend command checks if the certificate expires within the next arg seconds and exits non-zero if yes it will expire or zero if not.
And magic++:
'user@:~$' • for foo in $(cat hosts); do check_ssl_cert -H $foo;done
- The check_ssl_cert checks the validity of X.509 certificates
- The -H command is used to specify the host
Exercise 3:
Create a oneliner which shows the amount of currently revoked certificates in the Terena SSL CA revocation list.
http://crl3.digicert.com/TERENASSLCA3.crl."
Do not create temporary files. The CRL can be found at'user@:~$' • wget -q -O - http://crl3.digicert.com/TERENASSLCA3.crl | openssl crl -inform DER -text -noout | grep -P '^\s+Serial Number' | wc -l
- The -inform command specifies the input format normally the command will expect an X509 certificate but this can change if other options such as -req are present.
Exercise 4:
Companies like Google and Microsoft make heavily use of the X.509 subjectAltName extension.
UCLL also uses this extension to add an alternative name *.ucll.be to the common name (ucll.be) of the certificate.
Create a oneliner which calculates the amount of DNS Subject Alternate Names used in the SSL certificate of gmail.com."
'user@:~$' • echo | openssl s_client -connect facebook.com:443 2>/dev/null | openssl x509 -text -noout | grep -o 'DNS:' | wc -l
Exercise 5:
Create a CLI oneliner to find a match between different rsa private key files and their companion crt files. The output should look something like:
alfa.key matches beta.crt
gamma.key matches delta.crt
First we need to generate some certificates so we can actually verify our solution. The following command creates a self-signed certificate in one step:
'user@:~$' • openssl req -x509 -sha256 -newkey rsa:2048 -keyout tombola_uclllabs_be.key -out tombola_uclllabs_be.crt -days 365 -nodes -subj "/C=BE/ST=/L=/O=UC Leuven/CN=tombola.uclllabs.be"
- The -subj command outputs the "hash" of the certificate subject name.
With the following for loop we can easily generate a few certificates to test with:
'user@:~$' • for foo in TomBola GreetSchap VanderNeffe LukRaak AlainProvist; do openssl req -x509 -sha256 -newkey rsa:2048 -keyout "$foo"_uclllabs_be.key -out "$foo"_uclllabs_be.crt -days 1024 -nodes -subj
As explained in this lab, the modulus of corresponding files (CSR, private KEY and Certificate) should be the same. We'll create a oneliner which tests wich files belong to one another. I.e. which files have the same modulus.
'user@:~$' • for key in $(ls -1 *.key); do for crt in $(ls -1 *.crt); do if [[ $(openssl rsa -in $key -noout -modulus | md5sum) == $(openssl x509 -in $crt -noout -modulus | md5sum) ]]; then echo $key matches $crt;fi ;done;done
Or a slightly shorter version:
'user@:~$' • for key in $(ls *.key); do for cert in $(ls *.pem); do [[ $(openssl rsa -in $key -noout -modulus | md5sum) == $(openssl x509 -in $cert -noout -modulus | md5sum) ]] && echo $key matches to $cert;done;done
Exercise 6:
Create a CLI oneliner using openssl to retrieve the certificate of the server wiki.uclllabs.be and to encrypt the text
https://wiki.uclllabs.be and extract the public key from the presented certificate:"
'Lets make CNW2 great again'" with it’s public key. In the first step, we willll connect to'user@:~$' • echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -noout -pubkey > public.pem
Now the public key is saved in a tempfile we can use it to encrypt arbitrary data.
'user@:~$' • echo "Let's make CNW2 great again" | openssl rsautl -encrypt -pubin -inkey public.pem -out CNW2.encrypted
- The rsautl command can be used to sign, verify, encrypt and decrypt data using the RSA algorithm.
- The -encrypt command encrypts the input data using an RSA public key.
- The -pubin command is used to input file is an RSA public key.
- The -out command specifies the output filename to write to or standard output by default.
Or without first downloading the public key:
'user@:~$' • echo "Let's make CNW2 great again" | openssl rsautl -encrypt -pubin -inkey <(echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -noout -pubkey) -out CNW2.encrypted
Exercise 7:
Experiment with the tools sslyze and nmap to enumerate supported ssl cipher suites for various websites. Make sure you understand its output. See the folloing example:
- sslyze --regular --http_headers wiki.uclllabs.be - nmap --script ssl-enum-ciphers -p 443 wiki.uclllabs.be
Exercise 8:
Let’s Encrypt has rate limits which prevent issuing more than 20 new certificates per domain per week. They use the public suffix list for this.
The limit is per registered domain, not per subdomain. So all student certificates count for the same uclllabs.be suffix.
"root #" • certbot --apache -d "tom.x.cnw2.uclllabs.be, bola.x.cnw2.uclllabs.be, tom.bola.x.cnw2.uclllabs.be"
- The certbot command is used to obtain and install HTTPS/TLS/SSL certificates
- The --apache command is used to use the Apache plugin for authentication & installation
- The -d command is used for domain names to apply
Exercise 9:
Create a CLI oneliner using OpenSSL to retrieve the certificate of the server wiki.uclllabs.be and to display only its fingerprint, serial and public key. Sample output:"
'user@:~$' • echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -noout -fingerprint -serial -pubkey
2019 oplossingen labo tussentest - Lars Lemmens
Met dank aan de Github van Martijn en natuurlijk Lars Lemmens
LABO TEST
Exercise 1:
Copy the content of your it-enabled grandmothers id_rsa.pub file in your ~/.ssh/authorized_keys file"
'user@:~$' • ssh user@leia.uclllabs.be -p 22345 -i "/path/to/your grandmothers identity_file"
- The ssh command is a remote login program
- The -p argument is used for a port to connect to on the remote host.
- The -i argument selects a file from which the identity (private key) for public key authentication is read.
'user@:~$' • ssh user@leia.uclllabs.be -p 22345
- The ssh command is a remote login program
- The -p argument is used for a port to connect to on the remote host.
Exercise 2:
Try to find out which TCP ports are open on leia without using tools like netstat or ss. Execute on leia for increased speed.
'user@:~$' • nc -zv -w 1 leia.uclllabs.be 1-65535 2>&1 | grep succeeded | awk '{print $4}' 'user@:~$' • for foo in {1..65535}; do nc -N -w1 leia.uclllabs.be $foo </dev/ null >/dev/null && echo $foo;done 'user@:~$' • nmap -p 1-65535 leia.uclllabs.be | grep -P '\d+/tcp.*open' |cut -d'/' -f1 'user@:~$' • nmap --reason -p 1-65535 leia.uclllabs.be | grep -oP '\d+(?=/tcp.*open)'
- The nc command is a TCP/IP swiss army knife
- The -z argument is used for scanning
- The -v argument is used for verbose
- The -w (# in seconds) arguments is timeout for connects and final net reads
- The grep command prints lines matching a pattern
- The awk command is used for pattern scanning and processing language
- \d matches a digit (equivalent to [0-9])
- '+' matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
- . matches any character (except for line terminators)
- '*' matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy) open matches the characters open literally (case sensitive)
- The cut command removes sections from each line of files
- The -d argument use DELIM instead of TAB for field delimiter
- The command nmap is a network exploration tool and security / port scanner
- The --reason argument shows the reason each port is set to a specific state and the reason each host is up or down
- The -p argument specifies which ports you want to scan and overrides the default.
- The -o argument print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
- The -o argument prints only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
- The -p argument Interpret I as Perl-compatible regular expressions (PCREs).
Exercise 3:
Create a oneliner which lists all palindromes with exactly 6 letters in a dictionary.
'user@:~$' • cat dutch | grep -P '^(.)(.)(.)\3\2\1$'
- ^ asserts position at start of a line
- . matches any character (except for line terminators)
- in ^(.)(.)(.) ==> the first (.) is the first capturing group, the second (.) is the second capturing group, the third (.) is the third capturing group,
- \3 matches the same text as most recently matched by the 3rd capturing group, \2 matches the same text as most recently matched by the 2nd capturing group and \1 matches the same text as most recently matched by the 1st capturing group
Exercise 4:
As a web server administrator you have been asked to give your manager a Linux CLI oneliner to extract the 5 IP addresses that contacted the web server the most
The apache log is located in /home/logs. Create a correct oneliner. The output should look something like this: (count IPs)
'user@:~$' • cat apache_google.log | cut -d ' ' -f1 | sort | uniq -c | sort -rn | head -5
- The cut command removes sections from each line of files
- The -d argument uses DELIM instead of TAB for field delimiter
- The -f argument selects only these fields
- The sort command sorts lines of text files
- The uniq command reports or omits repeated lines
- The -c argument prefixes lines by the number of occurrences
- The -r reverses the result of comparisons
- The head command shows output the first part of files
Exercise 5:
What Linux ssh command do you use to bind your local port 3000 to a web server on port 4444 on the network of the ssh server
'user@:~$' • ssh -p 22345 username@leia.uclllabs.be -L 3000:IP_web_server:4444
- The -p argument shows which port to connect to on the remote host
- The -L argument specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.
Exercise 6:
Create an apache vhost (netcat.X.cnw2.uclllabs.be) which displays a single web page (index.html). How can you update/alter this website (index.html) via a Netcat connection from your laptop."
'root@myserver' 1) mkdir /var/www/html/netcat 'root@myserver' 2) nano netcat.conf
<VirtualHost *:80>
ServerAdmin root@netcat.X.cnw2.uclllabs.be
ServerName netcat.X.cnw2.uclllabs.be
DocumentRoot /var/www/html/netcat
LogLevel info
ErrorLog ${APACHE_LOG_DIR}/netcat-error.log
CustomLog ${APACHE_LOG_DIR}/netcat-access.log combined
</VirtualHost>
'# root@myserver' 1) a2ensite netcat '# root@myserver' 2) systemctl reload apache2 '# root@myserver' 3) nc -l -p 10000 >> /var/www/html/netcat/index.html 'user@laptop:~$' 4) echo test | nc netcat.X.cnw2.uclllabs.be 10000
Exercise 7:
On server Leia, use the list of logged in users to print only the username that has been logged in to the server for the longest time
'user@:~$' • who | awk '{print $3$4 " " $1}' | sort -n | awk '{print $2}' | head -1
- The command who shows who is logged in
- The command sort sorts lines of text files
- The -n argument compares acoording to string numerical value
- The head command outputs the first part of files
Exercise 8:
Some subdirectory of /tmp contains a bunch of movies. However, their extension is wrong.
The extension should be .avi instead of .jpg. Copy these files to your homedirectory and correct their extensions in one line. "
'user@:~$' • ls -1 *.jpg | while read foo; do echo cp $foo ~/$(basename $foo .jpg).avi;done 'user@:~$' • ls -1 *.jpg | while read foo; do echo cp $foo ~/${foo%.jpg}.avi;done
- The -1 argument lists one file per line
- cp $foo ~/$(basename $foo .jpg).avi ==> Echo the STRING(s) to standard output.
Exercise 9:
Create a Linux CLI oneliner to decode the following string 'SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSBmb3VuZCB0aGUgY29ycmVjdCBhbnN3ZXIK'
'user@:~$' • echo 'SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSBmb3VuZCB0aGUgY29ycmVjdCBhbnN3ZXIK' | openssl enc -a -d 'user@:~$' • echo 'SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSBmb3VuZCB0aGUgY29ycmVjdCBhbnN3ZXIK' | base64 -d
- The -a argument ==> Base64 process the data
- The -d argument ==> decrypts the input data
- The -base64 argument = The -a argument
Exercise 10:
Create a regular expression to match all words in a dictionary with 5 unique letters. "
'user@:~$' • cat /usr/share/dict/dutch | grep -P '^[a-zA-Z]{5}$'| grep -vP '(.).*\1'
- ^ asserts position at start of a line
- A-Z matches a single character in the range between A and Z (case sensitive)
- a-z matches a single character in the range between a and z (case sensitive)
- {5} matches the previous token exactly 5 times
- . matches any character (except for line terminators
- '*' matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)
- -v stands for inverted match.
- -P stands for perl expression
Exercise 11:
Create a oneliner to show ‘Time = 15:44:25 (11/10/1901)' or 'Time = 15:44:25 (11-10-1901)’ each time with the current time and date.
'user@:~$' • echo "Time = $(date '+%X (%x)')" 'user@:~$' • date '+Time = %X (%x)' 'user@:~$' • date '+Time = %X (%Y/%d/%m)'
- date matches the characters date literally (case sensitive)
- '+' matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
- The %X argument sets locale's time representation
- the %x argument sets locale's date representation
- The %Y arguments = year
- The %d arguments = day
- The %m arguments = month
Exercise 12:
Create a oneliner which lists the top 3 most used passwords in the ftp brute force attack captured in "ftp_bruteforce.pcap". Use a suitable sniffer filter which only displays whats really needed.
'user@:~$' • tshark -r ftp_bruteforce.pcap -Y 'ftp.request.command==PASS' -T fields -e 'ftp.request.arg' 2>/dev/null| sort | uniq -c | sort -rn | head -3
- The tshark command dumps and analyzes network traffic
- The -r argument reads the packet date from infile
- The -Y command captures the link type
- The -T argument sets the format of the output when viewing decoded packet data.
- The -e argument (in tshark command) adds a field to the list of fields to display if -T fields is selected
- The sort command sorts lines of text files
- The uniq command reports or omits repeated lines
- The -c command prefixes lines by the number of occurrences
- The -r argument (in sort command) reverses the results of comparisons
- The -n compare according to string numerical value
- The head command shows output for only the first part of files
2019 oplossingen Testexamen - Lars Lemmens
Met dank aan de Github van Martijn en natuurlijk Lars Lemmens
Exercise 1
Create a CLI oneliner to match all words with 14, 15 or 16 unique letters. The output shouldlook like:
Words with 14 letters: EHBO-diploma's bruiloftsdagen katrolschijven verontschuldig ...
Words with 15 letters: dampkringslucht sandwichformule ...
Words with 16 letters: ...
'user@:~$' • for foo in 14 15 16; do echo "Words with $foo letters:" $(grep -vP '(.).*\1' /usr/ share/dict/dutch | grep -P "^.{$foo}$");done
- for name [ [ in [ word ... ] ] ; ] do list ; done The list of words following in is expanded, generating a list of items. The variable name is set to each element of this list in turn, and list is executed each time. If the in word is omitted, the for command executes list once for each positional parameter that is set (see PARAMETERS below). The return status is the exit status of the last command that executes. If the expansion of the items following in results in an empty list, no commands are executed, and the return status is 0.
- echo displays a line of text
Exercise 2
Create a linux CLI oneliner to extract an overview of the different FTP usernames in the file ftp_bruteforce.pcap. Only the commands tshark and sort are allowed.
'user@:~$' • tshark -r ftp_bruteforce.pcap -Y 'ftp.request.command == USER' -T fields -e ftp.request.arg |sort -u
- The -r command opens the recording
- The -Y command is used for displaying the filter
- The -T fields -e is used to specify the fields you want to show
- The sort command is used to sort lines of text files
- The -u command is used to show the output of only the first of an equal run
Exercise 3
Create a oneliner to show ‘Time = 15:44:25 (11/10/1901)' or 'Time = 15:44:25 (11-10-1901)’ each time with the current time and date.
'user@:~$' • date '+Time = %X (%x)'
- The date command prints or sets the system date and time
- The +Time is used to set time
- The %X command is used to set the systems time
- The %x command is used to set the date -> with () is used to put () around the date
Exercise 4
Create a linux CLI oneliner to decode the following string ‘RGUgcHVudGVuIG9wIGRlemUgdnJhYWcgemlqbiBhbCBiaW5uZW4uCg==’. (/home/logs/secret)
'user@:~$' • cat /home/logs/secret | openssl enc -a -d
- The cat command is used to concatenate files and print on the standard output
- The enc command is used to encrypt or decrypt a file
- The -a command is used if encryption is taking place the data is base64 encoded after encryption. If decryption is set then the input data is base64 decoded before being decrypted
- The -d command is used to decrypt
Exercise 5
Create a CLI oneliner using openssl to retrieve the certificate of the server wiki.uclllabs.beand to display only it’s fingerprint, serial and public key.Sample output:
SHA1 Fingerprint=8C:CB:D9:A1:F3:3C:78:C2:2E:F6:EB:1C:CD:4B:F3:39:1B:9A:EE:4Eserial=0966DB4115B74092EE07D6DA585547D8-----BEGIN PUBLIC KEY-----MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2NHdNb3iWbb7mx9UFYzbv05YvUe+uBD8IunSnpj4SSol+5RG5EKZhFAcXwH9FCUxXE7ZZP3FDLNG0qG8cLSHjg==-----END PUBLIC KEY-----
'user@:~$' • echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -noout -fingerprint -serial -pubkey
- The s_client command implements a generic SSL/TLS server which accepts connections from remote clients speaking SSL/TLS
- The x509 command outputs a self signed certificate instead of a certificate request.
- The -noout command is used to prevent output of the encoded version of the request
- The -fingerprint command is used to show the fingerprint
- The -serial command outputs the certificate serial number.
- The -pubkey command outputs the the certificate's SubjectPublicKeyInfo block in PEM format.
2019 samenvatting - Lars Lemmens
Met dank aan de Github van Martijn en Lars Lemmens
Hoofdstuk 2
2.1 Principes van netwerkapplicaties
2.1.1 Structuren van netwerkapplicaties
Client-server structuur
- Host altijd-aan (server) & handelt verzoeken van andere hosts (clients) af
- Meestal datacenters → anders overbelasting
P2P-structuur
- Infrastructuurservers die altijd aan zijn → minimaal of afwezig
- Maakt gebruik van rechtstreekse communicatie → periodiek met elkaar verbonden hosts → peers
- Zelfschaalbaarheid & goedkoper
2.1.2 Communicerende processen
- Processen in 2 verschillende hosts → communiceren met elkaar door berichten uit te wisselen → verzendend proces creëert & verzendt berichten over netwerk → ontvangend proces ontvangt berichten en verzendt eventueel antwoordbericht
Client – en serverprocessen
- Voor elk paar comunnicerende processen → 1 van de 2 processen client & andere server
- Definitie client- en serverprocessen:
- In context van een communicatiesessie tussen 2 processen noemen we het proces dat de communicatie initieert de client. Het wachtende proces noemen we de server
- In P2P kan een proces ophalen en beschikbaar stellen
Interface tussen proces en computernetwerk
-
Proces verzendt berichten naar en ontvangt berichten van het netwerk via een netwerkinterface →socket AKA API ( Application Programming Interface)
-
Socket = soort deur → proces bericht naar ander proces sturen → bericht door deur (socket) naar buiten → verzendende proces neemt aan → andere kant deur → infrastructuur aanwezig is waarmee bericht → bij deur van huis van bestemming zal bezorgd worden → zodra bericht arriveert bij ontvangende host → passeert het de toegangsdeur van ontvangende proces → waarna ontvangende proces bericht verwerkt
Adresseren van processen
- Om ontvangende proces te kennen moet het 2 gegevens bevatten:
- Het adres van de host
- Unieke aanduiding van ontvangende proces in ontvangende host
2.1.3 Transportdiensten voor applicaties
| Data Integriteit:
-
Transportlaagprotocol → mogelijk een betrouwbare gegevensoverdracht tussen processen aan applicatie leveren → verzendend proces gegevens in socket duwen & is zeker van geen fouten
-
Als er geen betrouwbare gegevensoverdracht is → mogelijkheid dat deel gegevens niet aankomen bij ontvangend proces →**verliestolerante apps (**Skype,...) | Doorvoer
-
Sommige apps (bijv. multimedia) vereisen een minimale verwerkingscapaciteit om "effectief" te zijn = bandbreedtegevoelige apps → stellen eisen aan doorvoercapaciteit
-
Elastische apps gebruiken de doorvoercapaciteit die op het moment beschikbaar is
Timing:
- Sommige apps (bijv. internettelefonie, interactieve games) hebben een korte vertraging nodig om 'effectief' te zijn Security
- Encryptie, data integriteit,...
Diensten van TCP & UDP
Beveiligen van TCP
TCP gebruikt SSL/TLS → TCP met SSL/TLS → doet niet alleen wat oorspronkelijke TCP doet → levert ook beveiliginsdiensten voor communicerende processen → SSL niet een 3e transportprotocol voor internet is dat op zelfde niveau werkt als UDP & TCP → uitbreiding van TCP → uitbreidingen geimplementeerd in applicatielaag
Diensten die niet geleverd worden door internettransportprotocollen
- Huidig internet presteert goed voor tijdgevoelige apps → geen garanties voor timing of doorvoercapaciteit
- Internettelefonieapps kan enig verlies verwerken maar wel minimale snelheid eisen om te kunnen werken → Internettelefonieapps meestal UDP → grotendeel van firewalls blokkeren UDP → ontworpen voor TCP → als back-up communicatie via UDP niet lukt
2.1.5 Protocollen voor applicatielaag
In applicatielaag volgende aspecten gedefinieerd:
- Soorten berichten die uitgewisseld worden, request & antwoordberichten
- Syntaxis van verschillende soorten berichten, velden in bericht & manier waarop velden van elkaar gescheiden worden
- Semantiek van velden → betekenis informatie in velden
- Regels voor bepalen wanneer en hoe proces berichten verzendt & beantwoordt
2.1.6 Netwerkapplicaties die in dit boek beschreven worden
2.2 Web & HTTP
2.2.1 Meer over HTTP
-
Webpagina bestaat uit aantal objecten → object is een bestand
-
HTTP definieert hoe webclient een webserver verzoekt om een webpagina op te zoeken & hoe servers webpagina's versturen naar een client
-
HTTP → TCP als transportprotocol
-
HTTP-client initieert TCP-verbinding met server → verbinding tot stand → processen van browser & server TCP via socketinterfaces → client verzendt HTTP-verzoekberichten door socket → server ontvangt op zelfde manier HTTP-verzoekberichten via socket & verzendt HTTP-antwoordberichten door socket
-
HTTP is staatloos → Server houdt geen informatie bij over eerdere clientaanvragen
2.2.2 Non-persistente en persistente verbindingen
Non persistent
Basis HTML-file met volgende url: http://www.someschool.edu/someDepartment/home.index
- HTTP-client starts TCP-verbinding met server → client & server gebruiken socket
- HTTP-client verzendt HTTP-verzoekbericht naar HTTP
- HTTP-serverproces ontvangt verzoekbericht
- HTTP-serverproces TCP opdracht → verbreek verbinding als bericht ontvangen
- HTTP-client ontvangt antwoordbericht
- Herhaal stap 1-4 voor elk object
RTT → tijd die packet nodig heeft → client naar server & omgekeerd
Klikt op een hyperlink → 3-way handshakeproces nodig:
-
Client verzendt TCP-segment naar server
-
Server bevestigt & antwoord met TCP-segment
-
Client verzendt 2e bevestiging naar server
→ 1 RTT
- Na 1&2 → verzendt client HTTP-verzoekbericht + 3e deel van 3way-handshake
- Totale responstijd = 2 RTT's + transmissietijd HTML-bestand server
Persistent
- Bij non persistent → elk opgevraagd object een nieuwe verbinding tot stand gebracht & gehouden worden
- Bij non persistent → elk object 2 RTT's vertraging → 1 voor TCP-verbinding starten & 1 om TCP-verbinding object op te vragen & ontvangen
- HTTP 1.1 persistent → server laat TCP-verbinding intact na respons
2.2.3 Indeling HTTP-berichten
HTTP-verzoekbericht
- Eerste regel → requestregels
- Volgende regels → headerregels
- Host → host waar opgeslagen object is
- Connection: close → geen persistente verbinding nodig
- User Agent: → type browser
- POST → stuurt velden dat gebruiker heeft ingevuld door
- GET → 2 velden ( x & y ) → structuur URL →www.eensite.nl/zoekIets?x&y
- HEAD → server reageert HTTP-bericht zonder opgevraagde object te verzenden
HTTP-antwoordbericht
- Statusregel, 6 headerregels & entity body
- Connection: close → client weet TCP-verbinding weg na bericht verstuurd
- Server: → geeft aan gegenereerd door Apache-webserver
- Last-Modified: cachen objecten → lokaal & server
- Content-length: → grootte object
2.2.4 Interactie gebruikers & servers: cookies
2.2.5 Webcaching
Netwerkentiteit die HTTP-verzoeken afhandelt names oorspronkelijke webserver waar verzoek oorspronkelijk naartoe is gestuurd
Browser object http://www.someschool.edu/campus.gif
- Browser start TCP-verbinding met webcache & verzendt HTTP-verzoek voor object naar webcache
- Webcache checks → exemplaar opgevraagde object aanwezig? → if yes → webcache verzendt object in HTTP-antwoordbericht naar browser client
- Opgevraagde object niet op webcache → TCP-verbinding met oorspronkelijke server → webcache verzendt HTTP-verzoek voor object via TCP-verbinding → wanneer server ontvangen → verzendt object in HTTP-antwoordbericht naar webcache
- Opslaan kopie lokaal & stuurt een exemplaar naar browser
2 redenen webcaching
- Responstijd clientverzoek verkorten
- Webcaches belasting van link van instituut verlagen
CDN (Content Distribution Networks) → veel geografische verspreide cachegeheugens in internet → groot deel dataverkeer lokaal
2.2.6 The conditional GET
- Verzoekbericht methode GET
- Verzoekbericht bevat If-Modified-Since
- Client maakt get request
- Server reageert met header
- Client checkt de Last-Modified header
- ls Last nieuwer is dan cache → haal pagina opnieuw op & zet opnieuw in cache
- anders → laad van cache
GET /index.html HTTP/1.1\r\n
Host: www-net.cs.umass.edu\r\n
User-Agent: Firefox/3.6.10\r\n
Accept: text/html,application/xhtml+xml\r\n
Accept-Language: en-us,en;q=0.5\r\n
Accept-Encoding: gzip,deflate\r\n
Accept-Charset: ISO-8859-1,utf-8;q=0.7\r\n
Keep-Alive: 115\r\n
Connection: keep-alive\r\n
\r\n
HTTP/2
Goal: vertraging verlagen in multi-object HTTP requests HTTP1.1** :** meerdere, pipelined GETs over 1 TCP connectie
- Server antwoord in-order ( FCFS : first-come-first-served scheduling ) naar GET requests
- Met FCFS, mogelijkheid dat kleine objects moeten wachten voor transmissie (Head-of-line (HOL) blocking) achter grote objects
- Herstel van loss (retransmissie van verloren TCP segmenten) stalls object transmissie
HTTP/2** :** flexibiliteit verhogen server in versturen van objects naar client Goal: vertraging verlagen in multi-object HTTP requests
- Methoden, status codes, meeste header velden onveranderd tov HTTP 1.1
- verzendvolgorde van aangevraagde objecten op basis van door de klant opgegeven objectprioriteit (Niet noodzakelijk FCFS)
- Push unrequested objects naar cleint
- Verdeel objects in frames, plan frames om HOL-blokkering te verminderen
HTTP/2 to HTTP/3
Goal: vertraging verlagen in multi-object HTTP requests
HTTP/2 over single TCP connectie wil zeggen:
-
Herstel packet loss vertraagt nog steeds alle objecttransmissies
-
In HTTP 1.1 browsers → stimulans om meerdere TCP-verbindingen te openen → vertraging verminderen → algehele doorvoer te verhogen
-
Geen security over vanilla TCP-verbinding
-
HTTP/3 → adds security → per object fout- & congestie-controle ( meer pipelining) over UDP
2.3 E-mail op het internet
2.3.1 SMTP
Werking:
- Alice → UA opdracht verstuur bericht
- Alice's UA stuurt bericht mailserver→ in berichtenwachtrij
- Clientzijde van SMTP opent TCP-verbinding met Bob's e-mailserver
- SMTP-client verzendt het bericht van Alice via de TCP-verbinding
- Bob's mailserver plaatst het bericht in Bob's mailbox
- Bob roept zijn user agent aan om bericht te lezen
2.3.2 Vergelijking met HTTP
SMTP
- Transfers files van 1 mail server naar een andere mail server
- PUSH protocol: verzendende e-mailserver duwt bestand naar e-mailserver van ontvanger
- Elk bericht moet in 7-bit ASCII zijn
- Plaatst alle bericht objecten in 1 bericht
HTTP
- Transfers files van web server naar web client
- PULL protocol: Iemand zet informatie op een webserver & gebruiker gebruikt HTTP om informatie van server ophalen wanneer het hem uitkomt
- Restrictie niet nodig
- Encapsuleert elk object in zijn eigen HTTP response message
2.3.3 Formats e-mailberichten
2.3.4 Mail accessprotocollen
SMTP: levering/opslag van e-mailberichten op de server van de ontvanger
Mail Access Protocol: Ophalen server
IMAP: Internet Mail Access Protocol [RFC 3501]: berichten opgeslagen op de server, IMAP biedt ophalen, verwijderen, mappen met opgeslagen berichten op de server
HTTP: Gmail, Hotmail, Yahoo! Mail, etc. biedt webgebaseerde interface bovenop STMP (om te verzenden), IMAP (of POP) om e-mailberichten op te halen
POP3
UA → TCP-verbinding naar mailserver
- Autorisatiefase: UA → verstuurt username & password → identitetit gebruiker vaststellen
- Transactiefase: UA haalt berichten op
- Updatefase: client opdracht quit → POP3-sessie closed
IMAP
- Koppelt elk bericht aan een map
- Biedt opdrachten → UA afzonderlijke componenten van bericht
Webmail
Ontvanger wil mailbox bekijken → bericht van mailserver naar browser van gebruiker verzonden → behulp van HTTP-protocol
2.4 DNS
2.4.1 Diensten van DNS
- Een gedistribueerde database → geïmplementeerd in hiërarchie van DNS-servers
- Applicatielaagprotocol waarmee hosts & DNS-servers kunnen communiceren om vertaalslag ( omzetten IP → "te onthouden" adres & omgekeerd)
DNS verzorgt aantal andere diensten naast vertalen hostnamen in IP-adressen:
- Host-aliasing: 1 of meerdere aliassen wanneer hostname te lastig is → canonieke hostnaam → aliashostnamen gebruikt → gemakkelijker te onthouden dan canonieke hostnamen
- Mailserver-aliasing: Hostnaam van een mailserver (bv. Yahoo) → moeilijker dan → eenvoudige Yahoo.com → DNS kan door mailapplicatie gebruikt worden → achterhalen canonieke hostnaam v/e bepaalde host + IP-adres van host → MX record maakt mogelijk dat mailserver & webserver van bedrijf dezelfde hostnamen hebben → mailserver & webserver van bedrijf kunnen dus bv. enterprise.com heten.
(Een MX-record (Mail eXchange-record) is een gegevenstype in het Domain Name System (DNS). Het specificeert de mail server die e-mailverkeer voor het betreffende domein afhandelt. Een domein kan meerdere MX-records hebben met een verschillende prioriteit waardoor het mogelijk is om bijvoorbeeld een back-up mailserver aan te geven als de computer met de hogere prioriteit niet bereikbaar blijkt. De naam die in het MX-record wordt gevonden kan via DNS op zijn beurt in een ip-adres worden vertaald. Src: Wikipedia)
- Loadbalancing: Belasting van gerepliceerde servers te verminderen → gerepliceerde webservers een serie IP-adressen gekoppeld aan canonieke hostname → DNS-database bevat serie IP-adressen
2.4.2 Overzicht van de werking van het DNS
Gecentraliseerd ontwerp levert volgende problemen op:
- Single point of failure: als DNS crashed hele internetonbruikbaar
- Netwerkbelasting : 1 DNS-server → alle DNS-verzoekberichten verwerken ( alle HTTP-verzoekberichten & e-mails van honderden miljoenen hosts)
- Afstand tot gecentraliseerde database : 1 enkele DNS-server kan niet 'in de buurt' van alle verzoekende clients staan → centrale DNS bijvoorbeeld in Antwerpen → verzoeken uit Nieuw-Zeeland → kan vertraging veroorzaken
- Onderhoud : die DNS-server informatie over alle internethosts moeten beheren → database wordt dan heel groot & telkens bijgewerkt moeten worden wanneer nieuwe host wordt aangemeld.
Een gedistribueerde, hiërarchische database
- Root-DNS-servers: meer dan 400 root-nameservers verspreid over de wereld → door 13 verschillende organisaties gemanaged → leveren IP adressen van TLD-servers
- Topleveldomein (TLD) -servers: voor elk TLD (com,org,net,edu,...) & landTLD(nl,fr,ca,...) → is er een TLD → TLD leveren IP-adressen voor authoritative DNS-servers
- Authoritative DNS-servers: eigen DNS-server(s) van de organisatie, die gezaghebbende hostnaam biedt aan IP-toewijzingen voor de benoemde hosts van de organisatie + kan Dutch translation. kakjkworden onderhouden door organisatie of dienstverlener
- Lokale DNS-server behoort niet tot hiërarchie maar wel belangrijk voor DNS-structuur → elke ISP zoals een standaard ISP of ISP van instituut → lokale DNS-server → wanneer host verbinding tot stand wil brengen met ISP → ISP geeft aan die host IP-adressen van 1 of meer van diens lokale DNS-server → lokale DNS-server niet ver weg van host → bij residentiële ISP DNS-server → gescheiden enkele routers van host van client → host verzoekbericht aan DNS verzendt → doorgestuurd lokale DNS-server → fungeert als proxy → verzoek verder gestuurd in DNS-serverhiërarchie
- Recursief DNS-verzoek = host stuurt verzoek aan lokale DNS-server, die op zijn beurt een verzoek doet aan de root-server, die op zijn beurt een verzoek doet aan de TLD-server … (zie p127)
- Iteratief DNS-verzoek = host stuurt verzoek aan lokale DNS-server, die op zijn beurt een verzoek doot aan de root-server, de root-server stuurt antwoord naar lokal DNS-server die op haar beurt een verzoek doet aan de TLD-server… (zie p126)
DNS-caching
DNS-server → in verzoekberichtenketen → wanneer DNS-antwoord ontvangt → verwijzing in lokale cachegeheugen plaatsen
2.4.3 DNS-records en -berichten
DNS-servers bevatten bronrecords → (Naam, Waarde, Type, TTL)
- If Type = A then naam bevat hostnaam en Waarde bevat IP-adres van hostnaam
- If Type = NS then naam bevat domeinnaam en Waarde bevat hostnaam van authoritative DNS-server die de hostnaam en IP combinaties voor de hosts in dat domein weet
- If Type = CNAME then waarde is canonieke hostname voor aliashostname
- IF Type = MX then waarde is canonieke naam van mailserver met alias hostname name
DNS-berichten
- Eerste 12 bytes voor de header:
- Eerste veld is een uniek 16 bit getal waarmee het verzoek geïdentificeerd kan worden. Dat getal word gekopieerd in het antwoordbericht, zodat de client het antwoord en het verzoek kan kopellen
- Vlaggen veld bevat een aantal vlaggen. Een 1-bit verzoek/antwoord-vlag (verzoek = 1 en antwoord = 0), 1-bit authoritative-vlag wordt in een antwoordbericht gezet als de DNS-server de authoritative DNS-server voor de hostnaam is, 1-bit recursienoodzaak-vlag wordt gebruikt als de client vraagt om recursief te werken als het gevraagde record niet op die DNS-server staat en een 1-bit recursiemogelijkheids-vlag die in het antwoordbericht staat na een verzoekbericht met een recursienoodzaak-vlag
- Vraagveld bevat informatie over het verzonden verzoek:
- Bevat een naamveld met de naam waarvoor het IP-adres wordt gezocht
- Bevat een typeveld met het type verzoek (Type A, Type NS…)
- In een antwoordbericht staat in het antwoordveld de bronrecords van het oorspronkelijke DNS-verzoek
- Het autorisatieveld bevat gegevens van andere authoritative DNS-servers
- Het aanvullingsveld bevat aanvullende bronrecords (Het antwoordveld in een antwoord op een MX-verzoek bevat een bronrecord met de canonieke hostnaam van de mailserver en het aanvullingsveld bevat het een Type A record met het IP-adres van de canonieke hostnaam van de mailserver
DNS-Security
DDOS-attack:
- root servers belasten met verkeer
- Tot op heden niet succesvol
- Verkeersfiltering
- Lokale DNS-servers cache-IP's van TLD-servers waardoor rootserver bypassed
TLD servers bombarderen:
- Kan gevaarlijker zijn maar moeilijker → TLD servers niet zo gemakkelijk bypassed
Aanvallen omleiden
- Man in the middle → DNS queries intercepten
- DNS poisoning → valse afhankelijkheden verzenden naar dns-server, die cachen
DNS voor DdoS exploiteren
- Queries versturen met vervalste bronadres → target IP
- Vereist versterking
Laatste 2 vormen DNSSEC
2.5 Peer-to-peer bestandsdistributie
P2P file distributie: BitTorrent
Peer neemt deel aan torrent → meldt bij tracker → peer informeert tracker met regelmaat of nog aanwezig in torrent → nieuwe peer → tracker random # peers → verzendt IP-adressen van # peers → naar nieuwe peer → proberen TCP-verbinding met peers op lijst → bepaald tijdstip → elke peer → # chunks bestand → verschillende peers → verschillende verzamelingen chunks hebben → na een bepaalde tijd → gebruiker vraagt elke peer om lijst met chunks die ze hebben → gebruiker vraagt de "missing chunks" van de peerst → zeldzaamste eerst of Rarest first
Tit-for-tat principe:
Gebruiker stuurt chunks naar die vier peers die momenteel haar chunks in het hoogste tempo verzenden → andere peers gestikt door gebruiker (ontvangen geen chunks van gebruiker) → herbeoordeeld top 4 elke 10 seconden
Elke 30 seconden → selecteert willekeurig een andere peers, begint met verzenden van chunks → optimistisch unchocked deze peer → nieuwe gekozen peer kan lid worden van top 4
2.6 Videostreaming en content distribution networks
Internetvideo
-
Video → sequentie van afbeeldingen → afgebeeld constante snelheid Bijvoorbeeld: 24 afbeeldingen / seconde
-
Digital image → array van pixels Elke pixel gerepresenteerd door bits
-
Coding: Gebruikt redundantie binnen en tussen afbeeldingen om # bits te verminderen die worden gebruikt om abeeldingen te gebruiken Spatial → binnen afbeelding Temporal → van 1 afbeelding naar volgende
-
CBR → constant bit rate → video encoding rate is fixed
-
VBR → variable bit rate → wijzigingen in videocoderingssnelheid als hoeveelheid spatial, temporal codering wijzigt
2.6.1.1 Streaming stored video
Simpel Scenario:
Hoofddoelen:
-
Server to client bandbreedte varieert over tijd met veranderende netwerkcongestieniveaus → ( in huis, in acces network, network core, video server)
-
pakketverlies en vertraging als gevolg van congestie zullen de play-out vertragen of resulteren in een slechte videokwaliteit
2.6.1.2 Streaming stored video : challenges
Continuous playout constraint → zodra play-out van client begint → afspelen overeenkomen met oorspronkelijke timing → maar network delays variabel (jitter) → heeft buffer aan clientzijde nodig om aan play-out vereisten te voldoen
Andere challenges
Client interactiviteit → pause, voortspoelen, terugspelen, verder in video gaan → video packets loss mogelijk → opnieuw verzonden
HTTP-streaming en DASH
D ynamic A daptive S treaming over H TTP
- Server
- Deelt video bestand in meerdere chunks
- Elke chunk stored, gecodeerd met verschillende snelheden
- Manifestbestand : biedt URL's voor verschillende chunks
- Client
- Meet periodiek server-naar-client bandbreedte
- Adviesmanifest, vraagt 1 chunk tegelijk
- Kiest voor max coderingssnelheid duurzaam gezien huidige bandbreedte
- Kan verschillende coding rates kiezen op verschillende punten in tijd → afhankelijk vrije bandbreedte
STREAMING VIDEO = CODERING + DASH + PLAYOUT BUFFERING
Content Distribution Networks (CDNs)
Challenge: Hoe content streamen naar 100 tot 1000'en gebruikers tegelijk
-
Optie 1: 1 grote server
- Single point of failuire
- Punt van netwerkcongestie
- Lange weg naar clients die verweg zijn
- meerdere kopieën van video verzonden via uitgaande link
-
Deze oplossing schaalt niet
-
Optie 2: meerdere kopieën van video's opslaan/weergeven op meerdere geografisch gedistribueerde sites →(CDN)
- Enter deep → push CDN servers diep in veel access networks → dichtbij users
- Bijvoorbeeld: Akamai → 240k in meer dan 120 landen
- Bring home: kleinere nummers (10's) of grotere clusters in POP's dichtbij access netwerken
- Enter deep → push CDN servers diep in veel access networks → dichtbij users
-
CDN → slaagt kopieen van content op aan CDN nodes
-
Subscriber vraagt content van CDN → gericht nabijgelegen kopie & haalt inhoud op
-
kan een andere kopie kiezen als het netwerkpad overbelast is
Hoofdstuk 8: Security in computer networks
8.1 Wat is netwerkbeveiliging
- Vertrouwelijkheid : Alleen zender & beoogde ontvanger inhoud van verzonden bericht begrijpen
- Berichtintegriteit : de afzender en ontvanger zeker zijn dat inhoud van communicatie niet wordt gewijzigd
- Authenticatie op eindpunt: zender & ontvanger identiteit andere partij vaststellen zeker te zijn dat ander is wie hij beweert
- Operationele beveiliging: bijna alle organisaties hebben netwerken aangesloten op het openbare internet.Deze netwerken kunnen daarom mogelijk worden aangetast.
8.2 Principes van cryptografie
Verzender ( X ) verstuurt bericht naar ontvanger (Y)
- X gebruikt sleutel K** A**→ invoer versleutelalgoritme
- Versleutelalgoritme gebruikt sleutel → onversleutelde bericht m → versleutelde tekst → K** A****(m)**
- KA onderling afspreken
- Y ook sleutel K** B **** →**invoer onsleutelalgoritme → versleutelde bericht X → plaintext
- Y ontvangen versleutelde bericht KA(m) → ontsleutelen → berekenen van Kb(Ka(m)) = m
- Symmetrische sleutelsystemen → sleutels X & Y identiek en geheim
- Openbare sleutelsystemen → 2 verschillende sleutels → 1 v/d 2 zowel bij X als Y bekend
8.2.1 Cryptografie met symmetrische sleutels
- First → Caeser cipher → elke letter in platte tekst → letter → k-letters in alfabet te vervangen
- Daarna → monoalfabetisch cijfer → lettervervanging maar moet uniek zijn
Bruteforce-benadering→ uitproberen alle 10^26 → teveel werk
- Aanval met alleen versleutelde tekst → indringer beschikt alleen over onderschepte versleutelde tekst → niet over informatie van inhoud → onversleutelde bericht
- Aanval met bekende onversleutelde tekst →Indringer (Z)→ kent enkele combinaties van onversleutelde & versleutelde tekst
- Aanval met specifieke onversleutelde tekst → Z kiest onversleuteld bericht → corresponderende versleutelde tekst krijgen → als Z → X een bepaalde zin kan laten verzenden → versleutelmethode verbroken
Polyalfabetische codering → verschillende monoalfabetische ciphers gebruikt → afwisselend ingezet → bepaalde positie in onversleutelde bericht te versleutelen
Block ciphers (DES = data encryption standard, 3DES, AES= advanced encryption standard)
2 categorieën van symmetrische versleuteltechnieken
- Stream cipher
- Block cipher
Blockciphers
- versleutelen bericht → verwerkt blokken k bits
- IF k = 64 → bericht opgesplitst in 64 blokken → elk blok onafhankelijk versleuteld
- Codering 1 op 1 toewijzing om k-bit blok cleartext toe te wijzen aan k-bit blok Ciphertext
Hoeveel mogelijke verwijzingen?
- k = 3 dan zijn er 23 mogelijke ingangen. Deze ingangen kunnen in 8 worden gepermuteerd! = 40 320.
Zeer moeilijk uit te voeren. Voor k = 64 moeten Alice en Bob een tabel onderhouden met 2^64 invoerwaarden → onmogelijk → blokcoderingen meestal functies die willekeurig gepermuteerde tabellen simuleren.
Cipher-block chaining (CBC)
Blockcipher → twee of meer blokken identiek zijn→aanvaller mogelijk cleartext raden en misschien het hele bericht decoderen. → solution → willekeur in ciphertext
Werkwijze:
- voor bericht versleutelt → genereert Afzender een willekeurige k-bit string,initialisatievector (IV) = c(0) genoemd→ afzender stuurt IV naar ontvanger in leesbare vorm
- Eerste blok berekent de afzender m(1) + c(0) → exclusieve OR van eerste blok onversleutelde tekst & IV. → verzender verwerkt met BC → bijhorende blok als versleutelde tekst c(1)=Ks(m(1)+c(0) → verzender versleutelde blok (c1) naar ontvanger
- Voor het i-blok genereert de afzender c(i) = Ks(m(i) + c(i-1))
8.2.2 Cryptografie met openbare sleutel
- 2 partijen delen gedeeld geheim →Symmetrische sleutel voor encryptie & decryptie
Diffie-Hellman key exchange
- Alice haalt Bob's publieke sleutel
- Alice versleutelt bericht (m) aan Bob → door public key van Bob en bekend encryptie-algoritme K+B(m).
- Bob ontvangt → gecodeerde bericht van Alice → gebruikt private key & bekend decoderingsalgoritme → gecodeerde bericht decoderen
- Bob berekent K-B( K+B(m)).
- Berekenen van Kb-(Kb+(m)) resulteert in m
Note : each party generates a public/private key pair and distributes the public key. After obtaining an authentic copy of each other's public keys, Alice and Bob can compute a shared secret offline. The shared secret can be used, for instance, as the key for a symmetric cipher.
RSA
Maken van publieke en private RSA keys:
- Kies 2 grote priemgetallen p & q → hoe groter de waarden hoe moeilijker RSA-algoritme te kraken
- Bereken n = p * q
- Bereken z = (p – 1) * (q-1)
- Kies nummer e, dat kleiner is dan n & geen factoren (buiten 1 ) gemeenschappelijk heeft met z
- Zoek een getal d, zodanig dat ed – 1 precies deelbaar is door z. Wij kiezen d zodanig dat e*d mod z = 1
- Openbare sleutel (K+B) is het paar van de getallen (n, e)
- The private key(K-B) is the pair of the numbers (n, d)
- Encrypteren → C = me mod n
- Decrypteren → m = cd mod n. Which requires the use of the private key (n, d)
NOTE: Diffie-Hellman niet zo veelzijdig als RSA omdat het niet gebruikt kan worden om berichten met willekeurige lengte te coderen → toegepast om symmetrische sessiesleutel tot stand te brengen → daarna coderen berichten
Berichtintegriteit en digitale handtekeningen
8.3.1 Cryptografische hashfuncties
- Rekentechnisch onmogelijk → 2 verschillende berichten x en y te vinden → waarbij
H(x) = H(Y)
- Onmogelijk voor indringer → bericht vervangen door ander bericht dat beveiligd is met hashfunctie
- Om veiligheidsredenen hebben we een krachtigere hash-functie nodig dan een checksum → het MD5-hash-algoritme. Het berekent een 128-bits hash in een proces in vier stappen dat bestaat uit:
- een opvulstap
- een toevoegstap
- een initialisatie van een accumulator
- een laatste loopingstap waarin de blokken van 16 woorden van het bericht in vier rondes worden verwerkt
- Het tweede belangrijke hash-algoritme is het Secure Hash Algorithm (SHA1). Het produceert een 160-bits berichtcijfer. De langste output maakt SHA1 veiliger.
8.3.2 Berichtauthenticatiecode
berichtintegriteit uit te voeren→Alice en Bob→ naast gebruik van cryptografische hashfuncties, → gedeeld geheim nodig→niets meer dan een reeks bits = verificatiesleutel.→ door gedeelde geheim kan berichtintegriteit als volgt worden uitgevoerd:
- Alice maakt bericht m, samenvoegt s met m om m + s te maken en berekent de hash (m+s). → berichtverificatiecode (MAC = Message Authentication Code )
- Alice voegt vervolgens de MAC toe aan het bericht m, maakt een uitgebreid bericht (m, H(m+s)) en stuurt het naar Bob
- Bob ontvangt het bericht (m, h) en weet s, berekent de MAC H(m+s). Als H(m+s) = h, dan is alles in orde met de boodschap
8.3.3 Digitale handtekeningen
Certificering van openbare sleutels
-
Een certification authority controleert of een entiteit is wie het zegt dat het is.
-
certificeringsinstantie identiteit van entiteit verifieert, maakt certificeringsinstantie een certificaat → openbare sleutel van de entiteit aan de identiteit bindt → certificaat bevat openbare sleutel + wereldwijd unieke identificerende informatie over eigenaar van openbare sleutel. Het certificaat digitaal ondertekend door certification authority.
Authenticatie op het eindpunt
Eindpuntverificatie →proces waarbij de ene entiteit zijn identiteit aan een andere entiteit bewijst via een computernetwerk.
8.4.1 Authenticatieprotocol ap1.0
Trudy (indringer) stuurt bericht naar Bob → zegt "ik ben Alice" → Bob weet niet of het werkelijk Alice is 8.4.2 Authenticatieprotocol ap2.0 Alice bekend netwerkadres waaruit ze altijd communiceert→ Bob proberen Alice te verifiëren → bronadres IP-datagram met verificatiebericht overeenkomt met het bekende adres van Alice.
niet moeilijk om IP-datagram te maken, zet elk IP-bronadres dat we willen in het IP-datagram.
8.4.3 Authenticatieprotocol ap3.0
Het wachtwoord is een gedeeld geheim tussen de authenticator en de persoon die wordt geverifieerd.
- Alice stuurt haar geheime wachtwoord naar Bob.
- De beveiligingsfout hier is dat als Trudy Alice's communicatie afluistert, ze Alice's wachtwoord kan leren.
8.4.4 Authenticatieprotocol ap3.1
Door het wachtwoord te versleutelen→voorkomen Trudy Alice's wachtwoord leert→aannemen dat Alice en Bob een symmetrische geheime sleutel delen, KA – B,dan kan Alice het wachtwoord versleutelen en haar identificatiebericht en het gecodeerde wachtwoord naar Bob sturen. Bob decodeert vervolgens het wachtwoord en verifieert Alice.
De fout: the playback attack : Trudy hoeft alleen maar de communicatie van Alice af te luisteren, de gecodeerde versie van het wachtwoord op te nemen en de gecodeerde versie van het wachtwoord af te spelen naar Bob om te doen alsof ze Alice is.
8.4.5 Authenticatieprotocol ap4.0
Een nonce is een getal dat een protocol maar één keer in een leven zal gebruiken. Dat wil zeggen dat zodra een protocol een nonce gebruikt, het het nummer nooit meer zal gebruiken. Onze ap4.0 gebruikt een nonce in als volgt:
- Alice verzendt bericht 'ik ben Alice' aan Bob
- Bob kiest een nonce en verzendt die naar Alice
- Alice versleutelt de nonce met de symmetrische sleutel van Alice en Bob, KA– B,en stuurt de gecodeerde nonce KA_B(R) terug naar Bob.
- Bob ontsleutelt het ontvangen bericht. Als de gedecodeerde nonce gelijk is aan de nonce die hij Alice stuurt, dan is Alice geauthenticeerd
8.5 E-mail beveiligen
8.5.1 Ontwerp van veilige e-mail
Vertrouwelijkheid (Systeem 1)
-
Bericht versleutelen → symmetrische sleuteltechnologie (DES) → ontvanger bericht ontsleutelen
-
Alternatief → cryptografie openbare sleutel (RSA)
-
Om dit efficiëntieprobleem op te lossen, maken we gebruik van een sessie key:
- Alice selecteert een willekeurige symmetrische sessiesleutel (Ks)
- Versleutelt haar bericht m met de symmetrische sleutel
- Versleutelt de symmetrische sleutel met Bob's openbare sleutel K+b
- Voegt het gecodeerde bericht en de gecodeerde symmetrische sleutel samen om een pakket te vormen
- stuurt het pakket naar Bob's e-mailadres. (zie p 586 onderaan voor schema)
-
Bob ontvangt pakket:
- Gebruikt geheime sleutel Kb-→ verkrijgen symmetrische sleutem Ks
- Symmetrische sleutel Ks → ontsleutelen bericht
Sessie key = inefficient
1. Berichtintegriteit
-
Digitale handtekeningen:
- Alice past hashfunctie H toe
- Versleutelt resultaat met hashfunctie → met geheime sleutel KA- → digitale handtekening
- Oorspronkelijke bericht samen met handtekening → 1 pakket
- Verzend pakket → e-mail Bob
-
Bob ontvangt het pakket
- Openbare sleutel Alice KA+ → op ondertekende hash
- Vergelijkt resultaat bewerking met eigen hash H van bericht
The 2 combined:
- Alice maakt eerst een voorlopig pakket, dat bestaat uit haar originele bericht samen met een digitaal ondertekende hash van het bericht
- Vervolgens behandelt ze dit voorlopige pakket als een bericht op zich en stuurt dit nieuwe bericht via de stappen van de afzender van (a), waardoor een nieuw pakket wordt gemaakt dat naar Bob wordtverzonden (zie schema p 586** )**
8.5.2 PGP
PGP-software gebruikt:
- MD5 of SHA → berekenen hash
- CAST, Triple-DES of IDEA → versleutelen symmetrische sleutel
- RSA versleuteling openbare sleutel
Als PGP installed:
- Openbaar sleutelpaar voor gebruiker
- Openbare sleutel → website gebruiker of openbare sleutelserver
- Persoonlijke sleutel beschermd → wachtwoord
PGP → mogelijkheid bericht digitaal ondertekenen
8.6 TCP-verbindingen beveiligen
Noodzaak SSL:
- Geen versleuteling → indringer Bobs bestelling onderscheppen → creditcardgegevens achterhalen
- Integriteit gegevens niet gecontroleerd → bestelling veranderen
- Server niet geauthenticeerd → Valse website maken → gegevens stelen
SSL lost problemen op door volgende bovenop TCP uit te voeren:
- Vertrouwelijkheid
- Gegevensintegriteit
- Serverauthenticatie
- Clientauthenticatie
SSL → eenvoudige API vergelijkbaar API van TCP
8.6.1 Het hele verhaal, maar vereenvoudigd
Fase 1: Handshake
- Bob TCP-verbinding met Alice maken
- Verzekeren dat Alice echt Alice is
- Alice geheime mastersleutel zenden → Alice & Bob gebruiken → symmetrische sleutel genereren → nodig voor SSL
Fase 2: Verkrijgen van een sleutel
Alice & Bob moeten MS gebruiken om vier sleutels te genereren:
- EB: session encryption key for data sent from Bob to Alice
- MB: session MAC key for data sent from Bob to Alice
- EA: session encryption key for data sent from Alice to Bob
- MA: session MAC key for data sent from Alice to Bob
Fase 3: Gegevensoverdracht
Geen goed idee → integriteit alle gegevens tijdens hele sessie dat Bob gestuurd heeft controleren
- SSL splitst gegevensstream → records
- SSL voegt berichtauthenticatiecode toe aan elk record → versleutelt combinatie
- Maken van berichtauthenticatiecode → Bob hashfunctie toe → combinatie recordgegevens & sleutel Mb
- Versleutelen → Bob gebruikt sessievercijfersleutel Eb
Man in the middle attack ( MITM) : kansegmenten in de TCP-stream vervangen, invoegen en verwijderen tussen Alice en Bob.
Aannemen dat elk TCP-segment exact 1 record verpakt is → kijken hoe Alice segmenten verwerkt
- TCP in host Alice → denkt alles is OK → 2 records aan SSL-sublaag
- SSL in host Alice → 2 records ontsleutelen
- SSL in host Alice →berichtauthenticatiecode in elk record gebruiken → integriteit van gegevens in 2 records
- SSL → ontsleutelde bytestream van 2 records doorgeven → applicatielaag → door Alice ontvangen bytestream → gevolg verwisseling records → niet in juiste volgorde
Oplossing: gebruik volgnummers.
- Bob onderhoudt een reeksnummerteller, die begint bij nul en wordt verhoogd voor elke SSL-record die hij verzendt.
- Wanneer hij de MAC berekent,neemt hij het volgnummer op in de MAC-berekening.
Zo is MAC = hash van gegevens + MAC-toets + huidig volgnummer.
Alice kan Bob's volgnummers opsporen, zodat ze de gegevensintegriteit kan verifiëren.
SSL record
Bestaat uit → typeveld, versieveld, lengteveld, gegevensveld & berichtauthenticatiecode
8.6.2 Het hele verhaal, maar wat minder vereenvoudigd
SSL handshake
Alice & Bob begin SSL-sessie zelf afspraken maken over cryptografische algoritmen → aka handshakeprocedurefase → + Alice & Bob zenden elkaar nonces toe → gebruikt bij maken van sessiesleutels (EB,MB,EA,MA)
Handshakeprocedure bij SSL:
- Client verzendt lijst → versleutelalgoritmen die hij ondersteunt & zelfgekozen nonce
- Server kiest uit ontvangen lijst algoritme voor → symmetrische sleutel, openbare sleutel & berichtauthenticatiecode → server verstuurt bericht met voorkeuren, certificaat & zelfgekozen nonce
- Client authenticeert certificaat + berekent openbare sleutel server + genereert geheime pre-mastersleutel (PMS) → versleutelt PMS met openbare sleutel server → verzendt versleutelde PMS naar server
- Afgesproken functie bepalen sleutel → berekenen client & server onafhankelijk → geheime mastersleutel met PMS & nonces → geheime mastersleutel in stukken gehakt → 2 coderingssleutels & 2 berichtauthenticatiecodes genereren → gekozen symmetrische codering werkt met cipher-block-chaining → 2 initialisatievectoren gemaakt → geheime mastersleutel → daarna alle berichten versleuteld & geauthenticeerd
- Client verzendt berichtauthenticatiecode → alle handshakeprocedureberichten
- Server verzendt berichtauthenticatiecode → alle handshakeprocedureberichten
Alleen nonces → niet mogelijk "replay attack" te voorkomen
Verbinding verbreken
Iemand geeft in het typeveld aan of de record dient om de SSL-sessie te beëindigen. Door zo'n veld op te nemen, zou Alice weten dat als ze een TCP FIN zou ontvangen voordat ze een SSL-sluitingsrecord zou ontvangen, ze weet dat er iets grappigs aan de hand is.
8.7 Beveiliging op netwerklaag: IPsec & VPN
8.7.1 IPsec & VPN
Met VPN → interne dataverkeer van de instelling verzonden via het publiekelijk toegankelijke internet in plaats van via een fysiek gescheiden netwerk. → dataverkeer eerst versleuteld
CHECK PAGINA 597 IN HANDBOEK VOOR AFBEELDING
8.7.2 Authentication header-protocol en het encapsulation security payload-protocol
Protocolsuite IPsec → Authentication header (AH-protocol) & encapsulation security payload (ESP-protocol)
AH-protocol → bronauthenticatie & gegevensintegriteit maar geen vertrouwelijkheid ESP-protocol → bronauthenticatie & gegevensintegriteit & vertrouwelijkheid Vertrouwelijkheid essentieel bij VPN & andere IP-sec applicaties
8.7.3 Beveiligingsassociaties
IPsec-datagrammen → verzonden tussen 2 netwerkentiteiten → voor bronentiteit IPsec-datagrammen verstuurt → 2 entiteiten → logische verbinding tot stand = beveiligingsassociatie → logische simplexverbinding → unidirectioneel van bron naar bestemmingsentiteit → beide entiteiten beveiligde datagrammen naar elkaar willen verzenden → noodzakelijk om 2 beveiligingsassociaties tot stand te brengen → voor elke richting 1
8.7.4 Het IPsec-datagram
2 verschillende packetvormen → tunnelmodus & transportmodus PAGINA 589 HANDBOEK
- R1 voegt achter aan oorspronkelijke IPv4-datagram een ESP-trailerveld toe
- R1 versleutelt resultaat met behulp van het algoritme & de sleutel die voor de beveiligingsassociatie zijn overeengekomen
- R1 voeg aan voorkant van versleutelde geheel → veld toe → ESP-header → Resulterende pakket → enchilada
- R1 voegt berichtauthenticatiecode toe aan achterkant van versleutelde geheel → alles te samen → inhoud van payloadveld
- R1 creëert een nieuwe IP-header met alle klassieke IPv4-headervelden → voegt voor payloadveld toe
8.7.5 sleutelbeheer in IPsec (IKE)
IKE kent twee fase
Fase1:
- Vaststellen bidirectionele IKE SA
opmerking: IKE SA anders dan IPsec SA ook bekend als ISAKMP security association
Fase 2:
- ISAKMP wordt gebruikt om veilig te onderhandelen over IPsec-paar SA's
fase 1 heeft twee modi: agressieve modus en hoofdmodus
- Agressieve modus gebruikt minder berichten
- Hoofdmodus biedt identiteitsbescherming en is flexibeler
IKE-berichtenuitwisseling voor algoritmen, geheime sleutels, SPI-nummers
- AH- of ESP-protocol (of beide) AH biedt integriteit, bronverificatie
- ESP-protocol (met AH) biedt bovendien versleuteling
- IPsec-peers kunnen twee eindsystemen zijn, twee routers/firewalls, of een router/firewall en een eindsysteem
8.8 Securing wireless LANs
8.8.1 Wired equivalent privacy
LEER VANUIT SLIDES $rarr; DUIDELIJKER
8.9 Operationele beveiliging: firewalls & intrusion-detectionsystemen
8.9.1 Firewalls
3 doelen:
- Alle dataverkeer van buiten naar binnen & omgekeerd passeert firewall
- Alleen geauthenticeerd dataverkeer → gedefinieerd in lokale beveiligingspolicy's mag passeren
- Firewall kan niet zelf benaderd worden
Traditionele packetfilters
Filterbeslissingen meestal genomen op basis van:
- IP-bronadressen of IP-bestemmingsadressen
- Typeveld in IP-datagram
- TCP- of UDP-bronpoorten en -bestemmingspoorten
- TCP-vlagbits: SYN, ACK,...
- ICMP-berichttype
- Verschillende regels voor datagrammen die netwerk binnenkomen en verlaten
- Verschillende regels voor verschillende routerinterfaces
Organisatie kan filteren op:
- TCP-SYN-segmenten → geen inkomende TCP-verbindingen toestaan behalve voor publieke webserver → alle TCP-SYN-segmenten blokkeren behalve → TCP-SYN-segmenten bestemmingspoort 80 & bestemmings-IP overeenkomt met webserver
- TCP-ack-bit → interne clients verbinden met externe servers → externe clients niet verbinden met interne servers
- 2e mogelijkheid → DNS-packets netwerk kunnen binnenkomen & verlaten → blokkeert al het dataverkeer → behalve webdataverkeer binnen organistatie & DNS-dataverkeer
Filterpolicy kan gebaseerd zijn op combinatie van adressen & poortnummers
Stateful packetfilters
Bewaken alle bestaande TCP-verbindingen → firewall kan nieuwe verbinding detecteren → door 3-wayhandshake (SYN, SYNACK & ACK) → + eind verbinding detecteren → FIN-packet → firewall kan ook veronderstellen → verbinding niet meer nodig is → geen activiteit
Packet bereikt firewall
- Firewall controleert lijst met toegangsbeheer ( traditionele packetfilters )
- Verbindingstabel controleren voor packet in netwerk van organisatie kan komen
- Controleert verbindingstabel → geen deel van lopende TCP-verbinding → weigert
- IF webserver stuurt packet terug → firewall controleert tabel → overeenkomstige verbinding → packet passeren
Application gateway
Firewalls moeten packetfilters combineren met applicatiegateways → die kijken verder dan headers van IP, TCP & UDP → beslissingen op basis van applicatiegegevens Applicatiegateway → applicatiespecifieke server die door alle applicatiegegevens gepasseerd moet worden → verschillende applicatiegateways kunnen op dezelfde host uitgevoerd worden → elke gateway afzonderlijke server met eigen processen
Stel:
Firewall → geselecteerde groep interne gebruikers → Telnet-verbindingen met externe netwerken → tegelijk voorkomen → externe clients → Telnet-verbinding maken met interne host
Stel nu:
Interne gebruiker wil verbinding tot stand brengen met buitenwereld
- Gebruiker Telnet-sessie starten met applicatiegateway → op gateway draait applicatie → wacht voor inkomende Telnet-sessies tot stand komen
- Applicatie vraagt username & password
- IF informatie = correct → applicatiegateway checkt IF gebruiker = gerechtigd is → als dat het geval is
- Gateway vraagt gebruiker → hostname externe host ingeven
- Gateway Telnet-sessie → tussen gateway & externe host
- Gateway verzendt alle gegevens afkomstig van externe host naar gebruiker & omgekeerd
8.9.2 Intrusion-detectionsystems
- Intrusiondetectionsysteem (IDS)→ waarschuwt wanneer mogelijk schadelijk dataverkeer detecteerd
- Intrusion-preventionsysteem (IPS)→ Apparaat dat schadelijk dataverkeer blokkeert
IDS + IPS = IDS
Organisatie → meerdere IDS's sensoren implementeren → meestal samenwerkend → sturen verdachte verkeersactiviteit → centrale IDS-processor → verzamelt info → alarmen verzendt naar netwerkbeheerder wanneer nodig
Pagina 619 afbeelding 3.6
Organisatie → 2 delen opgesplitst
- Streng beveiligd deel → afgeschermd door → packetfilter & applicatiegateway → bewaakt door IDS sensoren
- Minder streng beveiligd deel →gedemilitariseerde zone (DMZ)→ alleen beveiligd door packetfilter maar ook bewaakt door sensoren IDS (is een netwerksegment dat zich tussen het interne en externe netwerk bevindt. Het externe netwerk is meestal het Internet. Een DMZ is feitelijk een andere naam voor een extranet, een gedeelte van het netwerk dat voor de buitenwereld volledig toegankelijk is. Op het netwerksegment van de DMZ zijn meestal servers aangesloten die diensten verlenen die vanuit het interne en externe netwerk aangevraagd kunnen worden)
Sensoren voor IDS → verderop in systeem → elke sensor deel van dataverkeer → gemakkelijker taak uitvoeren
IDS systemen in 2 categorieën
- Systemen die werken met handtekeningen
- database met aanvalskenmerken (handtekeningen) → elke handtekening → verzameling regels → gebruikt verdachte activiteit → kan lijst met kenmerken 1 packet → vergelijkt packets met handtekening in database → overeenkomst in database → waarschuwing
Beperkingen:
-
dit soort IDS → alleen als voorkennis over aanval is → gebruikt nauwkeurige handtekening te vervaardigen → blind als er nieuwe aanvallen zijn
-
packet → zelfs als er bekende handtekening is → niets te maken met een aanval → false-positive warning
-
IDS kan overvoerd geraken → elk packet vergeleken moet worden → uitgebreide verzameling handtekeningen → kan zover komen dat IDS schadelijke packets niet detecteert
-
Op anomalie gebaseerde systemen
- Creëert profiel → normale verloop → gecontroleerde dataverkeer → zoekt packetstreams statisctisch ongebruikelijk zijn
- Niet afhankelijk van voorkennis bestaande aanvallen
- Wel moeilijk → efficiënt onderscheid maken → normaal dataverkeer & statistisch ongebruikelijk verkeer
Snort
Maakt gebruik van generieke sniffingsinfterface, libpcap
Enorme groep gebruikers & beveiliginsexperts → houden handtekeningdatabase actueel
9 Multimedianetwerken
9.1 Multimedianetwerkapplicaties
9.1.1 Eigenschappen van video
- Hoge bit rate : 100kbps voor low-quality video conferencing → 3 Mbps streaming high-definition movies. → bitsnelheidvereisten van video belangrijk ontwerpen netwerkvideotoepassing
- Een niet-gecomprimeerde, digitaal gecodeerde afbeelding → reeks pixels→ elke pixel gecodeerd in aantal bits om luminantie en kleur weer te geven.
- 2 Types redundantie in video → exploited door video compressie
- Tijdelijke redundantie → werkt met verschillen tussen opeenvolgende afbeeldingen
- Spatial redundancy → redundantie binnen een bepaalde afbeeling
9.1.2 Eigenschappen van audio
- Digitale audio → lagere bandbreedte nodig dan video → Pulse Code Modulation (PCM) → coderen spraak → 8000 samples/seconde & 8 bits per sample → bitsnelheid 64 kbps
- Compressietechniek voor stereomuziek → MP3 → bitsnelheid 128 kbps → geluidskwaliteit slechter
- Advanced Audio Coding (AAC) → meerdere versies vooropgenomen audio stream kan gemaakt worden → elke klein verschil bit rate
9.1.3 Soorten multimedianetwerkapplicaties
Streamen van opgeslagen audio / video
Streamen van opgeslagen video 3 belangrijke onderscheidende kenmerken
- Streamen → client begint video → binnen enkele seconden na ontvangst weer te geven → client video weergeeft → bepaalde plaats in opname & tegelijk latere delen van die opname ontvangt van server = streamen
- Interactiviteit → media vooraf opgenomen → gebruiker weergave onderbreken, doorspoelen,... → voor aanvaardbare gebruikskwaliteit → tijd tussen moment gebruiker actie start & uitvoering actie → enkele seconden
- Continue weergave → zelfde snelheid weergeegven als orgineel → gegevens op tijd van server ontvangen → voor moment client moet weergeven → anders haperingen
- Gemiddelde doorvooercapaciteit → netwerk streamapplicatie → gemiddelde doorvoorcapaciteit bieden → ten minste even groot als bitsnelheid video
VOIP
Timing is belangrijk → spraak- en videoapplicaties → vertragingsgevoelig → meeste multimedianetwerkapplicaties → bestand tegen een zekere mate van gegevensverlies → resulteert in korte onderbrekingen van audio of video
Streamen van live audio & video
Meestal via CDN's → zelfde snelheid weergeegven als orgineel → gegevens op tijd van server ontvangen → voor moment client moet weergeven → anders haperingen → omdat evenement = live → vertraging probleem zijn → timingeisen minder streng dan voor spraakgebrekken
9.2 Streamen van opgeslagen video
2 belangrijke voordelen bufferen door client
- Fluctuaties in vertraging tussen server en client opvangen
- Banbreedte tussen server & client → daalt onder sneheid → waarmee videocontent wordt weergegeven → blijven kijken zolang buffer van clientcomponent niet leegraakt
9.2.1 Streamen met UDP
Kleine buffer op clientcomponent van applicatie gebruikt → net groot genoeg voor minder dan seconde video → server die video aan UDP-verbinding vertrouwt → stukjes video verpakken in transportpackets speciaal ontworpen voor transporteren audio & video → Realtime Transport Protocol ( RTP )
Server & client → onderhouden verbinding voor videostream → ook afzonderlijke besturingsverbinding die door client wordt gebruikt geven opdrachten
Systeem 3 belangrijke nadelen:
- Streamen met constante snelheid → voor continue weergave → problemen opleveren als gevolg van onvoorspelbaare & wisselende beschikbare bandbreedte
- Streamen met UDP → server nodig om media te besturen → interactieve verzoeken tussen client en server afhandelen & toestand client bewaren → voor elke sessie
- Veel firewalls geconfigureerd om UDP verkeer te blokkeren
9.2.2 Streamen met HTTP
Video in HTTP server → gewoon bestand met specifieke URL → gebruiker wil video zien
- Client start TCP-verbinding met server
- Verzendt HTTP-GET-bericht
- Server verzendt video bestand in HTTP-antwoordbericht
- Clientcomponent applicatie verzamelt bytes in buffer
- Zodra # bytes in buffer > bepaalde drempelwaarde
- Client begint met weergave + videoframes periodiek uit buffer opgehaald & gecomprimeerd
Packets → vertraagd als gevolg opnieuw verzenden packets
Gebruik van HTTP over TCP → firewalls en NAT's gemakkelijker gepasseerd kunnen worden → van het UDP-dataverkeer tegen houden → HTTP-dataverkeer door te laten → streamen HTTP geen mediabesturingsserver nodig (RTSP-server) → kosten lager → meeste videostreamapplicaties werken met HTTP over TCP als streamprotocol
Prefetchen van video
Client probeert video downloaden → snelheid hoger dan weergavesnelheid → voorraad krijgen van videoframes → toekomst worden weergegeven
Buffers van clientcomponent van de applicatie & TCP-buffers
Volledige client applicatie buffer → legt indirect limiet op rate → video verstuurd van server naar client wanneer streamen over HTTP
Analyse van clientcomponent van applicatie en TCP-buffers
If beschikbare rate < video rate → continue weergave afgewisseld worden → periodes beeld stilstaat → wanneer beschikbare rate in netwerk > video rate → na initiele buffering vertraging → continous playout tot einde video
Vroegtijdige beëindiging van weergave & verplaatsen van weergavetijdstip
HTTP-byterange-headerveld in HTTP-get-verzoekbericht → bevat informatie → bereik in bytes van gewenste video → client wil ontvangen → If gebruik springt naar ander tijdstip in video → client verzendt nieuw HTTP-verzoekbericht → in byterangeheaderveld van bericht → clientapplicatie specifieert vanaf welke byte in bestand → gegevens wil ontvangen → server nieuw HTTP-verzoek ontvangt → alle eerdere verzoeken weg & bytes verzenden
9.2.3 Dynamic Adaptive Streaming over HTTP (DASH)
Gebruikt meerdere versies → zelfde video → elk een bepaalde snelheid waarmee gestreamd wordt → gecomprimeerd → CDN's vaak gebruikt distribueren opgeslagen & live video
9.3 Voice-over-IP (VoIP)
9.3.1 Beperkingen van best-effortdienst van IP
IP → zo snel mogelijk van bron naar bestemming → geen beloften → vertraging of packet loss → belangrijke consequenties → ontwerp realtime spraakapplicaties → gevoelig voor packetvertraging, jitter & verlies
- Verzender genereert bytes met snelheid → 8000 bytes/seconde → iedere 20 ms verzamelt bytes in stuk → chunk
- Chunk + speciale header → verpakt in UDP-segment → elke 20 ms UDP-segment verzonden
Als packet ontvanger bereikt → constante end-to-endvertraging → packets 20 ms na elke spraakactie van andere partij arriveren → ideale situatie → ontvanger elke chunk direct bij aankomst weergeven → sommige packets kwijt + niet zelfde end-to-endvertraging
Ontvanger moet
- Bepalen wanneer chunk moet weergegeven worden
- Bepalen wat er moet gebeuren als chunk ontbreekt
Packetverlies
Verlies zou voorkomen → packets over TCP versturen → mechanismen opnieuw verzenden packets → niet geschikt voor VoIP → vergroten end-to-endvertraging
Packetloss tussen 1% en 20% is acceptabel → afhankelijk hoe spraakgegevens gecodeerd & verzonden zijn → manier hoe ontvanger verlies maskeert → Forward Error Correction (FEC) → hulpvol zijn packetverlies maskeren
End-to-endvertraging
Totaal van
- Transmission delay
- Processing delay
- Queing delays routers
- Propagation delays in verbindingen
- Processing delays hosts
Ontvanger bij VoIP-applicatie → packets negeren die vertraging groter dan bepaalde drempelwaarde
Packetjitter
Variatie in queuing delays → packet in netwerkrouters ondervindt = cruciaal → deze vertragingen variëren → dus ook verstreken tijd tussen moment → verzenden packet & ontvangen packet → fenomeen = jitter → compenseren aan de hand van volgnummers , tijdstempels & weergavevertraging
9.3.2 Jitter voor audio compenseren bij ontvanger
Gedaan door 2 mechanismes combineren
- Elke chunk vooral laten gaan door tijdstempel → verzender voegt aan elk nieuw gegenereerd packet → informatie over tijdstip → packet werd gegenereerd
- Weergave chunks → bij ontvanger vertragen → weergave ontvangen chunks → vertraagd worden → zodat grootste deel packets ontvangen is voor weergeven
1) Onveranderlijke weergavevertraging
Ontvanger kan weergavevertragingen variëren
Chunk tijdstempel bij afzender op tijdstip t → ontvanger speelt chunk (q) af op tijdstip t + q → assuming chunk tegen die tijd gearriveerd → packets na hun geplande speeltijd arriveren → weggegooid
2) Variabele weergavevertraging
Door initiële weergavevertraging groot te maken → meestg packets op tijd aankomen → verloren packets = klein →weergavevertraging variëren aan begin elke spraaksessie → stiltes voorafgaand aan spraaksessie → verkort of verlengd → niet hoorbaar wanneer verleningen / verkortingen stiltes niet te groot zijn
-
Schatting van de pakketvertraging ( di ) = schatting gemiddelde netwerkvertraging moment i-de packet arriveert bij ontvanger
-
Schatting gemiddelde afwijking van vertraging ( vi ) = geschatte gemiddelde afwijking vertraging ten opzichte van de geschatte gemiddelde vertraging → di gemiddelde werkelijke netwerkvertragingen $rarr; r1 - t1,...,ri-ti
-
Schattingen di & vi berekend elk ontvangen pakket → als packet i → 1e packet in spraaksessie → weergavemoment pi berekend $rarr; pi = ti + di + Kvi
-
Term Kvi → weergavemoment zover in toekomst verschoven → klein gedeelte packets te laat arriveren in spraaksessie
-
Stel dat qi = tj + qi → tijd tussen moment 1e packet in spraaksessie genegeerd & moment packet weergegeven → als packet j ook hoor bij spraaksessie → wergegeven op tijdstip → pj = tj + qi
9.3.3 Compenseren van packetverlies
Forward Error Correction ( FEC )
Mechanisme 1:
Verzendt redundant gecodeerde 'chunk' na elke n chunks → geconstrueerd door exclusieve OR-bewerking uit te voeren op n oorspronkelijke chunk.
Als willekeurig packet van groep n+1 kwijtgeraakt → ontvanger verloren packet reconstrueren → meer dan 2 niet mogelijk → verhoogt overdrachtssnelheid & weergavevertraging
Mechanisme 2:
Versturen van lagere resolutie audio stream → verzender genereert n-de packet door n-de chunk van nominale stream achter (n-1) de chunk van redundante stream te plaatsen → wanneer meerdere niet opeenvolgende packets kwijtraken → ontvanger verlies compenseren door chunk met lage bitsnelheid → volgende packet "meelift" geven → lagere geluidskwaliteit
Interleaving
Verzender verstuurt eenheden audiogegevens in andere volgorde → oorspronkelijk aangrenzende eenheden in verzonden stream gescheiden zijn door afstand → effect packetverlies verkleinen → if packetloss → meeste van elke orginele chunk → geen redundantie overhead → verhoogt playout delay → voordeel → benodigde bandbreedte voor een stream niet vergroot
Maskeren van fouten
Herhalen van packets → ontvanger vervangt kwijtgeraakte packets door kopieën
Interpolatie → kwijtgeraakte packet berekend p basis van voorgaande & volgende packet in stream
9.3.4 Casus: VoIP met Skype
- Skype werkt met hiërarchisch overlaynetwerk
- Peer kan "superpeer" of gewone peer zijn
- Werkt met index → koppelt IP-adressen aan gebruikers
- Index gedistribueerd over superpeers
- Alice belt Bob → Skype client zoekt distribueerde index → Bob's IP adres bepalen
Meeste thuisnetwerken → NAT netwerken → NAT voorkomt host buiten thuisnetwerk verbinding met host binnen thuisnetwerk → beide Skype-bellers NAT → probleem
Super peers lossen probleem op
- Alice logt in → superpeer buiten netwerk toegewesen → Alice & superpeer besturingsberichten uitwisselen → idem voor Bob
- Alice belt Bob → informeert Alice superpeer → superpeer Bob informeert → brengt Bob op hoogte → inkomende oproep Alice
- Bob accepteert → 2 superpeers kiezen 3e superpeer zonder NAT → gegevens Alice en Bob uitwisselen aan elkaar koppelen
Conference calls → elke gebruiker verzendt audiostream naar deelnemer die gesprek start → deelnemer combineert audiostreams tot 1 enkele stroom → verzendt kopie van elk gecomineerde stream → elk van andere N-1 deelnemers → video elke deelnemer → gestuurd in servercluster
9.4 Protocollen voor realtime spraakapplicaties
9.4.1 RTP
Gebruikt PCM,MP3,... te transporteren
Basisprincipes van RTP
RTP boven op UDP
- Verzendende component verpakt chunk media-gegevens in RTP-packet
- Verpakt packet in UDP-segment → naar IP
- Ontvangende haalt RTP-packet uit UDP-segment
- Chunk → mediaplayer → decodeert & weergeven
- Verzendende omponent voegt voor elke chunk audiogegevens → RTP-header toe
- Type van audiocodering
- Volgnummer
- Tijdstempel
- RTP packet → in UDP socket interface
- Ontvanger → applicatie ontvangt RTP van socket interface
- Applicatie filtert audiogegevens & headervelden van RTP packet → gegevens decoderen & afspelen
RTP geen mechanismen → tijdige bezorging van gegevens of kwaliteit diensten → geen garantie of packets aankomen of juiste volgorde
RTP → elke bron → eigen onafhankelijke RTP-packetstream → routers geen onderscheid tussen IP-datagrammen met RTP-packets & zonder RTP-packets
Headervelden van RTP-packet
- Volgnummerveld (16 bits) → verhoogt met 1 voor elk verstuurde RTP-packet → gebruikt door ontvanger om packet loss & volgorde van packets herstellen
- Tijdstempelveld (32 bits) → ontvanger tijdstempels → packetjitter compenseren & packets met zelfde snelheid weergeven als waarin verzonden → als applicaties 160 gecodeerde samples maakt → tijdstempelveld verhoogt met 160 voor elk RTP-packet wanneer bron actief → tijdstempelveld klok loopt met constante snelheid → zelfs if bron = inactief
- Bronidentificatieveld / ( Synchronization Source Identifier of SSRC (32 bits) → identificeerd bron van RTP stream → elke RTP sessie heeft unieke bronidentificatie
9.4.2 SIP
- Levert mechanismen → gesprekken over IP-netwerk → beller kan diegene die gebeld wordt waarschuwen → gesprek wil → beide partijen afspraken maken over codering van media → beide deelnemers ook gesprek beëindigen
- Mechanismen → beller huidige IP-adres bepalen van gebelde → gebruikers geen vast IP → dynamisch toegewezen → verschillende IP-apparaten
- Mechanismen → beheren gesprekken → bv. Toevoegen nieuwe mediastreams, doorschakelen van gesprekken, ...
Gesprek tot stand brengen met bekend IP-adres
- Alice stuurt Bob → SIP INVITE bericht → over UDP naar poort 5060 voor SIP → geeft poort aan
- INVITE-bericht identificatie voor Bob + indicatie huidig IP van Alice & preferred codering
- Bob antwoord met 200 OK bericht → poort weer, IP & preferred codering
- Na ontvangen Bob antwoord → SIP ontvangst bericht → erna praten
SIP kan over TCP of UDP verstuurd worden → default port 5060 → SIP berichten verstuurd en ontvangen in sockets → andere dan voor media data
SIP berichten → ASCII leesbaar → lijken op HTTP-ber
SIP-berichten
Kijk pagina 663. Voor voorbeeld
Vertalen van namen en het traceren van een gebruiker
Alice kent alleen e-mailadres Bob → dit adres ook voor SIP-gesprekken
bob@domain.com
Hoe kent proxyserver het huidige IP-adres vanElke SIP-gebruiker → registrar gekoppeld
- Gebruiker start SIP-applicatie
- Applicatie verzendt SIP-registerbericht naar registrar → informatie huidig IP gebruiker
- Registrar Bob → bijhouden huidig IP-adres Bob → ander SIP-apparaat → nieuw registerbericht met nieuw IP
Gebruik langere tijd → register blijft registerberichten sturen → registrar overeenkomsten met DNS-name-server → vertaalt vaste hostnamen naar vaste IP → SIP-registrar vaste menselijke identificatiegegevens → dynamische IP-adressen → SIP-registrars & proxy's op zelfde host
Hoe kan SIP proxy huidige IP-adres van Bob achterhalen
- Alice verstuurt INVITE-bericht → SIP-proxy Bob
- Proxy stuurt bericht naar SIP-apparaat van Bob
- Bob ontvangt Alice INVITE-bericht → kan antwoord sturen naar Alice
Jim@umass.edu (217.123.56.89) wil VoIP starten met Keith@upenn.edu (197.87.54.21)
- Jim verzendt INVITE-bericht naar SIP-proxy van umass
- Proxy → DNS-lookup voor SIP-registrar upenn.edu → verzendt bericht naar registrarserver
- Keith.upenn.edu → niet bekend bij registrar upenn → registrar omleidingsantwoordbericht → melding → umass keith.nyu.edu moet proberen
- Proxy umass → INVITE-bericht → SIP-registrar van NYU
- Registrar NYU → kent IP van keith@upenn.edu→ stuurt INVITE-bericht door naar host 197.87.54.21 → SIP-client van Keith uitvoert.
- Verzendt SIP-antwoordbericht → registrars/proxy's → terug naar SIP-client → 217.123.56.89
- Idem 6
- Idem 6
- Media → rechtstreeks tussen 2 clients verzonden → ook ACK
9.5 Netwerkondersteuning voor multimedia
- Beste maken van de best-effortdienst → toenames van vraag voorspeld → ISP's extra bandbreedte & switches in → acceptabele mate vertraging & packetloss te garanderen
- Diensten in verschillende categorieën aanbieden → 1 type van verkeer → kan hogere prioriteit krijgen dan een ander type
- Per verbinding andere QoS-garanties geven → per verbiending QoS garantie → elke instantie van applicatie → bandbreedte reserveren → garanties end-to-endperformance → harde garantie → applicatie zeker de gevraagde QoS zal ontvangen → Zachte garantie → grote waarschijnlijkheid de gevraagde QoS zal ontvangen
9.5.1 Best-effortnetwerken dimensioneren
Eerste manier kwaliteit multimedia-applicaties te verbeteren →
Meer geld uitgeven
Bij multimedia in netwerken → voorkomen tekort aan recources → als linkcapaciteit → groot genoeg → packets door huidige internet getransporteerd → zonder queuing delays of kans op vermissing
Vraag is → hoeveel capaciteit nodig? → kosten leveren benodigde bandbreedte → reële zakelijke optie is voor ISP's → hoe groot capaciteit netwerklinks → bepaalde topologie → bepaalde end-to-endperformance te leveren = netwerkdimensioneringsprobleem
Volgende problemen moeten opgelost worden om performance van applicatielaag tussen 2 eindpunten in netwerk te kunnen voorspellen
- Modellen van het benodigde dataverkeer tussen eindpunten in het netwerk
- Mogelijk modellen gedefinieerd worden op gespreksniveau
- Goed gedefinieerde performance-eisen
- Performance eis stellen dat gevoelig is voor vertraging → kans end-to-endvertraging van packets groter is dan max te tolereren vertraging
- Modellen om end-to-endperformance bij een bepaald netwerkbelastingsmodel te voorspellen en technieken om zo gering mogelijke kosten zodanig bandbreete toe te wijzen dat aan alle eisen van de grebruikers wordt voldaan
9.5.2 Verschillende soorten diensten verlenen
Eenvoudigste uitbreiding → dataverkeer voor unitaire & egalitaire best-effortdienst → huidige internet opsplitsen in categorieën → bij dienstverlening aan verschillende categorieën → verschillende niveaus
Een paar scenarios
Principe 1: Packet markering → markeren van packets → router packets die horen bij verschillende dataverkeercategorieën van elkaar onderscheiden → originele doel (ToS) veld in IPv4
Principe 2: Isolatie dataverkeer → zekere mate van isolatie tussen categorieën implementeren → ene klasse niet nadelig beïnvloed kan worden → als iets mis is met andere categorie
2 aanpakken mogelijk:
- Dataverkeerpolicy → als dataverkeercategorie moet voldoen aan bepaalde criteria → controlemechanisme → zorgen policy nageleefd → als applicatie niet aan criteria houdt → mechanisme handelend optreden → dataverkeer netwerk binnenkomt voldoet aan criteria
- Packetschedulingmechanisme op datalinklaag → expliciet een constante hoeveelheid van linkbandbreedte te laten reserveren → elke categorie
Principe 3: Belangrijk categorieën van elkaar scheiden → wenselijk recources → efficiënt mogelijk te benutten → manier packets in wachtrij voor verzending over link worden geselecteerd = link-schedulingmethode
Leaky bucket
Policing = belangrijk QoS-mechanisme
3 policycriteria:
- Gemiddelde snelheid: Netwerk kan gemiddelde snelheid van packets van stream langere tijd beperken → cruciale factor → tijdsduur waarover de gemiddelde snelheid zal worden geregeld → bron begrensd 100 packets per seconde → sneller afgeremd dan bron 6000 packets/min → zelfs beide bronnen → zelfde gemiddelde snelheid
- Maximale snelheid: beperking van gemiddelde snelheid → begrenst hoeveelheid dataverkeer → in netwerk gezonden kan worden → relatief lange periode → beperking van maximale snelheid → begrenst # packets verzonden in korte periode
- Burstgrootte → Netwerk kan ook max # packets → begrenzen → dat gedurende extreem korte periode via netwerk wordt verzonden
Buckets bestaan uit → bucket dat max b tokens bevat
- Nieuwe tokens → in bucket → snelheid van r tokens per seconde genereerd
- IF bucket < b tokens → token direct in bucket
- Else → token genegeerd → bucket blijft gevuld met b tokens
Stel packet voor het verzonden wordt → token uit bucket halen
Omdat maximaal b tokens in bucket zitten → maximale burstgrootte voor een met leaky bucket begrense stream gelijk aan b packets
Tokens genereerd met snelheid r → maximale aantal packets → netwerk kan binnenkomen in willekeurige periode met lengte t → rt + b → snelheid r waarmee tokens genereerd worden → maat om gemiddelde snelheid → packets netwerk kunnen binnenkomen op lange termijn → begrenzen
9.5.3 Diffserv
Diffserv → differentiatie in dienstverlening → mogelijkheid verschillende categorieën dataverkeer → internet schaalbare manier
2 functionele elementen
- Functies aan de edge: → classificeren en coditioneren van dataverkeer → ingaande edge netwerk ( bij Diffserv-host die dataverkeer genereert of eerste Diffserv-router waarlangs dataverkeer passeert) → arriverende packets gemarkeerd
- Functies in de core → doorverzenden → wanneer Diffserv gemarkeerd packet → arriveert Diffserv router → doorverzonden naar volgende hop → volgens 'per-hop' voorschrift → geldt voor betreffende categorie packets → 'per-hop' voorschrift uitsluitend gebaseerd op markering van packet ( Diffserv-model)
Packets die bij edgerouter aankomen → gaclassificeerd & gemarkeerd (AFBEELDING p.679)
- Classificeerder selecteert packets → basis 1 of meer waarden in headervelden
- Verzendt packet naar betreffende markeerfunctie
Sommige gevallen host afgesproken → packetverzendsnelheid → sturen → voldoet aan bepaald dataverkeerprofiel → kan limiet op maximale overdrachtsnelheid bevatten of maximale # packets verzonden in korte tijd
Zolang gebruiker packets verzendt → voldoen aan overeengekomen waarden in dataverkeerprofiel → packets voorkeursbehandeling → wanneer verzender niet houdt aan dataverkeerprofiel, packets buiten overeenkomst vallen → andere markering of vertraagd worden of zelfs genegeerd worden aan edge netwerk
Meetfunctie → ingaande stream vergelijken met overeengekomen dataverkeerprofiel → bepalen packet binnen dat profiel past → eigenlijke beslissing over packets → netwerkbeheerder
In per-hop gedrag belangrijke overwegingen
- 'per-hop' voorschrift → zorgen verschillende categorieën dataverkeer → verschillende diensten
- Per-hop voorschrift verschilt → behandeling tussen categorieën definieert → geen expliciete informatie hoe voorschrift uitvoeren
- Verschillen in performance moeten dus zichtbaar & meetbaar zijn
2 'per-hop' voorschriften gedefinieerd
- Expedited forwarding → 'per-hop' voorschrift → vertreksnelheid van categorie → bij router = > dan geconfigureerde snelheid
- Assured forwarding → 'per-hop' voorschrift → verkeer in 4 categorieën → elke AF-categorie gegarandeerd → bepaalde minimale hoeveelheid bandbreedte & buffers
End-to-end-Diffserv-dienst leverren → alle ISP's tussene eind systemen → service leveren & samenwerken & afspraken maken → klant → gedifferentieerde end-to-end dienst te bieden
9.5.4 Per verbinding Qos-garanties geven: recources reserveren & streams toelaten
Principe 4: Nood aan nieuwe netwerk mechanics en protocollen → duidelijk wanneer stream gegearandeerde service moet ontvangen zodra gestart is
- Recources reserveren → enige manier garanderen → stream beschikken over benodigde recources → recources gereserveerd → stream naar behoefte benutten → gedurende gereserveerde tijd ongeacht behoeften andere streams
- Streams toelaten → recources gereserveerd → netwerk mechanisme hebben → streams verzoeken kunnen richten → recources niet oneindig → verzoek stream afgewezen → als gevraagde recources niet beschikbaar zijn
- Signaleren set-up streams → toelatingsproces → stream die QoS nodig heeft → voldoende recources reserveren → elke netwerkrouter tussen bron & bestemming → zeker zijn end-to-end-QoS-eisen hebben → elke router → lokale recources voor nieuwe stream nodig zijn berekenen → bekijken hoeveel beschikbare recources in gebruik zijn → opgestarte streams → of bepalen beschikbare per hop → toereikend QoS-eisen → honoreren Signaliseringsprotocol nodig activiteiten coördineren = call-setupprotocol → RSVP-protocol → voorgesteld voor dit doel binnen internetarchitectuur (PAGINA 683 AFBEELDING)
Active vs Passive FTP
Active FTP
- Client contacteert server op command poort
- Server stuurt ACK terug naar client's commandpoort
- Server initieert connectie op lokale datapoort → naar datapoort client eerder aanduidde
- Client stuurt ACK terug
Passive FTP
- Client contacteert server op command poort
- Server antwoord met poort 2024 → server verteld welke poort luisterd voor data connectie
- Client initieert data connectie van zijn datapoort → gespecifieerde data poort
- Server stuurt ACK terug naar client's datapoort
Active → SYN door client Passive → SYN door client
2020 juni examen
(Corona) - P. Geens
Theorie
+- 24 multiple chose vragen
Praktijk
Bij elke vraag moest je deze vorm van input meegeven: "oneliner - outputhash md5sum" ('| mdsum' toevoegen aan je oneliner geeft je de hash terug van je output)
- Vraag 1: Voorbeeldvraag (was gegeven en kon je geen punten mee verdienen)
ls -ld /etc
- Vraag 2: Create a linux CLI oneliner to extract the logged in user's username in the file Cnw2_ftp.pcap (use tshark) (dit commando is eigenlijk voor meerdere users...)
tshark -r /home/logs/Cnw2_ftp.pcap -Y 'ftp.request.command==USER' -T fields -e 'ftp.request.arg' | sort | head -1
- Vraag 3: Create a linux CLI oneliner to get the following output of wiki.uclllabs.be (use openssl)
echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -noout -text
- Vraag 4: Create oneliner to decode string in the secret located at /home/logs (use openssl)
cat /home/logs/secret | openssl enc -a -d
2020 juni examen - versie 2
Examen Juni 2020
Dit examen was tijdens de corona periode. Labo en theorie waren dus samen gevoegd.
Voor theorie: zie het bestande THEORIE.md
Dank aan: Pablopicasso en ISW
cn2_examen_juni2020.zip is gewoon een kopie van de Toledo website op dat moment,
Labo
Instructies
Het examen is gesloten boek, je mag enkel gebruik maken van onderstaande hulpmiddelen:
-
pcre handleiding + Linux comand line cheat sheet. Zie dat je een lokale kopie hebt op je laptop (of op papier) voor aanvang van het examen, tijdens het examen is toegang tot de wiki verboden.
-
ssh sessie naar server leia.uclllabs.be.
Antwoorden bestaan steeds uit een enkele ‘oneliner’, net zoals in de geziene labo’s en het voorbeeldexamen. Je mag commando’s aan elkaar lijmen met unnamed pipes ( | symbool), maar &&, || en ; mogen enkel gebruikt worden wanneer dit echt noodzakelijk is (bijvoorbeeld voor de syntax van een for-loop).
Let op: Bij sommige opdrachten staat er vermeld welke commando's je (niet) mag gebruiken.
Veel succes!
Vraag 1 (voorbeeld): 0 punten
Dit is een voorbeeld vraag, inclusief het correcte antwoord. Bekijk ze goed, zodat je weet wat er exact verwacht wordt.
Maak een CLI oneliner die de directory permissies, eigenaar, groep,... (via ls -l) oplijst van de /etc directory zelf (niet van de inhoud) op server leia.
Daarna pipe je de output van je CLI oneliner in het commando md5sum. In het antwoordveld vul je beide in op deze manier:
ONELINER - md5 hash
Oplossing:
# Met deze onliner kan je de permissies,... opvragen van de /etc directory zelf:
ls -ld /etc
# En zo pipe je de output van deze oneliner in md5sum:
ls -ld /etc | md5sum
# En dit vul je in in het antwoordveld:
ls -ld /etc - 69ede2180c67f4a59fea0206e031101f
Vraag 2: 10 punten
Het bestand Cnw2_ftp.pcap bevat een opgenomen FTP sessie. Je kan dit bestand vinden in /home/logs op server leia.
Maak een CLI oneliner met tshark die de gebruikersnaam toont van de gebruiker die succesvol inlogde. Enkel de gebruikersnaam mag getoond worden. Dus geen witregels, geen errors, geen andere tekst.
In je oneliner mag je enkel gebruik maken van het commando tshark. Geen enkel ander commando is toegestaan. Je mag wel gebruik maken van Wireshark als hulpmiddel om de juiste display filter ('s) te vinden.
Oplossing
tshark -r /home/logs/Cnw2_ftp.pcap -Y "ftp.request.command==USER && tcp.srcport==$(tshark -r /home/logs/Cnw2_ftp.pcap -Y "ftp.response.code==230" -T fields -e tcp.dstport)" -T fields -e ftp.request.arg
# Deze kan ook maar is waarschijnlijk niet altijd juist
tshark -r /home/logs/Cnw2_ftp.pcap -Y 'ftp.request.command==USER' -T fields -e 'ftp.request.arg' | sort | head -1
Vraag 3: 10 punten
Maak een CLI oneliner met openssl die het certificaat van de server wiki.uclllabs.be als tekst laat zien. Enkel dit mag getoond worden. Sample output:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
0d:81:12:b8:1c:24:0c:f3:0d:46:af:cd:9a:9b:96:d2
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = NL, ST = Noord-Holland, L = Amsterdam, O = TERENA, CN = TERENA SSL CA 3
Validity
Not Before: Jan 22 00:00:00 2020 GMT
Not After : Jan 26 12:00:00 2022 GMT
Subject: C = BE, L = Leuven, O = UC Leuven, CN = *.uclllabs.be
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (384 bit)
pub:
04:f5:46:f9:2c:94:f0:86:bd:6f:59:32:7c:4d:82:
06:da:d7:87:38:cb:74:98:6d:66:c0:4c:ca:f4:9e:
1f:5a:22:25:43:11:07:d4:86:1d:68:92:82:d3:eb:
4a:a5:bd:fb:4a:46:84:86:ed:40:be:92:7d:f1:f2:
56:3b:2b:9f:eb:84:33:59:0d:62:ef:8d:68:ac:4d:
d2:76:84:8c:69:93:47:cc:09:a2:2d:19:9d:ba:c6:
e7:e8:03:01:7d:df:44
ASN1 OID: secp384r1
NIST CURVE: P-384
X509v3 extensions:
X509v3 Authority Key Identifier:
keyid:67:FD:88:20:14:27:98:C7:09:D2:25:19:BB:E9:51:11:63:75:50:62
X509v3 Subject Key Identifier:
1B:19:0F:9E:AE:E4:39:61:82:08:79:0C:06:42:75:4A:EE:86:BF:6C
X509v3 Subject Alternative Name:
DNS:*.uclllabs.be, DNS:uclllabs.be
X509v3 Key Usage: critical
Digital Signature
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 CRL Distribution Points:
Full Name:
URI:http://crl3.digicert.com/TERENASSLCA3.crl
Full Name:
URI:http://crl4.digicert.com/TERENASSLCA3.crl
X509v3 Certificate Policies:
Policy: 2.16.840.1.114412.1.1
CPS: https://www.digicert.com/CPS
Policy: 2.23.140.1.2.2
Authority Information Access:
OCSP - URI:http://ocsp.digicert.com
CA Issuers - URI:http://cacerts.digicert.com/TERENASSLCA3.crt
X509v3 Basic Constraints: critical
CA:FALSE
CT Precertificate SCTs:
Signed Certificate Timestamp:
Version : v1 (0x0)
Log ID : A4:B9:09:90:B4:18:58:14:87:BB:13:A2:CC:67:70:0A:
3C:35:98:04:F9:1B:DF:B8:E3:77:CD:0E:C8:0D:DC:10
Timestamp : Jan 22 11:03:02.541 2020 GMT
Extensions: none
Signature : ecdsa-with-SHA256
30:44:02:20:5B:C2:BD:AA:16:4F:D8:18:42:10:D7:48:
9D:37:37:0B:4D:D6:65:65:F1:BF:08:A4:8D:B4:81:31:
02:BF:15:06:02:20:0D:DB:02:07:86:E1:2B:C0:24:04:
BE:42:FC:13:5E:77:D5:BF:E9:4B:53:0D:F1:6D:5E:78:
51:0A:3F:E4:26:31
Signed Certificate Timestamp:
Version : v1 (0x0)
Log ID : 87:75:BF:E7:59:7C:F8:8C:43:99:5F:BD:F3:6E:FF:56:
8D:47:56:36:FF:4A:B5:60:C1:B4:EA:FF:5E:A0:83:0F
Timestamp : Jan 22 11:03:02.760 2020 GMT
Extensions: none
Signature : ecdsa-with-SHA256
30:46:02:21:00:FF:25:60:84:19:69:76:91:D6:8E:C5:
54:ED:7C:D4:40:9F:9B:14:99:2F:22:89:F0:0A:3F:9E:
3F:15:98:A3:66:02:21:00:92:05:A1:8D:F3:06:A8:DD:
92:E2:86:83:54:C1:BC:F9:5F:03:2E:62:F9:DA:5A:17:
2D:F8:D1:E6:5B:A2:78:6A
Signed Certificate Timestamp:
Version : v1 (0x0)
Log ID : EE:4B:BD:B7:75:CE:60:BA:E1:42:69:1F:AB:E1:9E:66:
A3:0F:7E:5F:B0:72:D8:83:00:C4:7B:89:7A:A8:FD:CB
Timestamp : Jan 22 11:03:02.616 2020 GMT
Extensions: none
Signature : ecdsa-with-SHA256
30:44:02:20:7E:42:D6:3A:55:8B:7B:5A:1E:E0:05:48:
09:80:89:E5:A5:7A:FD:8C:5F:EE:AB:2E:7E:D1:07:A0:
C2:B4:63:EA:02:20:3A:12:1E:14:28:50:F7:8D:C3:73:
EA:9E:6C:AB:5D:B4:A8:AE:27:4C:D1:40:18:23:80:1E:
F3:87:B8:A8:98:71
Signature Algorithm: sha256WithRSAEncryption
7b:8b:b1:71:c4:73:c9:1f:30:d9:74:ea:b0:e9:a3:a7:a0:7b:
23:a3:24:cf:e4:c4:f3:8f:82:47:15:4a:e7:4a:05:da:57:0a:
89:db:90:50:62:0f:a8:95:47:5a:22:eb:5b:2f:a3:fd:31:d0:
b5:b1:86:02:a1:91:87:65:42:70:ea:fc:49:79:ea:2c:13:fb:
b0:4e:a5:15:ab:80:82:9d:c9:82:e9:da:9e:bb:81:8a:f0:65:
eb:ef:73:1c:e4:e2:69:ce:06:fc:38:92:fc:7a:06:72:ae:c7:
7e:37:37:21:b9:71:52:93:ed:18:b4:5d:91:9c:95:48:62:d6:
ed:ab:3a:db:1d:22:ed:01:de:7d:56:58:f3:0a:7a:49:4c:cb:
8b:73:b9:5f:83:f8:c4:b3:1a:ec:54:52:b9:83:ae:db:f7:0b:
b2:cb:76:d0:99:19:e9:26:f9:c2:12:5d:ec:ea:0b:e3:f4:28:
8a:da:c2:f5:b3:76:a4:03:c7:02:da:d0:44:a8:7a:6b:19:a0:
99:99:f4:e8:e9:6b:ab:2e:ce:c8:5f:31:bb:e9:bb:52:35:61:
ed:5a:22:fa:1c:ed:d0:4c:fe:83:8d:78:8a:43:79:fa:a3:38:
5b:c2:f0:6e:b5:13:8e:28:fc:c7:f4:2c:a1:fe:79:b4:5a:68:
fa:41:d5:a3
Oplossing
echo | openssl s_client -connect wiki.uclllabs.be:443 2>/dev/null | openssl x509 -noout -text
Vraag 4: 10 punten
Met welke CLI oneliner kan je volgende string decoderen?
RGUgcHVudGVuIG9wIGRlemUgdnJhYWcgemlqbiBhbCBiaW5uZW4uCg==
Je kan deze string ook terugvinden in het bestand /home/logs/secret op server leia. Je mag enkel gebruik maken van het commando openssl. Geen andere commando's zijn toegestaan.
Oplossing
openssl base64 -d -in /home/logs/secret
# Of een andere oplossing:
cat /home/logs/secret | openssl base64 -d
# Of een andere oplossing:
echo "RGUgcHVudGVuIG9wIGRlemUgdnJhYWcgemlqbiBhbCBiaW5uZW4uCg==" | openssl base64 -d
Dit is ook mogelijk maar is volgende de vraag fout, je moet openssl gebruiken.
cat /home/logs/secret | base64 -d
# Of
base64 -d /home/logs/secret
Examenbestanden:
2021 juni examen
Met dank aan ISW
Praktijk test 21-05-2021
Let op, er waren twee testen en dus ook meerdere vragen.
### Vraag 2
1. Maak een CLI oneliner waarmee je alle woorden die uit exact 14 unieke letters bestaan toont. Sorteer het lijstje in omgekeerd alfabetische volgorde. Gebruik hiervoor het bestand /usr/share/dict/dutch.
Daarna pipe je de output van je CLI oneliner in het commando md5sum. In het antwoordveld vul je beide in op deze manier:
oneliner - md5 hash
2 punten
### Vraag 3
1. Maak een CLI oneliner die uit de capture http.pcapng (/home/logs op leia) alle HTTP server strings laat zien en telt die niet de string Apache bevatten als antwoord op je GET requests. Sorteer van groot naar klein.
Sample output:
2 ClientMapServer
1 YouTube Frontend Proxy
1 sffe
1 Kestrel
1 ECS (ams/D1E7)
1 ECS (ams/499C)
1 downloads
1 CloudFront
Daarna pipe je de output van je CLI oneliner in het commando md5sum. In het antwoordveld vul je beide in op deze manier:
oneliner - md5 hash
2 punten
### Vraag 4
1. Maak een CLI oneliner die alle unieke gebruikersnamen toont waarmee geprobeerd werd om in te loggen op de website http://darthvader.uclllabs.be/nw2/private. Maak gebruik van de capture http_basic_auth.pcapng (/home/logs op leia).
Daarna pipe je de output van je CLI oneliner in het commando md5sum. In het antwoordveld vul je beide in op deze manier:
oneliner - md5 hash
2 punten
### Vraag 5
1. Maak een CLI oneliner waarmee je de uitgever, vervaldatum en modulus (in deze volgorde) laat zien van het certificaat van de website https://x.toledo.ucll.be.
Daarna pipe je de output van je CLI oneliner in het commando md5sum. In het antwoordveld vul je beide in op deze manier:
oneliner - md5 hash
2 punten
### Vraag 6
1. Maak een CLI oneliner die de juiste (dus van vandaag) dag en datum toont zoals in onderstaand voorbeeld:
Het is vandaag vrijdag (1996.09.13)
Daarna pipe je de output van je CLI oneliner in het commando md5sum. In het antwoordveld vul je beide in op deze manier:
oneliner - md5 hash
Theorie test 31-05-2021
Algemeen
Dit vak bestaat uit theorielessen en computerzittingen. In de computerzittingen worden er oefeningen gemaakt in Linux, via SSH op een server van school. De leerstof van de praktijk lijkt eerst zot moeilijk, maar zorg gewoon dat je genoeg oefent en durf vragen te stellen en uiteindelijk zal het zichzelf uitwijzen
Het examen bestaat uit twee delen: een theorie-examen op 10 punten in de normale examenperiode en een praktijkexamen in de laatste week van het semester dat eveneens op 10 punten staat. Alles wat bij de Wiki op de pagina theorie staat is te kennen theorie. Er komt sowieso een vraag gebaseerd op hetgeen er in de filmpjes of extra teksten staat. Bij de meerkeuzevragen van het theorie-examen is er is geen giscorrectie, maar alles moet juist zijn om punten te kunnen krijgen. Het aantal juiste antwoorden wordt gegeven. Het is goed mogelijk dat er vragen terugkomen.
Het onderwerp cryptografie is een moeilijk onderdeel van computernetwerken. Als je het niet erg vindt om eens wat te lezen: het boek Computer Networks: A top-down approach is een zeer goed boek.
De puntenverdeling was oorspronkelijk 14 voor het theorie-examen en 6 voor het praktijkexamen. In 2015-2016 werd dit een eerste jaars vak en in schooljaar 2016-2017 veranderde de puntenverdeling naar 10/10 waarbij 10 punten op de theorie en 10 op de labo's.
Computersystemen
2007 oktober examen
In oktober 2007 kreeg men in het vak Computersystemen de volgende test voorgeschoteld:
0007 66A1[4F06] mov eax, [a]
66F72E[5306] imul dword [b]
662B06[5706] sub eax, [c]
7430 jz twee
66A1[5706] een: mov eax, [c]
66F72E[5306] imul dword [b]
663906[5706] cmp [c],eax
74?? je een
66A1[4F06] mov eax, [a]
met [a] = 5, [b] = 2, [c] = 10
1. Wat is de inhoud van de bevelenteller en het bevelregister TIJDENS de uitvoering van het eerste mov-bevel (mov eax, [a])?
2. Wat is de volgende inhoud van de bevelenteller en bevelregister?
3. Wat is de inhoud van bevelenteller en bevelregister net na uitvoering van het eerste sprongbevel (jz twee)?
4. Wat is de inhoud van bevelenteller en bevelregister NET NA de uitvoering van het tweede sprongbevel (je een)?
5. Wat is de volgende inhoud van de bevelenteller en bevelregister?
Ook in 2009 kreeg men een vergelijkbare test.
En ook in 2010 kwam een gelijkaardige vraag op het examen.
2009 januari examen
- wat is het verschil tussen een vertaler en een vertolker + leg uit
- wat is de 2-complement voorstelling van...
- dan moest je nog zo'n adressering kunnen zoals op de voorlaatste test
- een vraag over een autogarage iets, zoals er een gelijke in de boek staat.
- nog iets van de 3d kaarten het verschil tussen een vga en een xvga geloof ik.
- nog een vraag over iets van string naar integer zetten.
- omrekenen van CHS naar LBA-nummer, en omgekeerd
- verschil tussen hyperthreading processoren en multicore-processoren
- de 3 verschillende vormen van RAID
- en nog iets over de bevelenteller en checkbin
2010 januari examen
- Bepaal de binaire voorstellingen van a en b
- Tel de binaire voorstellingen a en b op
- imul dword [b], geef de voorstellingen van eax en edx
- idiv dword [c], geef de voorstellingen van eax en edx
- Waarde bevelenteller zoeken tov bevelregister. Met een positieve jne.
- Een vraag waarin je een stuk code met indexregisters enzo moet schrijven (pagina 75) + schrijf dit stukje code als subroutine + schrijf de oproepende commando's
- Iets over de stapel en waar de instruction pointer staat na een bepaalde handeling( hoofdstuk 4.3)
- Een vraag over de inhoud van het voorgeheugen (pagina 169, "toegepast als voorgeheugen zou dit....") Geef de inhoud als de CVE (bv.) 22DC2A04 vraagt.
- Rekenen met C,H,S ( hoofdstuk 5.8.7) --> een schijf met C, H, S (2042, 8, 63), hoe veel sectoren heeft die + reken LBA 748 om naar (c,h,s)
- Schrijf een programma dat een bestand uitleest en voor elke regel bepaald hoe veel keer i voorkomt (hoofdletter I telt ook mee)
Invoer:
O julissi na jalyni
O julissi na dytini
O bulo diti non slukati
Sestrone dina katsu.
O julissi na ti buku
...
(op het examen stond hier het volledige "lied", maar je snapt het idee wel)
Uitvoer: (12345678... zit NIET mee in uitvoerbestand)
12345678...
3 O julissi na yalyni
4 O julissi na dyntini
3 O bulo diti non slukati
1 Sestrone dina katsu.
0
3 O julissi na ti buku
enz...
- ...
2010 samenvatting commando's - Mattias
Een bestand met de commando's nodig voor de oefeningen met dank aan Mattias: computersystemen comando's.docx.pdf
2011 januari examen
- Gegeven: [ijzel] en [sneeuw] en beiden worden opgeteld of vermenigvuldigd in ebx of eax. Er wordt gevraagd telkens de inhoud van eax en ebx te geven.
- Assembler: Een invoerrecord bevat
- productnaam
- hoeveelheid (in liter)
- aandeel alcohol in ml/l
- een karakter B (bier) of W (wijn.)
- Er wordt gevraagd een uitvoerrecord te schrijven in assembler dat de hoeveelheid ALCOHOL in liter berekent van enkel de wijn.
- Bespreek DIMM
- Geef het schema van een hedendaagse chipset
- Een oefening met bevelenteller en bevelenregister (Hoofdstuk 2?)
- Welke parameters heeft ExitProcess nodig?
- Hoe weet de c.v.e dat het om een directe operand gaat, of om een adres na vertaling? Wat doet het vertaalprogramma? (anders geformuleerd)
- Verschil tussen PCI en PCI-E uitleggen.
- Een oefening waarbij een stuk asm code staat en 2 variabelen met hun inhoud(strings). op deze strings werd movsb en stosb gebruikt en dan moest je de inhoud van een variabele geven na de uitvoering van dat stuk code.
- Noem de verschillende wachttijden van een geheugen en geef ook het voordeel van bloktransfer(+tijdschema van deze wachttijden)
- Debiet berekenen van een harde schijf
2012 januari examen
- Gegeven: 3 constanten: 2 negatieven en 1 positief.
Gevraagd: inhouden van eax en edx geven na bevelen (mov eax, ... ; mov edx, ...; add eax, edx; imul dword ...)
Constanten | Definitie |
---|---|
vos | dd -70 |
kat | dd 57 |
wolf | dd -5 |
- Wat is de inhoud (volledig) van eax en edx na de uitvoering van "mov eax, [vos]; mov edx,[kat]"
- Zelfde vraag als daarna "add edx, [vos]" wordt uitgevoerd
- Zelfde vraag als daarna "imul dword [wolf] wordt uitgevoerd
- Gegeven: Stukje programma(Bevelregisters en de bevelen op dat adres) begin van bevelenteller.
Gevraagd: Bevelenteller geven voor een bevel, en na een bevel, en de 2 verschillend mogelijkheden na een jump-bevel
Adres | Opdracht |
---|---|
A1[9A010000] | mov eax, [a] |
8B1D[9E010000] | mov ebx, [b] |
81FB00000000 | cmp ebx, 0 |
7410 | JE gedaan |
BA00000000 | mov edx, 0 |
... | ... |
A3[A2010000] | gedaan: mov [ggd], eax |
- Na het ophalen van mov eax, [A]
- Na het ophalen van cmp ebx, 0
- Na het uitvoeren van je gedaan (geef beide mogenlijkheden)
- Gegeven: rij met getallen, een getal n wordt ingevoerd.
Gevraagd: getalt op plaats n van de rij teruggeven, door gebruik te maken van subroutine en de stack.
- Gegeven: DIMM met 8 ics van 128 Megabyte, en 8 banks, maximum 4 DIMMS.
Gevraagd: Op welke manier kan FA545300 worden opgedeeld?
- Leg Zone Bit Recording uit.
- Gegeven cache(met blokken van 256 bytes)
dubbelwoord op adres FA057402 vinden.
- Wat zijn de doelstellingen van RAID.
Bespreek RAID-0, RAID-1 en RAID-5 en welke doelstellingen volbrengen ze?
- Gegeven: Een landbouwer heeft verschillende stukken grond.
Schrijf een programma dat als invoer meekrijgt:
* kol. 0-20 : De naam(plaats) waar het stuk grond ligt.
* kol. 22 : De functie van het stuk grond met 1 letter aangegeven(voor dieren of voedsel).
* kol. 24-31 : De oppervlakte
* kol. 33-40 : De prijs
En als uitvoer:
* kol. 6-25: De naam
* kol. 22- Prijs per meter
2013 januari examen
Veel vragen waarbij je het optellen van hexadecimale getallen nodig hebt. Zorg dat je dit vlot kunt!
Vragen i.v.m bevellenteller en bevelregister
Grote vraag om te programmeren.
Wat is lokaliteit? Ook moet je een adres van de GBE ontleden.
2015 januari examen
- Geef de inhoud van EAX en EDX na een MOV-bevel, een ADD-bevel en een IMUL-bevel volledig, dus zowel in binair (als in hexadecimaal) als in decimaal.
- Opgelet: EDX wordt na het IMUL-bevel opgevuld met nullen of enen, naargelang het teken van de inhoud van EAX: is de inhoud van EAX na de vermenigvuldiging negatief, dan is EDX voor de rest opgevuld met enen. Is het resultaat positief, dan zijn dit nullen.
- Gegeven is een beschrijving van een SD-RAM en het hexadecimale adres van een byte. Geef DIMM-nummer, banknummer, rijnummer en kolomnummer van deze byte.
- Zet hiervoor het hexadecimale adres om naar 32-bits binair adres. De eerste 2 bits vormen het DIMM-nummer, de volgende 3 bits het banknummer, de 14 bits daarna het rijnummer en de 10 daarop het kolomnummer. De laatste 3 bits vormen het bytenummer.
- Een vraag over wachttijden en bloktransfer, waarbij CAS "3-2-1" gegeven is.
- Een programmeeroefening in verband met rijen: geef één voor één een rij van 30 dubbelwoorden in en daarna een getal "n". Het n-de getal van de rij moet teruggegeven worden. Bijvoorbeeld bij groep = 1, 20, 300, 4000, 50000 en n = 4, moet als resultaat het vierde element van de rij, dus 4000, teruggegeven worden.
%include "gt.asm"
covar
n: resd 1
uitvoer: resd 1
groep: resd 30 ; hier komen de 30 ingevoerde getallen
een: dd 1
vier: dd 4 ; elk dubbelwoord is twee woorden, en dus 4 bytes, lang
inleiding
mov ecx, 30 ; er worden 30 getallen opgevraagd en na elk getal wordt ECX met 1 verminderd
lus: inv [groep+ebx] ; gebruik hier om het even welk register, maar zorg dat ja de waarde ervan niet overschrijft!
add ebx, [vier] ; tel telkens 4 bij ebx op, zodat het ingevoerde getal na de 4 bytes van het vorig ingevoerde getal komt te staan
loop lus ; deze loop stopt wanneer ecx op 0 staat, in dit geval dus na 30 keer
inv [n]
mov eax, [n]
sub eax, [een] ; trek 1 af van n, want n begint op 0 en niet op 1
imul dword [vier] ; want 1 getal is 4 bytes
uit [groep+eax] ; als n bijvoorbeeld 4 is, dan is groep+eax hier groep+12
- Bereken het aantal MT/s bij een busbreedte van 32 bits en een debiet 66.7 MB/s.
- Leg kort uit waarom het handig is wanneer een processor over een pijplijn beschikt.
- Wat betekent 01020201 in het bevel "MOV EAX, 02010102"? Waarvan is dit afhankelijk?
- Geef de waarde van ESP voor en na een aantal PUSH- en POP-bevelen.
- Let hierbij op de lengte van het register of de waarde die/dat gePUSHt of gePOPt wordt.
- Schrijf voor onderstaande records een uitvoerbestand in de vorm van "75% van onze klanten behoort tot onze doelgroep", waarbij de doelgroep bestaat uit vrouwen die geboren zijn na 1985.
- Hou dus minstens 2 variabelen bij: het aantal vrouwen geboren na 1985, en het totaal aantal klanten. Het percentage klanten dat tot de doelgroep behoort is dan (vrouwen x 100) / totaal.
- Om de jaartallen met 1985 te vergelijken, moet je ze eerst omzetten naar binair. Hiervoor kun je tekstbin gebruiken.
- Om het percentage uit te schrijven, moet dit eerst omgezet worden naar de ASCII-voorstelling. De subroutine die je daarvoor nodig hebt, kun je best van buiten leren.
Kolom 1 - naam Kolom 25 - geslacht en geboortedatum Kolom 50 - totale uitgaven in eurocent
An V1986 5000
Betty V1972 25000
Catherine V1994 1500
Dave M1989 8000
2017 januari examen
- Geef de inhoud van EAX en EDX tijdens een programma met MOV-, ADD-, IMUL, en IDIV bevelen en een voorwaardelijke sprong.
Vergeet niet: Na IMUL DWORD komt het product in EDX:EAX Dit wil zeggen dat als het getal niet in EAX past, het verderloopt in EDX.
Anders wordt EDX opgevuld met 0h of Fh, afhankelijk of het product positief of negatief is. Bij IDIV DWORD, komt uiteraard de rest in EDX
- Geef definities van herlocalisaties, radiale informatiedichtheid (met schets), RC-wachttijd.
- Analyseer een bevraging van het werkgeheugen.
- De stapel: In een subroutine die de absolute waarde van een getal geeft enkele push- en pop-bevelen aanvullen.
Wat je op een stapel zet, met push, komt telkens bovenaan de stapel. Daarom moet je aan het eind van je subroutine de elementen in omgekeerde volgorde van het pushen terug afhalen met pop (telkens het bovenste)
- Vervolg op vorige: De waarde van de EIP (Instruction Pointer geven) na enkele push- en pop-bevelen
Hier is het van belang de grootte van registers (eax, ax, al)... goed te kennen. Ook niet vergeten dat als je pusht, de EIP verlaagt, als je popt, de EIP verhoogt.
- Grote programmeeropdracht
- Je krijgt een invoerbestand waarin op iedere rij een getal staat. Je moet voor ieder getal bepalen of het getal een deel is van de rij van Fibonacci. Je mag de eerste twee getallen (0 en 1) als constanten gebruiken.
INVOER:
Kolom 7 |
34
89
7
13
UITVOER:
34 IS HET 10e GETAL VAN FIBONACCI
89 IS HET 14e GETAL VAN FIBONACCI
7 IS GEEN GETAL VAN FIBONACCI
13 IS HET 8e GETAL VAN FIBONACCI
2018 januari examen
Geef definities van:
- native command queuing
- multithreading
- wet van moore
- principe van lokaliteit
- Geef de inhoud van EAX en EDX tijdens een programma met MOV-, ADD-, IMUL, en IDIV bevelen en een voorwaardelijke sprong.
Vergeet niet: Na IMUL DWORD komt het product in EDX:EAX Dit wil zeggen dat als het getal niet in EAX past, het verderloopt in EDX.
Anders wordt EDX opgevuld met 0h of Fh, afhankelijk of het product positief of negatief is. Bij IDIV DWORD, komt uiteraard de rest in EDX
- Vraag over de stapel
- In een programma de vlaggen
- Raid-0 Raid-1 Raid-5: Bij elk zeggen wat de invloed is op betrouwbaarheid en snelheid van lezen of schrijven. Ook uitleggen.
- Grote programmeer oefening
2018 oefeningen hoofdstuk 3 rijen oplossingen
RIJEN
Hoger of lager of gemiddeld?
----------------------------
Schrijf een programma dat 6 getallen inleest en de volgende getallen berekent en toont:
Het gemiddelde
Hoeveel getallen groter zijn dan het gemiddelde
Hoeveel getallen kleiner zijn dan het gemiddelde
%include "gt.asm"
covar
gemiddelde: resd 1
groterdangemiddelde: resd 1
kleinerdangemiddelde: resd 1
getal: resd 6
een: dd 1
zes: dd 6
inleiding
mov eax, 0
mov ecx, [zes]
mov edi, 0
hoger:
cmp ecx, 0
jle verder
inv [getal + edi]
add eax, [getal + edi]
add edi, 4
sub ecx, 1
jmp hoger
verder:
imul dword [een]
idiv dword [zes]
mov [gemiddelde], eax
mov edi, 0
mov ebx, 0
mov edx, 0
mov ecx, [zes]
lus:
cmp ecx, 0
jle einde
mov eax, [getal + edi]
add edi, 4
sub ecx, 1
cmp eax, [gemiddelde]
jl kleinerdan
jg groterdan
je lus
kleinerdan:
add ebx, 1
jmp lus
groterdan:
add edx, 1
jmp lus
einde:
mov [kleinerdangemiddelde], ebx
mov [groterdangemiddelde], edx
uit [gemiddelde]
uit [groterdangemiddelde]
uit [kleinerdangemiddelde]
slot
Sorteren
--------
Schrijf een programma dat 7 getallen inleest en deze gesorteerd van klein naar groot afdrukt. Om te sorteren kan men als volgt te werk gaan:
doe 6 maal:
{ i = 0;
doe 6 maal
{ vergelijk element(i) met element(i+1);
if (element(i) > element(i+1) {
verwissel;
}
i = i + 1;
}
}
%include "gt.asm"
covar
getal: resd 7
inleiding
mov ecx, 7
mov edi, 0
invoer:
jle ordenen
inv [getal + edi]
add edi, 4
loop invoer
ordenen:
mov eax, 6
grotelus:
cmp eax, 0
jle uitvoer
lus:
mov ecx, 6
mov edi, 0
grootstnaarachteren:
cmp ecx, 0
jle volgendelus
mov edx, [getal + edi]
add edi, 4
cmp edx, [getal + edi]
jle grootstnaarachteren
mov ebx, [getal + edi]
mov [getal + edi], edx
sub edi, 4
mov [getal + edi], ebx
add edi, 4
sub ecx, 1
jmp grootstnaarachteren
volgendelus:
sub eax, 1
jmp grotelus
uitvoer:
mov edi, 0
mov ecx, 7
lustwee:
cmp ecx, 0
jle einde
uit [getal + edi]
add edi, 4
sub ecx, 1
jmp lustwee
einde:
slot
MOVSB/STOSB
1
-------
Wat staat er in het geheugen als achtereenvolgens onderstaande instructies worden uitgevoerd?
GEHEUGENINHOUD (initieel, hexadecimaal)
Initieel is de inhoud van het geheugen:
a: 19 1B 1E ?? ?? 1C ?? 26 ??
PROGRAMMA
De volgende instructies worden uitgevoerd.
std
mov edi, a+6
mov eax, Dh
mov ecx, 2
rep stosb
GEHEUGENINHOUD (na uitvoering, hexadecimaal)
Vul aan:
a: 19 1B 1E ?? ?? 0D 0D 26 ??
2
-------
Wat staat er in het geheugen als achtereenvolgens onderstaande instructies worden uitgevoerd?
GEHEUGENINHOUD (initieel, hexadecimaal)
Initieel is de inhoud van het geheugen:
a: ?? 23 ?? 20 ?? 1D 27 ?? ?? ?? 22
PROGRAMMA
De volgende instructies worden uitgevoerd.
std
mov edi, a+7
mov eax, 18h
mov ecx, 7
rep stosb
GEHEUGENINHOUD (na uitvoering, hexadecimaal)
Vul aan:
a: ?? 18 18 18 18 18 18 18 ?? ?? 22
3
-------
Wat staat er in het geheugen als achtereenvolgens onderstaande instructies worden uitgevoerd?
GEHEUGENINHOUD (initieel, hexadecimaal)
Initieel is de inhoud van het geheugen:
a: 1C 21 ?? 1A 15 25 ?? 1D 1F 1B 1F
PROGRAMMA
De volgende instructies worden uitgevoerd.
std
mov edi, a+9
mov eax, 10h
mov ecx, 10
rep stosb
GEHEUGENINHOUD (na uitvoering, hexadecimaal)
Vul aan:
a: 10 10 10 10 10 10 10 10 10 10 1F
4
--------
Wat staat er in het geheugen als achtereenvolgens onderstaande instructies worden uitgevoerd?
GEHEUGENINHOUD (initieel, hexadecimaal)
Initieel is de inhoud van het geheugen:
a: ?? 1D 27 ?? 1F ?? ?? ??
PROGRAMMA
De volgende instructies worden uitgevoerd.
cld
mov edi, a+4
mov eax, 1Dh
mov ecx, 4
rep stosb
GEHEUGENINHOUD (na uitvoering, hexadecimaal)
Vul aan:
a: ?? 1D 27 ?? 1D 1D 1D 1D
5
--------
Wat staat er in het geheugen als achtereenvolgens onderstaande instructies worden uitgevoerd?
GEHEUGENINHOUD (initieel, hexadecimaal)
Initieel is de inhoud van het geheugen:
a: 25 ?? ?? 26 16 1F 26 26 ?? ?? ??
PROGRAMMA
De volgende instructies worden uitgevoerd.
std
mov edi, a+9
mov eax, Fh
mov ecx, 3
rep stosb
GEHEUGENINHOUD (na uitvoering, hexadecimaal)
Vul aan:
a: 25 ?? ?? 26 16 1F 26 0F 0F 0F ??
6
--------
Wat staat er in het geheugen als achtereenvolgens onderstaande instructies worden uitgevoerd?
GEHEUGENINHOUD (initieel, hexadecimaal)
Initieel is de inhoud van het geheugen:
a: 26 20 22 21 23 25 20 ?? ?? 16 14
b: 18 1D 23 14 1A 23 1B 1B
PROGRAMMA
De volgende instructies worden uitgevoerd.
cld
mov edi, a+5
mov esi, b+2
mov ecx, 5
rep movsb
GEHEUGENINHOUD (na uitvoering, hexadecimaal)
Vul aan:
a: 26 20 22 21 23 23 14 1A 23 1B 14
b: 18 1D 23 14 1A 23 1B 1B
STRINGS
Karakterstrings
----------------
Schrijf een programma dat afdrukt:
WHO IS MY TAILOR?
MY TAILOR IS CHRISTIAN DIOR
MY TAILOR IS RICH
IS MY TAILOR RICH?
Definieer zo weinig mogelijk karakterstrings, bvb.:
'MY TAILOR?'
'IS RICH'
'WHO'
'CHRISTIAN DIOR'
%include "gt.asm"
covar
outarea: times 70 db (' ')
db 0Dh, 0Ah
mytailor: db 'MY TAILOR?'
isrich: db 'IS RICH'
who: db 'WHO'
christiandior: db 'CHRISTIAN DIOR'
lchristiandior: EQU $-christiandior
inleiding
openuit
cld
mov ecx, 70
mov al, ' '
mov edi, outarea
rep stosb
mov ecx, 3
mov esi, who
mov edi, outarea
rep movsb
mov ecx, 2
mov esi, isrich
mov edi, outarea+4
rep movsb
mov ecx, 10
mov esi, mytailor
mov edi, outarea+7
rep movsb
schrijf
mov ecx, 17
mov al, ' '
mov edi, outarea
rep stosb
mov ecx, 9
mov esi, mytailor
mov edi, outarea
rep movsb
mov ecx, 2
mov esi, isrich
mov edi, outarea+10
rep movsb
mov ecx, lchristiandior
mov esi, christiandior
mov edi, outarea+13
rep movsb
schrijf
mov ecx, 17
mov al, ' '
mov edi, outarea+10
rep stosb
mov ecx, 7
mov esi, isrich
mov edi, outarea+10
rep movsb
schrijf
mov ecx, 24
mov al, ' '
mov edi, outarea
rep stosb
mov ecx, 2
mov esi, isrich
mov edi, outarea
rep movsb
mov ecx, 9
mov esi, mytailor
mov edi, outarea+3
rep movsb
mov ecx, 4
mov esi, isrich+3
mov edi, outarea+13
rep movsb
mov ecx, 1
mov esi, mytailor+9
mov edi, outarea+17
rep movsb
schrijf
slot
BESTANDEN
Letters zoeken...
-----------------
Invoer: een bestand met 1 lijn tekst van 70 karakters, bvb.:
Het spaanse graan heeft de orkaan doorstaan...
Schrijf een programma dat telt hoeveel keer de letter 'a' voorkomt. Toon de uitvoer aan de gebruiker.
%include "gt.asm"
covar
inarea: resb 70
hulpd: resd 1
inleiding
openin
lees
cld
mov eax, 0
mov ebx, 0
mov ecx, 70
mov edi, 0
mov al, 'a'
lus:
cmp al, [inarea + edi]
jne verder
add ebx, 1
verder:
add edi, 1
loop lus
mov [hulpd], ebx
uit [hulpd]
slot
Klinkers zoeken
---------------
Herschrijf de vorige oefening om alle klinkers (a,e,i,o,u) te tellen.
%include "gt.asm"
covar
inarea: resb 70
hulpd: resd 1
inleiding
openin
lees
cld
mov eax, 0
mov ebx, 0
mov ecx, 70
mov edi, 0
lus:
mov al, 'a'
cmp al, [inarea + edi]
je gelijk
mov al, 'e'
cmp al, [inarea + edi]
je gelijk
mov al, 'i'
cmp al, [inarea + edi]
je gelijk
mov al, 'o'
cmp al, [inarea + edi]
je gelijk
mov al, 'u'
cmp al, [inarea + edi]
je gelijk
jmp verder
gelijk:
add ebx, 1
verder:
add edi, 1
loop lus
mov [hulpd], ebx
uit [hulpd]
slot
Woorden zoeken
--------------
Schrijf een programma dat een woord uitleest uit het invoerbestand. Het woord staat op de eerste lijn (die verder uit allemaal spaties bestaat). Lees dan het bestand verder uit, en tel hoe vaak het woord nog voorkomt in de rest van de tekst. Toon het resultaat aan de gebruiker. (Elke lijn bevat één woord gevolgd door spaties.)
%include "gt.asm"
covar
inarea: resb 70
woord: resb 70
aantal: dd 1
een: dd 1
zeventig: dd 70
inleiding
openin
mov ebx, 0
lees
cld
mov ecx, 70
mov esi, inarea
mov edi, woord
rep movsb
lezen:
lees
cmp eax, 0
je einde
mov ecx, 70
mov esi, 0
lus:
mov al, [woord + esi]
cmp al, [inarea + esi]
jne lezen
add esi, 1
loop lus
add ebx, 1
jmp lezen
einde:
mov [aantal], ebx
uit [aantal]
slot
STRINGS IN BESTANDEN
Tel op
------
Schrijf een programma dat 2 getallen leest via inv en de som afdrukt in het uitvoerbestand. De getallen bestaan uit niet meer dan 5 cijfers. Als uitvoer willen we:
HET EERSTE GETAL IS: 39
HET TWEEDE GETAL IS: 40
===========================
DE SOM IS: 79
%include "gt.asm"
covar
outarea: resb 70
db 0Dh, 0Ah
getal1: resd 1
getal2: resd 1
som: resd 1
tekstgetal1: db 'HET EERSTE GETAL IS:'
tekstgetal2: db 'HET TWEEDE GETAL IS:'
tekstsom: db 'DE SOM IS:'
inleiding
openuit
inv [getal1]
inv [getal2]
; som
mov eax, [getal1]
add eax, [getal2]
mov [som], eax
; eerste getal
cld
call legelijn
mov ecx, 20
mov esi, tekstgetal1
mov edi, outarea
rep movsb
mov eax, [getal1]
call omzetascii
schrijf
; tweede getal
call legelijn
mov ecx, 20
mov esi, tekstgetal2
mov edi, outarea
rep movsb
mov eax, [getal2]
call omzetascii
schrijf
; lijn
call legelijn
mov ecx, 27
mov al, '='
mov edi, outarea
rep stosb
schrijf
; som twee getallen
call legelijn
mov ecx, 10
mov esi, tekstsom
mov edi, outarea
rep movsb
mov eax, [som]
call omzetascii
schrijf
slot
legelijn:
mov ecx, 70
mov al, ' '
mov edi, outarea
rep stosb
ret
omzetascii:
mov edi, outarea + 27
std
mov ebx, 10
lus:
mov edx, 0
idiv ebx
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus
cld
ret
BTW-berekening
--------------
Invoer (meerdere lijnen):
kol 1-20: naam
kol 31-40: inkomen
Uitvoer (voor ieder invoerrecord):
kol 1-20: naam (idem als invoer)
kol 31-40: inkomen (idem als invoer)
kol 42-50: belasting
Deze belasting wordt als volgt berekent:
Als inkomen <= 2500, dan is belasting = 0
Als inkomen > 2500 en <= 5000, dan is belasting = (inkomen - 2500) * 10%
Als inkomen > 5000 en <= 10000, dan is belasting = (inkomen - 5000) * 20% + 250
Als inkomen > 10000, dan is belasting = (inkomen - 10000) * 40% + 1250
%include "gt.asm"
covar
inarea: resb 70
outarea: resb 70
db 0Dh, 0Ah
een: dd 1
tien: dd 10
twintig: dd 20
veertig: dd 40
honderd: dd 100
inleiding
openin
openuit
invoerbestand:
lees
cmp eax, 0
je einde
; uitvoer leeg maken
cld
mov ecx, 70
mov al, ' '
mov edi, outarea
rep stosb
; naam en inkomen kopiëren
mov ecx, 40
mov esi, inarea
mov edi, outarea
rep movsb
; inkomen (string naar integer)
mov ecx, 10
mov esi, inarea + 30
tekstbin
; belasting berekenen
cmp eax, 2500
jle eerste
cmp eax, 5000
jle tweede
cmp eax, 10000
jle derde
jmp vierde
eerste:
mov eax, 0
jmp verder
tweede:
sub eax, 2500
imul dword [tien]
idiv dword [honderd]
jmp verder
derde:
sub eax, 5000
imul dword [twintig]
idiv dword [honderd]
add eax, 250
jmp verder
vierde:
sub eax, 10000
imul dword [veertig]
idiv dword [honderd]
add eax, 1250
; belasting (integer naar string)
verder:
mov edi, outarea + 49
lus:
std
mov edx, 0
idiv dword [tien]
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus
schrijf
jmp invoerbestand
einde:
slot
Loonberekening
--------------
Maak een invoerbestand met meerdere lijnen als volgt:
kol 1-20: naam
kol 21-25: aantal dagen
kol 31-35: dagloon
1) Schrijf een programma dat de eerste record van dit invoerbestand leest en afdrukt. De uitvoer wordt dus:
kol 1-35: idem als op invoerrecord
kol 36-70: blanco
2) Wijzig uw programma zodat nu het invoerbestand record per record afgedrukt wordt.
3) Voeg volgende functie toe aan uw programma: voor ieder invoerrecord wordt nu ook het brutoloon (= aantal-dagen * dagloon) berekend en afgedrukt in kol 42-50.
4) Voeg volgende functie toe aan uw programma: voor ieder invoerrecord wordt nu ook de afhouding (= brutoloon * 40%) berekend en afgedrukt in kol 52-60.
5) Voeg volgende functie toe aan uw programma: nadat de gegevens van het laatste invoerrecord verwerkt (en afgedrukt) zijn, wordt er: (a) een blanco lijn gedrukt, en (b) het totaal van de kolommen brutoloon en afhouding afgedrukt.
Het is verboden de bevelen voor een volgend punt in te typen zonder dat men er zich van vergewist heeft dat de voorgaande punten perfect opgelost zijn!
%include "gt.asm"
covar
inarea: resb 70
outarea: resb 70
db 0Dh, 0Ah
hulp: resd 1
brutoloon: resd 1
afhouding: resd 1
tien: dd 10
veertig: dd 40
honderd: dd 100
inleiding
openin
openuit
; nog invoer?
invoerbestand:
lees
cmp eax, 0
je einde
; uitvoer leeg
cld
call leeg
; copy invoer to uitvoer
mov ecx, 35
mov esi, inarea
mov edi, outarea
rep movsb
; aantal dagen to integer
mov ecx, 5
mov esi, inarea + 20
tekstbin
mov [hulp], eax
; dagloon to integer
mov ecx, 5
mov esi, inarea + 30
tekstbin
; brutoloon berekenen
imul dword [hulp]
mov [hulp], eax
mov ebx, [brutoloon]
add ebx, eax
mov [brutoloon], ebx
; brutoloon afdrukken
mov edi, outarea + 49
call omzetascii
; afhouding berekenen
mov eax, [hulp]
imul dword [veertig]
idiv dword [honderd]
mov ebx, [afhouding]
add ebx, eax
mov [afhouding], ebx
; afhouding afdrukken
mov edi, outarea + 59
call omzetascii
schrijf
jmp invoerbestand
einde:
; blanco lijn
call leeg
schrijf
; totaal brutoloon afdrukken
mov eax, [brutoloon]
mov edi, outarea + 49
call omzetascii
; totaal afhouding afdrukken
mov eax, [afhouding]
mov edi, outarea + 59
call omzetascii
schrijf
slot
leeg:
mov ecx, 70
mov al, ' '
mov edi, outarea
rep stosb
ret
omzetascii:
std
lus:
mov edx, 0
idiv dword [tien]
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus
cld
ret
2018 oefeningen hoofdstuk 4 de stapel oplossingen
DE STAPEL
Korte vraag
-----------
Gegeven volgend programma om de rij van Fibonacci te berekenen:
fibGetallen: dd 0
dd 1
resd 98
...
mov ecx, 98
mov eax, fibGetallen + 8
lus: push eax
call berekenVolgendFibGetal
add eax, 4
loop lus
De code definieert een rij van 100 getallen, waarvan de eerste twee getallen (0 en 1) als constanten gedefiniëerd worden. De volgende 98 getallen worden berekend door middel van een lus waar telkens de 'berekenVolgendFibGetal'-methode opgeroepen wordt. Deze methode berekent één getal. Het adres waar het te berekenen getal moet worden opgeslagen wordt via de stapel doorgegeven. De methode kan dan aan de hand van dat adres (dat dus wijst naar een getal in de 'fibGetallen'-rij) de twee voorgaande getallen ophalen, optellen en het resultaat wegschrijven.
Teken de inhoud van de stack op de moment dat de subroutine 'berekenVolgendFibGetal' begint. Vul daarna de subruoutine aan:
berekenVolgendFibGetal:
push ebp
mov ebp, esp
push eax
push esi
; kopieer het adres van het ide
; getal (dat op de stack staat)
; naar ESI
mov esi, [ebp + 8]
; kopieer de waarde van het getal
; ervoor naar eax
mov eax, [esi - 4]
; tel de waarde van het getal dat
; twee plaatsen ervoor staat erbij op
add eax, [esi - 8]
; kopieer de berekende waarde naar de array
mov [esi], eax
pop esi
pop eax
pop ebp
ret 4
De stapelwijzer (1)
-------------------
Bepaal voor onderstaand stuk code de uiteindelijke waarde van de stapelwijzer (register ESP), als je weet dat de initiële waarde van ESP 0000029Ah is.
PROGRAMMA
De volgende instructies worden uitgevoerd.
pop ecx
push dword [520h]
sub eax, [404h]
idiv dword [404h]
pop ah
pop ch
mov eax, [520h]
STAPELWIJZER (na uitvoering, in hexadecimaal)
De waarde van ESP is:
0000029C
De stapelwijzer (2)
-------------------
Bepaal voor onderstaand stuk code de uiteindelijke waarde van de stapelwijzer (register ESP), als je weet dat de initiële waarde van ESP 0000011Ah is.
PROGRAMMA
De volgende instructies worden uitgevoerd.
pop dword [700h]
push dword [248h]
pop dl
push dword [700h]
pop cx
add eax, [248h]
STAPELWIJZER (na uitvoering, in hexadecimaal)
De waarde van ESP is:
00000119
De stapelwijzer (3)
-------------------
Bepaal voor onderstaand stuk code de uiteindelijke waarde van de stapelwijzer (register ESP), als je weet dat de initiële waarde van ESP 0000016Ch is.
PROGRAMMA
De volgende instructies worden uitgevoerd.
pop dword [62Ch]
pop al
add eax, [62Ch]
push dword [62Ch]
push dword [438h]
push dword [408h]
pop dword [62Ch]
STAPELWIJZER (na uitvoering, in hexadecimaal)
De waarde van ESP is:
00000169
De stapelwijzer (4)
-------------------
Bepaal voor onderstaand stuk code de uiteindelijke waarde van de stapelwijzer (register ESP), als je weet dat de initiële waarde van ESP 0000006Eh is.
PROGRAMMA
De volgende instructies worden uitgevoerd.
pop dword [324h]
idiv dword [324h]
add eax, 5
mov [324h], eax
push bl
sub eax, 39
add eax, [324h]
idiv dword [61Ch]
STAPELWIJZER (na uitvoering, in hexadecimaal)
De waarde van ESP is:
00000071
De stapelwijzer (5)
-------------------
Bepaal voor onderstaand stuk code de uiteindelijke waarde van de stapelwijzer (register ESP), als je weet dat de initiële waarde van ESP 0000025Ah is.
PROGRAMMA
De volgende instructies worden uitgevoerd.
push dword [208h]
push dword [208h]
mov eax, 53
push dword [924h]
imul dword [908h]
STAPELWIJZER (na uitvoering, in hexadecimaal)
De waarde van ESP is:
0000024E
De stapelwijzer (6)
-------------------
Bepaal voor onderstaand stuk code de uiteindelijke waarde van de stapelwijzer (register ESP), als je weet dat de initiële waarde van ESP 000002A4h is.
PROGRAMMA
De volgende instructies worden uitgevoerd.
add eax, 27
pop ah
idiv dword [73Ch]
push ch
imul dword [638h]
pop dword [638h]
sub eax, [73Ch]
sub [638h], eax
STAPELWIJZER (na uitvoering, in hexadecimaal)
De waarde van ESP is:
000002A8
SUBROUTINES
ASCII-omzetting
---------------
Het stukje programma om een integer om te rekenen naas ASCII komt in vele programma's (soms meermaals) voor. Schrijf een programma dat een getal aan de gebruiker vraagt, dit getal omzet naar ASCII, en wegschrijft naar een uitvoerbestand. Zorg er voor dat het stukje code dat gebruikt wordt om een getal om te zetten naar ASCII als een subroutine geschreven is (d.w.z.: met call en ret instructies). Het getal dat de gebruiker invoert is niet langer dan 10 cijfers.
%include "gt.asm"
covar
outarea: resb 70
db 0Dh, 0Ah
getal: resd 1
inleiding
openuit
call leeg
inv [getal]
push dword [getal]
push dword 9
call omzetascii
schrijf
slot
leeg:
cld
mov ecx, 70
mov al, ' '
mov edi, outarea
rep stosb
ret
omzetascii:
push ebp
mov ebp, esp
push eax
push ebx
push edx
push edi
mov eax, [ebp + 12]
std
mov edi, outarea
add edi, [ebp + 8]
mov ebx, 10
lus:
mov edx, 0
idiv dword ebx
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus
pop edi
pop edx
pop ebx
pop eax
pop ebp
ret 8
Grootste gemene deler
---------------------
Schrijf een programma dat aan de gebruiker twee getallen vraagt, de grootste gemene deler ervan berekent, en het resultaat aan de gebruiker toont. Zorg er voor dat het stukje code dat gebruikt wordt om de grootste gemene deler te berekenen als een subroutine geschreven is. Je kan hiervoor je code van de oefeningen van hoofdstuk 2 hergebruiken. Zorg er voor dat de twee getallen via registers EAX en EBX aan de subroutine doorgegeven worden. Het resultaat van de subroutine komt in register EDX. Na uitvoering van de subroutine mag enkel de waarde van register EDX aangepast zijn.
%include "gt.asm"
covar
getaleen: resd 1
getaltwee: resd 1
ggd: resd 1
inleiding
inv [getaleen]
inv [getaltwee]
mov eax, [getaleen]
mov ebx, [getaltwee]
push dword edx
push dword eax
push dword ebx
call grootstegemenedeler
pop dword edx
mov [ggd], edx
uit [ggd]
slot
grootstegemenedeler:
push ebp
mov ebp, esp
push eax
push ebx
push edx
mov eax, [ebp + 12]
mov ebx, [ebp + 8]
mov [ebp + 16], ebx
terug:
cmp ebx, 0
je verder
mov edx, 0
mov [ebp + 16], ebx
idiv dword [ebp + 16]
mov eax, ebx
mov ebx, edx
jmp terug
verder:
pop edx
pop ebx
pop eax
pop ebp
ret 8
Kleinste gemene veelvoud
------------------------
Schrijf een programma dat aan de gebruiker twee getallen vraagt, het kleinste gemene veelvoud ervan berekent, en het resultaat aan de gebruiker toont. Zorg er voor dat het stukje code dat gebruikt wordt om het kleinste gemene veelvoud te berekenen als een subroutine geschreven is. Je kan hiervoor je code van de oefeningen van hoofdstuk 2 en van de vorige oefening hergebruiken. Zorg er voor dat de twee getallen via registers EAX en EBX aan de subroutine doorgegeven worden. Het resultaat van de subroutine komt in register ECX. Na uitvoering van de subroutine mag enkel de waarde van register ECX aangepast zijn.
%include "gt.asm"
covar
getaleen: resd 1
getaltwee: resd 1
ggd: resd 1
kgv: resd 1
inleiding
inv [getaleen]
inv [getaltwee]
mov eax, [getaleen]
mov ebx, [getaltwee]
push dword ecx
push dword edx
push dword eax
push dword ebx
call kleinstegemeneveelvoud
pop dword ecx
mov [kgv], ecx
uit [kgv]
slot
kleinstegemeneveelvoud:
push ebp
mov ebp, esp
push eax
push ebx
push edx
mov eax, [ebp + 12]
mov ebx, [ebp + 8]
mov [ebp + 16], ebx
terug:
cmp ebx, 0
je verder
mov edx, 0
mov [ebp + 16], ebx
idiv dword [ebp + 16]
mov eax, ebx
mov ebx, edx
jmp terug
verder:
mov ebx, 1
mov eax, [ebp + 12]
imul dword [ebp + 8]
imul dword ebx
idiv dword [ebp + 16]
mov [ebp + 20], eax
pop edx
pop ebx
pop eax
pop ebp
ret 12
Faculteit
---------
Schrijf een programma dat aan de gebruiker een waarde, n, vraagt, n! berekent, en het resultaat toont.
n! = n * (n-1) * (n-2) * ... * 3 * 2 * 1
Zorg er voor dat het stukje code dat gebruikt wordt om n! te berekenen als een subroutine geschreven is.
%include "gt.asm"
covar
n: resd 1
nuitroepteken: resd 1
inleiding
inv [n]
push dword [nuitroepteken]
push dword [n]
call nfaculteit
pop dword [nuitroepteken]
uit [nuitroepteken]
slot
nfaculteit:
push ebp
mov ebp, esp
push eax
push ebx
mov ebx, [ebp + 8]
mov eax, 1
lus:
cmp ebx, 1
jg rekenen
jmp einde
rekenen:
imul dword ebx
sub ebx, 1
jmp lus
einde:
mov [ebp + 12], eax
pop ebx
pop eax
pop ebp
ret 4
2019 oplossingen oefeningen
Met dank aan de Github van Martijn
Bestanden:
Invoer: een bestand met 1 lijn tekst van 70 karakters, bvb.:
Het spaanse graan heeft de orkaan doorstaan...
Schrijf een programma dat telt hoeveel keer de letter 'a' voorkomt. Toon de uitvoer aan de gebruiker.
%include 'gt.asm'
covar
inarea: resb 70
uitvoer: resd 1
inleiding
openin
lees
cld
sub eax, eax
sub esi, esi
sub ebx, ebx
mov al, 'a'
mov ecx, 70
terug:
cmp al, [inarea + esi]
jne verder
add ebx, 1
verder:
add esi, 1
sub ecx, 1
cmp ecx, 0
je einde
jmp terug
einde:
mov [uitvoer], ebx
uit [uitvoer]
slot
Herschrijf de vorige oefening om alle klinkers (a,e,i,o,u) te tellen.
%include 'gt.asm'
covar
inarea: resb 70
uitvoer: resd 1
inleiding
openin
lees
cld
sub eax, eax
sub esi, esi
sub ebx, ebx
mov al, 'a'
mov ecx, 70
terug:
mov al, 'a'
cmp al, [inarea + esi]
je verder
mov al, 'e'
cmp al, [inarea + esi]
je verder
mov al, 'i'
cmp al, [inarea + esi]
je verder
mov al, 'o'
cmp al, [inarea + esi]
je verder
mov al, 'u'
cmp al, [inarea + esi]
je verder
jmp skip
verder:
add ebx, 1
skip:
add esi, 1
sub ecx, 1
cmp ecx, 0
je einde
jmp terug
einde:
mov [uitvoer], ebx
uit [uitvoer]
slot
Schrijf een programma dat een woord uitleest uit het invoerbestand. Het woord staat op de eerste lijn (die verder uit allemaal spaties bestaat). Lees dan het bestand verder uit, en tel hoe vaak het woord nog voorkomt in de rest van de tekst. Toon het resultaat aan de gebruiker. (Elke lijn bevat één woord gevolgd door spaties.)
%include 'gt.asm'
covar
inarea: resb 70
uitvoer: resd 1
inleiding
openin
lees
cld
sub eax, eax
sub esi, esi
sub ebx, ebx
sub edx, edx
mov al, 'a'
mov ecx, 10
terug:
mov al, [inarea + edi]
cmp al, [inarea + esi]
jne verder
add ebx, 1
verder:
add esi, 1
sub ecx, 1
cmp ecx, 0
je next
jmp terug
next:
add edi, 70
sub edx, 1
cmp edx, 0
je einde
einde:
mov [uitvoer], ebx
uit [uitvoer]
slot
Rijen:
Schrijf een programma dat 9 getallen inleest en de volgende getallen berekent en toont:
Het gemiddelde
Hoeveel getallen groter zijn dan het gemiddelde
Hoeveel getallen kleiner zijn dan het gemiddelde
%include "gt.asm"
covar
getal: resd 9
ding: resd 1
meer: resd 1
minder: resd 1
negen: dd 9
een: dd 1
inleiding
sub ecx, ecx
sub eax, eax
sub edi, edi
mov ecx, 9
hoger:
cmp ecx, 0
jle verder
inv[getal + edi]
add eax, [getal + edi]
add edi, 4
sub ecx, 1
jmp hoger
verder:
mov [ding], eax
imul dword [een]
idiv dword [negen]
mov [ding], eax
mov ecx, 9
sub edi, edi
terug:
mov eax, [ding]
cmp eax, [getal + edi]
jl nogverder
je natel
sub eax, eax
add eax, 1
add [meer], eax
add edi, 4
jmp na
nogverder:
mov eax, [ding]
cmp eax, [getal + edi]
sub eax, eax
add eax, 1
add [minder], eax
natel:
add edi, 4
na:
loop terug
uit [ding]
uit [minder]
uit [meer]
slot
Schrijf een programma dat 6 getallen inleest en deze gesorteerd van klein naar groot afdrukt. Om te sorteren kan men als volgt te werk gaan:
doe 5 maal:
{ i = 0;
doe 5 maal
{ vergelijk element(i) met element(i+1);
if (element(i) > element(i+1) {
verwissel;
}
i = i + 1;
}
}
%include "gt.asm"
covar
getal: resd 6
nul: dd 0
hulp1: resd 1
hulp2: resd 2
teller: resd 1
inleiding
sub esi, esi
sub ecx, ecx
inv [getal]
inv [getal + 4]
inv [getal + 8]
inv [getal + 12]
inv [getal + 16]
inv [getal + 20]
begin:
sub ecx, ecx
sub esi, esi
vergelijk:
cmp ecx, 5
je verder
mov eax, [getal + esi]
mov edx, [getal + esi + 4]
cmp eax, edx
jle skip
mov [getal + esi + 4], eax
mov [getal + esi], edx
skip:
add ecx, 1
add esi, 4
jmp vergelijk
verder:
sub ecx, ecx
mov ecx, [teller]
add ecx, 1
mov [teller], ecx
cmp ecx, 5
jle begin
uit [getal]
uit [getal + 4]
uit [getal + 8]
uit [getal + 12]
uit [getal + 16]
uit [getal + 20]
slot
Strings in bestanden:
Schrijf een programma dat 2 getallen leest via inv en de som afdrukt in het uitvoerbestand. De getallen bestaan uit niet meer dan 5 cijfers. Als uitvoer willen we:
HET EERSTE GETAL IS: 39
HET TWEEDE GETAL IS: 40
===========================
DE SOM IS: 79
%include "gt.asm"
covar
hulp: resd 1
getal1: resd 1
getal2: resd 2
inarea: resb 70
outarea: resb 70
db 13,10
vb1: dd "HET EERSTE GETAL IS:"
vb2: dd "HET TWEEDE GETAL IS:"
vb3: dd "DE SOM IS: "
spatie: dd " "
lijn: dd "==========================="
som: dd "DE SOM IS:"
inleiding
openuit
inv[getal1]
inv[getal2]
# EERSTE GETAL
cld
mov ecx, 70
mov al, " "
mov edi, outarea
rep stosb
mov ecx, 20
mov esi, vb1
mov edi, outarea
rep movsb
mov eax, [getal1]
mov edi, outarea + 27
std
mov ebx, 10
lus: mov edx, 0
idiv ebx
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus
schrijf
# TWEEDE GETAL
cld
mov ecx, 70
mov al, " "
mov edi, outarea
rep stosb
mov ecx, 20
mov esi, vb2
mov edi, outarea
rep movsb
mov eax, [getal2]
mov edi, outarea + 27
std
mov ebx, 10
lus1: mov edx, 0
idiv ebx
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus1
schrijf
# STREEP
cld
mov ecx, 70
mov al, " "
mov edi, outarea
rep stosb
cld
mov ecx, 27
mov al, "="
mov edi, outarea
rep stosb
schrijf
# SOM
cld
mov ecx, 70
mov al, " "
mov edi, outarea
rep stosb
mov ecx, 20
mov esi, vb3
mov edi, outarea
rep movsb
mov eax, [getal1]
add eax, [getal2]
mov edi, outarea + 27
std
mov ebx, 10
lus2: mov edx, 0
idiv ebx
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus2
schrijf
slot
;BELASTING BEREKENEN
Invoer (meerdere lijnen):
kol 1-20: naam
kol 31-40: inkomen
Uitvoer (voor ieder invoerrecord):
kol 1-20: naam (idem als invoer)
kol 31-40: inkomen (idem als invoer)
kol 42-50: belasting
Deze belasting wordt als volgt berekent:
Als inkomen <= 2500, dan is belasting = 0
Als inkomen > 2500 en <= 5000, dan is belasting = (inkomen - 2500) * 10%
Als inkomen > 5000 en <= 10000, dan is belasting = (inkomen - 5000) * 20% + 250
Als inkomen > 10000, dan is belasting = (inkomen - 10000) * 40% + 1250
%include "gt.asm"
covar
hulp: resd 1
inarea: resb 70
outarea: resb 70
db 13,10
spatie: dd " "
tien: dd 10
vijf: dd 5
twee: dd 2
een: dd 1
inleiding
sub esi, esi
openuit
openin
lus:
cld
mov ecx, 70
mov al, " "
mov edi, outarea
rep stosb
lees
cmp eax, 0
je einde
cld
mov ecx, 70
mov esi, inarea
mov edi, outarea
rep movsb
mov esi, inarea + 30
mov ecx, 10
tekstbin
mov [hulp], eax
uit [hulp]
imul dword [een]
cmp eax, 2500
jg next
sub eax, eax
jmp past
next:
cmp eax, 5000
jg next1
sub eax, 2500
idiv dword [tien]
jmp past
next1:
cmp eax, 10000
jg next2
sub eax, 5000
idiv dword [vijf]
add eax, 250
jmp past
next2
sub eax, 10000
imul eax, 2
idiv dword [vijf]
add eax, 1250
past:
mov edi, outarea + 49
std
mov ebx, 10
luss: mov edx, 0
idiv ebx
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne luss
schrijf
jmp lus
einde:
slot
Maak een invoerbestand met meerdere lijnen als volgt:
kol 1-20: naam
kol 21-25: aantal dagen
kol 31-35: dagloon
1) Schrijf een programma dat de eerste record van dit invoerbestand leest en afdrukt. De uitvoer wordt dus:
kol 1-35: idem als op invoerrecord
kol 36-70: blanco
2) Wijzig uw programma zodat nu het invoerbestand record per record afgedrukt wordt.
3) Voeg volgende functie toe aan uw programma: voor ieder invoerrecord wordt nu ook het brutoloon (= aantal-dagen * dagloon) berekend en afgedrukt in kol 42-50.
4) Voeg volgende functie toe aan uw programma: voor ieder invoerrecord wordt nu ook de afhouding (= brutoloon * 40%) berekend en afgedrukt in kol 52-60.
5) Voeg volgende functie toe aan uw programma: nadat de gegevens van het laatste invoerrecord verwerkt (en afgedrukt) zijn, wordt er: (a) een blanco lijn gedrukt, en (b) het totaal van de kolommen brutoloon en afhouding afgedrukt.
Het is verboden de bevelen voor een volgend punt in te typen zonder dat men er zich van vergewist heeft dat de voorgaande punten perfect opgelost zijn!
%include "gt.asm"
covar
hulp: resd 1
hulp1: resd 1
inarea: resb 70
outarea: resb 70
db 13,10
spatie: dd " "
tien: dd 10
vijf: dd 5
twee: dd 2
een: dd 1
totaalbruto: resd 1
totaalafhouding: resd 1
inleiding
sub esi, esi
openuit
openin
lus:
cld
mov ecx, 70
mov al, " "
mov edi, outarea
rep stosb
lees
cmp eax, 0
je einde
cld
mov ecx, 36
mov esi, inarea
mov edi, outarea
rep movsb
cld
mov esi, inarea + 21
mov ecx, 4
tekstbin
mov [hulp], eax
uit [hulp]
cld
mov esi, inarea + 31
mov ecx, 4
tekstbin
mov [hulp1], eax
uit [hulp1]
imul dword [hulp]
mov [hulp], eax
add [totaalbruto], eax
mov edi, outarea + 48
std
mov ebx, 10
luss: mov edx, 0
idiv ebx
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne luss
mov eax, [hulp]
imul dword [een]
imul dword [twee]
idiv dword [vijf]
add [totaalafhouding], eax
mov edi, outarea + 58
std
mov ebx, 10
lus2: mov edx, 0
idiv ebx
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus2
schrijf
jmp lus
einde:
cld
mov ecx, 70
mov al, " "
mov edi, outarea
rep stosb
schrijf
mov eax, [totaalbruto]
mov edi, outarea + 48
std
mov ebx, 10
lusbruto: mov edx, 0
idiv ebx
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lusbruto
mov eax, [totaalafhouding]
mov edi, outarea + 58
std
mov ebx, 10
lusafhouding: mov edx, 0
idiv ebx
add dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lusafhouding
schrijf
slot
Strings:
Schrijf een programma dat afdrukt:
WHO IS MY TAILOR?
MY TAILOR IS CHRISTIAN DIOR
MY TAILOR IS RICH
IS MY TAILOR RICH?
%include "gt.asm"
covar
outarea: resb 70
db 0Dh, 0Ah
vb1: db 'WHO IS MY TAILOR?'
vb2: db 'MY TAILOR IS CHRISTIAN DIOR'
vb3: db 'MY TAILOR IS RICH'
vb4: db 'IS MY TAILOR RICH?'
spatie: db ' '
inleiding
openuit
mov ecx, 70
mov esi, spatie
mov edi, outarea
rep movsb
mov ecx, 17
mov esi, vb1
mov edi, outarea
rep movsb
schrijf
mov ecx, 70
mov esi, spatie
mov edi, outarea
rep movsb
sub esi, esi
mov ecx, 27
mov esi, vb2
mov edi, outarea
rep movsb
schrijf
mov ecx, 70
mov esi, spatie
mov edi, outarea
rep movsb
sub esi, esi
mov ecx, 17
mov esi, vb3
mov edi, outarea
rep movsb
schrijf
mov ecx, 70
mov esi, spatie
mov edi, outarea
rep movsb
sub esi, esi
mov ecx, 18
mov esi, vb4
mov edi, outarea
rep movsb
schrijf
slot
2019 samenvatting - Axel Hamelryck
Met dank aan de Github van Martijn en natuurlijk Axel Hamelryck
Computersystemen_axelele_2019_compressed.pdf
2020 augustus examen
de oplossingen van verschillende studenten voor het augustus examen. Met dank aan ISW en natuurlijk de betrokken studenten:
Elias Beddegenoodts:
Name
Size
Modified
EliasBeddegenoodtsDeel2
.txt
Actions
2 KB 6 months ago
Oefening_Auto_Lukas_De_Ruysscher_Examen_CS_Aug_2020
.txt
Actions
2 KB 6 months ago
r0785293_Timo_Taverniers
.txt
Actions
2 KB 6 months ago
theorie_oplossingen
.txt
Actions
1 KB 6 months ago
4 files 7 KB
Nextcloud - ISW Leuven
Privacy policy
Get your own free account
%include 'gt.asm'
covar
inarea: resb 70
outarea: times 70 db (' ')
db 0Ah
aantalliter: resd 1
aantalkm: resd 1
duizend: dd 1000
result: resd 1
een: dd 1
aantalwagens: resd 1
inleiding
sub eax, eax
mov ebx, 0
openin
openuit
;lezen lijn per lijn
volgendelijn:
lees
cmp eax, 0
je einde
mov ecx, 70
mov al, ' '
mov edi, outarea
rep stosb
;bestaande inhoud inarea naar outarea plaatsen
mov ecx, 34
mov esi, inarea
mov edi, outarea
rep movsb
;liter to Int
mov ecx, 4
mov esi, inarea + 30
tekstbin
mov [aantalliter], eax
; km to Int
mov ecx, 5
mov esi, inarea + 20
tekstbin
mov [aantalkm], eax
;berekening
mov eax, [aantalliter]
imul dword [duizend]
idiv dword [aantalkm]
cmp eax, 60
jg jump
mov [result], eax
;schrijven in uitvoer
mov ecx, 2
mov eax, [result]
mov edi, outarea + 40
call omzetascii
schrijf
jump:
jmp volgendelijn
omzetascii:
mov ebx, 10
std
lus:
mov edx, 0
idiv ebx
or dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus
cld
ret
einde:
slot
Lukas De Ruysscher:
Name
Size
Modified
EliasBeddegenoodtsDeel2
.txt
Actions
2 KB 6 months ago
Oefening_Auto_Lukas_De_Ruysscher_Examen_CS_Aug_2020
.txt
Actions
2 KB 6 months ago
r0785293_Timo_Taverniers
.txt
Actions
2 KB 6 months ago
theorie_oplossingen
.txt
Actions
1 KB 6 months ago
4 files 7 KB
Nextcloud - ISW Leuven
Privacy policy
Get your own free account
%include "gt.asm"
covar
inarea: resb 70
outarea: resb 70
db 0Ah
txtPercent: db '% van de wagens heeft een verbruik onder de 60.'
aantalOnder: dd 0
aantalRecords: dd 0
honderd: dd 100
duizend: dd 1000
zestig: dd 60
aantalKM: resd 1
aantalLiter: resd 1
verbruik: resd 1
hulp: resd 1
percentage: resd 1
inleiding
sub eax, eax
sub ebx, ebx
sub ecx, ecx
sub edx, edx
openin
openuit
lezen:
lees
cmp eax, 0
je einde
;outarea leegmaken
mov ecx, 70
mov al, ' '
mov edi, outarea
rep stosb
;aantal liters lezen
mov ecx, 5
mov esi, inarea + 30
tekstbin
mov [aantalLiter], eax
;aantal km lezen
mov ecx, 5
mov esi, inarea + 20
tekstbin
mov [aantalKM], eax
;verbruik berekenen
mov eax, [aantalLiter]
imul dword [duizend]
idiv dword [aantalKM]
mov [verbruik], eax
mov ebx, [aantalRecords]
add ebx, 1
mov [aantalRecords], ebx
cmp eax, [zestig]
jl minder
jmp lezen
;aantal bijhouden en percentage te berekenen
minder:
mov ebx, [aantalOnder]
add ebx, 1
mov [aantalOnder], ebx
mov ecx, 35
mov esi, inarea
mov edi, outarea
rep movsb
mov ecx, 3
mov eax, [verbruik]
call omzetascii
mov edi, outarea + 40
jmp lezen
einde:
mov eax, [aantalOnder]
imul dword [honderd]
idiv dword [aantalRecords]
mov [percentage], eax
mov edi, outarea
call omzetascii
mov ecx, 47
mov esi, txtPercent
mov edi, outarea + 3
rep movsb
schrijf
slot
omzetascii:
mov ebx,10
std
lus:
mov edx,0
idiv ebx
or dl,30h
xchg al,dl
stosb
xchg al,dl
cmp eax,0
jne lus
ret
Timo Taverniers:
Name
Size
Modified
EliasBeddegenoodtsDeel2
.txt
Actions
2 KB 6 months ago
Oefening_Auto_Lukas_De_Ruysscher_Examen_CS_Aug_2020
.txt
Actions
2 KB 6 months ago
r0785293_Timo_Taverniers
.txt
Actions
2 KB 6 months ago
theorie_oplossingen
.txt
Actions
1 KB 6 months ago
4 files 7 KB
Nextcloud - ISW Leuven
Privacy policy
Get your own free account
%include "gt.asm"
covar
inarea: resb 70
outarea: times 70 db (' ')
db 0Ah
uitvoerlijn: db '% van de wagens heeft een verbruik onder de 60.'
km: resd 1
L: resd 1
resultaat: resd 1
aantal: resd 1
eco: resd 1
inleiding
sub eax, eax
sub edx, edx
sub ecx, ecx
sub ebx, ebx
sub esi, esi
sub edi, edi
openin
openuit
cld
next:
lees
cmp eax, 0
je einde
mov esi, inarea
lodsb
mov edi, outarea
mov al, ' '
mov ecx, 70
rep stosb
mov edi, outarea
mov esi, inarea
mov ecx, 34
rep movsb
mov eax, 0
mov esi, inarea+20
mov ecx, 5
tekstbin
mov [km], eax
;uit [km]
mov eax, 0
mov esi, inarea+31
mov ecx, 4
tekstbin
mov [L], eax
;uit [L]
mov eax, [L]
mov edx, 0
mov ebx, 1000
imul ebx
mov edx, 0
mov ebx, [km]
idiv ebx
mov [resultaat],eax
;uit [resultaat]
std
mov eax, [resultaat]
mov ebx, 10
mov edi, outarea+41
lus: mov edx, 0
idiv ebx
or dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus
cld
schrijf
mov eax, [aantal]
add eax, 1
mov [aantal], eax
mov eax, [resultaat]
cmp eax, 60
jg next
mov eax, [eco]
add eax, 1
mov [eco], eax
jmp next
einde:
;uit [aantal]
;uit [eco]
mov edx, 0
mov eax, [eco]
mov ebx, 100
imul ebx
mov ebx, [aantal]
idiv ebx
mov [resultaat], eax
;uit [resultaat]
mov edi, outarea
mov ecx, 70
mov al, ' '
rep stosb
mov eax, [resultaat]
cmp eax, 100
je eindec
std
mov eax, [resultaat]
mov ebx, 10
mov edi, outarea+1
eilu: mov edx, 0
idiv ebx
or dl, 30h
xchg al, dl
stosb
xchg al,dl
cmp eax, 0
jne eilu
cld
mov esi, uitvoerlijn
mov edi, outarea+2
mov ecx, 47
rep movsb
schrijf
jmp eindefinaal
eindec:
std
mov eax, [resultaat]
mov ebx, 10
mov edi, outarea+2
eiluc: mov edx, 0
idiv ebx
or dl, 30h
xchg al, dl
stosb
xchg al,dl
cmp eax, 0
jne eiluc
cld
mov esi, uitvoerlijn
mov edi, outarea+3
mov ecx, 47
rep movsb
schrijf
eindefinaal:
slot
Onbekend theorie oplossing:
Name
Size
Modified
EliasBeddegenoodtsDeel2
.txt
Actions
2 KB 6 months ago
Oefening_Auto_Lukas_De_Ruysscher_Examen_CS_Aug_2020
.txt
Actions
2 KB 6 months ago
r0785293_Timo_Taverniers
.txt
Actions
2 KB 6 months ago
theorie_oplossingen
.txt
Actions
1 KB 6 months ago
4 files 7 KB
Nextcloud - ISW Leuven
Privacy policy
Get your own free account
173
128
----
45
32
---
13
08
---
05
04
---
1
1
0
0000 0000 0000 0000 0000 0000 1010 1101
1111 1111 1111 1111 1111 1111 0101 0010
0000 0000 0000 0000 0000 0000 0000 0001
----------------------------------------
1111 1111 1111 1111 1111 1111 0101 0011
FFFFFF53
77
64
---
13
8
4
1
0000 0000 0000 0000 0000 0000 0100 1101
0000004D
94
64
---
30
16
---
14
8
---
6
4
--
2
2
--
0
0000 0000 0000 0000 0000 0000 0101 1110
1111 1111 1111 1111 1111 1111 1010 0001
0000 0000 0000 0000 0000 0000 0000 0001
----------------------------------------
1111 1111 1111 1111 1111 1111 1010 0010
FFFFFFA2
173
6
----
1038
1024
-----
0014
0000 0000 0000 0000 0000 0100 0000 1110
0000040E
13
Bevel 1 na 7
2 na 8
3 na 9
4 10
5 11
6 12
7 13
8 14
9 15
10 16
11 17
12 18
13 19
14 20
15 21
16 22
17 23
18 24
19 25
20 26
21 27
22 28
23 29
24 30
25 31
26 32
27 33
28 34
29 35
30 36
31 37
32 38
33 39
34 40
35 41
000000B4
2020 januari examen
Examen bestond uit 5 vragen:
- Geef de inhoud van EAX en EDX tijdens een programma met MOV-, ADD-, IMUL, en IDIV bevelen (32 bits!!!!!!)
Vergeet niet: Na IMUL DWORD komt het product in EDX:EAX Dit wil zeggen dat als het getal niet in EAX past, het verderloopt in EDX.
Anders wordt EDX opgevuld met 0h of Fh, afhankelijk of het product positief of negatief is. Bij IDIV DWORD, komt uiteraard de rest in EDX
- Geef definities van: Symbolentabel, Zone bit recording (ZBR), Wet van Moore, RC-wachttijd bij SD RAM en Lineare informatiedichtheid (met kleine schets)
- Geef benamingen van 3 dingen die staan aangeduid op de foto (Werkgeheugen <-> CPU)
- Geef het bevel dat wordt uitgevoerd, bevelenteller(EIP), bevelregister, ESP en zowel de Nul-vlag(ZF) als het Teken-vlag(SF) van een gegeven programma met oa push en pop bevelen
- Grote programmeer oefening (getypt op PC in een .txt MAAR je kan deze niet uitvoeren!)
- Je krijgt een invoerbestand waarin 4 kolommen staan. De eerste kolom bevat de letter A of V (met A wordt het aankopen van een materiaal bedoelt, met V de verkoop ervan), de tweede kolom een materiaal, de derde kolom de aantal eenheden en in de vierde kolom staat de prijs per eenheid. Op basis van de producten moet je berekenen hoeveel winst of verlies een bedrijf maakt.
- Op de examenToledo staat oa de lus om te vertalen naar ASCII
- Een voorbeeld van het invoerbestand dat gegeven is en het uitvoerbestand dat je moet maken:
INVOER:
A ijzer 6 15
V roestrvrij staal 5 48
A inox 158 5
UITVOER:
Winst 1286 €
2021 januari examen
Oplossingen voor de oefeningen van het januari examen met dank aan ISW en Jens Gervais:
Oefening 1:
Name
Size
Modified
1_ComputersystemenAssemblyOefening1_JensGervais
.txt
Actions
1 KB 5 months ago
1_ComputersystemenAssemblyOefening1Invoer_JensGervais
.txt
Actions
< 1 KB 5 months ago
1_ComputersystemenAssemblyOefening2_JensGervais
.txt
Actions
< 1 KB 5 months ago
3 files 2 KB
Nextcloud - ISW Leuven
Privacy policy
Get your own free account
%include "gt.asm"
covar
outarea: resb 70
DB 0Dh, 0Ah
inarea: resb 70
aantalkm: resd 1
liters: resd 1
duizend: dd 1000
verbruik: resd 1
verbruikLagerDan: resd 1
zestig: dd 60
totaal: resd 1
honderd: dd 100
tekst: DB '% van de wagens heeft een verbruik onder de 60.'
inleiding
openin ; open het invoerbestand
openuit ; open het uitvoerbestand
cld
lijnlezen:
lees
cmp eax, 0
je einde
mov edx, [totaal]
add edx, 1
mov [totaal], edx
call lijnvullen
mov ecx, 34
mov esi, inarea
mov edi, outarea
rep movsb
mov ecx, 5
mov esi, inarea + 21
tekstbin
mov [aantalkm], eax
mov ecx, 4
mov esi, inarea + 31
tekstbin
mov [liters], eax
mov eax, [liters]
imul dword [duizend]
idiv dword [aantalkm]
mov [verbruik], eax
mov eax, [zestig]
cmp [verbruik], eax
jge lijnlezen
mov edx, [verbruikLagerDan]
add edx, 1
mov [verbruikLagerDan], edx
mov ecx, 2
mov edi, outarea + 42
mov eax, [verbruik]
call asciiBerekening
schrijf
jmp lijnlezen
einde:
call lijnvullen
schrijf
mov eax, [verbruikLagerDan]
imul dword [honderd]
idiv dword [totaal]
mov edi, outarea + 3
call asciiBerekening
mov esi, tekst
mov edi, outarea + 4
mov ecx, 47
rep movsb
schrijf
slot
lijnvullen:
mov ecx, 70
mov al, ' '
mov edi, outarea
rep stosb
sub edi, edi
ret
asciiBerekening:
mov ebx, 10
std
lus:
mov edx, 0
idiv ebx
or dl, 30h
xchg al, dl
stosb
xchg al, dl
cmp eax, 0
jne lus
cld
ret
Oefening 1 invoer:
Name
Size
Modified
1_ComputersystemenAssemblyOefening1_JensGervais
.txt
Actions
1 KB 5 months ago
1_ComputersystemenAssemblyOefening1Invoer_JensGervais
.txt
Actions
< 1 KB 5 months ago
1_ComputersystemenAssemblyOefening2_JensGervais
.txt
Actions
< 1 KB 5 months ago
3 files 2 KB
Nextcloud - ISW Leuven
Privacy policy
Get your own free account
OPEL MERIVA 855 45
OPEL ASTRA 935 47
FORD Focus 1230 62
BMW 735i 1100 85
VW GOLF GTD 895 44
FIAT CROMA 1.9 725 39
Tesla Model S 5 0
Oefening 2:
Name
Size
Modified
1_ComputersystemenAssemblyOefening1_JensGervais
.txt
Actions
1 KB 5 months ago
1_ComputersystemenAssemblyOefening1Invoer_JensGervais
.txt
Actions
< 1 KB 5 months ago
1_ComputersystemenAssemblyOefening2_JensGervais
.txt
Actions
< 1 KB 5 months ago
3 files 2 KB
Nextcloud - ISW Leuven
Privacy policy
Get your own free account
Bereken fibonacci (https://en.wikipedia.org/wiki/Fibonacci_number)
%include "gt.asm"
covar
x: resd 1
eersteFibo: dd 0
tweedeFibo: dd 1
nieuweFibo: resd 1
inleiding
inv [x]
uit [eersteFibo]
uit [tweedeFibo]
mov ecx, [x]
sub ecx, 2
vlgFibo:
mov eax, [eersteFibo]
add eax, [tweedeFibo]
mov [nieuweFibo], eax
uit [nieuweFibo]
mov eax, [tweedeFibo]
mov [eersteFibo], eax
mov eax, [nieuweFibo]
mov [tweedeFibo], eax
loop vlgFibo
slot
Algemeen
In het begin zijn de lessen zeer makkelijk, maar een keer je met het werkelijke programmeren begint wordt het gauw moeilijk. Probeer zo vaak mogelijk aanwezig te zijn in de lessen en aarzel niet om hulp te vragen tijdens het programmeren aan de leerkrachten. Zorg ook dat je zoveel mogelijk oefenigen afmaakt tijdens de praktijklessen, uit ondervinding weten we dat het heel verleidelijk is spelletjes te spelen. Als je de oefeningen goed kan zal het examen ook wel lukken: de moeilijkste oefeningen zijn immers veel moeilijker dan de programmeeropdrachten op het examen. Er worden ook 2 testen gehouden tijdens het jaar. De eerste test gaat alleen over hoofdstuk 1 de andere gaat over programmeren. Normaal gezien wordt duidelijk op voorhand gezegd wanneer de test plaatsvindt en wat je goed moet kennen. Zorg dat je hier goed op scoort, dit levert je een groot voordeel op bij het examen.
2016: De testen zijn een manier om makkelijk aan je punten te geraken, studeer hier zeker voor! Dit zijn zo goed als gratis examenpunten.
2019: De eerste test gaat over hoofstuk 1, de tweede over hoofdstuk 2. De oefeningen zijn vrij gelijkaardig aan die op EduBlend.
Assembly testomgeving
De oorspronkelijke maker is meneer Swennen, alle credits naar hem.
Notitie: als je zelf Linux draait kan je ook gewoon de repository clonen en NASM installeren.
https://gitlab.iswleuven.be/isw/general/computersystemen-assembler of https://github.com/swenr/CompSys_Assembler
Stap 1
OVA importeren in VMWare of VirtualBox.
Stap 2
Inloggen met SSH
Gebruikersnaam: compsys
Wachtwoord: t
Stap 3
Stap 3.1
Ga naar `/home/compsys/assembler`
cd ~/assembler
Stap 3.2
git pull && ./vertaal gtine
Stap 3.2
Zet je programma in oef.asm, zet je input in oef.in
Stap 3.3
./vertaal oef
Stap 3.4
./voeruit oef
Stap 3.5
De uitvoer komt op het scherm en in bestand oef.uit
Step 3.6
Bugs melden aan Swennen ;)
Databanken - dataquerying
2019 juni examen
Jan en Danny
Examen 2 21/06
Schriftelijk examen (31 punten):
1. query schrijven (6 punten)
2. query schrijven (5 punten)
3. query schrijven (6 punten)
4. query schrijven (5 punten)
5. query schrijven (7 punten)
6. van een kleine gegeven query, de fouten eruit halen (4 punten)
xxx Kirito-kun <33
Examen 1 15/06
Schriftelijk examen (31 punten):
1. (4 punten):
-> 1a. schema aanpassen adhv een zin
-> 1b. wat verandert er door deze aanpassing in de CREATE code , geef dit en ook de constraint
-> 1c. geef van een tabel naar keuze de INSERT code
2. query schrijven (7 punten)
3. query schrijven (9 punten)
4. query schrijven (5 punten)
5. Volgorde commando’s (FREE 3 punten)
6. Query gegeven, geef verhaaltje dat erbij hoort (3 punten)
xxx Kirito-kun <3
OO programmeren
2010 juni examen
UML was het belangrijkste van het examen.
Een studentenvereniging organiseert verschillende activiteiten. Deze activiteiten kunne winstgevend of non-profit zijn. Zo zijn bijvoorbeeld een fuif en een film-avond winstgevend en een teambuilding niet. Als een activiteit winstgevend is moet de verkoopprijs en het aantal worden bijgehouden. Als de activiteit non profit is moet de reden voor de activiteit worden bijgehouden.
Van een fuif moet ook een dj worden bijgehouden, van een film-avond het genre film.
- Vragen met betrekking tot het scenario
- Maak het klassendiagram. Geen setters en getters.
- Schrijf de klasse fuif en ook eventueel de superklasses. Fuif schrijf je helemaal. Van de superklasses moet je de getters en setters niet schrijven.
- Extra methodes maken:
- Schrijf een methode die een activiteit kan toevoegen en zeg in welke klasse je deze steekt.
- Schrijf een methode die een activiteit kan verwijderen en zeg in welke klasse je deze steekt.
- Schrijf een methode die een overzicht geeft van alle activiteiten alfabetisch geordend op naam.
- Schrijf een methode die alle filmavonden van een bepaald genre geeft.
- Schrijf een testklasse voor de methode die een activiteit kan toevoegen
- Overige vragen
- Geef de 3 verschillen tussen een abstracte klasse en een interface
- Je krijgt 5 verschillende lijnen code. Je moet zeggen welke lijn een compilerfout zal geven.
- Een exceptionklasse maken en in methodes steken.
- De uitvoer van een methode geven en zeggen of het wel compileert.
2011 augustus examen
- Klassediagram over een beheersysteem voor aankopen van hardware en software met een paar super/sub klassen, abstracte klassen en interface.
- Schrijf een sub klasse met bijhoren superklasses
- Schrijf 2 methodes voor in het beheer systeem getHardware en addAanvraag.
- Schrijf een testklasse voor de methode getHardware
- Schrijf een UI voor een lector toe te voegen.
- 4 lijntjes code waar je moest zeggen of het overloading, overwriting of ongeldig.
- Leg verschil abstract en interface uit.
2011 juni examen
UML stond op de helft van de punten en was dus zeer belangrijk.
- Schrijf een klasse in spoor van het verhaal
- Pas eventueel andere klassen aan indien nodig
- Maak een testklasse van een methode.
- Leg uit Overriding en Overloading
- 4 situaties, kunnen ze compileren of niet?
2016 juni examen
Maak een datasysteem van een residentie. Een residentie kan 3 soorten verblijven hebben, een kot, een studio en een appartement. Appartementen kunnen niet aan studenten verhuurd worden, en verblijven die aan studenten verhuurd worden moeten bijhouden of de gemeentebelasting betaald is.
- Maak de UML (niet volledig, voor bepaalde methodes en alles wat ze nodig hebben)
- 4 theorievraagjes
- Schrijf de testklasse voor 2 methodes van de klasse Verblijf
- Schrijf enkele methodes van enkele klassen
2017 samenvatting
Tip: import java.util.* boven al uw code zetten.
Overerving
Geen overerving: Nadelen
- Dubbele code voor bijna identieke lijsten en classes
- Oplossing? Private ArrayList<Object> rekeningen;
- Klasse Object = moeder van alle klassen;
- Alle klassen erven over van object(subklasse), object is de superklasse.
Voor en nadelen overerving
Voordelen
- Geen dubbele code
- Makkelijk verschillende klassen in 1 lijst
Nadelen
- Typecasting is nodig om specifieke methodes op te roepen
- Compiler weet niet welke subklasse het object toebehoort
Oplossing: instanceof. → Bv. If ( o instanceof BankRekening){} Oplossing: casting. → Bv. String s = (String) o;
Statisch en Dynamisch type van een object
Object o = rekeningen.get(0);
Statische type van o
Het type dat je gebruikt om een variabele te declareren
@Compile time gebruikt om te zien of methode bestaat
Dynamische type van o
Het type dat je gebruikt om een variabele te initialiseren.
Bv. SpaarRekening of BankRekening
@runtime gebruikt om te checken welke versie van de methode uitgevoerd moet worden
Dynamische binding
Op het ogenblik van uitvoering wordt de toString() van het dynamisch type opgeroepen
Generalisatie en Specialisatie bij Overerving:
- Generalisatie (van beneden naar boven)
Gemeenschappelijke instantievariabelen en methoden afzonderlijke klasse.
Dit is de superklasse
- Specialisatie (van boven naar beneden)
Specifieke instantievariabelen en methode: subklassen
Override
Om toe te voegen aan de toString() van de superklase: super.toString() + "nieuw"
Bij overriding gaat het om een methode met dezelfde naam, hetzelfde returntype en precies dezelfde argumenten in een superklasse en zijn subklasse, maar andere implementatie
Typecasting voor Equals
public boolean equals(Object o){
boolean result = false;
if (o instanceof Persoon) {
Persoon p = (Persoon) o;
if(this.getNaam().equals(p.getNaam()) && (this.getVoornaam().equals(p.getVoornaam())){
result = true; }
}
return result; }
Exceptions
Exception blijven opgooien tot aan de plaats waar de afhandeling kan gebeuren (UI/main).
Een try block kan gevolgd worden door meerdere catch blocks.
Exceptions afhandelen : finally
In een finally block staan statements die uitgevoerd worden nadat de try - catch processing voorbij is ( dus ongeacht of er een exception is opgetreden !). In een finally block staat typisch opruim code, zoals bijv. het sluiten van bestanden.
try {
// code waarin een exception kan optreden
} catch (ExceptionType e) {
// code die exceptionType fouten behandelt
} finally {
// code die altijd uitgevoerd wordt
}
Exception Classes
Unchecked exceptions
RuntimeException en subklassen: fouten die binnen de applicatie liggen, gevolg zijn van programmeerfouten (bugs), niet kunnen geanticipeerd worden door de applicatie, waarvan de applicatie niet kan herstellen, die gefixt moeten worden i.p.v . opgevangen, …
Voorbeelden: NullPointerException, NumberFormatException.
Checked exceptions
Exception en subklassen : fouten die buiten de controle van de developer vallen, geanticipeerd moeten worden door de applicatie, gecheckt worden door de compiler, waarvan de applicatie moet kunnen herstellen Voorbeeld : FileNotFoundException.
Compiler: checkt of deze exception gegooid kan worden en waarschuwt als dit het geval is → developer moet er dus rekening mee houden
Methode moet declareren welke checked exceptions het kan opgooien
Belangrijk: In catch-clausule handel je altijd de exception af : of je gooit een nieuwe fout op, of je toont een foutboodschap aan de gebruiker, maar je stopt de uitvoering van het programma!
Eigen Exception class:
class EigenException extends RunTimeException{
public EigenException(String message){
super(message);
}
}
Soorten exceptions
Java Unchecked RuntimeException.
- ArithmeticException Arithmetic error, such as divide-by-zero.
- ArrayIndexOutOfBoundsException Array index is out-of-bounds.
- ClassCastException Invalid cast.
- IllegalArgumentException Illegal argument used to invoke a method.
- IndexOutOfBoundsException Some type of index is out-of-bounds.
- NullPointerException Invalid use of a null reference.
- NumberFormatException Invalid conversion of a string to a numeric
Checked Exceptions Defined in java.lang.
- ClassNotFoundException Class not found.
- CloneNotSupportedException No clone object not implemening Cloneable
- IllegalAccessException Access to a class is denied.
- InstantiationException No create object of abstract class /interface
- NoSuchFieldException A requested field does not exist.
- NoSuchMethodException A requested method does not exist.
Abstracte klassen en interfaces
Abstracte klassen of Polymorfie
Abstracte methodes enkel in abstracte klassen. Geen objecten maken van abstracte klassen. Elke subklasse moet alle abstracte methodes implementeren (tenzij zelf abstract)
toString() en equals():
Methodes geërfd van Object
Polymorfie (veelvormigheid)
Het geheel van overerving en dynamische binding, waarbij je een referentie hebt die als statisch type een superklasse heeft en als dynamisch type een subklasse .
Interfaces
- New → Interface
Alle methodes abstract (keyword abstract is niet nodig) en alle methodes public (keyword public is niet nodig)
Contractueel: klassen die interface implementeren moeten implementatie hebben voor elke methode, tenzij klasse abstract is.
Cloneable
Wanneer een klasse Cloneable implementeert mag de clone() methode gebruikt worden. Anders CloneNotSupportedException.
@Override
public Fiets clone() throws CloneNotSupportedException{
return (Fiets)super.clone();
}
Serializable
Wanneer een klasse Serializable implementeert, kunnen de objecten geserializeerd worden
Transient: Zorgt ervoor dat een instantievariabele niet geserialiseerd wordt, krijgt bij deserializeren default-waarde. Static nooit geserializeerd.
public class Database {
static final long serialVersionUID = 3147609931653727026L;
public void addWiel(Wiel wiel) throws Exception{
FileOutputStream fs = new FileOutputStream("Wiel.txt");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(wiel);
os.close();
}
public Wiel getWiel() throws Exception {
FileInputStream fs = new FileInputStream("Wiel.txt");
ObjectInputStream os = new ObjectInputStream(fs);
Wiel wiel = (Wiel) os.readObject();
os.close();
return wiel;
}
}
}
Abstracte klassen | Interfaces |
Interfaces | Alleen public static final velden |
Constructors | Geen constructor |
Sommige methodes abstract | Alle methodes abstract |
Klasse kan maar van 1 klasse extenden | Klasse kan ++ interfaces implementeren |
Public, private of protected | Alles public |
Writing and reading
Write
File namen = new File("Namen.txt");
File namen = new File("Namen.txt");
try{
PrintWriter writer = new PrintWriter(namen);
writer.println("Mieke Kemme");
writer.println("Elke Steegmans");
writer.close();
}catch(FileNotFoundException ex) {
throw new DomainException(“Fout bij het wegschrijven”, ex);
}
Read
ArrayList<Persoon> personen = new ArrayList<>(); // alle info van bestand komt hier
File personenFile = new File("Personen.txt");
try{
Scanner scannerFile = new Scanner(personenFile); // scanner voor File
while (scannerFile.hasNextLine()) { // voor elke lijn van het bestand
Scanner scannerLijn = new Scanner(scannerFile.nextLine());
// scanner voor lijn
scannerLijn.useDelimiter(" / "); // scheidingstekens van verschillende delen in de huidige lijn
String voornaam = scannerLijn.next(); // eerste deel huidige lijn tot aan /
String naam = scannerLijn.next(); // tweede deel huidige lijn tot aan /
Persoon persoon = new Persoon(naam, voornaam);
personen.add(persoon);
}
}catch(FileNotFoundException ex) {
throw new DomainException("Fout bij het inlezen", ex);
}
Collections
Gebruik zoveel mogelijk interface of superklasse als statisch type.
Soorten
Lists
get(i) is een methode die enkel van toepassing is op Lists. Dubbels mogen, volgorde van ingave telt, heeft indices
- ArrayList
Je moet veel minder code zelf schrijven wanneer je ArrayList gebruikt dan wanneer je een Array gebruikt! default, meestal OK
- LinkedList
Kies dit indien performantie belangrijk. LinkedList houdt pointer naar eerste element bij, elk element houdt pointer naar volgend element bij; elementen staan dus niet meer fysisch na elkaar zoals bij ArrayList. Implementeert potentieel Queue of Deque = double ended queue
Sets
Geen dubbels bij sets, ook geen duidelijke volgorde
- HashSet
Implementeert Hashmap. default, meestal OK
- LinkedHashSet
Volgorde van ingave, werkt met interne LinkedHashMap
Maps
Verzameling van key-value paren waarbij er maar 1 paar is met specifieke waarde voor key (volgens equals in klasse K) Maakt het mogelijk zeer snel informatie (value) op te zoeken op basis van een key Key is object van klasse K, value is object van klasse V Key-value paar wordt ook entry genoemd. Geen duidelijke volgorde
- Hashmap
Bij Hashmap is de indexkey de hashcode
In array komen alle entries waarvan de key door de hashCode wordt afgebeeld op dezelfde waarde terecht in een LinkedList
- LinkedHashmap
Elke entry houdt wijzer bij naar volgende
- TreeMap
Keys worden ascending gesorteerd (bv. a→z) bijgehouden in een boomstructuur.
Hashen
@Override
public int hashCode() {
Objects.hash(naam, voornaam, rnummer);
}
Overzicht
List | Map | Set |
Dubbels
Volgorde (van ingave) Index gebruiken |
Key-value
Key uniek Geen duidelijke volgorde |
Geen dubbels
Geen duidelijke volgorde |
ArrayList, LinkedList,… | HashMap, LinkerHashMap,… | HashSet, LinkedHashSet,… |
►List<String> list = new ArrayList<>();
►list.add(“Bert”) ►list.get(0) ►list.remove(0) |
►Map<String,String> map = new HashMap<>();
►map.put(“r0047001”, “Bert”) ►map.get(“r0047001”) ►map.remove(“r0047001”) |
►Set<String>set = new HashSet<>();
►set.add(“Bert”) ►set.get(“Bert”) ►set.remove(“Bert”) |
Ik wil… | Collectie |
…studenten snel kunnen terugvinden op basis van hun studentennummer. | Map |
…foutboodschappen in een applicatie loggen | List |
…bijhouden welke boeken je al gelezen hebt | Set |
…deelnemers inschrijven voor kamp, aantal plaatsen beperkt is | List? Set? |
Comparable, Comparator, Sorting
Comparable
Comparable is een interface. Je hebt deze bijvoorbeeld nodig als je een List wilt sorteren (Collections.sort(studentenlijst)). Dit is voor de default sorteervolgorde. Als je deze implementeert (implements Comparable<Student>), moet je een CompareTo(Student O) methode implementeren.
public int compareTo(Student O)
Indien beide objecten gelijkwaardig zijn, moet een 0 gereturned worden. Als het this-object kleiner is dan Student O, dan return je een negatief getal. Als het this-object groter is dan Student O, dan return je een positief getal.
Als je wilt sorteren op basis van een string, bv r-nummer of naam, dan kun je gewoon de reeds geïmplementeerde compareTo van string gebruiken:
return this.naam.compareTo(O.getNaam())
Comparator
Wat als je eigen sorteertmethode voor String wilt? Je kunt geen String-klasse gaan maken. Je kunt ook geen nieuwe subklasse van String maken, want String is Final. Comparator is de oplossing! Dit is voor alternatieve sorteervolgorde.
Uitgaande van een ArrayList<String> genaamd namen. Java vindt dat Uppercase letters eerst gesorteerd worden, en dan pas Lowercase. Dat willen we niet, dus we gaan dat eens aanpakken.
List<String> namen = new ArrayList<String>();
Collections.sort(namen, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
});
Eclipse geeft dat van die IgnoreCase zelf aan, geen zorgen.
Verwijderen
//Creëer lijst van Strings
List<String> strings = new ArrayList<>();
strings.add("...");
//Verwijder het woord "De"
Iterator<String> stringsIterator = strings.iterator();
while(stringsIterator.hasNext()){
String woord = stringsIterator.next();
if(woord.equals("De")){
stringsIterator.remove();
}
}
Static and Final
Static
Statische methode
Keyword static → methode hoort niet bij een object maar bij een klasse. Je moet geen object instantiëren, maar roept de methode rechtstreeks op de klasse.
Een statische methode kan geen instantievariabelen aanspreken.
Statische variabele
Variabele hoort niet bij een object maar bij een klasse (klassevariabele). Dezelfde waarde voor alle objecten van die klasse
Oude bekende
We kenden Static al van de main-methode:
public static void main(String[] args){
System.out.println("Hello world");
}
Deze methode moet statisch zijn, zodat de JVM geen App-object hoeft aan te maken.
System is een gewone klasse uit de package java.lang, out is een publieke klassevariable daarvan (PrintStream out). println is een objectmethode van die klasse PrintStream.
Gebruik static spaarzaam
- Waar wel
- Constanten (zie final...)
- Methodes die objectvelden/-methodes niet nodig hebben
- Ter vervanging van constructoren
- Waar niet
- Om eigen klassen uit te breiden (geen Arrays-achtige toestanden zelf aanmaken)
- Niet-final velden (tellen van objecten via een klassevariabele wordt niet gedaan!)
Final
Niet te verwarren met static. Is toepasbaar op velden/lokale variabelen/parameters, methodes en klassen.
Final variable
Mag niet meer veranderd worden. Veldnaam wordt éénmalig geïnitialiseerd in de constructor. Later wijzigen (e.g. setter) → compilerfout. Dus validatie in de constructor.
private final type veldnaam;
Final methode en klasse
Final methode mag niet overschreven (override) worden! Wordt zelden gebruikt, private methodes zijn trouwens de facto final.
Final klasse mag geen subklassen krijgen. Zelden gebruikt, voor security-doeleinden.
Constante
public class Week {
public static final int AANTAL_DAGEN = 7;
}
Mag public (mag direct aangesproken worden), static (zelfde waarde voor alle objecten), final (niet meer aanpasbaar)
Afspraak: alles in hoofdletters, woorden gescheiden met underscore.
UML — Unified Modeling Language
|
|
+Public, -Private, #Protected, <<abstract>> & <<interface>> (boven titel en vóór methodes)
Relaties
Heeft een - relatie
Je zet de instantievariabele van iets dat in het klassediagram staat niet in de klasse zelf.
Cardinaliteit kan ook bijvoorbeeld 0..* zijn (nul of meerdere studenten)
Gebruikt een - relatie
Een klasse zoals UI gebruikt de klasse Student maar heeft geen instantievariabele Student.
Is een - relatie (Overerving)
Implementeert - relatie (interfaces)
2019 oplossingen alle labo's - Martijn Meeldijk
Met dank aan de Github van Martijn en natuurlijk Martijn zelf:
2020 juni examen
Dit examen was tijens de corona periode, het examen duurde maximaal 2u36.
Het examen bestond uit twee grote opgaves. Er waren geen theorie vragen.
Deel 1
Je moest een systeem voor het bijhouden van kunstwerken voor kunstgalerij's maken. Dit deel duurde ongeveer 80 minuten. Test klasse voor een methode setWaarde
Deel 2
Een registratie rooster voor afspraken vervolledigen (hashCode, equals, new TreeMap<>(), ... schrijven). Gebruik maken van JCF, duurde ongeveer 40 minuten.
Examenvragen en oplossingen:
met dank aan ISW en Sigfried Seldeslachts
Algemeen
In de lessen OO bouw je voort op de geziene leerstof tijdens bop, zie dus dat je zeker deze onder de knie hebt. Net zoals bij alle andere vakken is het belangerijk dat je de opdrachten maakt voor pe en vooral om de geziene leerstof te begrijpen.
Het examen is net zoals het examen van bop, een grote oefening dus op de geziene leerstof. Je zal onder andere een goede driver moet kunnen schrijven, exceptions gebruiken en dergelijke. Vergeet niet om ook te leren hoe je een UML diagram moet tekenen.
Voor degene die dit examen niet zien zitten: in het algemeen is het herexamen van dit vak makkelijker. Het examen is voornamelijk veel langer.
Probleemoplossend denken
2009 januari examen
Reeks 7A (16/01/09 8u30, Jongen)
- Polonium-210 heeft een halfwaardetijd van 138 dagen. In een pizzeria in Brooklyn wordt de toegelate waarde van Polonium-210 50 maal overschreden.
- Wat is de groeifactor per dag?
- Hoe lang zal het duren eer dat het gehalte Polonium-210 in de pizzeria weer onder de toegelate waardegrens valt?
- Op 1 november ga je een nieuwe TV kopen. Je bereikt met de verkoper een afbetalingsplan: 36 maanden lang, elke maand op de eerste dag zal je een stukje betalen en je begint ermee op 1 januari. De interest bedraagt 2%. Hoeveel moet je elke maand betalen om je schuld af te lossen?
- Schrijf de functie reverse die een vector V als argument krijgt en een vector W teruggeeft, met de elementen van de vector V in omgekeerde volgorde.
- Een oefening met Karnaughafbeeldingen: Karnaughafbeelding opstellen, minimaliseren met de mintermen. Iets doen met de maxfactoren. Een verklaring waarom je twee aan elkaar grenzende vakjes kan samennemen in een Karnaughafbeelding.
- Matrix oefening in PeL: Hier zie je de afbeelding van de boom van pythagoras. De groene stam is gevorm door een vierkant (willekeurige basis) en een gelijkbenige driehoek (hoogte is de helft van de zijde van het vierkant).
- Maak de macro "stam" die de groene stam tekent op basis van de basis van de onderste zijde van het vierkant.
- Gebruik deze macro om de boom te tekenen.
- Een extremum probleem oplossen met PeL. Je bent aan het kamperen langs een rivier en je gaat wandelen. Bij je terugkeer merk je dat je aan de verkeerde kant van de rivier gesukkeld bent. Langs de rivier op is het nog 2km tot aan je tentje en dan moet je nog overzwemmen. Stel dat je 5km/u kan wandelen en 3km/u kan zwemmen, naar welk punt aan de overkant van de rivier zwem je, zodat de tijd tot het tentje het kortst is? (Dus vanwaar je nu staat: eerst zwemmen, dan wandelen). Je moet geen rekening houden met eventuele stroming in de rivier.
2010 januari examen
1. Exponentiële groei Bij een ongeluk in Tjernobyl zijn er grote hoeveelheden radioactief materiaal vrijgekomen waaronder Cesium 137. Halveringstijd is 30 jaar
- Wat is de groeifactor per dag?
(365e machtwortel uit 30e machtwortel uit 1/2)
- Hoe lang duurt het voor er in Tsjernobyl nog 1% over is van het originele niveau.
(gelijkstellen aan 0.01 en met logaritmes uitrekenen om x uit macht te krijgen, x is dan duur)
2. Financiële Algebra Lening aan voor auto, 36 maanden lang betaal je maandelijks €300. Maandelijkse rente is 0.47%? Welk bedrag heb je oorspronkelijk geleend? Eerste betaling na 1 maand afsluiting lening. Alle bedragen actualiseren naar T0
3. Programmeren in Scilab fibonacci(n) programmeren die vector V teruggeeft van V1 tot Vn met de rij van fibonnaci
4. Complexiteit Bepaal een Grote O, Omega en Theta notatie in functie van n voor het aantal keer dat de toekenning x=x+1 wordt uitgevoerd in listing 1.
x=0;
for i=1:n
for j=1:2*i
x=x+1
end
end
enfunction
5. Telproblemen
- Hoeveel getallen tussen 900 en 1199 bevatten NIET het cijfer 0. Verklaar aan de hand van som en productregel.
- (geen teruglegging, volgorde maakt niet uit > combinatieformule).
6. Macro's De kromme van Koch (eindeloze omtrek van objecten.)
7. Pel extremum Veehouder wil rechthoeking stuk van 54m² omheinen. Extra omheining: middenafspanning om zo twee gelijke delen te krijgen.
Voor afmetingen van lengte en breedte is de kost minimaal?
(Kost = rechtevenredig eenheden omtrek). Willekeurig lijnstuk x tekenen, loodrechte door A en B, lengt van A tot C en D tot D is snijpunt met loodrechte en cirkel met middenpunt A en straal 54/d(A,B). Vanaf dan triviaal. Opletting: op het einde afstand d(A,C) nog bijtellen want omheining ook in het midden
Reeks 5B (04/01/10) Mr. Van Hee
1. Pel – extremumproblemen
De omtrek moet altijd 90cm zijn van de onderstaande figuur (breedte+hoogte+hoogte+ omtrek halve cirkel). Wanneer is de oppervlakte maximaal.
2. Logaritmes en exponentiële
Los op: 2 * 9t – 10 * 3t = -8
3.
We plaatsen 5 computerboeken, 3 wiskundeboeken, 2 kookboeken op een schap.
1) Op hoeveel manieren kan je deze 10 boeken rangschikken.
2) Op hoeveel manieren kan je deze rangschikken als de computerboeken rechts en kookboeken links moeten staan.
3) … (vergeten)
4) Op hoeveel manieren kan je ze rangschikken als ze per categorie moeten staan.
4.
Is nog eentje ma geen idee welk
5. Hoofdstuk 5
Scilabcode:
Function x=examb(n)
i=n
x=0
while i>=1
for j=1:i
x=x+1
end
i=floor(i/3)
end
endfunction
1) Leg uit hoeveel keer x=x+1 uitgevoerd wordt en geef ook het aantal.
2) Hoeveel keer wordt het bij 1000 & 2000 uitgevoerd. (uitleg hoeft niet)
3) Maak een sigma (Ω), O en uiteindelijk een omega(Ѳ) voorstelling.
Het is niet volledig maar geeft al een goed idee.
2011 januari examen
- Financiële Algebra: Een persoon wilt een lening aangaan dat hij op 24 maanden heeft afbetaald. Elke maand zal hij 145 euro aflossen. De aflossingen beginnen vanaf de 2de maand. Er is een jaarlijkse intrest van 14%. Hoeveel kan deze persoon lenen?
- Pel Meetkunde: Je hebt een cirkel met middelpunt O. Maak de parallelogram OABC. Het punt B moet zich op de cirkel bevinden. In deze parallelogram heb je het punt S dat het snijpunt is van de diagonalen van deze parallelogram. Laat de parallellogram op de cirkel draaien en toon wat het punt S dan maakt.
- Pel extremum: Je mag met een koorde van 40 meter een rechthoekig stukje grond afspannen. Aan 1 kant ligt een rechte rivier en hier moet je geen koorde gebruiken. Wat is de lengte en de breedte van deze vierhoek om de grootste oppervlakte te krijgen?
- Programmeren in scilab: Je hebt een vector W met [1 2 0 5 7], maak een functie die in vector V alle getallen zal zetten buiten de nul. (V = [1 2 5 7])
- Telproblemen: 9 vrienden gaan naar de bioscoop en ze zitten op een rij met 9 stoelen. Op hoeveel verschillende plaatsen kunnen de vrienden gaan zitten als Paul en Inge altijd op de uiteinde van de rij willen zitten? En op hoeveel verschillende plaatsen kunnen de vrienden zitten als de 5 meisjes altijd naast elkaar willen zitten?
- Propositielogica: Bij de sociale dienst mogen ze alleen maar een sociale woning geven aan gezinnen met minder dan 3 kinderen en met een inkomen van minder dan B of met een gezin met meer of gelijk aan 3 kinderen en een lager inkomen dan C (en B > C). Wat zijn de proposities? Wat is de formule en geef een waarheidstabel.
2011 juni examen
- PeL: Gegeven een vishengel die horizontaal hangt en kan roteren op een vaste spil, met een merkteken op 5 meter van het uiteinde van de hengel (de kant van de visser). Welke figuur bechrijft het merkteken als het uiteinde van de hengel een cirkel van willekeurige straal op een willekeurige positie volgt.
- Financiële algebra: lening van 15000 met voorschot van 1000 aan 3% WR met maandelijkse terugbetaling van 300 en zes maand uitstel van betaling. Wanneer is de lening afbetaald als ze afgesloten wordt op 1 januari 2011.
- Algebra: proces met halveringstijd van 7 jaar versus proces met daling van 20% per jaar, wanneer zijn ze gelijk als het tweede proces bij aanvang een 5x grotere waarde heeft.
- Scilab: combinatie(n,r) uitwerken
- Propositielogica: formule analyseren en zeggen of het een contradictie, tautologie of iets anders is.
2012 januari examen
1. Exponentiële groei:(2.5) Je bent een investeerder en belegt 40 000 euro in goud wat elk jaar 5% duurder wordt en 1000 in zilver wat verdubelt in waarde na 30 jaar. Na hoeveel tijd is het goud 80 keer meer waard als het zilver?
1kg Goud = 40 000
groei = 1,05
periode = 1 jaar
G(t) = 40 000 * 1,05^t
1kg Zilver = 1 000
groei = 2 --> 2^(1/30)
periode = 30 jaar --> 1 Jaar
Z(t) = 1 000 * 2^(t/30)
Zoek t zodat G(t) = 80 Z(t)
Oplossing: t = 27
2. Financiële algebra:(3.5)
Je leent een bepaald bedrag en moet daarvoor 48 maandelijkse aflossingen doen van 260euro.
De rente is 12,5%. De eerste aflossing is na 3 maanden.
Hoeveel heb je geleend?
X= 260 *1.125-3/12* (1.125-48/12-1)/(1.125-1/12-1)
Antwoord: Je hebt 9710.9165euro geleend.
3. PeL:(5)
Bakker maakt eclairs met een omtrek van 30cm en een hoogte van 5 cm.
Eclair bestaat uit een halve cirkel aan de linkerkant, een rechthoek en een halve cirkel aan de rechterkant.
Wat is de breedte, zodat de oppervlakte maximaal is?
h = (30 - b*2)/pi
Opp = b*h + (h/2)*(h/2)*pi
--> b = 0
4. SciLab:(1)
Maak functie: V = vulVector(n,R)
gegeven: R is een vector met getallen in.
De som van deze getallen is kleiner dan n.
gevraagd: Lengte van de outputvector is n.
Zorg ervoor dat de output een vector is met telkens R(i)-1 aantal keer 1 vervolgd door een 0.
Rest opvullen met 9. Voorbeeld: R=[3,2,4] en n =12 dan: V = [1,1,0,1,0,1,1,1,0,9,9,9]
Oplossing:
function V=vulVector(n,R)
V=[1:n]
k = 1
for i=1:length(R)
for j=2:R(i)
V(k) = 1
k = k + 1
end
V(k) = 0
k = k +1
end
for i=k:n
V(i)=9
end
endfunction
5. Telproblemen:(2) Je moet je Antwoord hier ook kunnen verdedigen. Je moet zeggen waarom je het zo hebt berekent en niet op een andere manier.
Op school zijn er 8 fietsenrekken.
Er zijn 3 jongens en 5meisjes.
a. Op hoeveel verschillende manieren kunnen ze hun fiets in het rek zetten? (56 of 8!)
b. Hoeveel manieren zijn er als de meisjes hun fietsen allemaal achter elkaar staan? (4 of 4!5!)
c. Iemand deelt folders uit. Hij steekt er drie onder het bagagerek van de fietsen. Op hoeveel verschillende manieren kan dit gebeuren? (336 of (8!/(3!5!))
2013 januari examen
1. Verzamelingenleer:
Gegeven: Een venndiagram: Verzameling U met deelverzamelingen A, B en C. Daarbij enkele “uitspraken” die samengaan met elk van de deelverzameling: uitspraak A: alle meisjes met blond haar, uitspraak B: alle meisjes met zwart haar, uitspraak C: alle meisjes met een bril of lenzen
Gevraagd: - Geef een omschrijving van de gegeven uitspraak - Duid op het venndiagram aan: (bvb) AUC … - Geef door middel van opsomming …
2. Propositielogica:
Gegeven: een uitspraak uit de propositielogica met daarbij een lege tabel
Gevraagd: Vul de tabel in. Met welke uitspraak uit de verzamelingenleer komt deze overeen. Geef door middel van opsomming adhv de uitspraak uit de verzamelingenleer.
3. Relaties:
Gegeven: 2 opsommingen (A en B) en een omschreven relatie U
Gevraagd: Geef door middel van opsomming de relatie U weer. Geef ook het domein en het bereik.
4. Maximalisatieprobleem zoals die uit de cursus.
5. Extremumprobleem, te maken in PEL. Gegeven: Een rechthoekig huis met als dak een halve cirkel. Construeer in pel. Met welke hoogte heeft het huis een maximale oppervlakte?
6. Groeiprobleem, te maken op papier en in Scilab. 2 verschillende groeien gegeven. Geef de groeifactor van elk per uur (ze waren opgegeven per 24 u en per 8 uur). Geef de bijbehorende functie van elk. Wanneer is B(t) = D(t)? Los op en controleer in Scilab door middel van links/rechts-methode en plotten.
2014 januari examen
23 Januari 2014 - Greetje Jongen
- 1. Relatief makkelijke oefening in P.e.L i.v.m meetkundige plaatsen. Je moest een gelijkbenige driehoek tekenen ABC, met zijn omschreven cirkel(middelpunt = snijpunt middelloodlijnen van gelijkbenige zijden) Dan moest er op punt A een gelijkzijdige driehoek met een punt op de omschreven cirkel. Van het laatste punt moest je de meetkundige plaats zoeken.
- 2. Oplossen van een vergelijking zoals: 7^x = 3 * 6^x
- 3. Oefening op mathematisch model + mondeling uitleggen.
- 4. Oefening in Scilab met een lineaire en exponentiële functie.
- 5. Makkelijke oefening op propositielogica (tabel maken)
- De rest van de vragen zijn niet meer in mijn geheugen :)
6 Januari 2014 - Mr. Van Hee
1. Exponentiële functies Jij hebt een auto die elk semester 5% daalt en die 25.000 euro kost. Je buur heeft een auto van 30.000 euro en die verminderd de helft in waarde na 5 jaar.
a) Grondtallen berekenen, welke daalt het snelst? b) Wanneer zijn ze gelijk? c) Voer dit in in Scilab, elk in een andere kleur.
2. PEL Een macro maken van (sorry ben het woord vergeten). Komt erop neer dat je van één vierkant telkens aan de uiteinden nieuwe vierkanten creëert die de helft zo groot zijn.
3. Verzamelingen Gegeven een verzameling U, A, B en C.
1. (AUB)^c, geef door middel van opsomming. 2. Hoe zou je de verzameling het best omschrijven waartoe x, y en z behoren?
4. Relaties a. Wat is een afbeelding? b. Verzameling A zijn leerlingen en verzameling B zijn hen ISP-leerkrachten. Wat voor soort relatie en geef een omschrijving? c. Geef de inverse relatie hiervan.
5. Maximalisatieprobleem: Gegeven een Xbox One die 90 winst oplevert en een PS4 die 40 winst oplevert, er kunnen maximaal 600 stuks in het magazijn. Voor elke tijdseenheid dat er 3 PS4's worden verkocht, worden er 2 xboxen verkocht. Er mogen maximaal 3 keer zoveel PS4's als xboxen worden verkocht. Er kunnen niet meer dan 300 stuks Xboxen worden verkocht, en niet meer dan 400 PS4's.
a) Bepaal doelfunctie en beperkingen b) Bepaal maximale winst grafisch en met stelsel.
6. Gegeven propositielogica a) Wat is een tautologie b) Geef de logische tabel, is het een tautologie?
7. Scilab Gegeven een Vector met waarden [0, 2, 5, 0, 2, 8, 4, 4, 2, 6, 0]. Maak een functie maakLeeg die de getallen die meerdere keren voorkomen eruit filteren.
2017 januari examen
23 Januari 2017 - Mr. Van Hee
1. PeL: Een boer wilt met 500m draad 3 vakken afspannen, die uiteraard zo groot mogelijk moeten zijn. Teken dit extremumprobleem in PeL
Oplossing: - 125m totale lengte, en 42m lengte per vak. - 62m breedte. 2. Minimumprobleem (minimalisatie kosten) op te lossen met geogebra. Aantal militairen(x)en aantal politie agenten(y) minimum 1000 kost militair: 1000 kost politie: 800 minstens 200 militairen minstens 300 politie en max 800 politieagenten. voor elke militair, minstens 2 politieagenten Doelfunctie en beperkingen bepalen => optimaal punt (334,666) 3. Teken een figuur in Scilab, pas dan enkele transformaties toe (spiegelen, verbreden, inverteren). Geef ook de samengestelde matrix van deze transformatiematrices.
4. Schrijf een algoritme in scilab. De functie geeft true terug als er in de gegeven vector alleen maar nullen of enen voorkomen. Er mag ook nooit 3 keer achter elkaar hetzelfde getal voorkomen.
5. Lineair programmeren. Los een maximumprobleem op met de grafische methode (assenstelsel, alle beperkingen uittekenen)
6. Scilab: Los een minimumprobleem op met de simplexmethode (Leer de pivoteer-functie heel goed, komt altijd voor)
7. Scilab: Los een probleem op met de Laplace methode(Leer de pivoteer-functie heel goed, komt atlijd voor)
12 Januari 2017 - F. Vogels
1.PeL: Een minigolf baan, coordinaat van het balletje en het gat zijn gegeven, net als een cirkel. Je moet de hoek berekenen waarmee de bal de cirkel moet raken opdat die in de hole gaat. (Je moet dus eigenlijk de twee punten en de cirkel construeren, bissectrice tussen middelpunt cirkel met elk van deze punten en dan snijpunt met cirkel vinden)
2. Opstellen van ongelijkheden en doelfunctie voor simplex (moet niet uitgerekend worden)
3. Ongelijkheden en doelfunctie zijn gegeven, construeren en lineair programmeren
4. Oefening op Simplex, ongelijkheden en doelfunctie zijn gegeven, oplossing uit Scilab halen (TIP: Leer werken met karmarkar Vogels vraagt toch niet naar de methode)
5. Functievoorschriften en domein bepalen van een figuur
6. en 7. Matrixproducten, 1 met symbolen de andere niet
8. en 9. determinanten
10. Inverse van transformatie (Leer die formule! Mr Vogels vraagt die altijd)
11. Oppervlakte van een figuur. (d.m.v. determinant)
12. Transformatieconstructie gegeven, geef de transformatie matrix.
13. Transformatieproduct gegeven, construeer dit. (Denk eraan: Je hebt SciLab ter beschikking, gebruik dit ook ;) )
11 Januari 2017 - Mr. Van Hee
- 1. Opdracht in pel: maak een gelijkzijdige driehoek. Maak daarna een macro dat een gelijkzijdige driehoek maakt en deze ondersteboven in het midden van de driehoek plaatst (met als punten de middelpunten van de zijdes).
- 2. Opdracht in SciLab: maak de functie om te laplaceren, laplaceer daarmee een 5x5 matrix. Zeg ook hoelang het zou duren om een 10x10 matrix te laplaceren als een 3x3 matrix 1ms duurt (en hoe je hiertoe komt).
- 3. Opdracht in Scilab: je krijgt een rij van getallen. Een buur van een getal is een getal dat 1 kleiner of 1 groter is dan het oorspronkelijk getal. Vind welk getal in de rij geen buur heeft.
- 4. Opdracht in SciLab: maak de functie om te pivoteren, los hiermee een minimumprobleem op en maak een zichtoplossing van de uitkomst.
- 5. Oefening van lineair programmeren.
Vragen van andere examens:
- Moeilijkere opdracht in pel
- Scilab: plot2d gebruiken
Code (Van Hee)
Methode van Laplace (determinant berekenen met cofactors)
Voor determinant van matrix met meer dan 2 rijen. Recursief algoritme. Je berekent determinant van matrix met n rijen/kolommen uit de waarde van deelmatrices met n-1 rijen/kolommen. n=1 stopt de recursie.
function d = detlaplace(M)
//berekent determinant van de Matrix M met methode van Laplace
//foutmelding indien niet vierkant
[arij,akol] = size(M)
if arij ~= akol then //nakijken of het een vierkant is
error ("Matrix is niet vierkant")
end
if arij == 1 then //basisgeval
d = M(1)
else //recursiestap
d = 0
for i =1:arij
d = d + M(1,i) * (-1)^(1+i) * detlaplace( schrap(M,1,i) )
end
end
endfunction
function N = schrap (M,r,k)
//Schrapfunctie, hoort bij Laplace
N = M
N(r,:) = [ ]
N(:,k) = [ ]
endfunction
Simplexmethode
Procedure voor maximumprobleem: kiest meest negatieve getal onderste rij, kiest laagste resultaat van laatste kolom gedeeld door waarden van de kolom van negatiefste getal van daarnet. Pivoteer(matrix,rij,kol) etc, tot geen negatieven meer onderaan.
function N = pivoteer(M,prij,pkol)
N =M
pivot = M(prij,pkol)
N(prij,:) = M(prij,:)/pivot
for i = 1:size(M,'r')
if i~=prij then //// sla over
N(i,:) = M(i,:) - M(i,pkol) * N(prij,:)
end
end
endfunction
Minimumprobleem m → maximumprobleem M = -m
Groter dan of gelijk aan (≥) → kleiner dan of gelijk aan (≤). Beide kanten maal -1!
Pivoteren tot negatieve getallen in rechterlid (uitgezonder onderste rij) verdwijnen. Dan zoals bij maximumprobleem, totdat er geen negatieveren meer in de onderste rij zijn. m is omgekeerde van M.
2020 augustus examen
Het volledige examen met dank aan ISW:
POD_examen_Van_Hee_augustus_2020.zip
2020 januari examen
Jan Van Hee
1. Een constructie tekenen in Geogebra
2. Vraagstuk oplossen m.b.v. Geogebra.
3. De matrix vermenigvuldig functie uitleggen en maken in Scilab
G. Jongen
Het examen bestaat uit een aantal theorie oefeningen, die zoveel mogelijk van de cursus zullen toetsen. Er is ook een vraag op te lossen met Scilab en minstens één vraag op te lossen met P.e.L.
Voor het hele examen heb je 3u de tijd.
Het examen gaat door in een computerlokaal, en gedurende heel het examen en voor alle vragen mag je gebruik maken van de pc en de tools daarop om het examen op te lossen. Na een tijdje komt mvr. Jongen eens langs om al een deeltje te verbeteren en wat extra te vragen (ik verwacht ook nog dit of dit, of schrijf dit eens wat uitgebreider op).
Je mag dan ook hier en daar wat extra uitleg geven indien nodig, al is het examen eigenlijk overwegend schriftelijk.
Voorbeeldexamen Jan Van Hee:
met dank aan ISW:
2020 oefeningen - Sigfried Seldeslachts
De oplossingen van de oefeningen met dank aan ISW en Sigfried Seldeslachts:
Gemaakte oefeningen van Sigfried (2020).zip
2020 januari examen
Jan Van Hee
1. Een constructie tekenen in Geogebra
2. Vraagstuk oplossen m.b.v. Geogebra.
3. De matrix vermenigvuldig functie uitleggen en maken in Scilab
G. Jongen
Het examen bestaat uit een aantal theorie oefeningen, die zoveel mogelijk van de cursus zullen toetsen. Er is ook een vraag op te lossen met Scilab en minstens één vraag op te lossen met P.e.L.
Voor het hele examen heb je 3u de tijd.
Het examen gaat door in een computerlokaal, en gedurende heel het examen en voor alle vragen mag je gebruik maken van de pc en de tools daarop om het examen op te lossen. Na een tijdje komt mvr. Jongen eens langs om al een deeltje te verbeteren en wat extra te vragen (ik verwacht ook nog dit of dit, of schrijf dit eens wat uitgebreider op).
Je mag dan ook hier en daar wat extra uitleg geven indien nodig, al is het examen eigenlijk overwegend schriftelijk.
Voorbeeldexamen Jan Van Hee:
met dank aan ISW:
Scripttalen
2010 juni examen
Je krijg een bestand in de vorm van datebook.txt
Dit bestand moet je weer splitsen en dan de huidige datum vergelijken met de datum van vandaag (localtime).
Indien de datums overeenkomen moet je naar die persoon een mailtje sturen, of een tekst bestand laten printen met daarin wat info.
Dit tekstbestand moet je dan ook wegschrijven.
Daarna moet je het programma voorzien van een menu, dit moet een entry bevatten om iemand toe tevoegen aan de lijst en om het programma te stoppen.
Heel simepl dus.
1 oefening python:
oefening waar je een sorteeralgoritme moet schrijven
Een oefening waarbij je op sites moet gaan zoeken naar een bepaald woord dat gebruiker ingeeft eventueel via command line.
Op basis van het aantal keer dat dit woord komt in de site is de site hot or not.
2011 juni examen
Lector: Frans Sanen
Het examen bestaat uit 1 oefening Perl, 1 oefening Python en 1 regex (die je niet kan voorbereiden, maar ter plaatse, tijdens het mondelinge gedeelte, moet bedenken).
Permanente evalutie: 8/20
Examen: Perl (6/20), Python (4/20), mondeling gedeelte (2/20)
Perl
Je krijgt een .ics bestand met daarin afspraken. Elke afspraak heeft een aantal eigenschappen zoals begin- en einduur, locatie en naam en emailadres van de betrokken persoon.
Opdracht:
- Het script moet een email kunnen sturen a.d.h.v. een geformatteerde tekst (printf) met daarin de variabelen uit de afspraak (.ics-bestand).
- De personen die in de week van het uitvoeren van het Perl script een afspraak hebben, moeten deze mail automatisch ontvangen.
- Het script moet ook een bestand kunnen genereren met daarin de klanten die al betaald hebben. Dit door in één of ander bestand de tekst PAID toe te voegen. (Ik weer niet meer exact hoe dit deel in elkaar zat)
- Extra: Hoe kan je er voor zorgen dat het script elke dag om 8u wordt uitgevoerd?
Python
Je moet voor 5 voetbalploegen bepalen welke de populairste is. Dat gebeurd aan de hand van het aantal hits ze elk hebben in een zoekmachine naar keuze. De populariteit kan dus in principe met de minuut wijzigen. Aan jou om de 3 populairste van de 5 op het scherm af te drukken.
Mondeling gedeelte
Je verdedigt je geprogrammeerde oefening van Perl en Python én je trekt 2 kaartjes, elk in verband met een regex:
- Leg de regex op kaart 1 uit
- Schrijf de gevraagde regex van kaart 2 uit (je krijgt hiervoor geen voorbereidingstijd vooraf, wel wat assistentie van de prof)
2012 juni examen
Lector: Frans Sanen
Hulpmiddelen: Oefeningen, Internet, je eigen laptop
Tijdens het jaar moet je oefeningen maken, dit staat op 8 van de 20 punten.
Oefening perl (6/20)
- 2 input files: 1 met rekeninguitreksels en 1 met verschillende categorien aankopen. Je moest dan een financieel rapport generaten die per categorie de kosten weergeeft.
- formaat categorie:
Categorie;Kenmerk1,Kenmerk2,…
- voorbeeld:
VASTE KOSTEN;garage,tankbeurt,DATS,Lampiris,Scarlet
- formaat rekeninguitreksel:
Rekeningnummer;Rubrieknaam;Naam;Munt;Afschriftnummer;Datum;Omschrijving;Valuta;Bedrag;Saldo;
- voorbeeld:
BE26735012963329;;Fam. Geeft-Veeluit;EUR;2012012;01/05/2012;"BETALING AANKOPEN 01-05-2012 OM 12.22 UUR, COLRUYT 4145 MET KBC-BANKKAART 6703 73XX XXXX X303 3";03/05/2012;-16,93;608,69;
- output:
Overzicht kosten mei 2012
-------------------------
VASTE KOSTEN 135,12 euro
WINKELEN 65,50 euro
... ...
Oefening python (4/20)
- je moet de Euromillions resultaten afhalen van de site en deze vergelijken met de nummers die je zelf ingeeft. Het programma moet teruggeven of je gewonnen hebt (meer dan 3 cijfers of cijfers en sterren) en welke cijfers je juist had.
2 regexen (2/20)
- 1 uitleggen, 1 schrijven zonder echte voorbereiding. (Je wordt wel op weg geholpen indien nodig :) )
2013 juni examen
2013
lector: Frans Sanen
Permanente Evaluatie (8/20)
Willekeurige selectie uit de gemaakte oefeningen. Met andere woorden: geen risico lopen en alle oefeningen maken!
Oefening perl (6/20)
Een boodschap moet verborgen worden in een aantal mails. Deze kan via commandline worden meegeven, indien niet het geval zal het script hier om moeten vragen. Vervolgens moeten er een aantal mails worden verstuurd (afhankelijk van de lengte van de boodschap). Deze mails worden opgevuld met willekeurige karakters (20 lijnen van 50 karakters). In elke mails wordt dan vervolgens een willekeurige plaats gekozen; op die plaats worden 5 opeenvolgende lettertekens gezet (bv. abcde) gevolgd door 10 karakters van de boodschap. Het aantal mails wordt zo gekozen dat elke mail een stuk van de boodschap bevat. Merk op dat de laatste mail dus minder dan 10 karakters kan bevatten, maar dit is niet erg.
Bonusopmerking: merk op dat op elke lijn een \n staat. Wanneer je de boodschap hier overschrijft zal er dus een newline verdwijnen. Dit kan op verschillende manieren worden opgelost, de eenvoudigste: er voor zorgen dat er altijd een index wordt gekozen zodat dit nooit gebeurt. Met andere woorden: willekeurige getal tussen 0 en 20 * 50 (lijn) + willekeurige getal tussen 0 en 35 (- 15 voor de mogelijke lengte van de boodschap + opeenvolgende letterrij).
Oefening python (4/20)
Uit een invoerbestand moet een lijst opgesteld worden van de woorden die het meest voorkomen in het bestand. Dit bestand, zowel als het aantal woorden dat moet worden getoond moet kunnen meegegeven worden via de commandline. Indien dit niet gebeurt (of deze parameters niet geldig zijn, vraagt het script de gebruiker om de juiste parameters in te geven. Denk aan inputcontrole (eventueel regex (whitelist)). Vervolgens bestand lezen en voor elk woord het aantal voorkomens registreren (pythons dictionary gebruiken). Sorteren (bv. OrderedDictionary Let wel: reversed) en ten slotte de top zoveel tonen (afhankelijk van het opgegeven aantal woorden).
(Deze opdracht is als oefening voorgekomen bij Perl tijdens het jaar)
2 regexen (2/20)
2 kaartjes trekken: 1 regex uitleggen, 1 regex opstellen Niveau: eenvoudig
2018 juni examen
lector: Frederic Vogels
Examen
Count courses
Je krijgt een JSON input in de vorm van
[
{ "studentId": "r0000001","courses": [ "MBI58x", "MBI12x", "MBI98x" ] },
{ "studentId": "r0000002","courses": [ "MBI58x", "MBI12x", "MBI98x" ] },
]
Gevraag is return een JSON in de vorm van { "r0000001": 3, "r0000002": 3 } Met 3 de lengte van courses.
Download
Je krijgt een lijst van ids, en wordt gevraagd de volgende output te returnen
if [ ! -d {id} ]; then
git clone https://github.com/{id}/project {id}
else
(cd {id}; git pull)
fi
voor {id} een id uit de lijst van id's.
Hash
Je krijgt een bestandsnaam als input, lees iedere lijn en vervang deze door de eerste 10 characters van zijn hash. Bv. als er staat a dan schrijf je 10 eerste hex-cijfers van SHA256(a).
Regex
Verander hoofdletters door _ gevolgd door kleine letter, Bv. isLarge --> is_large
Stats
Argumentparser oefening
Translate
Vertaal een Java klasse naar een Python OO klasse
2020 augustus examen
de opgave en oplossingen voor het 2020 augustus examen met dank aan ISW:
2020 juni examen
Het examen bestond uit 5 vragen, in totaal 23 punten. Het examen staat op 20 punten als je dus 10/23 hebt, ben je dus geslaagd. (20/23 = 20/20)
In exam.zip
staan alle vragen zonder oplossing. En in Oplossingen_Sigfried.zip
staan mijn oplossingen. Wellicht kan je sommige korter schrijven (mario-kart bv), zie het als een challenge voor jezelf!
Als je de bestanden download ga je ermee akkoord dat je hier geen misbruikt van zal maken, dit is enkel bedoeld om voor het volgende examen te oefenen!
Bestanden met dank aan ISW en Sigfried Seldeslachts: 20 Juni.zip
2021 januari examen
de opgave en oplossingen voor het 2021 januari examen met dank aan ISW:
Technieken van datamodellering
2017 januari examen
Het examen bestond uit 2 delen. Het eerste deel van het examen was een schriftelijke voorbereiding. Het tweede deel was de mondelinge uitleg over het examen. Op de mondeling toelichting word je gequoteerd.
9 januari 8u30
Vraag 1 Conceptueel en relationeel datamodel.
Viswinkel wil aankopen bijhouden van de klanten. Over de vissen wil hij kunnen bijhouden wat ze eten, met welke vissen ze goed overweg kunnen, in welk watertemperatuur, of ze in zout of zoet water leven,... . Er moet ook bijgehouden worden waar de vissen besteld werden en wat de levertermijn is.
Wat moet het systeem kunnen:
- De klant moet zijn aankopen kunnen bekijken. Welke vissen wanneer gekocht werden.
- Weten welke vissen het meest gekocht worden zodat hij weet welke vissen populair zijn en welke hij meer of minder moet kopen.
- Welke vissen een klant zou kunnen bijkopen.
- Welk voedsel een klant moet kopen voor zijn vissen.
Vraag 2 Theorie
Wat zijn de nadelen van redundantie? (bijvraag: wat is redundantie)
- meer kans op inconsistentie
- meer gegevens bijhouden dus hogere capaciteit nodig.
- complexere aanpassing van gegevens met mogelijks fouten tot gevolg.
Wat is een relatietype van graad 3? Teken deze in een conceptueel datamodel. Waar moet je opletten als je het omzet naar een relationeel datamodel?
zie boek pagina 22 en 38(ternair relatietype & wat als de graad van het relatietype groter is dan twee)
2019 januari examen
De groepsopdracht bestond uit een Bungalowpark. Oplossing is onderaan te vinden.
Het examen bestond uit 2 delen. Het eerste deel van het examen was een schriftelijke voorbereiding. Het tweede deel was de mondelinge uitleg over het examen. Op de mondeling toelichting word je gequoteerd.
1) conceptueel en relationeel maken van een verhaal over theater en toeschouwers (nog geen halve pagina tekst).
2) 2 THEORIE VRAGEN:
a) Beperkingen van data beheren binnen een applicatie (4):
• Geen gestandaardiseerde organisatie en toegang tot gegevens
• Geen permanente opslag (persistentie) Stroom weg, data weg
• Hoe data delen met verschillende systemen?
• Praktisch / financieel onmogelijk om gigantische datasets in
het intern geheugen te bewaren
b) wat houdt de minimaliteitsvoorwaarde in?
Een sleutel is minimaal als het weglaten van een sleutelattribuut tot gevolg heeft dat er geen unieke identificatie meer is
vb: combinatie van nummerplaat én kleur is niet minimaal
2020 januari examen
Groepsproject
Het groepsproject was hetzelfde als vorig jaar.
Examen: 9 Januari
Het examen bestond uit twee delen. Het eerste deel was het conceptueel model. Dit moet je mondeling verdedigen/uitleggen, eens je dat had afgewerkt kon je jouw naam op het bord schrijven en deel twee gaan halen. Als het aan jou was voor de mondelinge verdediging dan liet je het tweede deel even liggen.
Deel 1 - Conceptueel model
Een wijnboer die verschillende gegevens wilt opslaan:
- Wijnsoorten bijhouden
- Flessen hebben een verschillende inhoud (75cl, 1,5l, ....)
- Hij moet kunnen opvragen welke klant het meeste gekocht heeft (hoogste prijs)
- Welke wijnboer de wijn gemaakt heeft
- Een beschrijving, alcoholpercentages, van welk land het komt
- ...
Deel 2 - Logisch model & theorie
Het logisch model kwam was niet hetzelfde als je vraag bij deel 1. Hier je kreeg je twee conceptuele modellen en deze moest je omzetten naar het logisch model.
Daarna waren er nog twee theorie vragen:
- Wat is redundantie? Is het goed of slecht?
- Wanneer is een sleutel minimaal? Leg uit aan de hand van een voorbeeld.
Examen: 20 Januari 8h30
Deel 1 - Conceptueel model
- Verhaal: productiehuis maakt films
- Maak een conceptueel model van het systeem
Deel 2 - Logisch model & theorie
- 2 oefeningen van omzetten conceptueel naar relationeel (laatste had een disjunct)
- 2 theorievragen:
a) Wanneer is een sleutel minimaal? + Voorbeeld:
Een sleutel is minimaal als het weglaten van een sleutelattribuut tot gevolg heeft dat er geen unieke identificatie meer is
b) Wat is redundantie? Is dit een probleem?:
Redundantie is wanner er iets meer dan één keer bewaart kan worden in dezelfde gegevensverzameling en overbodig is omdat ze niet kan berekent worden door andere gegevens. Dit is een probleem want redundantie kan leiden tot inconsistentie! Het systeem moet juist niet redundant zijn.
Algemeen
80% van de punten staat op het examen, 10% op Permanente Evaluatie en 10% op Groepswerk.(Sinds 2019-2020)
Bungalowpark voorbeeldoplossing
Opgelet: dit is een voorbeeldoplossing en niet 100% correct. Iedere oplossing is anders.
Webontwikkeling 1
algemeen
Tips
Maak de opdrachten en hou goed je logboek bij en zorg dat je elke opdracht steeds op het afgesproken tijdstip afgeeft. Zorg ook dat je site valideert.Indien je iets niet begrijpt of als er iets niet uitgelegd staat in de cursus en je wel wil gebruiken kan je best eens googelen. Het internet staat vol met goede uitleg. Een heel interessante site is altijd w3schools.com
Examen
Het examen van web 1 is het maken van jouw eigen website en je zal deze moeten mondeling moeten verdedigen tegen jouw docent.
Jouw docent gaat vragen stellen over jouw code! Zorg er dus voor dat je jouw eigen code verstaat!
Nuttige informatie:
Webontwikkeling 2
2015 juni examen
15 Juni (Lector: Elke Steegmans)
Het examen ging door op de PC.
MONDELING
Leg uit: hoe van JSP pagina met form via Servlet naar resultpagina waarbij foutmeldingen getoond worden (Bijvragen in trend van verschil tussen webserver en webcontainer)
SCHRIFTELIJK
1. Client en Server uitleggen, verschil en hoe werken ze met elkaar?
2. Verschil tussen attribuut en parameter in een request + voorbeeld geven
3. Tekstje aanvullen over MVC
PRAKTIJK
Enkele JSP pagina's linken via een volledig zelf te schrijven Controller servlet (sommige kleine dingen aanpassen in JSP). Java code is gegeven. Selenium test schrijven voor het toevoegen van een nieuwsbericht op de nieuwssite.
18 Juni (Lector: Elke Steegmans)
MONDELING Je kreeg 2 screenshots van een webapplicatie. Er werd verwacht dat je kon uitleggen wat er gebeurden om van de ene pagina tot de andere te geraken.
SCHRIFTELIJK 1. Hoe ziet een GET response eruit, geef en plaats alle onderdelen in de juiste volgorde. 2. JDBC, een invultekst. 3. Model View Controller uitleggen, voorbeeld geven voor ieder concept.
PRAKTIJK Vergelijkbaar met de praktijktest. 1. Item kunnen toevoegen, rekening houden met validatie voor slechte input. 2. Overview van alle items tonen. 3. Overview op verschillende manieren kunnen sorteren.
2015 samenvatting - Sander Lenaerts
Samenvatting met dank aan Sander Lenaerts: Webontwikkeling2theorie.pdf
2017 juni examen
17 Juni (Lector: Greetje Jongen)
Examen op de pc's van UCLL (Examenlogin). 3u de tijd voor praktijk+schriftelijke theorie
THEORIE
- In <form action="Controller?action=find"> leg uit waarvoor de 2 actions staan en wat ze doen.
- Begrippen invullen in een tekst over MVC
- Twee screenshots gegeven: index pagina met link naar overzicht en overzicht zelf. Leg uit wat er gebeurt als gebruiker op de link klikt. Leg communicatie tussen browser en server uit. Gebruik een schema.
PRAKTIJK
Gegeven op xtoledo: Zip met java klassen Recensie en RecensieDB, Selenium, chromedriver, test-klasse en JSP's: index, overzicht, vindRecensie, header en verwijder, css en img map. Recensies hebben een String titel, String auteur, int waardering (1-5), en String tekst.
- Zet alles in juist mappen, selenium aan build toevoegen, chromedriver naar desktop slepen en laten runnen, zo is path ernaar ingegeven in gegeven testklasse.
- Doe overzicht pagina werken (read met controller)
- Doe vindRecensie werken, volledige server-side validatie, moet errors die in Model worden opgeroepen (door exceptions) tonen aan gebruiker en vorig ingegeven waarde laten staan als invoer fout is. Als invoer juist is moet het de recensies teruggeven die de ingegeven waardering hebben gekregen.
- In overzicht pagina is er voor elke recensie een verwijder optie. Als je op deze klikt moet je naar een bevestigingspagina gaan (verwijder.jsp gegeven). In verwijder.jsp is een formulier met een 'Zeker' en 'Toch niet' knop. Zeker verwijdert de recensie in kwestie, en je gaat naar overzicht. Met 'Toch niet' ga je gewoon naar overzict.
- Test schrijven voor als je een waardering ingeeft waar geen enkele recensie voor wordt gevonden. Kijk na of we terug op dezelfde form pagina vindRecensie komen, of de juiste error wordt weergegeven en of de input de vorige input terug bevat.
- Zippen en op xtoledo zetten.
2017 Project bestanden - Yanice Slegers
Het volledige project met dank aan Yanice Slegers: web2-master.zip
2017 samenvatting - Marie Verdonck
Samenvatting met dank aan Marie Verdonck: Web2-SamenvattingTheorie_MarieVerdonck_compressed.pdf
2018 samenvatting - Onbekend
Samenvatting uit 2018 met dank aan een onbekend persoon: Webontwikkeling 2.pdf
2019 juni examen
11 Juni (Lector: Greetje Jongen/Rudy Dekeerschieter)
Examen op de pc's van UCLL (Examenlogin). 3u de tijd voor praktijk+schriftelijke theorie
THEORIE
- Invuloefening over MVC model.
- Selenium test gegeven. Beschrijf wat sommige van de methoden net doen.
- Twee screenshots gegeven: index pagina met link naar overzicht en overzicht zelf. Leg uit wat er gebeurt als gebruiker op de link klikt. Leg communicatie tussen browser en server uit. Gebruik een schema.
PRAKTIJK
Gegeven op xtoledo: Zip met java klassen Recensie en RecensieDB, servlet, Selenium, chromedriver, test-klasse en JSP's: index, overzicht, vindRecensie, header en verwijder, css en img map. Recensies hebben een String titel, String auteur, int waardering (1-5), en String tekst.
- Zet alles in juist mappen, selenium aan build toevoegen, chromedriver naar desktop slepen en laten runnen, zo is path ernaar ingegeven in gegeven testklasse.
- Doe overzicht pagina werken
- Voeg een verwijderlink toe aan overzicht.jsp die wanneer geklikt je overbrengt naar een bevestigings pagina en dan beslist of je die recensie wil deleten.
- Voorzien een link op overzicht.jsp toon/verberg rating. Rating is default zichtbaar na op deze link te klikken is dit niet zo (en blijft het niet zo).
Als je dan later weer op de link klikt zijn ze wel weer zichtbaar (en blijft dit zo). (tip: cookie)
- Voorzie een header.jsp voor elke pagina (gebruik include)
2020 augustus examen
met dank aan ISW:
Vragen
Een aantal vragen (niet volledig).
Waarom mag een GET request geen side-effects hebben?
Hoe vaak wordt een @Before uitgevoerd?
Kies uit:
-
1 keer
-
per keer dat er een test is
Wat is het nut/doel van MVC?
Wat is het verschil tussen de volgende twee:
<%! %>
en <% %>
Bestanden:
2020 juni examen
met dank aan ISW:
Praktijk vragen
Zie de bestanden voorbereiding. Deze kreeg je een week voor het examen en moest je thuis in orde brengen. Maak dit dus eerst!!
Daarna kan je het bestand Opgeaven Praktijk.pdf
bekijken. De extra bestanden staan in web2_gegeven_bestanden.zip
OPLOSSINGEN VAN STUDENTEN: het kan zijn dat de oplossingen soms een deel missen, de personen die hun oplossing uploaden zijn telkens geslaagd. Zorg dat je de oplossing zelf altijd controleert of deze klopt met de gegeven vragen.
Theorie vragen
Vraag 1
Welke JSP-tag moet ik gebruiken in welke situatie?
-
<%! %>
-
<%= %>
-
<% %>
-
<%@ include %>
Kiezen tussen:
-
ik wil de pagina van de Header toevoegen aan mijn pagina;
-
ik wil eender welke Java code toevoegen tussen HTML;
-
ik wil de string waarde van een uitdrukking in Java tonen tussen HTML;
-
ik wil een veranderlijke éénmalig initaliseren bij de aanmaak van de servlet in de webcontainer.
Vraag 2
Ik heb een website gemaakt voor een garage die bijhoudt hoeveel wagens er momenteel in de garage staan. Hiervoor heb ik een zoekfunctie geprogrammeerd. Gegeven de onderstaande code, hoe ziet de volledige URL van de HTTP-request er uit als ik op zoek ben naar de auto van het merk Ford en het type Focus. De domeinnaam van de website is mijngarage.be.
Vraag 3
Wat is het verschil tussen client-side en server-side validatie?
Vraag 4
Wat is het nadeel van het gebruik van cssSelector
of xPath
bij Selenium testen?
Vraag 5
Waar wordt een sessie (SESSION) opgeslagen?
-
Server-side
-
Client-side
Note: ze bedoelen hier niet de cookie, dus server-side.
Vraag 6
Waarom gebruiken we @Before
en @After
tags in testklassen?
Vraag 7
Waarom is een POST-request
in sommige omstandigheden veiliger om te gebruiken dan een GET-request
? Leg uit.
Vraag 8
Wat wil een 300 response code zeggen?
Note: een goede uitleg over alle HTTP-codes vind je op https://httpstatuses.com/.
Opgave examen en oplossingen: