Kodecafe - Netværk
Dette projekt handler om at bygge og simulere sit eget lille computer-netværk. Som standard vil netværket se således ud:

Netværket virker ved at en computer ønsker at sende en besked, fx en string, til en anden computer på netværket. Computeren kan dog kun sende til en af dens naboer, så den skal vælge den nabo, som garanterer at beskeden når frem.
Alle computere har et såkaldt forwarding table, som beskriver hvilken nabo der skal sendes til. Det er en videnskab i sig selv at bygge disse tabeller automatisk, så vi vil blot anvende en statisk, som alle computere har adgang til. Tabellen for ovenstående netværk er.
| 0 | 1 | 2 | 3 | 4 | |
| 0 | - | 2 | 2 | 2 | 2 |
| 1 | 2 | - | 2 | 2 | 2 |
| 2 | 0 | 1 | - | 3 | 3 |
| 3 | 2 | 2 | 2 | - | 4 |
| 4 | 3 | 3 | 3 | 3 | - |
Række er afsender og kolonne er modtager.
Eksempel: 0 vil sende til 4, så den skal sende til 2.
Hver computer kaldes en Node. Beskeder sendt mellem nodes vil være strings pakket ind i en Packet. Hver node har som minimum én kø, kaldet Queue, hvor packets der venter på at blive behandle vil ligge i.
Det anbefales at man har både en indkommende og en udgående kø, hvilket forklares senere.
Node, Packet og Queue kan alle beskrives som structs og hvordan de ser ud er op til en selv.
Netværket skal understøtte to funktioner:
send: Tager en fra- og til-node samt en string (char*), laver en packet ud af det og sætter den i kø hos den node, der er afsender.receive: Behandler en packet, når den har nået sin destination. Fx print den til skærmen eller send et svar tilbage.
Simuleringen af netværket kan gøres ved hjælp af følgende algoritme:
repeat forever:
for each node N:
Move a packet (if any) from N's incoming queue to its outgoing.
Except if the packet is for N itself, then trigger the receive function.
for each node N:
Move a packet (if any) from N's outgoing queue
to the appropriate neighbor's incoming queue using the forwarding table.
Grunden til to køer er følgende: Hvis en packet bare flyttes fra indkommende kø til indkommende kø, så vil den kunne flytte sig mere end en node i et enkelt repeat forever-skridt. Hvis det er hvad man ønsker, så er det fint, men hvis man tænker på hvert af de skridt som noget der sker hos alle nodes samtidig, så er det lidt urealistisk.
Det anbefales at Queue understøtter følgende to funktioner:
void enqueue(Queue* queue, Packet* packet): Placer en packet i køen.Packet* dequeue(Queue* queue): Tag en packet ud af køen. Hvis der ikke er nogen, returnerNULL.
Nedenfor finder man en program-skabelon, som allerede indeholder forwarding table og den generelle struktur til simuleringsalgoritmen.
Hjælp til at komme i gang
- Definer
Node,PacketogQueuesom structs. Prøv at tænke over hvad information der er nødvendigt at have med i de forskellige structs. - Lav constructors til
Node,PacketogQueue. - Lav
enqueueogdequeue. - Lav
sendogreceive. - Implementer algoritmen for simuleringen.
Filer
Hvis man ikke vil skrive sin egen Queue:
Læg begge filer i samme mappe og skriv #include "queue.h" inden main-funktionen
eller bare kopier indholdet ind i program.c.
Bemærkninger
Hvis man tager Netværk og sikkerhed (DM557), så vil der blive lagt meget fokus på at netværk, fx internettet, er bygget op i lag, som hver har et ansvar. I denne simplificering bekymrer vi os ikke om det. Man vil desuden i kurset lære om hvordan forbindelser mellem nodes kan være ustabile og packets kan blive mistet, så de skal sendes igen. Det er heller ikke noget som vi vil bekymre os om her.