I started working on this research project on Computer Networking in my 5th semester. I was highly motivated to do something technical, and at that moment Computer Networks piqued my curiousity. So I delved into a research project on Opportunistic and Delay Tolerant networks along with a friend of mine. The idea was to devise a new network routing protocol.
We initially started with our preliminary readings, to get idea about the subject. We,
1. Read the following books- Computer Networking by Tanenbaum and Data Communications & Networking by Forouzan.
2. Watched all the NPTEL lectures on Networking.
3. Studied and analysed popular research papers published in the field of Computer Networking like Epidemic, Prophet, Spray and wait, and other research papers published in the field of Computer Networking.
We quickly hit upon an idea to implement Machine Learning on Opportunistic Networks, so that we could make our networking protocol learn on the basis of features, that which node is the next best forwarder for the message.
In December, keeping this on the side, we branched off to devise a simpler protocol so that we can an idea of the ONE (Opportunistic Environment Simulator) before we get down to implement our Machine Learning based Networking protocol.
The concise summary of our protocols is as follows:-
In a network environment, a protocol needs to search for the next best forwarder for a message it currently has in its buffer, so that it can be transferred to the destination effectively. We devised a method in which we predict the next best forwarder of the message using the encounters and destinations of each node with the destination node for that message.
We basically calculate the ratio of the encounters of each node with the destination, and the total sum of encounters of all the nodes in the network, and store it as the value alpha for each node.For simplicity, we store the encounters of each node with every other node in a 2-D array to later calculate alpha. Similarly, beta is the ratio of the distance of a node from the destination and the sum of distances of all the nodes from the destination. We then calculate gamma, as the ratio of alpha and beta for each node in the network.
Here we bifurcate into two kinds of protocols based on this idea:-
1. edSingleRouter: In edSingleRouter, when a message reaches a node it needs to choose among its neighbours the best possible node to transfer the message to, keeping in mind the destination of the message. So it looks at the gamma values of each of its neighbours and chooses the neighbour with the maximum values of gamma as the next best forwarder for the message!
(You get it now, don’t you? Keep hanging in here with me. )
2. edMultiRouter: edMultiRouter is kind of a more refined version of edSingleRouter (I shall state our metrics shortly). In edMultiRouter, everything goes the same until a node having a message has to choose among its neighbours the next forwarder. Here we calculate a threshold value, which is the average of the gamma values of the neighbours and we create a list of all nodes having their gamma values greater than this threshold. We pass the message to all these nodes.
In case such a list comes out to be empty (for instance, when all nodes have gamma as 0 initially), we flood the message to all the neighbours until it finally reached the destination. Currently we have been focusing more on edMultiRouter, due to its more favourable results.
As of now, we are running these routing protocols on two types of settings- one without any clusters and another type of settings which has nodes belonging to separate clusters with different node speeds, buffer space and movement model.
So this was the basic summary of my project. I don’t want to go into all the technical nitty-gritties in this post and have tried to state the most basic working of the protocol. I hope you understood it.
The various metrics that we are monitoring for every simulation are:-
1. Delivery Probablity – It is the probability of the messages that are correctly received by the destination within a given time period (started/created).
2. Average Latency – It is the average of the difference between the message delivery time and message creation time.
3. Average Buffer time – Average time that messages stayed in the buffer at each node.
4. Buffer size – Size of buffer for each node to store messages.
5. Average Hop Count – It is the average of the number of hops between the source and the destination.
6. Overhead ratio -The overhead ratio is the average number of forwarded copies per message ; delayed – delivered.
7. TTL – Time to live. Time for which the message lives. Messages are aborted when their TTL expires.
8. Speed of nodes in a cluster.
9. Warmup Time required before beginning to gather reports.
Today, while I’m documenting the project on this blog, we have successfully constructed a working and optimum version of our routing protocols. P.S. The code can be optimized further as well, we’ll see if we have to do that.
After that, all that is required is code cleaning and taking readings to write the draft for our research paper. I keep uploading my code for the project on a shared github repository, and I feel I have learnt a lot of programming after undertaking this project. It really kindled my tryst with programming maybe.
I’ll keep posting my progress on the project here. Thank you for your patience.