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 Design and Architecture in ns3

To implement network design and architecture in ns3, we need to set-up a network simulation which uses various network components such as routers, switches, and end devices, and configuring them to mimic a real-world network scenario. Below given steps will guide on creating a basic network architecture with various types of nodes and connections in ns3.

Step-by-step guide to implement Network architecture in ns3

Step 1: Setup ns3 Environment

Make sure ns3 is installed on the system.

Step 2: Include Necessary Modules

Include the necessary ns3 modules in the script:

#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/mobility-module.h”

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

Step 3: Create the Simulation Script

  1. Setup Nodes and Network:

using namespace ns3;

NS_LOG_COMPONENT_DEFINE (“NetworkDesignExample”);

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

{

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer endDevices;

endDevices.Create (4); // 4 end devices

NodeContainer routers;

routers.Create (2); // 2 routers

// Create point-to-point links

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“10Mbps”));

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

// Create a star topology

NetDeviceContainer endDevicesToRouter1;

endDevicesToRouter1 = pointToPoint.Install (NodeContainer (endDevices.Get (0), routers.Get (0)));

endDevicesToRouter1.Add (pointToPoint.Install (NodeContainer (endDevices.Get (1), routers.Get (0))));

NetDeviceContainer endDevicesToRouter2;

endDevicesToRouter2 = pointToPoint.Install (NodeContainer (endDevices.Get (2), routers.Get (1))));

endDevicesToRouter2.Add (pointToPoint.Install (NodeContainer (endDevices.Get (3), routers.Get (1))));

// Connect the two routers

NetDeviceContainer routersConnection;

routersConnection = pointToPoint.Install (NodeContainer (routers.Get (0), routers.Get (1))));

// Install Internet stack

InternetStackHelper stack;

stack.Install (endDevices);

stack.Install (routers);

// Assign IP addresses

Ipv4AddressHelper address;

Ipv4InterfaceContainer interfaces;

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

interfaces = address.Assign (endDevicesToRouter1);

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

interfaces = address.Assign (endDevicesToRouter2);

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

interfaces = address.Assign (routersConnection);

// Set up applications

uint16_t port = 9;  // Discard port (RFC 863)

// Server application on one end device

Address serverAddress (InetSocketAddress (Ipv4Address::GetAny (), port));

PacketSinkHelper packetSinkHelper (“ns3::UdpSocketFactory”, serverAddress);

ApplicationContainer sinkApps = packetSinkHelper.Install (endDevices.Get (3));

sinkApps.Start (Seconds (1.0));

sinkApps.Stop (Seconds (20.0));

// Client application on another end device

OnOffHelper onoff (“ns3::UdpSocketFactory”, Address (InetSocketAddress (Ipv4Address (“10.1.2.2”), port)));

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

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

apps.Start (Seconds (2.0));

apps.Stop (Seconds (20.0));

// Flow monitor

FlowMonitorHelper flowmon;

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

Simulator::Stop (Seconds (20.0));

Simulator::Run ();

monitor->SerializeToXmlFile(“flowmon-results.xml”, true, true);

Simulator::Destroy ();

return 0;

}

Step 4: Run the Simulation

Compile and run the simulation script:

sh

./waf configure

./waf build

./waf –run NetworkDesignExample

Explanation

  • Node Creation: Create nodes representing different devices and routers in the network.
  • Point-to-Point Links: Configure point-to-point links between nodes. The script sets up links between end devices and routers and also between the routers.
  • Internet Stack: Install the Internet stack on all nodes.
  • IP Configuration: Assign IP addresses to the interfaces.
  • Applications: Set up UDP applications to simulate traffic between nodes.
  • Flow Monitor: Use the flow monitor to collect traffic data and save it to an XML file for analysis.

Advanced Network Design Techniques

  1. Switches and LANs:

Use CSMA (Carrier Sense Multiple Access) to simulate local area networks (LANs) with switches.

CsmaHelper csma;

csma.SetChannelAttribute (“DataRate”, StringValue (“100Mbps”));

csma.SetChannelAttribute (“Delay”, TimeValue (NanoSeconds (6560)));

NetDeviceContainer lanDevices;

lanDevices = csma.Install (endDevices);

  1. Wireless Networks:

Use WiFi to simulate wireless networks.

WifiHelper wifi;

wifi.SetRemoteStationManager (“ns3::AarfWifiManager”);

YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();

YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();

wifiPhy.SetChannel (wifiChannel.Create ());

WifiMacHelper wifiMac;

Ssid ssid = Ssid (“ns-3-ssid”);

wifiMac.SetType (“ns3::StaWifiMac”, “Ssid”, SsidValue (ssid), “ActiveProbing”, BooleanValue (false));

NetDeviceContainer staDevices = wifi.Install (wifiPhy, wifiMac, endDevices);

  1. Routing Protocols:

Implement different routing protocols such as OSPF, BGP, or custom routing.

Ipv4StaticRoutingHelper staticRouting;

Ptr<Ipv4StaticRouting> staticRouter1 = staticRouting.GetStaticRouting (routers.Get (0)->GetObject<Ipv4> ());

staticRouter1->AddNetworkRouteTo (Ipv4Address (“10.1.2.0”), Ipv4Mask (“255.255.255.0”), Ipv4Address (“10.1.3.2”), 1);

Ptr<Ipv4StaticRouting> staticRouter2 = staticRouting.GetStaticRouting (routers.Get (1)->GetObject<Ipv4> ());

staticRouter2->AddNetworkRouteTo (Ipv4Address (“10.1.1.0”), Ipv4Mask (“255.255.255.0”), Ipv4Address (“10.1.3.1”), 1);

  1. Network Mobility:

Use the mobility module to simulate moving nodes.

MobilityHelper mobility;

mobility.SetMobilityModel (“ns3::ConstantVelocityMobilityModel”);

mobility.Install (endDevices);

Ptr<ConstantVelocityMobilityModel>mob=endDevices.Get(0)->GetObject<ConstantVelocityMobilityModel>();

mob->SetVelocity(Vector(10.0, 0.0, 0.0));

Over all, we had learnt to implement network architecture in ns3 by setting up a simulation network with various network components and different types of nodes and connections. Also, we had briefly discussed about the advanced network design techniques.

If you’re looking for top-notch project comparisons and performance insights in network design and architecture using ns3tool, we’ve got your back. The developers at ns3simulation.com are ready to share project ideas tailored to your field, and we have a large support team to ensure your work goes smoothly.