TiiL Tutorials
@TinhocTiiL

NS3 – Bài 1- Xây dựng mô phỏng đơn giản

Script ví dụ “SimpleNS3Simulation1.cc” tạo kết nối point to point đơn giản

Thực tế, ví dụ mô phỏng này được tạo từ script mẫu first.cc có sẵn khi cài NS3, ns-allinone-3.25/ns-3.25/examples/tutorial

Mô hình mạng  mô phỏng

Tệp mã nguồn

Tạo file: SimpleNS3Simulation1.cc; lưu vào thư mục NS3-35/Srcatch

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/internet-module.h"
#include "ns3/applications-module.h"
using namespace ns3;
int main (int argc, char *argv[])
{
	NodeContainer nodes;
	nodes.Create (2);

	PointToPointHelper channel;
	channel.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
	channel.SetChannelAttribute ("Delay", StringValue ("2ms"));

	NetDeviceContainer netDevices;
	netDevices = channel.Install (nodes);

	InternetStackHelper ipStack;
	ipStack.Install (nodes);

	Ipv4AddressHelper ipAddresses;
	ipAddresses.SetBase ("192.168.1.0", "255.255.255.0");

	Ipv4InterfaceContainer ipinterfaces = ipAddresses.Assign (netDevices);

	UdpEchoServerHelper udpEchoServer (9);

	ApplicationContainer serverApps = udpEchoServer.Install (nodes.Get (1));
	serverApps.Start (Seconds (1.0));

	UdpEchoClientHelper udpEchoClient (ipinterfaces.GetAddress (1), 9);

	ApplicationContainer clientApps = udpEchoClient.Install (nodes.Get (0));
	clientApps.Start (Seconds (2.0));

	Simulator::Run ();
}

Chạy Script “SimpleNS3Simulation1.cc”

Nếu chạy script, ta không thấy any interesting outputs ở terminal; bởi vì Tôi đã bỏ bớt các dòng lệnh cho phép shows một số “LogComponent” outputs để giúp bạn hiểu chúng ta có thể sử dụng Log Components trong một mô phỏng điển hình. Chúng ta không nhất thiết viết lệnh để cho phép Log Components trong script – chúng ta có thể cho phép sau đó bởi việc thiết lập biến môi trường trước khi chạy mô phỏng.

— Chạy mô phỏng:

— Tại thư mục gốc NS3, chạy lệnh: ./waf –run SimpleNS3Simulation1

kết quả sau khi chạy mô phỏng

Cho phép Log components

Log components có thể được cho phép bởi việc thêm một số dòng lệnh vào simulation script, hoặc đơn giản bởi việc thiết lập các biến môi trường thích hợp trong command prompt. Ở ví dụ này, Tôi sử dụng kỹ thuật thứ 2, thông qua cách này chúng ta có thể hiểu thực sự về các tiện ích logging các message  có sẵn trong ns-3.

Giả sử nếu chúng ta  set biến môi trường (environment variable) NS_LOG như sau,

$ export NS_LOG=UdpEchoClientApplication=level_info

sau đó chạy  simulation lần nữa

$ ./waf –run SimpleNS3Simulation1

Bây giờ nó sẽ hiển thị thông tin log của UdpEchoClientApplication.

Nếu ta quan sát kết quả output ở trên, ta có thể thấy các sự kiện “sending” và “receiving” của  UdpEchoClientApplication. Nó hiện các sự kiên trong khoảng thời gian 100 seconds. Lý do là vì chúng ta đang sử dụng  default attributes của UdpEchoClientApplication qui định  send 1 echo request mỗi giây và gửi 100 requests tất cả.

Nếu ta muốn quan sát log info events thuộc về ứng dụng UdpEchoServerApplication thì ta phải set the environment variable NS_LOG như sau:

$ export NS_LOG=UdpEchoClientApplication=level_info:UdpEchoServerApplication=level_info

và chạy  simulation lần nữa

$ ./waf –run SimpleNS3Simulation1

Kết quả ta thấy như sau

Kết

Kiểu logs này thường được sử dụng để trace errors khi phát triển một mô phỏng simulation.

Nhưng, để trace analysis và  visualization, chúng ta phải sử dụng các  features khác có sẵn trong ns3. [Xem Bài 2]

Avatar
https://khoacntt.ntu.edu.vn/giang-vien/mai-cuong-tho

một GV Đại học. TiiL đã phụ trách một số môn học như: Lập trình Java, Phát triển web với Java, Lập trình thiết bị di động, Lập trình hệ thống nhúng và IoT.