从零开始的ns3笔记(四):wifi网络构建third.cc

一、网络拓扑结构

// Default Network Topology
//
//   Wifi 10.1.3.0
//                 AP
//  *    *    *    *
//  |    |    |    |    10.1.1.0
// n5   n6   n7   n0 -------------- n1   n2   n3   n4
//                   point-to-point  |    |    |    |
//                                   ================
//                                     LAN 10.1.2.0

可以看到,第三个脚本构建了一个包含点对点PPP和CSMA有线网络,以及Wi-Fi无线网络混合场景。 

csma网络在second.cc中已经出现,若需要了解可查看从零开始的ns3笔记(三):second.cc。以下不再赘述。

WiFi网络

Wi-Fi无线网络由一个接入点(AccessPoint,AP)和nWifi个移动结点组成。其中AP也是一个双模结点。它安装有PPP和Wi-Fi两个网络设备。

相比于之前的PPP连接和csma网络,WiFi网络除了WifiNetDevice类,还包括链路(WifiMac)层与物理(WifiPhy)层部分,其中WifiNetDevice只起一个连接上下层协议的桥梁作用,主要Wifi协议功能都集中在WifiMac和WifiPhy中,这个结构一方面可以把一个复杂功能模块化,有利于后续的开发和维护,也更加符合物理网络的层次划分。
这种NetDevice+Mac+Phy的3层网络设备结构在ns-3的无线结点中会经常用到。

二、脚本代码分析

脚本代码中PPP信道的建立和csma网络的搭建均与前两个示例相似,以下重点介绍WiFi网络的搭建。

1. 创建 Wi-Fi 网络的节点

创建多个 "站点 "节点(STA),并使用点对点链路中 "最左边 "的节点作为接入点的节点(AP)。

NodeContainer wifiStaNodes;
wifiStaNodes.Create(nWifi);
NodeContainer wifiApNode = p2pNodes.Get(0);

 2. 构建 wifi 设备和这些 wifi 节点的物理层和信道

YansWifiChannelHelper channel = YansWifiChannelHelper::Default();
YansWifiPhyHelper phy = YansWifiPhyHelper::Default();

phy.SetChannel(channel.Create());

WifiChannel和phy采用默认情况,其中WifiChannel配置损耗模型,phy配置误码率模型

这两个模型加上最后一步中的移动模型一起决定了一个分组在无线信道中传播延迟接收功率

3. 配置mac层并完成wifi配置

WifiMacHelper 对象用于设置 MAC 参数。创建SSID对象用于设置 MAC 层实现的 "Ssid "属性值。

WifiMacHelper mac;
Ssid ssid = Ssid("ns-3-ssid");

WifiHelper wifi;

4. 创建STA节点的网络设备

NetDeviceContainer staDevices
mac.SetType("ns3::StaWifiMac",
            "Ssid", SsidValue(ssid),
            "ActiveProbing", BooleanValue(false));

NetDeviceContainer staDevices;
staDevices = wifi.Install(phy, mac, wifiStaNodes);

 上述代码中,由mac.SetType创建MAC 层的网络设备,ns3::StaWifiMac 指定创建的是STA节点。ssid由前面的代码确定,只有ssid一致的WiFi节点才能进行通信,"ActiveProbing "属性被设置为 false。这意味着该辅助器创建的 MAC 将不会发送探测请求,而站点将侦听 AP 信标。

5. 创建AP节点的网络设备

mac.SetType("ns3::ApWifiMac",
            "Ssid", SsidValue(ssid));

NetDeviceContainer apDevices;
apDevices = wifi.Install(phy, mac, wifiApNode);

同理,ns3::ApWifiMac指定创建的是AP节点,没有配置"ActiveProbing "属性,采用默认配置为true,则发送探测请求。

6. 配置移动模型

我们希望 STA 节点是移动的,在一个边界框内四处游荡,同时希望 AP 节点是固定的。

在配置Channel和WifiPhy时,一个分组在Channel中传播延迟和接收功率大小是由传播延迟模型、损耗模型和移动模型共同决定的。

传播延迟和损耗模型已经在前面配置,而移动模型一般在Wifi网络设备安装到结点之后配置。这是因为不同的Wifi结点类型需要采用不同的移动模型。

MobilityHelper mobility;

mobility.SetPositionAllocator("ns3::GridPositionAllocator",
                              "MinX", DoubleValue(0.0),
                              "MinY", DoubleValue(0.0),
                              "DeltaX", DoubleValue(5.0),
                              "DeltaY", DoubleValue(10.0),
                              "GridWidth", UintegerValue(3),
                              "LayoutType", StringValue("RowFirst"));

GridPositionAllocator定义了移动结点的初始坐标,这个分布器是按照设置好的行列参数把结点等间距放在二维坐标系当中。

ns3移动模型使用笛卡尔坐标系标识结点位置,与上文类似,在Wifi网络中设置移动模型时也需要区分AP与移动结点。

AP结点:固定结点。使用固定位置移动模型ConstantPositionMobilityModel。这个模型的AP结点坐标是(0,0)。

mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
mobility.Install(wifiApNode);

STA结点:移动结点,移动轨迹模型是RandomWalk2dMobilityModel,在一个指定大小的长方形区域内按随机的速度和方向移动

mobility.SetMobilityModel("ns3::RandomWalk2dMobilityModel",
                          "Bounds", RectangleValue(Rectangle(-50, 50, -50, 50)));

mobility.Install(wifiStaNodes);

7. 安装TCP/IP协议栈

InternetStackHelper stack;
stack.Install(csmaNodes);
stack.Install(wifiApNode);
stack.Install(wifiStaNodes);

8. 配置IP地址

Ipv4AddressHelper address;

address.SetBase("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer p2pInterfaces;
p2pInterfaces = address.Assign(p2pDevices);

address.SetBase("10.1.2.0", "255.255.255.0");
Ipv4InterfaceContainer csmaInterfaces;
csmaInterfaces = address.Assign(csmaDevices);

address.SetBase("10.1.3.0", "255.255.255.0");
address.Assign(staDevices);
address.Assign(apDevices);

9.配置应用程序

UdpEchoServerHelper echoServer(9); 

//配置最右端结点作为server
ApplicationContainer serverApps = echoServer.Install(csmaNodes.Get(nCsma));
serverApps.Start(Seconds(1.0));
serverApps.Stop(Seconds(10.0));


UdpEchoClientHelper echoClient(csmaInterfaces.GetAddress(nCsma), 9);
echoClient.SetAttribute("MaxPackets", UintegerValue(1));
echoClient.SetAttribute("Interval", TimeValue(Seconds(1.0)));
echoClient.SetAttribute("PacketSize", UintegerValue(1024));

/配置最后一个创建的STA结点作为client
ApplicationContainer clientApps =
    echoClient.Install(wifiStaNodes.Get(nWifi - 1));
clientApps.Start(Seconds(2.0));
clientApps.Stop(Seconds(10.0));

//配置全局路由
Ipv4GlobalRoutingHelper::PopulateRoutingTables();

//配置截止时间
Simulator::Stop(Seconds(10.0));

10. 数据追踪

pointToPoint.EnablePcapAll("third");
phy.EnablePcap("third", apDevices.Get(0));
csma.EnablePcap("third", csmaDevices.Get(0), true);

 上面三行代码将在作为主干网的两个点对点节点上启动 pcap 跟踪,在 Wi-Fi 网络上启动杂散(监控)模式跟踪,并在 CSMA 网络上启动杂散跟踪。这样,我们就可以用最少的跟踪文件查看所有流量。

三、结果显示

拓扑图显示为: (和之前一样,拓扑图结点无法拖动,以至于看起来很不明显)

 如果想要查看各节点的跟踪文件,可以将third.cc中的tracing改为true,则会出现

third-0-0.pcap  third-0-1.pcap  third-1-0.pcap  third-1-1.pcap,

其中,third-0-0.pcap对应零号节点上的点对点设备,即 "主干网 "的左侧。third-1-0.pcap对应节点一("主干网 "的右侧)上的点对点设备。third-0-1.pcap 是 Wi-Fi 网络的杂散(监控模式)跟踪,而third-1-1.pcap 是 CSMA 网络的杂散跟踪。通过tcpdump方式查看,在此不作赘述。

 四、STA节点移动性展示

ns-3 跟踪系统分为跟踪源和跟踪汇(trace sources and trace sinks),我们提供了连接两者的函数。我们将使用流动性模型预定义的航向变化跟踪源来发起跟踪事件。

要完成上述功能,先要在主程序之前(即 NS_LOG_COMPONENT_DEFINE 语句之后),添加以下函数:

void
CourseChange(std::string context, Ptr<const MobilityModel> model)
{
  Vector position = model->GetPosition();
  NS_LOG_UNCOND(context <<
              " x = " << position.x << ", y = " << position.y);
}

这段代码从移动性模型中提取位置信息,并无条件地记录节点的 x 和 y 位置,echo 客户端的无线节点每次改变位置时调用该函数。为此,我们将使用 Config::Connect 函数。在Simulator::Run调用之前向脚本中添加以下几行代码:

std::ostringstream oss;
oss << "/NodeList/" << wifiStaNodes.Get(nWifi - 1)->GetId()
    << "/$ns3::MobilityModel/CourseChange";

Config::Connect(oss.str(), MakeCallback(&CourseChange));

该代码创建一个字符串,包含我们要连接的事件的跟踪命名空间路径(NodeList)。首先,我们必须使用前面描述的 GetId 方法找出我们想要的节点。在 CSMA 和无线节点的默认数量情况下,这就是节点 7,而移动模型的跟踪命名空间路径将如下所示。

/NodeList/7/$ns3::MobilityModel/CourseChange

上述路径中的 “7” 代表引用了全局 NodeList 中的第七个节点。它指定了一个 ns3::MobilityModel 类型的聚合对象。美元符号前缀$ 意味着 MobilityModel 被聚合到第七个节点。路径的最后一个组件表示我们正在挂钩该模型的 "CourseChange "事件。

通过调用 Config::Connect 并传递该命名空间路径,我们在节点七的跟踪源和跟踪汇之间建立了连接。连接完成后,节点七上的每个课程变化事件都将被挂钩到我们的跟踪汇,而跟踪汇则会打印出新的位置。 

运行结果: 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
rpc.statd是一个用于远程过程调用(RPC)协议的服务,它负责监视系统中的RPC程序,并处理客户端程序断开连接的情况。rpc.statd攻击报文pcap是一种攻击手段,通过捕获并分析rpc.statd服务的网络数据包文件pcap),来了解并利用系统中存在的安全漏洞,从而发动攻击。 rpc.statd攻击报文pcap文件可以包含各种用于攻击rpc.statd服务的数据包,例如恶意的RPC请求、试图利用rpc.statd的漏洞发起攻击的数据包等。这些数据包可以被用来分析系统中的安全漏洞,并编写恶意代码或利用已知的漏洞进行攻击。通过分析rpc.statd攻击报文pcap,黑客可以获取有关系统架构和安全配置的信息,以便更好地规划和发动攻击。 然而,在合法和正当的情况下,rpc.statd攻击报文pcap也可以被用于安全研究和系统审计。安全研究人员可以通过分析rpc.statd服务的网络数据包,发现并修补系统中的潜在安全漏洞,以提高系统的安全性。系统管理员也可以利用rpc.statd攻击报文pcap来审计系统的安全配置,及时发现并解决可能存在的安全问题。 总之,rpc.statd攻击报文pcap下载对于黑客可能用于发动恶意攻击,而对于安全研究人员和系统管理员则可用于提高系统的安全性和进行系统审计。因此,在处理和使用rpc.statd攻击报文pcap时,务必保证使用者的身份和用途合法,并采取必要的安全防护措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值