Realistic Network Modeling Using Minetest

Enable the creation and usage of realistic and accurate 3D models of modern computer networks for research and instruction.
=Problem Definition=
==Background==
Minetest is a free and open source 3D voxel game that enables the creation of complex virtual worlds. A voxel is simply a three-dimensional data point, similar to how a pixel represents a value on a 2D bitmap. 
Modifications, (‘mods’), enable the user to customize and create their experiences within Minetest. There are hundreds of free mods, such as animals, armor, and mechanics, and even step-by-step open source tutorials on how users can create their own. Current modifications do not, however, model computer networks and their controls in a way that is realistic enough for quality research and education in TCP/IP-based networks and cybersecurity using 3D virtual worlds. The goal of our team’s project is to change this, enabling a user-friendly network model that meets the standards of Bloom’s Taxonomy, implementing intellectual growth through direct experience with a 3D network model.
==Deliverables==
Currently, there are no 3D models of modern computer networks for research and education. As educational methods progress further into immersive technological learning, it is crucial that hands-on technological options are made available at the same rate. Our solution to this problem will be user-friendly, allowing visual and hands-on learners to flourish in the academic subject of basic networking.
The higher learning process characterized in Bloom’s Taxonomy is to apply, analyze, evaluate, and create. Our goal is to create a realistic and accurate 3D model of modern computer networks for research and instruction that can be used as a basis for further development or instruction while also pushing students to apply their knowledge from a classroom setting and draw their own conclusions about networks, as well as to create their own scenarios which will be modeled accurately. 
Each network interface controller has a unique Media Access Control (MAC) address. This is a unique identifier to a piece of hardware which is used as a network address, or ‘physical address’ when communicating in a network segment. As a team, we will recreate these networks by creating a deliverable in the form of an environment in Minetest. This environment will utilize pipe-like blocks that transmit messages from computer to computer through a network switch.
==Specifications==
The diagram pictured on the left is a recreation of the original specification diagram drawn by our client during our first meeting. The diagram depicts the overall thought process of the network we would implement in Minetest.
In theory, we will have three objects that will makeup our networks: computers, wires, and switches. The objects labeled D1 and D2 represent computer machines. The large rectangle object represents the switch block, and the lines overlaid with zig-zags represent the wires.
The network will work by utilizing custom functions, sending messages using electronic signals from each computer through the wires and receiving further instructions by ‘checking in’ at the neighboring blocks, exactly the way a standard network operates in real-life.
=Devices= 
==Computers==
===The Blocks===
Computers are the cornerstone to any network. For this reason, Networkcraft has taken into consideration the vast amount of different approaches individuals have to access networks, and as a team we have incorporated two different types of computers into our project: the monitor and tower, and the laptop.
This is the monitor and tower version of our computer block. The functionality of the monitor and tower blocks is the same of any other computer block. The blocks are interacted with by placing the tower in a block adjacent to the monitor block and right-clicking on the monitor block.
The monitor and tower's well commented code can be found here.
This is the laptop version of our computer block. Currently, it is not yet implemented, but will be coming soon! The functionality of the laptop block is the same of any other computer block. The laptop block is interacted with by right-clicking on it.
The laptop's well commented code can be found here.
When any computer block is right-clicked on with the mouse, a graphical user interface (GUI) appears. The GUI displays the following elements:
 1. Device Name - Found in the top-left corner of the GUI, the device name is displayed. In the example, you can see this as "Computer 1". The user will be able to edit and change this if they desire.
 2. Message Received - Found in the middle of the GUI, a message that has been received from another computer can be seen. In the example, this can be seen as "Default Message"
 3. Current Mac Address - This field allows the user to see their current Mac and change it if desire. Each Mac address is unique, and will be how the computers communicate to one another. In this example, the current Mac address is "00:0a:95:68:16".
 4. Target's Mac - This field allows the user to specify a Mac address to send a message to. 
 5. Send Message - This field will be sent along the wires to be transmitted to another computer.
 6. Save Button - Seen at the bottom of the GUI, the save button saves all the fields that the user has updated and stores them behind the scenes. 
 7. Refresh Button - When clicked, a message will be displayed that was correctly transmitted.
 8. Restore to Default Button - When clicked, replace all the fields of the computer as if it were a freshly placed block.
The GUI will constantly be updated as new features are implemented.
==Switch==
===The Block===
A network switch, sometimes known as a switching hub, bridging hub, or a MAC bridge, is a piece of networking hardware that connects devices on a computer network by using packet switching. Packet switching is the baseblock of data communications, and it works by grouping information into a header and a payload, which the network switch receives and forwards to the destination device. The header tells the network switch where to send the data, and the payload is the supplementary information. 
To understand the network switch and its primary operations, it’s important to first understand the OSI (Open Systems Interconnection) model. The OSI model standardizes and characterizes data transmission in seven levels. The first three levels are known as media levels, and are more raw data transmission, while the upper four levels are known as host layers. The host layers are more advanced data transmission, including managing communication sessions, encryption/decryption, and remote file access. 
The network switch is a multi-port network bridge that uses the media access control (MAC) addresses to forward data at the data link layer (layer 2) of the OSI model. Some switches can also forward data at the network layer (layer 3) by additionally incorporating routing functionality. Such switches are commonly known as layer-3 switches, or multilayer switches.
In our game modification, the network switch will have six ports. one port for each direction: up, down, front, back, left, and right.
===The GUI===
The switch GUI features six port labels, each reflecting a port for every side of the block's face. Under each label, there is an "Origin MAC" and "Target MAC" sub-labels. The area to the right of the sub-labels are updated whenever a player right-clicks on the switch block. These sub-labels reflect the origin and target MAC address of every wire that is connected to the switch block. Sub-labels that are empty imply that no wire is connected to that port.
The switch's well commented code can be found here.
==Mescons==
Mesecon is a mod that adds a model of electrical signals, making automation possible. It will only note if the signal is present or absent, but it does not have any notion of power. Within Mescons, receptors are blocks that generate a signal on some event that performs some action. Effects are blocks that receive the signal, then logic blocks process the signal, and conductors join them all together, creating operational circuits.
In our model, we will only focus on implementing wires. These wires will hold the messages while they are in transit throughout the network system.
=Student Instruction Guide=
Welcome to the NetworkCraft Minetest mod! This game mod serves as supplemental education of a basic network through interactive learning in Minetest! Please allow this help guide serve as your step-by-step tutorial for interacting with the NetworkCraft mod.
	
Before building, creating, and interacting with your own network using NetworkCraft you must first have a basic understanding of what a network is. Networks are everywhere. In a large sense, nobody can do anything with data that does not involve a network. Much like the human networks that you are apart of, computer networks let us share information and resources. In the NetworkCraft mod networks currently consist of three things: computers, switches, and wires.
	
Computers, represented by a monitor and keyboard in NetworkCraft, allow the user to send and receive messages.
	
Switches, represented by a small blinking box have six ports and serve as a bridge, allowing multiple continuous computer connections.
	
Wires, represented by a thin yellow line, are what connects computers and switches together.
Let us start by constructing a very simple network so that we can learn how one works. To begin we first need to equip ourselves with the proper blocks (nodes). To equip a block you first need to open your inventory by pressing the 'I' key. Once opened, you are able to search, select, and equip blocks. Please equip the following three blocks: monitor, switch, and wire.
	
Once the blocks are equipped in your player's hot bar you can start the construction of your first network! Begin by placing a monitor. Next, place two wires side by side before setting down a switch and repeating the process again so that you end up with the following:
	
MONITOR - - WIRE - - WIRE - - SWITCH - - WIRE - - WIRE - - MONITOR
Now that your basic network is constructed you can begin the process of configuring the computers so that messages can be sent and received between them. To interact with the monitor one simply has to right-click it. At this point a GUI (formspec) will open showing four editable fields, one display field, and three buttons.
	
The top field allows you to change the computer's name. You will notice this defaults to "Computer 1". Next, on the left, near the bottom, you will notice a message field. This is where you are able to input the message you want to send to another computer. You are able to put anything in this textbox but for simplicity let us start with just the message "Test".
	
Now we will move on to the more complex fields, ones involving MAC addresses. MAC stands for Media Access Control (MAC). It is a unique identifier for network interfaces. The MAC address is formed in accordance to the rules of the three numbering name spaces, which are managed by the Institute of Electrical and Electronic Engineers (IEEE). The format is six sets of two digits or characters, separated by colon (:). An example of a MAC address is 00:0a:95:9d:68:16. For NetworkCraft, in order to send and receive messages the target MAC address of the first computer must match the MAC address of the second computer. For our purposes, and to make things simple lets leave the first computer MAC address related fields as they are. Now, hit the "Save" button and head over to the second computer. Change the second computer's MAC address to "00:0a:95:9d:68:17" and it's target MAC address to "00:0a:95:9d:68:16" and click the "Save" button. You will now notice that some debug messages appear.
	
These debugging messages serve a purpose and allow us to understand exactly what is happening inside the network we created. You will see, in real-time, how the message you saved and sent are transmitted. After a few seconds interact with the second computer again by right-clicking. Now comes the final step. Navigate your mouse to the "Refresh" button and click it. Assuming every step was followed correctly you will see the message you sent from the first computer appear in the GUI (formspec) of the second!
Now that you have successfully sent a message between two computers you are ready to do more. Take the time that you are left with to experiment and learn more how networks work. As a development team, we at NetworkCraft are excited that you have been able to learn how networks work and function, even advancing to creating one yourself! We thank you for your time, dedication, and success in learning. Good luck and network on!
=Final Design=
=Validation=
=Team Members=
=Additional Documentation=
Minetest Installation Instructions
GitHub Repository
Project Schedule
Presentations
Other