[NS3]个人使用小结&初学者记录

来源:互联网 发布:电脑背包 知乎 编辑:程序博客网 时间:2024/05/17 02:59

    本文是我使用ns3的一点小结,以及一些基本操作,可以供初学者借鉴

1.ns3的运行

首先进入ns-allinone-3.17文件夹中的ns-3.17文件夹,然后把需要使用的实例third.cc复制到scratch文件夹,在运行实例

输入cd ns-allinone-3.17                                   //进入ns3文件夹cd ns-3.17                                                     //进入运行目录cp examples/tutorial/third.cc scratch/third.cc   //复制我们要用的实例third.cc进去scratch文件夹(莫忘了格式后缀名)./waf --run scratch/third                                 //运行实例(运行是不需要后缀名,否者会出错)

    

     可以看见实例的运行结果,此结果表示的意思是:第一行:客户机在第2s的时候向IP为10.1.2.4的节点的第九号端口(port)发送了1024字节大小的数据包第二行:10.1.2.4的这个服务器接在2.00596s收到了来自10.1.3.3的端口为49153的1024字节大小的数据包第三行:10.1.2.4服务器在2.00369s向10.1.3.3的49153号端口发送了1024字节的一个数据包第四行:2.00737s客户机(10.1.3.3)接收到了来自ip为10.1.2.4(服务器)的9号端口的一个1024字节的数据包

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

    首先是安装。

1.先安装QT4

apt-get install qt4-dev-tools

注:安装的时候出错了

显示:推荐: libqt4-dev 但是它将不会被安装 推荐: qt4-designer 但是它将不会被安装

网上搜了很多只有下面的指令有用

sudo apt-get autoremove libqtcore4

然后重新安装

不知道原因,按照这个指令的话,感觉可能是原先的QT内核版本问题

2.安装netanim

cd netanimmake cleanqmake NetAnim.pro make
可以进入netanim-3.103文件夹看到Netanim确实已经安装好了(绿色的显示)


3.运行Netanim

要运行Netanim,首先需要有xml文件,所以我们需要生成相应的xml文件。

3.1生成xml文件

进去scratch文件夹修改实例文件third.cc

cd scratchvim third.cc   //当然你也可以在ubuntu中直接打开修改保存。



打开vim编译器后,你可以看见third.cc源代码。

按下“I”可以进入编辑模式修改(按ESC退出编译模式)

在源代码中添加头文件:

#include “ns3/netanim-module.h”



然后找到Simulator::Run();
在这句的前面添加一行生成xml文件的代码

AnimationInterface anim(“third.xml”);

按下ESC,退出编辑模式
按下:wq

可以将刚才的改动保存。


3.2运行

然后退出scratch文件夹到ns-3.17运行实例来产生xml文件

./waf –run scratch/third



输入代码:ls

可以看见生成的third.xml文件(也可以看见一些.pcap格式的文件,这个后面说)



接着就是先退出ns-3.17文件夹,进去netanim-3.103文件夹来运行Netanim

cd ..cd netanim-3.103./Netanim


点击左上角的文件夹符号,可以然后打开生成的xml文件



选择一个.xml文件即可导入。
点击绿色的开始符号即可运行(下图是我截的实例某一时刻图形)。



3.pacp文件的简单解析

1.分析Ascii Traces

在一个极其密集的文档中有很多信息,但是需要注意的第一件事是在这个文件中有很多分立的行。除非你大大加宽你的窗口,否则是很难看清楚的。
每一行对应了一个trace事件。本例中我们在查看每个点到点设备的传输队列的trace事件。传输队列是任一个目的地为点到点信道的数据包的必经队列。
注意
trace文件的每行以一个单独的字符开始(后面带有空格)。这个字符具有如下含义:

+:设备队列中的入队操作;

-:设备队列中的出队操作;

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

r:网络设备接收到数据包。

我们来更详细的看一下trace文件的第一行。为了看得更清晰,我把这一行分成了不同的部分,并在左边标出序号:

00 +

01 2

02 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue

03 ns3::PppHeader (

04 Point-to-Point Protocol: IP (0x0021))

05 ns3::Ipv4Header (

06 tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]

07 length: 1052 10.1.1.1 > 10.1.1.2)

08 ns3::UdpHeader (

09 length: 1032 49153 > 9)

10 Payload (size=1024) 展开后的trace事件的第一行(序号00)代表操作。+字符表示是一个传输队列的入队操作。第二行(序号01)是单位为秒的仿真时间。你或许回忆起我们让UdpEchoClientApplication在两秒开始发送数据包。我们确定这个正在发生。
Trace的下一行(序号02)告诉我们trace发送端发起这个事件(以tracing命名空间表示)。你可以认为tracing命名空间有点像一个文件系统命名空间。命名空间的根为NodeList。这个NodeList是NS-3核心代码管理的一个容器,此容器包含有一个脚本中创建的所有的节点。。正如一个文件系统在根下有目录,在NodeList下有节点数。字符串/NodeList/0是指NodeList中第0个节点,我们通常认为是"node 0".每个节点中有一个已经安装好的设备列表。这个列表是在命名
空间的下一个出现的。可以看到
trace事件来自节点中安装的第0个设备DeviceList/0。
下一个字符串,$ns3::PointToPointNetDevice告诉我们第0个节点的设备列表的第0个位置的设备类型。回忆序号00处的+操作表示设备的传输队列发生了入队操作,这个在"trace path"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如下。

00 r

01 2.25732

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

03 ns3::Ipv4Header (

04 tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]

05 length: 1052 10.1.1.1 > 10.1.1.2)

06 ns3::UdpHeader (

07 length: 1032 49153 > 9)

08 Payload (size=1024)

注意,trace操作现在是r并且仿真时间已经增加到2.25732秒。如果你一直按照本教程来操作,你已经把网络设备的DataRate,和信道Delay设置成默认值。那么对于这个值,你应该觉得眼熟,因为上一章中已经见过这个值。
在第2行中,Trace发送端命名空间条目已经改变,来显示这个事件是来自节点1(/NodeList/1),即数据包的接收trace端(/MacRx)。通过查看文件中其他的traces,你可以很容易的跟踪数据包。

2.读取pcap文件

2.1 tcpdump读取结果

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



2.2 使用wireshaer

当然你可以可以使用wireshaer来查看(此处打开的是third-1-1.pcap)


1 0