NS3对于初学者的教程高手忽略这个吧.docx

上传人:b****5 文档编号:6909175 上传时间:2023-01-12 格式:DOCX 页数:19 大小:1.27MB
下载 相关 举报
NS3对于初学者的教程高手忽略这个吧.docx_第1页
第1页 / 共19页
NS3对于初学者的教程高手忽略这个吧.docx_第2页
第2页 / 共19页
NS3对于初学者的教程高手忽略这个吧.docx_第3页
第3页 / 共19页
NS3对于初学者的教程高手忽略这个吧.docx_第4页
第4页 / 共19页
NS3对于初学者的教程高手忽略这个吧.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

NS3对于初学者的教程高手忽略这个吧.docx

《NS3对于初学者的教程高手忽略这个吧.docx》由会员分享,可在线阅读,更多相关《NS3对于初学者的教程高手忽略这个吧.docx(19页珍藏版)》请在冰豆网上搜索。

NS3对于初学者的教程高手忽略这个吧.docx

NS3对于初学者的教程高手忽略这个吧

1.Ns3的安装:

开发环境配置:

sudoapt-getinstallgccg++pythonpython-dev//C++和python安装,必装

sudoapt-getinstallmercurial//NS3代码维护使用的源码版本控制管理系统

sudoapt-getinstallbzr//运行python绑定ns-3-dev需要bazaar这个组件

sudoapt-getinstalllibgtk2.0-0libgtk2.0-dev//基于GTK的配置系统

sudoapt-getinstallgdbvalgrind//调试工具

sudoapt-getinstalldoxygengraphvizimagemagick//文档生成器

sudoapt-getinstalltexlivetexlive-latex-extra//文档生成器,从源代码中生成说明文档

sudoapt-getinstalltexinfodiatexlive-extra-utilstexi2html//ns-3手册和tutorial编写查看工具

sudoapt-getinstallflexbison//仿真必需的词法分析器和语法分析生成器,必装

sudoapt-getinstalllibgoocanvas-dev//部分移动场景仿真的可视化测试需要这个组件

sudoapt-getinstalltcpdump//读取pcap的packettraces,即包嗅探器

sudoapt-getinstallsqlitesqlite3libsqlite3-dev//支持统计特性的数据库软件

sudoapt-getinstalllibxml2//xml的配置存储软件

sudoapt-getinstallpython-pygraphvizpython-kiwipython-pygoocanvas//Gustavo'sns-3-pyviz的可视化软件

sudoapt-getinstallqt4-qmake

sudoapt-getinstallqt4-dev-tools

安装完成后:

进入ns-allinone-3.16目录

sudo./build.py

之后进入ns-allinone-3.16/ns-3.16

sudo./waf-check

返回目录ns-allinone-3.16

进入目录netanim-3.103

sudomakeclean

sudoqmakeNetAnim.pro

sudomake

之后

sudols

可以看见绿色的NetAnim这个东西就成功了

sudo./NetAnim打开仿真界面

安装全部完成

2.ns3仿真的运行

ctrl+alt+t调出终端,进入ns-allinone-3.16目录,

输入cdns-3.16/进入ns-3.16文件夹

输入cdexamples/tutorial/进入examples里面的tutorial文件夹(里面有刚刚上手专用的实例,我们就用这个来调试)

在tutorial目录下,输入cpfirst.cc~/ns-allinone/ns-3.16/scratch/,将first.cc这个文件复制到ns-3.16的scratch文件夹里面.具体位置由实际的自己的计算机的文件目录所定。

输入cd..

输入cd..此时进入的是ns-3.16文件夹

输入cdscratch/进入scratch文件夹

输入ls查看有没有那个复制进去的文件有的话进行下面,没有的话要先复制进去

确定有的话,输入cd..返回ns-3.16/

输入sudo./waf--runscratch/first注意:

在输入运行的文件名时,不要加后缀名。

现在就可以运行了。

以下是这个的显示结果:

此结果表示的意思是:

第一行:

客户机在第2s的时候向IP为10.1.1.2的节点的第九号端口(port)发送了1024字节大小的数据包

第二行:

10.1.1.2的这个服务器接在2.00369s收到了来自10.1.1.1的端口为49153的1024字节大小的数据包

第三行:

10.1.1.2服务器在2.00369s向10.1.1.1的49153号端口发送了1024字节的一个数据包

第四行:

2.00737s客户机(10.1.1.1)接收到了来自ip为10.1.1.2(服务器)的9号端口的一个1024字节的数据包

3.图形仿真器(Netanim)的使用

进入ns-allinone-3.16文件夹

输入cdnetanim-3.103

进入netanim-3.103文件夹

看见那个绿色的了吧,就是运行那个绿色的来调出仿真界面

输入./NetAnim

可以看见下图

点击左上角的文件夹符号,可以打开导入文件(PS:

必须是.xml文件)

选择一个.xml文件即可导入。

(如果没有,请继续下节的生成.xml文件)

点击绿色的开始符号即可运行。

4.生成.xml文件

比如:

进入ns-3.16文件夹,可以看到有个scratch目录。

将你需要生成.xml的文件复制到scratch文件夹。

进入scratch

cdscratch/

sudoapt-getinstallvim

输入sudovimfirst.cc

即打开vim编辑器。

可以看到

这是first.cc的源代码

按下I可以进入编辑模式按下ESC可以退出编辑模式

在头文件包含处添加一句

#include“ns3/netanim-module.h”

然后去找到有一句Simulator:

:

Run();

在这句的前面添加一行代码

AnimationInterfaceanim(“first.xml”);

按下ESC,退出编辑模式

按下:

wq

可以将刚才的改动保存

输入cd..

返回ns-3.16文件夹

输入sudo./waf–runscratch/first

注意不要有后缀名

运行成功

输入ls

可以看到有个名字叫做first.xml的文件这个就是可以当作动画的文件。

再用上一节的仿真界面的使用来运行这个就行

如图:

成功的仿真了。

5..tr和.pcap文件的生成和解析

tr文件的生成:

需要在Simulator:

:

Run();这个的前面加上AsciiTraceHelperascii;csmaHelper.EnableAll(ascii.Create(“csma-1.tr”));

pcap文件的生成:

需要在Simulator:

:

Run();这个的前面加上csmaHelper.EnablePcapAll(“csma-1”,false);

如图:

之后按照上面的运行方法运行。

(csmaHelper是由CsmaHelper这个类(协议)实例化的对象).

如图运行完成:

之后ls看有没有自己命名的那些文件:

我的tr文件为test-csma-1.tr我的pcap文件为test-csma-1....pcap

输入vim自己的文件名即:

vimtest-csma-1.tr

如图:

分析AsciiTraces

在一个极其密集的文档中有很多信息,但是需要注意的第一件事是在这个文件中有很多分立的行。

除非你大大加宽你的窗口,否则是很难看清楚的。

每一行对应了一个trace事件。

本例中我们在查看每个点到点设备的传输队列的trace事件。

传输队列是任一个目的地为点到点信道的数据包的必经队列。

注意trace文件的每行以一个单独的字符开始(后面带有空格)。

这个字符具有如下含义:

·+:

Anenqueueoperationoccurredonthedevicequeue;

·-:

Adequeueoperationoccurredonthedevicequeue;

·d:

Apacketwasdropped,typicallybecausethequeuewasfull;

·r:

Apacketwasreceivedbythenetdevice.

·+:

设备队列中的入队操作;

·-:

设备队列中的出队操作;

·d:

数据包被丢弃,通常因为队列已满;

·r:

网络设备接收到数据包。

我们来更详细的看一下trace文件的第一行。

为了看得更清晰,我把这一行分成了不同的部分,并在左边标出序号:

00+

012

02/NodeList/0/DeviceList/0/$ns3:

:

PointToPointNetDevice/TxQueue/Enqueue

03ns3:

:

PppHeader(

04Point-to-PointProtocol:

IP(0x0021))

05ns3:

:

Ipv4Header(

06tos0x0ttl64id0protocol17offset0flags[none]

07length:

105210.1.1.1>10.1.1.2)

08ns3:

:

UdpHeader(

09length:

103249153>9)

10Payload(size=1024)

展开后的trace事件的第一行(序号00)代表操作。

+字符表示是一个传输队列的入队操作。

第二行(序号01)是单位为秒的仿真时间。

Trace的下一行(序号02)告诉我们trace发送端发起这个事件(以tracing命名空间表示)。

你可以认为tracing命名空间有点像一个文件系统命名空间。

命名空间的根为NodeList。

这个NodeList是NS-3核心代码管理的一个容器,此容器包含有一个脚本中创建的所有的节点。

正如一个文件系统在根下有目录,在NodeList下有节点数。

字符串/NodeList/0是指NodeList中第0个节点,我们通常认为是"node0".每个节点中有一个已经安装好的设备列表。

这个列表是在命名空间的下一个出现的。

可以看到trace事件来自节点中安装的第0个设备DeviceList/0。

下一个字符串,$ns3:

:

PointToPointNetDevice告诉我们第0个节点的设备列表的第0个位置的设备类型。

回忆序号00处的+操作表示设备的传输队列发生了入队操作,这个在"tracepath"TxQueue/Enqueue的最后部分反映出来了。

Trace中剩下的几行是很直观的。

序号03-04处表明数据包封装成点到点协议。

序号05-07处显示数据包IP版本,发送端IP地址10.1.1.1,接收端IP地址为10.1.1.2。

序号08-09出显示数据包的UDP头,最后序号10处表明数据包数据量为1024bytes。

在trace文件中的下一行显示了这个数据包在这个节点中从传输队列中被移除。

Trace文件的第三行显示了数据包正在被回显服务器所在的节点的网络设备接收。

trace如下。

00r

012.25732

02/NodeList/1/DeviceList/0/$ns3:

:

PointToPointNetDevice/MacRx

03ns3:

:

Ipv4Header(

04tos0x0ttl64id0protocol17offset0flags[none]

05length:

105210.1.1.1>10.1.1.2)

06ns3:

:

UdpHeader(

07length:

103249153>9)

08Payload(size=1024)

注意,trace操作现在是r并且仿真时间已经增加到2.25732秒。

如果你一直按照本教程来操作,你已经把网络设备的DataRate,和信道Delay设置成默认值。

在第2行中,Trace发送端命名空间条目已经改变,来显示这个事件是来自节点1(/NodeList/1),即数据包的接收trace端(/MacRx)。

通过查看文件中其他的traces,你可以很容易的跟踪数据包。

5.3.2PCAP格式Tracing

ns-3设备控制器也可以被用来创建.pcap格式的trace文件。

缩写pcap(通常为小写)表示packetcapture,事实上是包含有定义一个.pcap文件格式的API。

可以读取并且显示这种格式的最流行的程序是Wireshark(以前被称为Ethereal)。

然而,有很多其他的分析器也使用这个包格式。

我们鼓励读者了解其他的分析pcap追踪文件的工具。

在本教程中,我们用tcpdump来查看pcaptrace。

在scratch/myfirst.cc中我们刚增加的ASCII追踪代码后面插入这行代码。

注意我们刚使用的是字符串''myfirst"而不是"myfirst.pcap"。

这是因为这里传递的参数是个前缀,而不是完整的文件名。

在仿真过程中,helper将为任何一个点到点设备创建一个追踪文件。

文件名将包含预设前缀,节点名,设备名,和".pcap"后缀。

在我们的例子脚本中,我们最终将看到名为"myfirst-0-0.pcap"和"myfirst-1-0.pcap"。

这分别是为节点0设备0,和节点1设备0创建的pcaptrace文件。

用tcpdump读取结果

此处最简单的做法就是使用tcpdump来查看pcap文件,

tcpdump-nn-tt-rmyfirst-0-0.pcap

readingfrom,link-typePPP(PPP)

2.000000IP10.1.1.1.49153>10.1.1.2.9:

UDP,length1024

2.514648IP10.1.1.2.9>10.1.1.1.49153:

UDP,length1024

tcpdump-nn-tt-rmyfirst-1-0.pcap

readingfrom,link-typePPP(PPP)

2.257324IP10.1.1.1.49153>10.1.1.2.9:

UDP,length1024

2.257324IP10.1.1.2.9>10.1.1.1.49153:

UDP,length1024

在myfirst-0-0.pcap(客户端设备)文件中可以看到回显数据包在第二秒被发送。

如果查看第二个文件(myfirst-1-0.pcap)可以看到此包在2.257324秒被收到。

在第二个文件中可以看到在2.257324秒这个包被回应,最终,在客户端2.514648秒回应的包被收到。

5.3.2.2用Wireshark读取结果

如果你对Wireshark不熟悉,从可以下载到程序和文档。

Wireshark是一个可以用来显示trace文件的用户图形接口。

如果你安装了Wireshark,可以打开和查看每一个trace文件,就像这些trace是使用包嗅探工具在真正的网络上抓下来一样。

 

对于trace文件和pcap文件均可以自己编写gawk脚本来查看,编写方法自己XX。

 

以下为实例讲解:

打开first.cc文件(前面的标号是我自己的vim配置,只是方便阅读,并不是代码。

顶部的注释栏为GNU声明

1/*-*-Mode:

C++;c-:

"gnu";indent-tabs-mode:

nil;-*-*/

2/*

3*Thisprogramisfreesoftware;youcanredistributeitand/ormodify

4*itunderthetermsoftheGNUGeneralPublicLicenseversion2as

5*publishedbytheFreeSoftwareFoundation;

6*

7*Thisprogramisdistributedinthehopethatitwillbeuseful,

8*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof

9*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe

10*GNUGeneralPublicLicenseformoredetails.

11*

12*YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense

13*alongwiththisprogram;ifnot,writetotheFreeSoftware

14*Foundation,Inc.,59TemplePlace,Suite330,Boston,MA02111-1307USA

15*/

然后是头文件包含

16

17#include"ns3/core-module.h"

核心模型库

18#include"ns3/network-module.h"

网络模型库

19#include"ns3/internet-module.h"

因特网模型库

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

点到点网络模型

21#include"ns3/applications-module.h"

应用模型库

正式代码:

22

23usingnamespacens3;

使用ns3的命名空间

24

25NS_LOG_COMPONENT_DEFINE("FirstScriptExample");

启用日志,日志是方便在运行和运行成功后查看输出的信息的。

26

27int

28main(intargc,char*argv[])

29{

30LogComponentEnable("UdpEchoClientApplication",LOG_LEVEL_INFO);

开启客户机应用日志,记录客户机的使用情况

31LogComponentEnable("UdpEchoServerApplication",LOG_LEVEL_INFO);

开启服务器应用日志,记录服务器的使用情况

32

33NodeContainernodes;

实例化一个节点容器对象,里面还是空的。

34nodes.Create

(2);

为容器创建两个新的节点。

35

36PointToPointHelperpointToPoint;

实例化一个点到点协议的对象。

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

设置点到点协议的数据传输速率。

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

设置点到点协议的网络延迟。

39

40NetDeviceContainerdevices;

实例化一个网卡容器。

41devices=pointToPoint.Install(nodes);

为节点安装带有点到点协议的网卡。

42

43InternetStackHelperstack;

实例化一个协议栈。

44stack.Install(nodes);

为每个节点安装一个协议栈用于网卡存储网络协议。

45

46Ipv4AddressHelperaddress;

实例化一个IP地址的对象。

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

设置IP地址和子网掩码。

48

49Ipv4InterfaceContainerinterfaces=address.Assign(devices);

为网卡注册IP地址。

50

以下为应用层配置

51UdpEchoServerHelperechoServer(9);

实例化一个服务器应用,监听端口9。

52

53ApplicationContainerserverApps=echoServer.Install(nodes.Get

(1));

实例化一个服务器对象,并且将第1号节点设置为服务器。

54serverApps.Start(Seconds(1.0));

服务器开始时间为1.0s

55serverApps.Stop(Seconds(10.0));

服务器停止时间为10.0s

56

57UdpEchoClientHelperechoClient(interfaces.GetAddress

(1),9);

实例化一个客户机应用,发送给第1号节点的IP,发送给9号端口。

58echoClient.SetAttribute("MaxPackets",UintegerValue

(1));

设置数据包的个数

59echoClient.SetAttribute("Interval",TimeValue(Seconds(1.0)));

设置包的间隔时间

60echoClient.SetAttribute("PacketSize",UintegerValue(1024));

设置数据包的大小

61

62ApplicationContainerclientApps=echoClient.Install(nodes.Get(0));

实例化一个客户机,并把第0号节点设置为客户机。

63clientApps.Start(Seconds(2.0));

客户机开始时间为2.0s

64clientApps.Stop(Seconds(10.0));

客户机停止时间为10.0s

65

66Simulator:

:

Run();

开始运行

67Simulator:

:

Destroy();

运行结束后销毁内存

68return0;

返回成功值

69}

对于初学者,首先要看懂examples/tutorial/里面的几个.cc文件,之后再去/src里面找到自己喜欢的致力于学习。

不要操之过急。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1