How to Implement Epidemic Protocol in NS2

 

To implement the epidemic protocol in ns2, we have to simulate a kind of routing protocol often used in Delay Tolerant Networks (DTNs). This protocol is developed to increase the probability of message sends in highly dynamic and interrupted networks by flooding the network with message copies, making sure that at least one duplicate touches its end points.

Below is a step-by-step guide on how to implement an epidemic routing protocol in NS2:

Step-by-Step Implementation:

Step 1: Understand the Epidemic Protocol

The epidemic routing protocol functions by:

  1. Message Dissemination: Nodes imitate and forward messages to all come across nodes that do not have the message.
  2. Buffer Management: Each node stores duplicates of the messages it carries in a buffer.
  3. Infection: When two nodes meet, they interchange messages they don’t already have, thus “infecting” each other with the messages.

Step 2: Set Up NS2

Make certain to install the ns2 and validate it by executing a simple simulation. NS2 doesn’t natively support DTNs or epidemic routing, so you will need to execute this actions manually.

Step 3: Implement the Epidemic Protocol in C++

  1. Create the Epidemic Protocol Agent Class

The following example is a basic structure for implementing an epidemic routing protocol in NS2.

#include <agent.h>

#include <packet.h>

#include <trace.h>

#include <address.h>

#include <map>

#include <set>

#include <vector>

class EpidemicAgent : public Agent {

public:

EpidemicAgent();

void recv(Packet* p, Handler* h);

void exchangeMessages(EpidemicAgent* neighbor);

void sendMessage(Packet* p);

void bufferMessage(Packet* p);

protected:

std::map<int, Packet*> messageBuffer_; // Message ID -> Packet

std::set<int> receivedMessages_;       // Set of received message IDs

int nodeID_;

};

// Constructor

EpidemicAgent::EpidemicAgent() : Agent(PT_UDP) {

// Initialize the node ID and message buffer

nodeID_ = address();

}

// Packet reception

void EpidemicAgent::recv(Packet* p, Handler* h) {

hdr_cmn* cmnh = hdr_cmn::access(p);

int msgID = cmnh->uid();

// If the message has not been received before, buffer it

if (receivedMessages_.find(msgID) == receivedMessages_.end()) {

bufferMessage(p);

receivedMessages_.insert(msgID);

}

// Forward the message to neighbors

for (auto& neighbor : neighbors_) {

neighbor->recv(p->copy(), nullptr);

}

}

// Buffer the message locally

void EpidemicAgent::bufferMessage(Packet* p) {

hdr_cmn* cmnh = hdr_cmn::access(p);

int msgID = cmnh->uid();

messageBuffer_[msgID] = p->copy();

}

// Exchange messages with a neighbor node

void EpidemicAgent::exchangeMessages(EpidemicAgent* neighbor) {

for (const auto& message : messageBuffer_) {

int msgID = message.first;

if (neighbor->receivedMessages_.find(msgID) == neighbor->receivedMessages_.end()) {

neighbor->recv(message.second->copy(), nullptr);

}

}

}

// Send a message to all neighbors (simulated contact)

void EpidemicAgent::sendMessage(Packet* p) {

for (auto& neighbor : neighbors_) {

neighbor->recv(p->copy(), nullptr);

}

}

  1. Integrate the Protocol into NS2
  1. Modify the Makefile: Include your new EpidemicAgent class to the NS2 Makefile so that it gets compiled with the rest of the simulator.
  2. Recompile NS2:

make clean

make

Step 4: Create a Tcl Script to Simulate the Epidemic Protocol

Once the protocol finish its compilation, configure a Tcl script to simulate a network using your custom protocol.

Example Tcl Script:

# Create a simulator object

set ns [new Simulator]

# Define the topology

set val(chan)   Channel/WirelessChannel

set val(prop)   Propagation/TwoRayGround

set val(netif)  Phy/WirelessPhy

set val(mac)    Mac/802_11

set val(ifq)    Queue/DropTail/PriQueue

set val(ifqlen) 50

set val(stop)   100.0

# Initialize the topology object

set topo [new Topography]

$topo load_flatgrid 1000 1000

# Create the God object

create-god 10

# Configure the nodes

$ns node-config -adhocRouting Epidemic \

-llType LL \

-macType Mac/802_11 \

-ifqType Queue/DropTail/PriQueue \

-ifqLen 50 \

-antType Antenna/OmniAntenna \

-propType Propagation/TwoRayGround \

-phyType Phy/WirelessPhy \

-channelType Channel/WirelessChannel \

-topoInstance $topo \

-agentTrace ON \

-routerTrace ON \

-macTrace ON \

-movementTrace ON

# Create nodes

for {set i 0} {$i < 10} {incr i} {

set node_($i) [$ns node]

}

# Define node positions

$node_(0) set X_ 50.0

$node_(0) set Y_ 50.0

$node_(0) set Z_ 0.0

$node_(1) set X_ 200.0

$node_(1) set Y_ 50.0

$node_(1) set Z_ 0.0

# and so on for all nodes…

# Attach Epidemic agents to nodes

for {set i 0} {$i < 10} {incr i} {

set epidemic_($i) [new Agent/EpidemicAgent]

$ns attach-agent $node_($i) $epidemic_($i)

}

# Start sending a message from node 0 to all others

set msg [new Packet]

$epidemic_(0) sendMessage $msg

# Simulation end

$ns at $val(stop) “stop”

$ns at $val(stop) “exit 0”

proc stop {} {

global ns

$ns flush-trace

exit 0

}

# Run the simulation

$ns run

Step 5: Run the Simulation

  1. Save the Tcl script (epidemic_protocol_simulation.tcl).
  2. Open a terminal and navigate to the directory where you saved the Tcl script.
  3. Execute the simulation using the following command:

ns epidemic_protocol_simulation.tcl

Step 6: Analyze the Results

  • Use trace files and the network animator (NAM) to evaluate the performance of your epidemic protocol, concentrating on metrics like message delivery ratio, delay, and buffer usage.
  • Assess how effectively the protocol distributes messages through the network and makes sure delivery despite capable intrusions.

Additional Considerations

  • Buffer Management: Handle buffer overflow and prioritize messages to guard against blockage by implementing techniques.
  • Optimizations: Consider enhancing the epidemic protocol to minimize unnecessary transmissions and improve efficiency like restricting the amount of message copies or accomplishing probabilistic forwarding.
  • Realistic Mobility Models: Examine the protocol’s performance in situations similar to realistic DTNs by using realistic mobility models.

We comprehensively guided you to implement the Epidemic Protocol and made you learn about its simulation with demonstration and examples using ns2 tool. You can also consider the future enhancement features to accomplish it as per your requirements. To Implement Epidemic Protocol in NS2 you can approach ns2project.com where we share with you best project ideas and topics. Get performance analysis done for your project from us.