Számítógépes hálózat szimulációja

Ebben a feladatban egy számítógépes hálózat szimulációjának egyszerűsített implementációját kell elkészítenünk. A részfeladatok megoldása során ügyeljünk arra, hogy a megadottakon kívül egyetlen osztály se tartalmazzon más publikus metódust vagy adattagot! A megoldás minden osztályát tegyük a router csomagba!

A megoldást egyetlen zip állományként kell feltölteni, amely tartalmazza a csomagnak megfelelő könyvtárszerkezetben az összes forráskódot. A fordítás során létrejövő class állományokat viszont nem szabad már mellékelni! A fordításhoz minimum a Java Standard Edition 7 használata kötelező.

A kész megoldást az innen letölthető class fájllal lehet tesztelni. Ezt a lefordított class fájlokkal a következő módon lehet futtatni:

$ java Test

A hálózatban levő számítógépek címeinek ábrázolása

A hálózaton összekapcsolt gépeket ún. IP-címekkel fogjuk azonosítani. Az IP-címeknek többféle szabványa is létezik, ezek közül mi most az IPv4-et fogjuk választani, ahol a címek négy, pontokkal elválaszott, 0 és 255 közti egész számból állnak, például 127.0.0.1, 8.8.4.4 vagy 255.255.255.255.

Ezeket az IP-címeket reprezentáljuk egy külön osztállyal! Az osztály tartalmazzon:

A hálózaton utazó csomagok ábrázolása

A hálózaton utazó csomagokat reprezentáljuk a Packet osztály egy objektumával! Egy ilyen Packet típusú objektum tartalmazza a csomag által továbbított szöveges adatot, a csomag célpontját, a csomag által megtehető csomópontok felső korlátját (amely kezdetben legyen 50) és a csomag által meglátogatott csomópontok IP-címét! A felső korlátra azért lesz szükségünk, hogy a csomag, ha esetleg véletlenül hurokba kerülne, ne keringjen a végtelenségig a hálózaton.

A csomagokat leíró osztály tartalmazzon:

A hálózat csomópontjainak ábrázolása

A számítógépes hálózat egy csomópontját a Node osztály egy példánya fogja reprezentálni. A hálózaton minden egyes csomópont ismeri a szülőjét (megelőzőjét) és a gyermekeit (rákövetkezőit). Továbbá minden csomópont nyilvántartja a saját IP-címét és annak az IP-tartománynak a határait, amiért felelős.

Egy csomópontnak megfelelő Node objektum létrehozása kétféle konstruktorral történhessen:

Csomagok szimulált továbbítása a hálózaton

A szimuláció során egy csomagot úgy fogunk továbbítani, hogy a csomópontokat leíró Node osztályt kiegészítjük még egy tracePacket() nevű metódussal. Ez a metódus egy csomagot kap paraméterként és a visszatérési érték egy String objektum. A metódus működése legyen az alábbi:

Vegyük észre, hogy a csomagok továbbításában érintett csomópontoknak mindig meg kell hívnia a csomag recordPath() metódusát. Illetve, a továbbküldés előtt mindig vizsgáljuk meg, hogy a csomag egyáltalán továbbküldhető-e! Ha ugyanis a csomópontok addig küldözgetnek egymásnak egy csomagot, amíg a megtehető, csomópontok közti ugrások felső korlátja nullára nem csökken, akkor a metódusnak "LOOP" szöveggel kell visszatérnie!

Például:

Ebben a gráfban az alábbi lekérdezések a következő eredményeket adják:

// ...
Node n4 = new Node(n2, IPAddress.fromString("10.0.0.3"),
                       IPAddress.fromString("10.0.0.3"),
                       IPAddress.fromString("10.0.0.3"));
// ...

Packet p1 = new Packet("alma", IPAddress.fromString("192.168.0.5"));
System.out.println(n4.tracePacket(p1));
// "10.0.0.3 , 10.0.0.1 , 8.8.8.8 , 192.168.0.1 , 192.168.0.5 , alma"

Packet p2 = new Packet("alma", IPAddress.fromString("1.1.1.1"));
System.out.println(n4.tracePacket(p2));
// "OUT"

Packet p3 = new Packet("alma", IPAddress.fromString("10.0.0.2"));
System.out.println(n4.tracePacket(p3));
// "LOOP"

Jó munkát!