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
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.
Source 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;
}
Comments
Post a Comment