Simulasi Wimax di NS-3 - Universitas Mercu Buana

advertisement
MODUL PERKULIAHAN
Simulasi Jaringan
Berbasis
Komputer
Simulasi IEEE 802.16 Wimax
Fakultas
Program Studi
Tatap Muka
Pasca Sarjana
Magister Teknik
Elektro
9
Kode MK
DisusunOleh
Kode MK
Dr. Ida Nurhaida, ST., MT
Abstract
Kompetensi
Penjabaran tentang simulasi IEEE
802.16 Wimax di NS-3
Mahasiswa dapat memahami
pembuatan simulasi Wimax di NS-3.
Simulasi Wimax di NS-3
Introduction
Pada modul kali ini akan dibahas tentang standard IEEE 802.16 atau biasa yang disebut
dengan Wimax.
Wimax adalah implementasi interoperabilitas dari keluarga IEEE 802.16. Nama WiMax”
dibuat oleh WiMax Forum.
Standar dari IEEE 802.16 dipublikasi pertama kali pada 2001, dan saat ini dikenal sebagai
Fixed WiMax.
Beberapa WiMax teknologi diadaptasi dari teknologi WiBro, sebuah service market di Korea.
Gambar Tower Transmit untuk WiMax.(sumber
http://computer.howstuffworks.com/wimax1.htm )
WiMax Architecture (sumber: https://en.wikipedia.org/wiki/WiMAX)
WiMax bisa menangani kecepatan sampai dengan 70 Mbps, dan menggunakan spectrum
profiles 2.3 GHz, 2.5 GHz, dan 3.5 GHz.
2016
2
Simulasi Jaringan Berbasis Komputer
Dr. Ida Nurhaida, ST., MT
PusatBahan Ajar dan eLearning
http://www.mercubuana.ac.id
Simulasi Wimax Simple di NS-3
Simulasi yang akan dibahas pertama adalah simulasi untuk wimax yang sederhana. Di
dalam simulasi ini akan ditampilkan cara penggunaan module Wimax yang telah di buat di
NS-3.
Pada simulasi ini akan menampilkan dua buah subscriber station (ss) dan satu buah base
station. Subscriber station akan mengirimkan data ke base station. Hasil simulasi
menghasilkan file pcap yang dapat digunakan untuk melihat lalu lintas data yang terkirim
dari tiap-tiap station atau node. Penjelasannya adalah sebagai berikut:
Kode program untuk menambahkan include header file di dalam simulasi ditampilkan pada
listing program di bawah:
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/applications-module.h"
#include "ns3/mobility-module.h"
#include "ns3/config-store-module.h"
#include "ns3/wimax-module.h"
#include "ns3/internet-module.h"
#include "ns3/global-route-manager.h"
#include "ns3/ipcs-classifier-record.h"
#include "ns3/service-flow.h"
#include <iostream>
Kode program untuk membuat tipe scheduler untuk wimax adalah sebagai berikut:
int duration = 7, schedType = 0;
WimaxHelper::SchedulerType scheduler = WimaxHelper::SCHED_TYPE_SIMPLE;
Baris program untuk menangkap data dari command line dan juga log component adalah
sebagai berikut:
CommandLine cmd;
cmd.AddValue ("scheduler", "type of scheduler to use with the network devices", schedType);
cmd.AddValue ("duration", "duration of the simulation in seconds", duration);
cmd.AddValue ("verbose", "turn on all WimaxNetDevice log components", verbose);
cmd.Parse (argc, argv);
LogComponentEnable ("UdpClient", LOG_LEVEL_INFO);
LogComponentEnable ("UdpServer", LOG_LEVEL_INFO);
Kode program untuk mengganti schedule type dari wimax
switch (schedType)
{
case 0:
scheduler = WimaxHelper::SCHED_TYPE_SIMPLE;
break;
2016
3
Simulasi Jaringan Berbasis Komputer
Dr. Ida Nurhaida, ST., MT
PusatBahan Ajar dan eLearning
http://www.mercubuana.ac.id
case 1:
scheduler = WimaxHelper::SCHED_TYPE_MBQOS;
break;
case 2:
scheduler = WimaxHelper::SCHED_TYPE_RTPS;
break;
default:
scheduler = WimaxHelper::SCHED_TYPE_SIMPLE;
}
Kode progam untuk membuat subscriber node dan base station node.
NodeContainer ssNodes;
NodeContainer bsNodes;
ssNodes.Create (2);
bsNodes.Create (1);
Membuat wimax helper.
WimaxHelper wimax;
Kode program untuk membuat Network Device Container.
NetDeviceContainer ssDevs, bsDevs;
ssDevs = wimax.Install (ssNodes,
WimaxHelper::DEVICE_TYPE_SUBSCRIBER_STATION,
WimaxHelper::SIMPLE_PHY_TYPE_OFDM,
scheduler);
bsDevs = wimax.Install (bsNodes, WimaxHelper::DEVICE_TYPE_BASE_STATION,
WimaxHelper::SIMPLE_PHY_TYPE_OFDM, scheduler);
Memjalankan ASCII pada wimax untuk kedua device, bs device dan ss device.
wimax.EnableAscii ("bs-devices", bsDevs);
wimax.EnableAscii ("ss-devices", ssDevs);
Kode program untuk membuat pointer Subscriber Station Network Device. Dan setting tipe
modulasi untuk node tersebut.
Ptr<SubscriberStationNetDevice> ss[2];
for (int i = 0; i < 2; i++)
{
ss[i] = ssDevs.Get (i)->GetObject<SubscriberStationNetDevice> ();
ss[i]->SetModulationType (WimaxPhy::MODULATION_TYPE_QAM16_12);
}
Kode program untuk membuat pointer Base Station Network Device.
Ptr<BaseStationNetDevice> bs;
2016
4
Simulasi Jaringan Berbasis Komputer
Dr. Ida Nurhaida, ST., MT
PusatBahan Ajar dan eLearning
http://www.mercubuana.ac.id
bs = bsDevs.Get (0)->GetObject<BaseStationNetDevice> ();
Kode program untuk membuat Internet Stack, dan install internet stack ke kedua nodes yang
ada.
InternetStackHelper stack;
stack.Install (bsNodes);
stack.Install (ssNodes);
Setting IPV4 Helper. Kemudian setting base IP yang akan digunakan.
Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");
Kode program untuk membuat IPV4 Interface Container.
Ipv4InterfaceContainer SSinterfaces = address.Assign (ssDevs);
Ipv4InterfaceContainer BSinterface = address.Assign (bsDevs);
Pemilihan untuk mematikan semua log wimax jika verbose bernilai benar.
if (verbose)
{
wimax.EnableLogComponents (); // Turn on all wimax logging
}
Membuat package UDP untuk client dan server.
UdpServerHelper udpServer;
ApplicationContainer serverApps;
UdpClientHelper udpClient;
ApplicationContainer clientApps;
udpServer = UdpServerHelper (100);
serverApps = udpServer.Install (ssNodes.Get (0));
serverApps.Start (Seconds (6));
serverApps.Stop (Seconds (duration));
udpClient = UdpClientHelper (SSinterfaces.GetAddress (0), 100);
udpClient.SetAttribute ("MaxPackets", UintegerValue (1200));
udpClient.SetAttribute ("Interval", TimeValue (Seconds (0.5)));
udpClient.SetAttribute ("PacketSize", UintegerValue (1024));
clientApps = udpClient.Install (ssNodes.Get (1));
clientApps.Start (Seconds (6));
clientApps.Stop (Seconds (duration));
Setting waktu berhenti simulator.
Simulator::Stop (Seconds (duration + 0.1));
2016
5
Simulasi Jaringan Berbasis Komputer
Dr. Ida Nurhaida, ST., MT
PusatBahan Ajar dan eLearning
http://www.mercubuana.ac.id
Setting pcap untuk tracing data hasil simulasi pada wimax.
wimax.EnablePcap ("wimax-simple-ss0", ssNodes.Get (0)->GetId (), ss[0]->GetIfIndex ());
wimax.EnablePcap ("wimax-simple-ss1", ssNodes.Get (1)->GetId (), ss[1]->GetIfIndex ());
wimax.EnablePcap ("wimax-simple-bs0", bsNodes.Get (0)->GetId (), bs->GetIfIndex ());
Setting Ipcs dan service flow.
IpcsClassifierRecord DlClassifierUgs (Ipv4Address ("0.0.0.0"),
Ipv4Mask ("0.0.0.0"),
SSinterfaces.GetAddress (0),
Ipv4Mask ("255.255.255.255"),
0,
65000,
100,
100,
17,
1);
ServiceFlow DlServiceFlowUgs = wimax.CreateServiceFlow (ServiceFlow::SF_DIRECTION_DOWN,
ServiceFlow::SF_TYPE_RTPS,
DlClassifierUgs);
IpcsClassifierRecord UlClassifierUgs (SSinterfaces.GetAddress (1),
Ipv4Mask ("255.255.255.255"),
Ipv4Address ("0.0.0.0"),
Ipv4Mask ("0.0.0.0"),
0,
65000,
100,
100,
17,
1);
ServiceFlow UlServiceFlowUgs = wimax.CreateServiceFlow (ServiceFlow::SF_DIRECTION_UP,
ServiceFlow::SF_TYPE_RTPS,
UlClassifierUgs);
Kode program untuk menambahkan service flow ke dalam subscriber station.
ss[0]->AddServiceFlow (DlServiceFlowUgs);
ss[1]->AddServiceFlow (UlServiceFlowUgs);
Mulai menjalankan simulator.
NS_LOG_INFO ("Starting simulation.....");
Simulator::Run ();
Setting tiap node dengan 0.
ss[0] = 0;
ss[1] = 0;
bs = 0;
2016
6
Simulasi Jaringan Berbasis Komputer
Dr. Ida Nurhaida, ST., MT
PusatBahan Ajar dan eLearning
http://www.mercubuana.ac.id
Menghentikan simulasi.
Simulator::Destroy ();
NS_LOG_INFO ("Done.");
Contoh Program WiMax yang lainnya dengan IPV4 adalah sebagai berikut:
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/applications-module.h"
#include "ns3/mobility-module.h"
#include "ns3/config-store-module.h"
#include "ns3/wimax-module.h"
#include "ns3/internet-module.h"
#include "ns3/global-route-manager.h"
#include <iostream>
using namespace ns3;
NS_LOG_COMPONENT_DEFINE ("wimaxIpV4Simulation");
int main (int argc, char *argv[])
{
// default values
int nbSS = 4, duration = 7, schedType = 0;
bool verbose = false;
WimaxHelper::SchedulerType scheduler = WimaxHelper::SCHED_TYPE_SIMPLE;
LogComponentEnable ("UdpClient", LOG_LEVEL_INFO);
LogComponentEnable ("UdpServer", LOG_LEVEL_INFO);
CommandLine cmd;
cmd.AddValue ("nbSS", "number of subscriber station to create", nbSS);
cmd.AddValue ("scheduler", "type of scheduler to use with the network devices", schedType);
cmd.AddValue ("duration", "duration of the simulation in seconds", duration);
cmd.AddValue ("verbose", "turn on all WimaxNetDevice log components", verbose);
cmd.Parse (argc, argv);
switch (schedType)
{
case 0:
scheduler = WimaxHelper::SCHED_TYPE_SIMPLE;
break;
case 1:
scheduler = WimaxHelper::SCHED_TYPE_MBQOS;
break;
case 2:
scheduler = WimaxHelper::SCHED_TYPE_RTPS;
break;
default:
scheduler = WimaxHelper::SCHED_TYPE_SIMPLE;
}
NodeContainer ssNodes;
2016
7
Simulasi Jaringan Berbasis Komputer
Dr. Ida Nurhaida, ST., MT
PusatBahan Ajar dan eLearning
http://www.mercubuana.ac.id
NodeContainer bsNodes;
ssNodes.Create (nbSS);
bsNodes.Create (1);
WimaxHelper wimax;
NetDeviceContainer ssDevs, bsDevs;
ssDevs = wimax.Install (ssNodes,
WimaxHelper::DEVICE_TYPE_SUBSCRIBER_STATION,
WimaxHelper::SIMPLE_PHY_TYPE_OFDM,
scheduler);
bsDevs = wimax.Install (bsNodes, WimaxHelper::DEVICE_TYPE_BASE_STATION,
WimaxHelper::SIMPLE_PHY_TYPE_OFDM, scheduler);
Ptr<SubscriberStationNetDevice>* ss = new Ptr<SubscriberStationNetDevice>[nbSS];
for (int i = 0; i < nbSS; i++)
{
ss[i] = ssDevs.Get (i)->GetObject<SubscriberStationNetDevice> ();
ss[i]->SetModulationType (WimaxPhy::MODULATION_TYPE_QAM16_12);
}
Ptr<BaseStationNetDevice> bs;
bs = bsDevs.Get (0)->GetObject<BaseStationNetDevice> ();
MobilityHelper mobility;
mobility.Install (bsNodes);
mobility.Install (ssNodes);
InternetStackHelper stack;
stack.Install (bsNodes);
stack.Install (ssNodes);
Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer SSinterfaces = address.Assign (ssDevs);
Ipv4InterfaceContainer BSinterface = address.Assign (bsDevs);
if (verbose)
{
wimax.EnableLogComponents (); // Turn on all wimax logging
}
/*------------------------------*/
UdpServerHelper* udpServer = new UdpServerHelper[nbSS / 2];
ApplicationContainer* serverApps = new ApplicationContainer[nbSS / 2];
UdpClientHelper* udpClient = new UdpClientHelper[nbSS / 2];
ApplicationContainer* clientApps = new ApplicationContainer[nbSS / 2];
for (int i = 0; i < nbSS / 2; i++)
2016
8
Simulasi Jaringan Berbasis Komputer
Dr. Ida Nurhaida, ST., MT
PusatBahan Ajar dan eLearning
http://www.mercubuana.ac.id
{
// set server port to 100+(i*10)
udpServer[i] = UdpServerHelper (100 + (i * 10));
serverApps[i] = udpServer[i].Install (ssNodes.Get (i));
serverApps[i].Start (Seconds (6));
serverApps[i].Stop (Seconds (duration));
udpClient[i] = UdpClientHelper (SSinterfaces.GetAddress (i), 100 + (i * 10));
udpClient[i].SetAttribute ("MaxPackets", UintegerValue (1200));
udpClient[i].SetAttribute ("Interval", TimeValue (Seconds (0.12)));
udpClient[i].SetAttribute ("PacketSize", UintegerValue (800));
clientApps[i] = udpClient[i].Install (ssNodes.Get (i + (nbSS / 2)));
clientApps[i].Start (Seconds (6));
clientApps[i].Stop (Seconds (duration));
}
Simulator::Stop (Seconds (duration + 0.1));
/*
* Setup 1 transport connections between each SS and the BS
*/
for (int i = 0; i < nbSS / 2; i++)
{
IpcsClassifierRecord DlClassifierBe (Ipv4Address ("0.0.0.0"),
Ipv4Mask ("0.0.0.0"),
SSinterfaces.GetAddress (i),
Ipv4Mask ("255.255.255.255"),
0,
65000,
100 + (i * 10),
100 + (i * 10),
17,
1);
ServiceFlow DlServiceFlowBe = wimax.CreateServiceFlow (ServiceFlow::SF_DIRECTION_DOWN,
ServiceFlow::SF_TYPE_BE,
DlClassifierBe);
ss[i]->AddServiceFlow (DlServiceFlowBe);
IpcsClassifierRecord ulClassifierBe (SSinterfaces.GetAddress (i + (nbSS / 2)),
Ipv4Mask ("255.255.255.255"),
Ipv4Address ("0.0.0.0"),
Ipv4Mask ("0.0.0.0"),
0,
65000,
100 + (i * 10),
100 + (i * 10),
17,
1);
ServiceFlow ulServiceFlowBe = wimax.CreateServiceFlow (ServiceFlow::SF_DIRECTION_UP,
ServiceFlow::SF_TYPE_BE,
ulClassifierBe);
ss[i + (nbSS / 2)]->AddServiceFlow (ulServiceFlowBe);
2016
9
Simulasi Jaringan Berbasis Komputer
Dr. Ida Nurhaida, ST., MT
PusatBahan Ajar dan eLearning
http://www.mercubuana.ac.id
}
NS_LOG_INFO ("Starting simulation.....");
Simulator::Run ();
delete[] clientApps;
delete[] udpClient;
delete[] serverApps;
delete[] udpServer;
for (int i = 0; i < nbSS; i++)
{
ss[i] = 0;
}
delete[] ss;
bs = 0;
Simulator::Destroy ();
NS_LOG_INFO ("Done.");
return 0;
}
2016
10
Simulasi Jaringan Berbasis Komputer
Dr. Ida Nurhaida, ST., MT
PusatBahan Ajar dan eLearning
http://www.mercubuana.ac.id
DaftarPustaka
Wehrle, K., Gunes, M., Gross, J., et al. Modeling and Tools for Network Simulation.
Springer: Berlin 2010.
Guizani, M., et al. Network Modeling and Simulation. Willey: 2010.
Burbank, J., Kasch, W., Ward, J. Network Modeling and Simulation for The Practicing
Engineer. Willey 2010.
2016
11
Simulasi Jaringan Berbasis Komputer
Dr. Ida Nurhaida, ST., MT
PusatBahan Ajar dan eLearning
http://www.mercubuana.ac.id
Download