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