Ns3 Projects for B.E/B.Tech M.E/M.Tech PhD Scholars.  Phone-Number:9790238391   E-mail: ns3simulation@gmail.com

How to Implement Network Optimal Routing in ns3

To implement network optimal routing in ns3, we need to create a network topology, which uses optimal routing algorithm to conclude the paths for simulating data transmission. Several routing protocols were present in ns3 which supports directly such as OSPF and AODV, for this example, to justify the concept we can uses static routes to implement a simplified version of optimal routing. Below given steps will guide on setting up a Network Optimal Routing in ns3.

Step-by-step guide to implement network optimal routing in ns3:

Step 1: Setup ns3 Environment

Make sure that ns3 is installed and properly configured.

git clone https://gitlab.com/nsnam/ns-3-dev.git

cd ns-3-dev

./waf configure

./waf build

Step 2: Create the Network Optimal Routing Simulation Script

We will create a script that sets up a network topology, configures static routes to represent optimal routing, and simulates data transmission between nodes.

#include “ns3/core-module.h”

#include “ns3/network-module.h”

#include “ns3/internet-module.h”

#include “ns3/point-to-point-module.h”

#include “ns3/applications-module.h”

#include “ns3/flow-monitor-module.h”

using namespace ns3;

NS_LOG_COMPONENT_DEFINE(“OptimalRoutingExample”);

void SetStaticRoute(Ptr<Node> src, Ipv4Address dst, Ipv4Mask mask, Ipv4Address nextHop, uint32_t interface)

{

Ptr<Ipv4> ipv4 = src->GetObject<Ipv4>();

Ipv4StaticRoutingHelper ipv4RoutingHelper;

Ptr<Ipv4StaticRouting> staticRouting = ipv4RoutingHelper.GetStaticRouting(ipv4);

staticRouting->AddNetworkRouteTo(dst, mask, nextHop, interface);

}

int main(int argc, char *argv[])

{

CommandLine cmd;

cmd.Parse(argc, argv);

// Create nodes

NodeContainer nodes;

nodes.Create(6); // Six nodes for a simple network topology

// Set up point-to-point links

PointToPointHelper p2p;

p2p.SetDeviceAttribute(“DataRate”, StringValue(“5Mbps”));

p2p.SetChannelAttribute(“Delay”, StringValue(“2ms”));

// Install point-to-point devices and channels between nodes

NetDeviceContainer devices;

devices = p2p.Install(nodes.Get(0), nodes.Get(1));

devices.Add(p2p.Install(nodes.Get(1), nodes.Get(2)));

devices.Add(p2p.Install(nodes.Get(2), nodes.Get(3)));

devices.Add(p2p.Install(nodes.Get(3), nodes.Get(4)));

devices.Add(p2p.Install(nodes.Get(4), nodes.Get(5)));

// Install the internet stack

InternetStackHelper stack;

stack.Install(nodes);

// Assign IP addresses

Ipv4AddressHelper address;

address.SetBase(“10.1.1.0”, “255.255.255.0”);

Ipv4InterfaceContainer interfaces = address.Assign(devices);

// Set up static routing to represent optimal routes

SetStaticRoute(nodes.Get(0), Ipv4Address(“10.1.1.5”), Ipv4Mask(“255.255.255.255”), Ipv4Address(“10.1.1.2”), 1);

SetStaticRoute(nodes.Get(1), Ipv4Address(“10.1.1.5”), Ipv4Mask(“255.255.255.255”), Ipv4Address(“10.1.1.3”), 2);

SetStaticRoute(nodes.Get(2), Ipv4Address(“10.1.1.5”), Ipv4Mask(“255.255.255.255”), Ipv4Address(“10.1.1.4”), 3);

SetStaticRoute(nodes.Get(3), Ipv4Address(“10.1.1.5”), Ipv4Mask(“255.255.255.255”), Ipv4Address(“10.1.1.5”), 4);

// Set up routing

Ipv4GlobalRoutingHelper::PopulateRoutingTables();

// Install applications to generate traffic

uint16_t port = 9;

// Node 0 will send data to Node 5

OnOffHelperonoff(“ns3::UdpSocketFactory”, Address(InetSocketAddress(interfaces.GetAddress(5), port)));

onoff.SetConstantRate(DataRate(“1Mbps”));

ApplicationContainer apps = onoff.Install(nodes.Get(0));

apps.Start(Seconds(1.0));

apps.Stop(Seconds(10.0));

// Install packet sink on Node 5 to receive packets

PacketSinkHelpersink(“ns3::UdpSocketFactory”, Address(InetSocketAddress(Ipv4Address::GetAny(), port)));

apps = sink.Install(nodes.Get(5));

apps.Start(Seconds(0.0));

apps.Stop(Seconds(10.0));

// Enable FlowMonitor to measure performance metrics

FlowMonitorHelper flowmon;

Ptr<FlowMonitor> monitor = flowmon.InstallAll();

// Run the simulation

Simulator::Stop(Seconds(10.0));

Simulator::Run();

// Print per-flow statistics

monitor->CheckForLostPackets();

Ptr<Ipv4FlowClassifier>classifier = DynamicCast<Ipv4FlowClassifier>(flowmon.GetClassifier());

std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats();

for (std::map<FlowId, FlowMonitor::FlowStats>::const_iterator i = stats.begin(); i != stats.end(); ++i)

{

Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow(i->first);

NS_LOG_UNCOND(“Flow ” << i->first << ” (” << t.sourceAddress << ” -> ” << t.destinationAddress << “)”);

NS_LOG_UNCOND(”  Tx Packets: ” << i->second.txPackets);

NS_LOG_UNCOND(”  Tx Bytes:   ” << i->second.txBytes);

NS_LOG_UNCOND(”  Rx Packets: ” << i->second.rxPackets);

NS_LOG_UNCOND(”  Rx Bytes:   ” << i->second.rxBytes);

NS_LOG_UNCOND(”  Lost Packets: ” << i->second.lostPackets);

NS_LOG_UNCOND(”  Throughput: ” << i->second.rxBytes * 8.0 / (i->second.timeLastRxPacket.GetSeconds() – i->second.timeFirstTxPacket.GetSeconds()) / 1024 / 1024 << ” Mbps”);

}

// Clean up

Simulator::Destroy();

return 0;

}

Step 3: Compile and Run the Simulation

  1. Compile the Simulation:

./waf configure –enable-examples

./waf build

Run the Simulation:

./waf –run scratch/optimal-routing-example

Step 4: Analyze Results

The simulation script sets up a simple network topology with optimal static routes, where data is transmitted from Node 0 to Node 5 through intermediate nodes. FlowMonitor is used to collect and print out statistics about the traffic flows, such as packet loss, throughput, and delay.

Additional Thoughts

To extend the functionality of optimal routing network simulation, we consider the following factors to be preferred:

1. Dynamic Routing Protocols

We must integrate dynamic routing protocols such as OSPF, BGP, or AODV to manage the routing of packets in the network and automatically find optimal paths.

2. Complex Topologies

Our developers will create more complex network topologies to simulate real-world networks, including mesh, star, and ring topologies.

3. Traffic Patterns

Simulate diverse types of traffic patterns, such as IoT data, VoIP, video streaming, and bulk data transfer, to study their impact on the network.

4. Quality of Service (QoS)

Implement QoS mechanisms to prioritize certain types of traffic and ensure that critical data flows receive the necessary bandwidth and low latency.

5. Performance Metrics

We have to collect and analyze additional metrics such as jitter, packet delay variation, and error rates to evaluate the network performance more comprehensively.

On the conclusion, we had determined that by creating a basic simulation of network optimal routing which is built-in ns3 we can simulate the data transmission and implement them in ns3 environment.

Visit ns3simulation.com to achieve superior results in comparative analysis and the implementation of Network Optimal Routing within the ns3 tool, which we specialize in. Our team focuses on routing protocols that directly support OSPF and AODV for your projects, ensuring optimal outcomes.