Skip to main content

Simulation of persistent vs. non-persistent CSMA in a 15-node wired LAN and compare channel utilization.

                                                Computer Networks Digital Assignment

Topic:

Simulate persistent vs. non-persistent CSMA in a 15-node wired LAN and compare channel utilization.

Code:



// csma-persistent.cc
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/applications-module.h"
#include "ns3/netanim-module.h"
#include "ns3/flow-monitor-module.h"
using namespace ns3;

NS_LOG_COMPONENT_DEFINE ("CsmaSimulation");
int main (int argc, char *argv[])
{
bool persistent = true; // change to false for non-persistent
CommandLine cmd;
cmd.AddValue ("persistent", "Enable persistent CSMA", persistent);
cmd.Parse (argc, argv);

NodeContainer nodes;
nodes.Create (15);
CsmaHelper csma;
csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));
csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (6560)));

NetDeviceContainer devices = csma.Install (nodes);
InternetStackHelper stack;
stack.Install (nodes);
Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer interfaces = address.Assign (devices);
uint16_t port = 9;

// Server on node 0
UdpServerHelper server (port);
ApplicationContainer serverApp = server.Install (nodes.Get (0));
serverApp.Start (Seconds (1.0));
serverApp.Stop (Seconds (20.0));

// Clients on remaining nodes
for (int i = 1; i < 15; i++)
{
UdpClientHelper client (interfaces.GetAddress (0), port);
client.SetAttribute ("MaxPackets", UintegerValue (1000));
client.SetAttribute ("Interval",
TimeValue (persistent ? Seconds (0.01) : Seconds (0.05))); // key difference
client.SetAttribute ("PacketSize", UintegerValue (1024));
ApplicationContainer clientApp = client.Install (nodes.Get (i));
clientApp.Start (Seconds (2.0 + i * 0.1));
clientApp.Stop (Seconds (20.0));
}

// Enable tracing
csma.EnablePcapAll ("csma");
// NetAnim
std::string mode = persistent ? "persistent" : "nonpersistent";
// NetAnim file
AnimationInterface anim ("csma-" + mode + ".xml");
// PCAP trace file
csma.EnablePcapAll ("csma-" + mode);
Simulator::Stop (Seconds (20.0));

FlowMonitorHelper flowmon;
Ptr<FlowMonitor> monitor = flowmon.InstallAll();
Simulator::Run ();
monitor->CheckForLostPackets();

Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier>(flowmon.GetClassifier());
std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats();

for (auto &flow : stats)
{
std::cout << "Flow ID: " << flow.first << std::endl;
std::cout << "Tx Packets: " << flow.second.txPackets << std::endl;
std::cout << "Rx Packets: " << flow.second.rxPackets << std::endl;
std::cout << "Throughput: " << flow.second.rxBytes * 8.0 /(flow.second.timeLastRxPacket.GetSeconds() -
flow.second.timeFirstTxPacket.GetSeconds()) / 1024 << " Kbps\n";
}
Simulator::Destroy ();
return 0;
}

Commands to run the code:

1.    Create a file in the scratch and type code in it and name it csma-persistent with extension .cc .

2.    To run code in persistent mode.

./ns3  run "scratch/csma-persistent --persistent=1"

3.    To run code in non-persistent mode:

 ./ns3  run "scratch/csma-persistent --persistent=0"

4.    Files created named:

For Persistent:

csma-persistent.xml

 

csma-persistent-*.pcap


For Non Persistent

 

csma-nonpersistent.xml

 

csma-nonpersistent-*.pcap

Output:

For non-persistent:


 

For Persistent:

 

Graph:

 

 

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...

Installation of NS2 in Ubuntu 22.04 | NS2 Tutorial 2

NS-2.35 installation in Ubuntu 22.04 This post shows how to install ns-2.35 in Ubuntu 22.04 Operating System Since ns-2.35 is too old, it needs the following packages gcc-4.8 g++-4.8 gawk and some more libraries Follow the video for more instructions So, here are the steps to install this software: To download and extract the ns2 software Download the software from the following link http://sourceforge.net/projects/nsnam/files/allinone/ns-allinone-2.35/ns-allinone-2.35.tar.gz/download Extract it to home folder and in my case its /home/pradeepkumar (I recommend to install it under your home folder) $ tar zxvf ns-allinone-2.35.tar.gz or Right click over the file and click extract here and select the home folder. $ sudo apt update $ sudo apt install build-essential autoconf automake libxmu-dev gawk To install gcc-4.8 and g++-4.8 $ sudo gedit /etc/apt/sources.list make an entry in the above file deb http://in.archive.ubuntu.com/ubuntu/ bionic main universe $ sudo apt update Since, it...