最近需要在一个传统协议上实现一些想法,所以使用了ns3。那么在此进行一些记录
首先,当然是推荐一些书籍和手册,ns3的书籍并不多,这几个都是很有用的。不要急,慢慢来,一次看个100来页。
1.ns-3 tutorial 它记录了ns3中最基本的知识点,比如node,application,net device等
https://www.nsnam.org/docs/tutorial/ns-3-tutorial.pdf
(英文版,头大吧,但是后面会给你提供解决办法滴,放心哥们儿)
2.Ns-3 document 它记录了ns3代码的整体结构,和各个模块所用的函数极其注释
https://www.nsnam.org/docs/release/3.31/doxygen/index.html
(看见这一窝蜂的函数头大吧,还都是英文,雪上加霜吧,放心,这也给你解决)
3.书籍《开源网络模拟器ns3架构》,如题,写了ns3的架构,尤其对追踪网络数据,有了比较详细的描述。(那么这本书怎么找呢,请看我之前的一篇文章“如何提高编程水平”,当然文章最后,我会把提到的资料都打包成百度网盘贴在最后,希望不要被和谐)
4.书籍《ns3网络模拟器基础与应用(马春光等)》,这本书其实就像是对ns-3 tutorial的中文解释,或许你可以考虑先看这本书,再看ns-3 tutorial
5.最后一个,其实我觉得挺有用的,就是google group。但是呢,就是一些特殊原因,我们似乎没法访问,但是,如果可以。你在google group里搜索“ns-3-users”这个讨论组,或许会有更多的解决办法
Ok,先解决一个大问题,就是英文版,怎么解决
那么,你需要有一个叫做Microsoft edge的浏览器
点击扩展-edge外接程序-搜索”划词翻译”-选择图片中第四个获取
再选择扩展,可以看到划词翻译已经在里面了,点击划词翻译的内置PDF阅读器,将英文的pdf拉到里面,即可进行逐段翻译。谷歌翻译和deepl结合使用。
此时,你再去查看英文的网页,用鼠标选中一段落后,也会出现划词翻译的图标,点击即可。
那么如果你使用的是谷歌浏览器,谷歌商店走一波。
对于ns3安装这个问题,也是一个大大问题,当然这也涉及到虚拟机呀,linux的安装呀等等
我使用的虚拟机是 virtualbox
使用的ubuntu版本有16.04,18.04,14.04,都可以成功安装ns3 (为什么要装那么多Ubuntu版本呢,因为在解决ospf问题,是的,ns3没有ospf模块,这个就有的说了,后面会单独进行解释)
安装的ns3版本有ns3.31,ns3.26,ns3.25 (那么你只需要装最新的就可以了,那我为啥要装那么多呢,因为我使用3.31想要查看一个队列管理算法是否起作用,结果发现没有丢包,omyga,他想让我嗝屁吗,那么为啥呢,这是因为ns3.26开始它试图避免数据包因队列已满而被网络设备丢弃。在设备队列满之前,它被停止,数据包在qdisc队列(TC层)中积累,所以你看不到丢包。所以你想验证队列管理算法,哪怕droptail,请使用ns3.25)
当然了,这里多说一嘴,如果你想形式化的演示队列管理算法的效果,是不是想这样,可以显示队列长度,和包的情况。
你说,“哎呀妈呀,小老妹儿,你可太懂我了,就这样,哥,高低给你整瓶五粮液”
可是它是用ns2做的,ns3吧
它只能做这样
那么你需要 1.安装虚拟机virtualbox 2.安装ubuntu 3.更换源或者更改虚拟机-设备-网络-改为NAT 4.安装增强功能 5.设置共享文件夹 6.安装必要的源 7.安装ns3
有几个教程是非常好的,链接如下
最后一个提醒,千万别尝试卸载python3,否则,看见黄河水没,我的泪
那么到现在,你已经安装成功了,GOD JOB!好样的啊,兄弟
你点开了ns3.25的文件夹,看到了这样的一个界面
Bindings这个文件夹,就是一些绑定,不用管他
Doc 夹如其名,包含一些注释,这个其实你可以看看
Examples 是一些例子,就是你以后模拟需要参考的例子,那么你点进去一看,欸又是好多个文件夹,他其实是不同模块的例子的分类。我们点击routing
可以看到有很多个文件,首先我们得把其中要运行的文件拷贝到scratch里(为啥要拷贝呢,因为你总得保留一个干净的例子吧)
之后在ns3.25所在的文件夹中,开一个终端,输入 sudo ./waf –run scratch/dynamic-global-routing
(注意哈,没有.cc)
有的例子,开头提到的书里都有介绍。
那么如果只是想用ns3做模拟,基本上吧,不开发其他东西的情况下,上述已经够用了。
如果想要开发点自己的东西,就需要考虑
src文件夹,那么这个文件夹呢,有很多个模块,不同模块肯定控制不同的东西
那我们看Internet这个模块
Bindings 和doc,examples也不用说了。
Model主要是实现的核心代码,helper则是model代码和examples代码交互的一个桥梁。
那么具体的东西,还是需要你看代码。
那么代码就比较多,比较杂,需要先缕一下,那你就需要使用一下ns3-document,注意切换这个网页的版本,切换到你安装的版本,其实差别都不大
可以看到页面的左侧,有model的一列,然后点进去,可以看到模块的摆列和src差不多,每一个函数都有对应的注释,包括里面参数的含义,可以和src的代码对应来看。
关于ospf这个模块。其实有人开发过,也上传GitHub了,我也已经把他移植到ns3了,但是他的实现很不全。完全是按照ns3的globalrouting算法进行改的
适合的版本为ns3.26,那个地址突然找不到了,一会儿全都在最后的百度网盘的文件夹里,名字叫(ns3-ospf-master),安装新模块的方法,网上有。
那么ns3官方对于ospf的解决办法是,采用dce-quagga,就是把一个开源的软件quagga集成到ns3中,有哪个大佬找到quagga和ns3模块是怎么交互的吗。。俺没找到。除此之外,dce-quagga没有实现给ospf赋cost值的函数,所以得在helper里实现一下
还有一个办法就是直接在ubuntu里安装quagga
这样就可以实现ospf算法了,其实就是将每一个虚拟机变成一个路由器
这个教程是关于如何配置rip和ospf
那么我结合两者配置的
下面是我的步骤
1.先对ens03和ens08的ip设置为Manuel,然后配置它的ip地址
2.ifconfig(root模式)查看配置是否成功
3.sudo zebra -d
4.telnet localhost 2601
5.enable
6.configure terminal
7.interface enp0s3
ip address 10.0.4.4/24(刚给ens03配置的ip地址)
quit
interface enp0s8
ip address 10.0.1.4/24(刚给ens08配置的ip地址)
quit
write
quit
quit
8.sudo cp /usr/local/etc/ospfd.conf.sample /usr/local/etc/ospfd.conf
9.cd /usr/local/lib
sudo cp libospf.* /lib
sudo rm libospf.*
10.sudo ospfd -d -u root -g root
11.telnet localhost 2604
12.enable
13.configure terminal
14.router ospf
network 10.0.4.0/24 /
network 10.0.1.0/24 area 2
hostname routerA_ospf
ospf router-id 192.168.1.100
debug ospf event
log file /var/log/ospfd.log
end
write
quit
15.show ip ospf route
16.sudo tail -f /var/log/ospfd.log
show running-config
记住如果要让他们通信,需要让router运行sudo tail -f /var/log/ospfd.log
否则clientA ping 不通clientB
链接:https://pan.b删http://aidu.com/s掉/1Tj汉tEIEJbLR字5Nm_jgMPG0EQ
提取码:hvog
(把汉字删掉哈,不然会和谐)
都是一个文件哈,咱多来几手准备,狡兔好几窟
最后一句话:茍富贵,勿相忘!!
上一篇
下一篇