Skip to main content

Performance analysis of throughput and delay in a multi-hop point-to-point networks | NS3 Project 10

Performance analysis of throughput and delay in a multi-hop point-to-point network

Code:

#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/netanim-module.h"
#include "ns3/flow-monitor-module.h"
using namespace ns3;

int main(int argc, char *argv[]) {
uint32_t nNodes = 10;
Config::SetDefault("ns3::OnOffApplication::PacketSize", StringValue("1024"));
Config::SetDefault("ns3::OnOffApplication::DataRate", StringValue("2Mbps"));
NodeContainer nodes;
nodes.Create(nNodes);
PointToPointHelper p2p;
p2p.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
p2p.SetChannelAttribute("Delay", StringValue("2ms"));

InternetStackHelper stack;
stack.Install(nodes);

// Assign IP addresses to each link in the chain
Ipv4AddressHelper address;
for (uint32_t i = 0; i < nNodes - 1; ++i) {
NodeContainer linkNodes = NodeContainer(nodes.Get(i), nodes.Get(i + 1));
NetDeviceContainer linkDevices = p2p.Install(linkNodes);
std::stringstream subnet;

subnet << "10.1." << i + 1 << ".0";
address.SetBase(subnet.str().c_str(), "255.255.255.0");
address.Assign(linkDevices);
}

Ipv4GlobalRoutingHelper::PopulateRoutingTables();
// Application: Source at Node 0, Sink at Node 9
uint16_t port = 9;
Address sinkAddress(InetSocketAddress(Ipv4Address("10.1.9.2"), port));
PacketSinkHelper packetSinkHelper("ns3::UdpSocketFactory", sinkAddress);
ApplicationContainer sinkApps = packetSinkHelper.Install(nodes.Get(nNodes - 1));
sinkApps.Start(Seconds(1.0));
sinkApps.Stop(Seconds(10.0));

OnOffHelper onoff("ns3::UdpSocketFactory", sinkAddress);
onoff.SetAttribute("OnTime", StringValue("ns3::ConstantRandomVariable[Constant=1]"));

onoff.SetAttribute("OffTime", StringValue("ns3::ConstantRandomVariable[Constant=0]"));
ApplicationContainer sourceApps = onoff.Install(nodes.Get(0));
sourceApps.Start(Seconds(2.0));
sourceApps.Stop(Seconds(10.0));
// NetAnim
AnimationInterface anim("chain_lab.xml");
for (uint32_t i = 0; i < nNodes; ++i) {
anim.SetConstantPosition(nodes.Get(i), i * 10, 20);
}

// FlowMonitor
Ptr<FlowMonitor> monitor;
FlowMonitorHelper flowmon;
monitor = flowmon.InstallAll();
Simulator::Stop(Seconds(11.0));
Simulator::Run();

monitor->SerializeToXmlFile("chain_results.xml", true, true);
Simulator::Destroy();
return 0;
}

Output :

Netanim:

Gnu Plot:

Prompt:

I am working on a Computer Networks lab assignment using the ns-3 simulator. I need to create a multi-hop topology consisting of 10 nodes connected in a point-to-point chain.

My goal is to measure and compare the average end-to-end delay and throughput as packets travel from the first node to the last. Can you provide a C++ script (based on second.cc) that implements this? Please include FlowMonitor for statistics, NetAnim for visualization, and a way to extract the data so I can plot it using Gnuplot. I need to see how the multi-hop nature affects the performance compared to a single-hop link.

 

 

Comments

Popular posts from this blog

How to Create Ubuntu 24.04 Bootable USB Using Rufus [Step-by-Step Guide]

How to Create Ubuntu 24.04 Bootable USB Using Rufus [Step-by-Step Guide] Are you planning to install or try Ubuntu 24.04 LTS ? The easiest and most reliable method is to create a bootable USB drive using Rufus on a Windows system. This detailed guide will help you create a Ubuntu 24.04 USB bootloader using Rufus with easy-to-follow steps and screenshots (optional). Here is the complete video of the bootloader creation and OS installation in Windows 11. 🧰 Requirements A USB flash drive (minimum 8GB recommended) A Windows PC Ubuntu 24.04 LTS ISO file Rufus USB creation tool 🧾 Steps to Create a Ubuntu 24.04 Bootable USB Using Rufus ✅ Step 1: Download Ubuntu 24.04 ISO Visit the official Ubuntu website and download the Ubuntu 24.04 LTS ISO file . ✅ Step 2: Download and Run Rufus Head to Rufus official site and download the latest version. Open the executable file (no installation required). ✅ Step 3: Insert USB Drive Plug in your USB drive. Rufus ...

Installing ns3 in Ubuntu 22.04 | Complete Instructions

In this post, we are going to see how to install ns-3.36.1 in Ubuntu 22.04. You can follow the video for complete details Tools used in this simulation: NS3 version ns-3.36.1  OS Used: Ubuntu 22.04 LTS Installation of NS3 (ns-3.36.1) There are some changes in the ns3 installation procedure and the dependencies. So open a terminal and issue the following commands Step 1:  Prerequisites $ sudo apt update In the following packages, all the required dependencies are taken care and you can install all these packages for the complete use of ns3. $ sudo apt install g++ python3 python3-dev pkg-config sqlite3 cmake python3-setuptools git qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3 openmpi-bin openmpi-common openmpi-doc libopenmpi-dev autoconf cvs bzr unrar gsl-bin libgsl-dev libgslcblas0 wireshark tcpdump sqlite sqlite3 libsqlite3-dev  libxml2 libxml2-dev libc6-dev libc6-dev-i386 libc...

NS2 (NS-2.35) Installation in Ubuntu 11.10

This post will help you in installing Network Simulator 2 version NS2.35 in Ubuntu 11.10 Instructions Install Ubuntu Download NS-2.35 ( http://sourceforge.net/projects/nsnam/files/allinone/ns-allinone-2.35/ns-allinone-2.35.tar.gz/download ) Unzip or untar it to any folder (recommended is /home/ loginname) using the following commands one by one sudo apt-get update sudo apt-get install build-essential autoconf automake libxmu-dev tar zxvf ns-allinone-2.35.tar.gz cd ns-allinone-2.35 ./install Once installed the PATH information will be provided to you. Copy the PATH and LD_LIBRARY_PATH Variable to .bashrc (see a dot in the beginning) Input the path information in .bashrc file like this export PATH=$PATH:<Place your paths here> export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: <place the LD_LIBRARY_PATHS> here. Once done, save the file and close execute the command source .bashrc try ns or nam to see whether your installation succeeded.