NS3实例分析(3)-- second.cc

这一小节我们来看看第三个例子,这个例子应用了一个P2P信道和一个实现CSMA的以太信道。

网络拓扑如下:

// Default Network Topology

//

//       10.1.1.0

// n0 -------------- n1   n2   n3   n4

//    point-to-point  |    |    |    |

//                    ================

//                      LAN 10.1.2.0

接下来,分析一下 second.cc  的源码实现:

------------------------------------------------------------------------------------------------------

#include "ns3/core-module.h"

#include "ns3/network-module.h"

#include "ns3/csma-module.h"

#include "ns3/internet-module.h"

#include "ns3/point-to-point-module.h"

#include "ns3/applications-module.h"

#include "ns3/ipv4-global-routing-helper.h"

using namespace ns3;

//声明了一个叫SecondScriptExample的日志构件,通过引用SecondScriptExample这个名字的操作,

//可以实现打开或者关闭控制台日志的输出。

NS_LOG_COMPONENT_DEFINE ("SecondScriptExample");

int main (int argc, char *argv[])

{

//定义变量,用于决定是否开启两个UdpApplication的Logging组件;默认true开启

bool verbose = true;

uint32_t nCsma = 3;

CommandLine cmd;

cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma);

//命令行参数设置是否开启logging

cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose);

cmd.Parse (argc,argv);

if (verbose)

{

LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);

LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);

}

nCsma = nCsma == 0 ? 1 : nCsma;

/********************网络拓扑部分************************/

//创建使用P2P链路链接的2个node

NodeContainer p2pNodes;

p2pNodes.Create (2);

//创建另一个NodeContainer类对象,用于总线(CSMA)网络

NodeContainer csmaNodes;

//将之前P2P的NodeContianer的第二个节点添加到CSMA的NodeContainer,

//以获得CSMA device;这个node将会有两个device

csmaNodes.Add (p2pNodes.Get (1));

//再创建Bus network上另外3个node

csmaNodes.Create (nCsma);

//设置传送速率和信道延迟

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));

pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

//安装P2P网卡设备到P2P网络节点

NetDeviceContainer p2pDevices;

p2pDevices = pointToPoint.Install (p2pNodes);

//创建和连接CSMA设备及信道

CsmaHelper csma;

csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));

csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (6560)));

NetDeviceContainer csmaDevices;

csmaDevices = csma.Install (csmaNodes);

//安装网络协议

InternetStackHelper stack;

//P2P链路中的第一个节点

stack.Install (p2pNodes.Get (0));

//P2P链路中的第二个节点

stack.Install (csmaNodes);

//两个网段的IP地址类对象

Ipv4AddressHelper address;

//安排P2P网段的地址

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

Ipv4InterfaceContainer p2pInterfaces;

p2pInterfaces = address.Assign (p2pDevices);

//安排CSMA网段地址

address.SetBase ("10.1.2.0", "255.255.255.0");

Ipv4InterfaceContainer csmaInterfaces;

csmaInterfaces = address.Assign (csmaDevices);

/********************网络拓扑部分结束*********************/

/**********************应用程序部分*********************/

UdpEchoServerHelper echoServer (9);

//将Server服务安装在CSMA网段的最后一个节点上

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));

//将Client服务安装在P2P网段的第一个节点上

ApplicationContainer clientApps = echoClient.Install (p2pNodes.Get (0));

clientApps.Start (Seconds (2.0));

clientApps.Stop (Seconds (10.0));

/**********************应用程序部分结束*********************/

/****************调用全局路由Helper帮助建立网络路由*******************/

//全局路由管理器根据节点产生的链路通告为每个节点建立路由表

Ipv4GlobalRoutingHelper::PopulateRoutingTables ();

/****************开启pcap跟踪*******************/

//开启P2PHelper类对象的pcap

pointToPoint.EnablePcapAll ("second");

//开启csmaHelper类对象的pcap

//使用csma网段第二个节点进行sniff,True开启混杂模式

csma.EnablePcap ("second", csmaDevices.Get (1), true);

Simulator::Run ();

Simulator::Destroy ();

return 0;

}

-------------------------------------------------------------------------------------------------------

编译并运行,结果如下:

需要注意的有几点:

1、CsmaChannel信道模拟了用于一个可以实现载波侦听多路访问通信子网中的媒介。这个信道具有和以太网相似的功能。

2、NetDevice类提供了管理连接其他节点和信道对象的各种方法,并且允许开发者以面向对象的方法来自定义。本例中用到了CsmaNetDevice和PointToPointNetDevice。CsmaNetDevice被设计成在csma信道中工作,而PointToPointNetDevice 在PointToPoint信道中工作。以后还会遇见WifiNetNevice,这是在wifi信道中工作。

3、使用了全局路由管理器,根据节点产生的链路通告为每个节点建立路由表

4、开启了网络嗅探器

时间: 2024-10-03 23:10:29

NS3实例分析(3)-- second.cc的相关文章

NS3实例分析(4)-- third.cc

这一节主要是分析第三个例子 third.cc. 该例子包含了P2P信道,以太信道和WiFi信道. 网络拓扑如下: // Default Network Topology // //   Wifi 10.1.3.0 //                 AP //  *    *    *    * //  |    |    |    |    10.1.1.0 // n5   n6   n7   n0 -------------- n1   n2   n3   n4 //           

NS3实例分析(1)-- hello-simulator.cc

这一节,我们就NS3第一个例子,也是最简单的例子hello 开始学习. 以下是 hello-simulator.cc 的源码: --------------------------------------------------------------------------------------- #include "ns3/core-module.h" //声明了一个叫HelloSimulator的日志构件,通过引用HelloSimulator这个名字的操作, //可以实现打开或

NS3实例分析(2)-- first.cc

这一节我们开始分析第二个例子 first.cc .网络拓扑就下所示: // Default Network Topology // //       10.1.1.0 // n0 -------------- n1 //    point-to-point // // 这是一个P2P模型.我们接着来看看NS3的具体实现: ----------------------------------------------------------------------------------------

句柄泄露实例分析

句柄泄露实例分析 在上篇文章.NET对象与Windows句柄(二):句柄分类和.NET句柄泄露的例子中,我们有一个句柄泄露的例子.例子中多次创建和Dispose了DataReceiver和DataAnalyzer对象,但由于忘记调用DataAnalyzer的Stop方法,导致产生句柄泄露.本文假定我们已经发现了泄露现象但还不知道原因,讨论如何在这种情况下分析问题. 一.发现问题 在程序运行约一个小时以后,通过任务管理器发现句柄数超过5000,线程数也超过1000.对于一段只需要并行接收和分析数据

Android漫游记(5)---ARM GCC 内联汇编烹饪书(附实例分析)

原文链接(点击打开链接) 关于本文档 GNU C编译器针对ARM RISC处理器,提供了内联汇编支持.利用这一非常酷炫的特性,我们可以用来优化软件代码中的关键部分,或者可以使用针对特定处理的汇编处理指令. 本文假定,你已经熟悉ARM汇编语言.本文不是一篇ARM汇编教程,也不是C语言教程. GCC汇编声明 让我们从一个简单的例子开始.下面的一条ARM汇编指令,你可以添加到C源码中. /* NOP example-空操作 */ asm("mov r0,r0"); 上面的指令,讲r0寄存器的

一些有用的javascript实例分析(一)

原文:一些有用的javascript实例分析(一) 本文以http://fgm.cc/learn/链接的实例索引为基础,可参见其实际效果.分析和整理了一些有用的javascript实例,相信对一些初学者有一定的帮助.本人水平有限,有许多不足的地方还望包涵,指正.废话不多说,正文以代码开始,不在代码中死去,就在代码中重生.不经历码农,如何来做攻城狮. 1 1 控制div属性 2 //参数为对象,样式属性和值 3 var changeStyle=function(elem,attr,value){

【OpenGL】Shader实例分析(七)- 雪花飘落效果

转发请保持地址:http://blog.csdn.net/stalendp/article/details/40624603 研究了一个雪花飘落效果.感觉挺不错的.分享给大家,效果例如以下: 代码例如以下: Shader "shadertoy/Flakes" { // https://www.shadertoy.com/view/4d2Xzc Properties{ iMouse ("Mouse Pos", Vector) = (100,100,0,0) iChan

Apache漏洞利用与安全加固实例分析

Apache 作为Web应用的载体,一旦出现安全问题,那么运行在其上的Web应用的安全也无法得到保障,所以,研究Apache的漏洞与安全性非常有意义.本文将结合实例来谈谈针对Apache的漏洞利用和安全加固措施. Apache HTTP Server(以下简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,是最流行的Web服务器软件之一.虽然近年来Nginx和Lighttpd等Web Server的市场份额增长得很快,但Apache仍然是这个领

java基础学习05(面向对象基础01--类实例分析)

面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过setter和getter设置和取得4.如果需要可以加入若干构造方法 5.再根据其它要求添加相应的方法6.类中的所有方法都不要直接输出,而是交给被调用处调用 Demo 定义并测试一个名为Student的类,包括属性有"学号"."姓名"以及3门课程"数学".