NS3 – Lab 1 – Mô hình P2P

Share Button

Để làm quen với NS3 chúng ta sẽ thử nghiệm mô phỏng mô hình p2p với 2 node.

Cấu hình cài đặt

1. Mô hình gồm 2 node kết nối point to point
2. Cài đặt UdpClient trên  Node1 và UdpServer on Node2.
3. Speed 1Gbps, Delay 1ms
4. Số gói tin gửi 10 packets
Các bước thực hiện
1. Tạo file lab1 trong thư mục scratch ( có thể xem lại các thực hiện dự án mới trên codeblock theo link)
2. Thêm các gói thư viện cơ bản của ns3
#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/internet-module.h"
#include "ns3/network-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/netanim-module.h"
#include "ns3/flow-monitor-module.h"

using namespace ns3;

2. Tạo 2 nút với cấu hình speed 1Gbps ; delay 1ms

 NodeContainer nodes;
 nodes.Create(2);

 PointToPointHelper pointToPoint;
 pointToPoint.SetDeviceAttribute("DataRate", StringValue("1Gbps"));
 pointToPoint.SetChannelAttribute("Delay", StringValue("1ms"));

3. Cài đặt phương thức P2P cho 2 nodes

NetDeviceContainer devices;
devices = pointToPoint.Install(nodes);

4. Cài đặt giao thức TCP/IP để cấu hình địa chỉ Ip cho 2 nodes

InternetStackHelper stack;
stack.Install(nodes);

Ipv4AddressHelper address;
address.SetBase("10.1.1.0", "255.255.255.0");

Ipv4InterfaceContainer interfaces = address.Assign(devices);

5. Cài đặt Application
Cài đặt Udp server cho node 1

UdpEchoServerHelper echoServer(9);

ApplicationContainer serverApps = echoServer.Install(nodes.Get(1));
serverApps.Start(Seconds(1.0));
serverApps.Stop(Seconds(10.0));

Cài đặt Udp Client cho Node 0; cấu hình số packet gửi và kích thước packet

 UdpEchoClientHelper echoClient(interfaces.GetAddress(1), 9);
 echoClient.SetAttribute("MaxPackets", UintegerValue(10));
 echoClient.SetAttribute("Interval", TimeValue(Seconds(0.1)));
 echoClient.SetAttribute("PacketSize", UintegerValue(1024));

 ApplicationContainer clientApps = echoClient.Install(nodes.Get(0));
 clientApps.Start(Seconds(2.0));
 clientApps.Stop(Seconds(10.0));

6. Cài đặt Flow Monitor để thu thập thông tin trên các node

Ptr flowmon;
FlowMonitorHelper flowmonHelper;
flowmon = flowmonHelper.InstallAll ();

7. Ghi nhận lại thông tin các gói và lưu thành file pcap

pointToPoint.EnablePcapAll("lab_1");

8. Tạo file mô phỏng XML để hiển thị trên NetAnim

AnimationInterface anim ("lab_1.xml");
anim.EnablePacketMetadata();

9. Chạy mô phỏng

Simulator::Stop(Seconds(11));
Simulator::Run();

10. Chuyển file flow monitor sang dạng XML

flowmon->SerializeToXmlFile ("lab1_1_flow.xml", true, true);

11. Giải phóng mô phỏng

 Simulator::Destroy();

Full code

#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/internet-module.h"
#include "ns3/network-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/netanim-module.h"
#include "ns3/flow-monitor-module.h"

using namespace ns3;

NS_LOG_COMPONENT_DEFINE("FirstScriptExample");

int
main(int argc, char* argv[])
{
    CommandLine cmd(__FILE__);
    cmd.Parse(argc, argv);

    Time::SetResolution(Time::NS);
    LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
    LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

    NodeContainer nodes;
    nodes.Create(2);

    PointToPointHelper pointToPoint;
    pointToPoint.SetDeviceAttribute("DataRate", StringValue("1Gbps"));
    pointToPoint.SetChannelAttribute("Delay", StringValue("0.1ms"));

    NetDeviceContainer devices;
    devices = pointToPoint.Install(nodes);

    InternetStackHelper stack;
    stack.Install(nodes);

    Ipv4AddressHelper address;
    address.SetBase("10.1.1.0", "255.255.255.0");

    Ipv4InterfaceContainer interfaces = address.Assign(devices);

    UdpEchoServerHelper echoServer(9);

    ApplicationContainer serverApps = echoServer.Install(nodes.Get(1));
    serverApps.Start(Seconds(1.0));
    serverApps.Stop(Seconds(60.0));

    UdpEchoClientHelper echoClient(interfaces.GetAddress(1), 9);
    echoClient.SetAttribute("MaxPackets", UintegerValue(1000));
    echoClient.SetAttribute("Interval", TimeValue(Seconds(0.1)));
    echoClient.SetAttribute("PacketSize", UintegerValue(1024));

    ApplicationContainer clientApps = echoClient.Install(nodes.Get(0));
    clientApps.Start(Seconds(2.0));
    clientApps.Stop(Seconds(60.0));


    Ptr<FlowMonitor> flowmon;
    FlowMonitorHelper flowmonHelper;
    flowmon = flowmonHelper.InstallAll ();

    pointToPoint.EnablePcapAll("lab_1");

    AnimationInterface anim ("lab_1.xml");
    anim.EnablePacketMetadata();

    Simulator::Stop(Seconds(60));
    Simulator::Run();

    flowmon->SerializeToXmlFile ("lab1_1_flow.xml", true, true);

    Simulator::Destroy();
    return 0;
}

Chạy thử mô phỏng

Tại thư mục  build sẽ sinh ra các file lưu thông tin mô phỏng

Chạy thử file lab_1-0-0.pcap trên Wireshark

Share Button

Comments

comments