NS3 – Bài 1- Xây dựng mô phỏng đơn giản
08/12/2021, bởi Thầy TiiL trong mục: NS3Script 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
Các chủ đề chính
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]
Thẻ:NS3