Network Simulator

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 16

ĐẠI HỌC QUỐC GIA TP.

HCM
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
------------- --------------

Báo Cáo
NETWORK SIMULATION
NS-3 TOOL

Môn: Đánh giá hiệu năng hệ thống mạng máy tính


Lớp: NT531.K21
Giảng viên: Nguyễn Khánh Thuật

Thực hiện:
17521276 – Hoàng Gia Vương
17521271 – Mai Hoàng Vũ
17521184 – Nguyễn Đang Trường

3/2020
1
Mục lục
I. TỔNG QUAN............................................................................................................2
1. Network Simulation là gì?........................................................................................2
2. Network Simulator là gì?.........................................................................................2
3. NS – 3 Tool..............................................................................................................2
II. ĐẶT VẤN ĐỀ.........................................................................................................5
III. Cài đặt ns-3 và mô phỏng OLSR – AODV...........................................................5
1. Cài đặt ns3...............................................................................................................5
2. Xây dựng mô hình mô phỏng OLSR và AODV.......................................................6
IV. KẾT LUẬN...........................................................................................................15
PHÂN CÔNG CÔNG VIỆC..........................................................................................16

1
I. TỔNG QUAN
1. Network Simulation là gì?
Để nghiên cứu về mạng máy tính, Network Simulation (hay còn gọi là mô
phỏng mạng) là một kỹ thuật mà trong đó chương trình phần mềm sẽ mô hình hóa
hoạt động của mô hình mạng đó bằng cách tính toán giữa các thực thể khác nhau
(routers, switches, nodes, access points, links,…). Hầu hết các trình giả lập sử dụng
mô phỏng sự kiện rời rạc - mô hình hóa các hệ thống trong đó các biến trạng thái
thay đổi tại các điểm riêng biệt theo thời gian. Hành vi của mạng và các ứng dụng
và dịch vụ khác nhau mà nó hỗ trợ có thể được quan sát trong phòng thí nghiệm thử
nghiệm; các thuộc tính khác nhau của môi trường cũng có thể được sửa đổi theo
cách được kiểm soát để đánh giá cách thức hoạt động của mạng / giao thức trong
các điều kiện khác nhau.
2. Network Simulator là gì?

Network Simulator (hay còn gọi là trình mô phỏng mạng) là phần mềm mô
phỏng hoạt động của mạng máy tính. Vì mạng truyền thông đã trên nên phức tạp đối
với phương pháp phân tích truyền thống để cung cấp thông tin chính xác về hoạt
động của hệ thống mạng. Đây là lí do mà Network Simulator được đưa vào sử dụng.
Trong các trình mô phỏng, mạng máy tính được mô hình hóa với các thiết bị, ứng
dụng, liên kết, v.v và hiệu suất mạng được ghi lại. Bộ mô phỏng mạng hỗ trợ các
công nghệ và mạng phổ biến như: 3G, 4G, IoT, WLAN, MANET, Wireless Sensor
Network,… .
Các trình mô phỏng mạng thương mại thường được điều khiển dạng
GUI( Graphic User Interface). Ví dụ như: Cisco Packer Tracer. Một số thì được điều
khiển dạng CLI(command-line Interface).
Mô hình hay cấu hình mạng được mô tả mạng(Nodes, Routers, Switches,
Link,…) và các sự kiện (truyền dữ liệu, gói lỗi,…). Kết quả đầu ra sẽ bao gồm
Level Metric, Link Metric, Device Metric,… . Hơn thế nữa, Network Simulator sẽ
ghi lại file log của mỗi packet, mỗi sự kiện để người dùng có thể phân tích được mô
hình mạng đó như thế nào.
Có một số Network Simulator là mã nguồn mở và miễn phí như: OPNET,
Tetcos Netsim, NS2/NS3.

2
3. NS – 3 Tool
a. Khái niệm và quá trình phát triển
Ns-3 simulator là một chương trình mô phỏng mã nguồn mở, hỗ trợ mô
phỏng các sự kiện truyền thông rời rạc ( discrete event simulation ) của nhiều giao
thức mạng khác nhau như WLAN, AODV, OSLR, …. . Ns-3 được viết bằng ngôn
ngữ C++ , tuy nhiên người sử dụng chỉ cần nắm ngôn ngữ C++ ở mức cơ bản để
có thể hiểu và xây dựng các kịch bản mô phỏng mong muốn.
Năm 2006, một nhóm do Tom Henderson, George Riley, Sally Floyd và
Sumit Roy dẫn đầu đã nộp đơn xin và nhận tài trợ từ Quỹ khoa học quốc gia Hoa
Kỳ (NSF) để xây dựng một thay thế cho ns-2, được gọi là ns-3. Nhóm này đã hợp
tác với dự án Planete của INRIA tại Sophia Antipolis, với Mathieu Lacage là
người lãnh đạo phần mềm và tạo thành một dự án nguồn mở mới.
Trong quá trình phát triển ns-3, người ta đã quyết định từ bỏ hoàn toàn khả
năng tương thích ngược với ns-2. Trình giả lập mới sẽ được viết từ đầu, sử dụng
ngôn ngữ lập trình C ++ . Sự phát triển của ns-3 bắt đầu vào tháng 7 năm 2006.
b. Một số khái niệm:
1. Node
Trong ns-3, chúng ta sử dụng một khái niệm chung thường được sử
dụng bởi các trình mô phỏng mạng khác là node để biểu diễn cho một
thiết bị tính toán cơ bản. Khái niệm được biểu diễn bằng lớp Node của
ngôn ngữ C++ trong ns-3. Có thể xem môt Node như một máy tính mà
chúng ta có thể thêm các chức năng cho nó bằng việc cài thêm ứng dụng
dụng mạng, thêm các tầng giao thức, gắn thêm các card wifi, Bluetooth
với các driver tương thích.
2. Application
Trong ns-3, chúng ta không cần quan tâm đến các node sử dụng hệ
điều hành gì hoặc cấu trúc lệnh hệ thống để lập trình mô phỏng giao
thức mạng mà mình mong muốn. Tuy nhiên, trong ns-3, vẫn tồn tại khái
niệm Application được biểu diễn với lớp cùng tên trong C++. Lớp này
cung cấp các phương thức để hỗ trợ xây dựng được những tính năng mô
phỏng ở tầng ứng dụng mong muốn (Vd: FTP, HTTP,…). Các nhà phát
triển có thể mở rộng lớp Application để tạo ra ứng dụng cụ thể hơn phục
vụ cho việc giả lập.
3. Channel
Trong thực tế, để kết nối một máy tính vào mạng, thông thường dữ
liệu truyền dẫn qua mạng thông qua một kênh truyền – Channel. Ví dụ
khi chúng ta kết nối cáp Ethernet vào ổ cắm trên tường, chúng ta đang
kết nối vào một kênh giao tiếp Ethernet. Trong trình mô phỏng ns-3,

3
chúng ta sẽ kết nối Node tới một đối tượng biểu diễn cho kênh truyền –
Channel. Lớp Channel cung cấp phương thức để quản lý, lập trình
những cách thức truyền thông thông giữa các Nodes. Những lớp
Channel cụ thể có thể đặc tả được những mô hình phức tạp như Ethernet
Switch, hoặc môi trường truyền dẫn mạng không dây trong thực thế
(không gian 3 chiều).
Một số lớp thông dụng mô tả các kênh truyền thông trong thực tế như
CsmaChannel, PointToPointChannel và WifiChannel. Ví dụ
CsmaChannel, mô hình một phiên bản của môi trường mạng không dây
mà chúng ta có thể can thiệp vào điều chỉnh các thông số liên quan đến
tính năng Carrier Sense Multiple Access /Collision Avoidance phục vụ
cho mô phỏng.

4. Net Device
Trong ns-3, net device là một mô hình dùng mô phỏng cho các card
mạng (NIC) mô phỏng cả thông số card và software drivver. Một net
device được cài đặt lên một Node để nó có thể truyền thông được với
node khác khác trong môi trường mô phỏng thông qua các kênh
(Channel).
Ns-3 cung cấp lớp NetDevice với các phương thức để quản lý các
kết nối đến các đối tượng Node và Channel; và được thể được đặc tả củ
thể hơn bởi nhà phát triển trong khi lập trình. Trong nội dung thực hành,
chúng ta sẽ sử dụng nhiều phiên bản khác nhau của NetDevice như
CsmaNetDevice, PointToPointNetDevice và WifiNetDevice. Lưu ý:
NetDevice nào thì sử dụng Channel tương thích, Ethernet NIC được
thiết kế để sử dụng với Ethernet Network, CsmaNetDevice làm việc với
CsmaChannel, PointToPointNetDevice thì làm việc với
PointToPointChannel và WifiNetDevice tương thích với WifiChannel.
5. Topology Helpers
Trong ns-3, chúng ta sẽ thấy Nodes sẽ gắn liền với NetDevices.
Trong những mô phỏng mạng lớn, chúng ta cần sắp đặt rất nhiều
connections giữa các Nodes, NetDevices và Channels.
Khi kết nối NetDevice với Nodes, NetDevices với Channels, gán địa
chỉ IP, v.v.., là một trong những tác vụ phổ biến trong ns-3, topology
helpers được cung câp1 để đơn giản hóa các công việc trên. Ví dụ,
chúng ta có thể mất nhiều thao tác ns-3 cơ bản như vừa nêu để tạo một
NetDevice , thêm một MAC address, cài đặt net device lên node, cấu
hình các tầng giao thức rồi kết nối NetDevice tới một Channel. Và còn
cần nhiều thời gian hơn để kết nối những thiết bị này tới nhiều điểm
hoặc kết nối các mạng này lại với nhau, hoặc tạo thành một

4
internetwork. Ns-3 cung cấp các lớp topology helper như
NodeContainer, NetDeviceContainer, PointToPointHelper hay
InternetStackHelper giúp thực hiện các tác vụ trên một cách nhanh
chóng và tiện lợi hơn.

II.ĐẶT VẤN ĐỀ
Để có thể tìm hiểu về giao thức định tuyến Optimized Link State Routing
(OLSR) và Ad hoc On-Demand Distance Vector (AODV) sử dụng trong Mobile
Ad-hoc Network (MANET).
Vấn đề được đưa ra ở đây, giao thức OLSR và AODV:
- Hoạt động như thế nào?
- Cài đặt hai giao thức này trên ns-3 như thế nào?
- Giữa hai giao thức này, giao thức nào sẽ hoạt động hiệu quả hơn?

Kịch bản cho hai giao thức:


Trong mô hình sẽ có tổng cộng 4 node, node0 và node1 sẽ đứng cố định một chỗ.
Ban đầu node3 nằm trong vùng truyền thông của node0 và node1 (phạm vi giữa 2 node
tối đa 250m), trong khi node2 sẽ nằm ngoài vùng truyền thông này. Sau đó, node2 và
node3 sẽ di chuyển lần lược với các vận tốc 8 m/s và 15 m/s theo 2 hướng node2 đi về
bên phải vào vùng truyền thông giữa node0 và node1, trong khi đó node3 đi về phía trên
ra khỏi vùng truyền thông giữa node0 và node1
Trên node1 sẽ được cài đặt một UDP Sink Application, node0 được cài đặt một
UDP sender liên tục gửi các packet đến địa chỉ IP của node1.
Thực nghiệm và quan sát quá trình tái định tuyến khi node3 ra khỏi vùng truyền
thông node0 và node1, và node2 đi vào vùng này của giao thức định tuyến AODV để
thiết lập một kênh truyền Mobile Ad-hoc Network (MANET) giữa node0 và node1, từ đó
tái thiết lập kết nối UDP giữa node0 và node1.
III. Cài đặt ns-3 và mô phỏng OLSR – AODV
1. Cài đặt ns3
A.Yêu cầu:
Cài đặt máy ảo Ubuntu 14.04 trong VMware
B. Cài các gói thư viện:
$ sudo apt-get update
$ sudo apt-get install python-pip python-setuptools python-pip libxml2
$ sudo apt-get install gtk+2.0 qt4-dev-tools
$ sudo apt-get install graphviz libgraphviz-dev pkg-config

5
$ sudo apt-get install python-dev python-pygraphviz graphviz-dev python-kiwi
python-pygoocanvas python-gnome2 python-gnome2-dev python-rsvg
C. Install PygraphViz:
Download Links: https://pypi.org/project/pygraphviz/#files
Giải nén file zip đã tải về: pygraphviz-1.5.zip 
$ cd pygraphviz-1.3.1
$ sudo python setup.py install --library-path=/usr/lib/graphviz
Hoặc sử dụng Pip
$ sudo pip uninstall pygraphviz
$ pkg-config --libs-only-L libcgraph
$ pkg-config --cflags-only-I libcgraph
$ pip install pygraphviz --install-option="--include-path=/usr/include/graphviz"
--install-option="--library-path=/usr/lib/graphviz/"
Kiểm tra pygraphviz đã dc install
$ python
$ >> import pygraphviz as pgv
D.Build NS-3
Download link: https://www.nsnam.org/release/ns-allinone-3.25.tar.bz2
Kiểm tra các gói thư viện đã được cài đặt đầy đủ và configure
$ tar xjvf ns-allinone-3.25.tar.bz2
$ cd ns-allinone-3.25/ns-3.25
$ ./waf --enable-sudo --build-profile=debug --enable-examples --enable-tests
configure
$ ./waf clean
$ cd ../
Cài đặt
$ ./build.py
2. Xây dựng mô hình mô phỏng OLSR và AODV
A. Xây dựng mô hình mô phỏng OLSR
Olsr.cc
 Khai báo thư viện

#include "ns3/core-module.h"

#include "ns3/network-module.h"

#include "ns3/internet-module.h"

#include "ns3/applications-module.h"

6
#include "ns3/mobility-module.h"

#include "ns3/wifi-module.h"

#include "ns3/olsr-module.h"

#include "ns3/flow-monitor-module.h"

#include "ns3/mobility-module.h"
#include "myapp.h"

 Chuẩn bị mô hình di chuyển cho các node


Ptr<ConstantVelocityMobilityModel> cvmm2;
Ptr<ConstantVelocityMobilityModel> cvmm3;
 Tạo kênh kết nối wifi (YansWifiChannel trong ns-3)

WifiHelper wifi;
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
wifiPhy.SetPcapDataLinkType(YansWifiPhyHelper::DLT_IEEE802_
11);

 Cài đặt thông số về công suất truyền để khoảng cách truyền tối đa là
250m
wifiPhy.Set ("TxPowerStart", DoubleValue(33));
wifiPhy.Set ("TxPowerEnd", DoubleValue(33));
wifiPhy.Set ("TxPowerLevels", UintegerValue(1));
wifiPhy.Set ("TxGain", DoubleValue(0));
wifiPhy.Set ("RxGain", DoubleValue(0));
wifiPhy.Set ("EnergyDetectionThreshold",DoubleValue(-1.8));
wifiPhy.Set ("CcaMode1Threshold", DoubleValue(-64.8));

 Cấu hình chế độ ad-hoc cho kênh truyền cài đặt lên các NetDevices
NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
wifiMac.SetType ("ns3::AdhocWifiMac");
// Set 802.11b standard
wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
NetDeviceContainer devices;
devices = wifi.Install (wifiPhy, wifiMac, c);

7
 Cấu hình OSLR sử dụng trong quá trình truyền thông
// Khởi tạo protocol list
OlsrHelper olsr;
Ipv4ListRoutingHelper list;
list.Add (olsr, 10);
// Cài đặt OLSR cho các node trong nodeContainer “c”
InternetStackHelper internet;
internet.SetRoutingHelper (list);
internet.Install (c);

 Các IP address cho các netDevices thuộc các nodes


Ipv4AddressHelper ipv4;
NS_LOG_INFO ("Assign IP Addresses.");
ipv4.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer ifcont = ipv4.Assign (devices);

 Các bước cài đặt UDP Sink app và UDP Sender

Ptr<MyApp> app = CreateObject<MyApp> ();

app->Setup (ns3UdpSocket, sinkAddress, 1040, 100000, DataRate


("250Kbps"));

//Ptr<MyApp> app1 = CreateObject<MyApp> ();

//app1->Setup (ns3UdpSocket, sinkAddress, 2000, 100000, DataRate


("1000Kbps"));

c.Get (0)->AddApplication (app);

//c.Get (0)->AddApplication (app1);

//app1->SetStartTime (Seconds (10.));

8
//app1->SetStopTime (Seconds (40.));

app->SetStartTime (Seconds (1.));

app->SetStopTime (Seconds (40.));

 Cài đặt vị trí cho các node


MobilityHelper mobility;
Ptr<ListPositionAllocator> positionAlloc = CreateObject
<ListPositionAllocator>();
positionAlloc ->Add(Vector(0, 0, 0)); // node0
positionAlloc ->Add(Vector(300, 0, 0)); // node1
positionAlloc ->Add(Vector(0, 110, 0)); // node2
positionAlloc ->Add(Vector(600, -150, 0)); // node3
mobility.SetPositionAllocator(positionAlloc)

 Cài đặt tốc độ và hướng di chuyển cho các node


// Vận tốc theo trục x cho node2 và node3
Vector vel2 (10, 0, 0);
Vector vel3 (-20, 0, 0);
Ptr<Node> mover2 = c.Get(2);
Ptr<Node> mover3 = c.Get(3);
mobility.SetMobilityModel("ns3::ConstantVelocityMobilityMod
el");
mobility.Install(c);
cvmm2 = mover2->GetObject<ConstantVelocityMobilityModel>();
cvmm2->SetVelocity(vel2);
cvmm3 = mover3->GetObject<ConstantVelocityMobilityModel>();
cvmm3->SetVelocity(vel3);

 Ghi lại file PCAP để phân tích

wifiPhy.EnablePcap ("lab3-3-olsr-dev0", devices.Get(0));

wifiPhy.EnablePcap ("lab3-3-olsr-dev1", devices.Get(1));

9
wifiPhy.EnablePcap ("lab3-3-olsr-dev2", devices.Get(2));

wifiPhy.EnablePcap ("lab3-3-olsr-dev3", devices.Get(3));

B. Xây dựng mô hình mô phỏng AODV


Với phần xây dựng mô hình mô phỏng AODV, chỉ khác ở phần cài đặt giao
thức AODV.
aodv.cc

AodvHelper aodv;
Ipv4ListRoutingHelper list;
list.Add (aodv, 10);
// Cài đặt AODV cho các node trong nodeContainer “c”
InternetStackHelper internet;
internet.SetRoutingHelper (list);
internet.Install (c);

C. Chạy mô phỏng
Trước khi chạy, thêm vào thư mục Download/ ns-allinone-3.25/ns-3.25/scratch
và thêm thư mục myapp.h

#include "ns3/applications-module.h"
#include "ns3/core-module.h"

using namespace ns3;

class MyApp : public Application


{
public:

MyApp ();
virtual ~MyApp();

void Setup (Ptr<Socket> socket, Address address, uint32_t


packetSize, uint32_t nPackets, DataRate dataRate);

private:
virtual void StartApplication (void);
virtual void StopApplication (void);

10
void ScheduleTx (void);
void SendPacket (void);

Ptr<Socket> m_socket;
Address m_peer;
uint32_t m_packetSize;
uint32_t m_nPackets;
DataRate m_dataRate;
EventId m_sendEvent;
bool m_running;
uint32_t m_packetsSent;
};

MyApp::MyApp ()
: m_socket (0),
m_peer (),
m_packetSize (0),
m_nPackets (0),
m_dataRate (0),
m_sendEvent (),
m_running (false),
m_packetsSent (0)
{
}

MyApp::~MyApp()
{
m_socket = 0;
}

void
MyApp::Setup (Ptr<Socket> socket, Address address, uint32_t
packetSize, uint32_t nPackets, DataRate dataRate)
{
m_socket = socket;
m_peer = address;
m_packetSize = packetSize;
m_nPackets = nPackets;
m_dataRate = dataRate;
}

void

11
MyApp::StartApplication (void)
{
m_running = true;
m_packetsSent = 0;
m_socket->Bind ();
m_socket->Connect (m_peer);
SendPacket ();
}

void
MyApp::StopApplication (void)
{
m_running = false;

if (m_sendEvent.IsRunning ())
{
Simulator::Cancel (m_sendEvent);
}

if (m_socket)
{
m_socket->Close ();
}
}

void
MyApp::SendPacket (void)
{
Ptr<Packet> packet = Create<Packet> (m_packetSize);
m_socket->Send (packet);

if (++m_packetsSent < m_nPackets)


{
ScheduleTx ();
}
}

void
MyApp::ScheduleTx (void)
{
if (m_running)
{
Time tNext (Seconds (m_packetSize * 8 / static_cast<double>

12
(m_dataRate.GetBitRate ())));
m_sendEvent = Simulator::Schedule (tNext,
&MyApp::SendPacket, this);
}
}

$Download/ Download/ ns-allinone-3.25/ns-3.25 ./waf --run scratch/olsr.cc


--vis
$ Download/ Download/ ns-allinone-3.25/ns-3.25 ./waf --run scratch/aodv.cc
--vis

D. So sánh thời gian mất cho việc tái định tuyến của 2 giao thức AODV và OLSR
từ sau giây thứ 10.

Thời gian định tuyến lại của aodv nhanh hơn so với olsr.
Aodv mất 14s.

13
Olsr mất 20s:

Do Giao thức aodv trong lúc node nguồn gửi gói request đã hình
thành nhiều đường dẫn đến đích, chỉ cần hình thành đường dãn một chiều
đến đích là có thể gửi gói tin. Trong khi đó giao thức olsr pháie mất thời
gian hình thành đường dẫn 2 chiều ở các node. Khi có lỗi xảy ra một node
trong giao thức aodv sẽ thông báo tới nguồn để khởi tạo lại đường đi mới.
Còn olsr phải đi hình thành lại đường dãn 2 chiều giữa các node.

IV. KẾT LUẬN


Network Simulation là một kỹ thuật có lợi ích lớn trong việc nghiên cứu và
tìm hiểu hoạt động của mạng về các giao thức, hoạt động,… giữa các Nodes,
Routes, Switches, Links,… . Thay vì chúng ta phải làm những device thực tế gây ra
sự tốn kém để có thể tính toán được, Network Simulation là một sự lựa chọn tốt để
nghiên cứu.
Ngoài ra, Network Simulation còn có thể thực hiện những công nghệ khác
như: WLAN, UDP, TCP,…

PHÂN CÔNG CÔNG VIỆC

MSSV Họ và Tên Công việc


1752127 Hoàng Gia Vương - Chuẩn bị môi trường
6 - Xây dựng kịch bản

14
- Làm PowerPoint, Báo cáo
1752127 Mai Hoàng Vũ - Build OLSR, phân tích PCAP OLSR
1
1752118 Nguyễn Đang Trường - Build AODV, phân tích AODV
4 - Quay và chỉnh sửa video

15

You might also like