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-qmakesudoapt-getinstallqt4-dev-tools安装完成后:进入ns-allinone-3.16目录sudo./build.py之后进入ns-allinone-3.16/ns-3.16sudo./waf-check返回目录ns-allinone-3.16进入目录netanim-3.103sudomakecleansudoqmakeNetAnim.prosudomake之后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文件夹。进入scratchcdscratch/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.CreateFileStream(“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+01202/NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue03ns3::PppHeader(04Point-to-PointProtocol:IP(0x0021))05ns3::Ipv4Header(06tos0x0ttl64id0protocol17offset0flags[none]07length:105210.1.1.110.1.1.2)08ns3::UdpHeader(09length:1032491539)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处的+操作表示设备的传输队列发生了入队操作,这个在tracepathTxQueue/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如下。00r012.2573202/NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx03ns3::Ipv4Header(04tos0x0ttl64id0protocol17offset0flags[none]05length:105210.1.1.110.1.1.2)06ns3::UdpHeader(07length:1032491539)08Payload(size=1024)注意,trace操作现在是r并且仿真时间已经增加到2.25732秒。如果你一直按照本教程来操作,你已经把网络设备的DataRate,和信道Delay设置成默认值。在第2行中,Trace发送端命名空间条目已经改变,来显示这个事件是来自节点1(/NodeList/1),即数据包的接收trace端(/MacRx)。通过查看文件中其他的traces,你可以很容易的跟踪数据包。5.3.2PCAP格式Tracingns-3设备控制器也可以被用来创建.pcap格式的trace文件。缩写pcap(通常为小写)表示packetcapture,事实上是包含有定义一个.pcap文件格式的API。可以读取并且显示这种格式的最流行的程序是Wireshark(以前被称为Ethereal)。然而,有很多其他的分析器也使用这个包格式。我们鼓励读者了解其他的分析pcap追踪文件的工具。在本教程中,我们用tcpdump来查看pcaptrace。在scratch/myfirst.cc中我们刚增加的ASCII追踪代码后面插入这行代码。注意我们刚使用的是字符串''myfirst而不是myfirst.pcap。这是因为这里传递的参数是个前缀,而不是完整的文件名。在仿真过程中,he