要求
利用网络仿真工具NS3实现一种改进的安全路由协议(自主选择),要求:
- 设置仿真空间1*1 KM2
- 随机生成100个对等节点(趋向于均匀分布)
- 通信协议任选(如使用Zigbee 协议框架)
- 最大传输速率200kb/s,最大通信距离75m,源节点与目标节点间距1KM以上。
- (选1)该路由协议可抗冲突,考虑遮挡模型(可穿透与不可穿透)、丢包、中间辅助节点中途损坏,可考虑多路径(至少考虑一种环境,此部分10分)
- (选1)计算总丢包率(需给出丢包率计算公式,提示每个点实际收包数/理论收包数)
- 数据量1MB,协作传输,并尽可能的提高传输效率
- (选2)结合上题安全路由技术,设计无线传感器网络数据安全聚合协议,并用NS3进行模拟(应用背景自拟)
NS-3 example-tutorial
NS-3 安装
先决条件 Prerequisites Windows
1. 获取VMware服务器软件 Get the VMware server software
-
A 您可以在各种版本说明或文档中阅读您需要的各种Microsoft服务器。事实并非如此。您可以在XP上运行VMware server;
-
C 选择立即下载按钮(照常下载);
-
D 以通常的方式安装软件;
-
E 忽略有关要求Microsoft IIS继续的警告。
2. 请求序列号 Request a Serial Number
-
B填写页面并选择“提交”;
-
C您将被重定向到带有新序列号的页面;
-
D复制序列号;
-
E运行VMware服务器;
-
F选择菜单项帮助->输入序列号。。。
G粘贴新的序列号。
3. 安装虚拟机 Install a Virtual
-
A 退出VMware服务器。
-
B 我们更喜欢UbuntuJeos(刚好够用的操作系统)。您可以通过转到从VMware“虚拟设备市场”下载代码http://www.vmware.com/appliances/directory/1136 并从设备名称右侧的“下载”框中选择“下载此设备”链接(带有VMware驱动程序的Ubuntu 7.10 JeOS v1.031(70MB));
-
C 下载设备并解压缩文件。您应该有一个名为“ub710jeos”的目录。将此目录复制到“c:\Virtual Machine”(VMware)目录。
-
D 运行VMware服务器。如果您收到关于CD-ROM中没有磁盘的投诉,请继续;
-
E 选择“本地主机”单选按钮并按“确定”;
-
F 选择文件->打开菜单选项,浏览“ub710jeos”目录,打开“ub710jeos.vmx”文件;
4. 启动新的虚拟机 Start the new Virtual Machine
-
A 在VMware服务器控制台上选择“启动此虚拟机”命令;
-
B 您将看到一个询问新UUID的对话框。选择“创建”单选按钮并按“确定”;
-
C UbuntuJEOS将在“控制台窗口”中启动。如果你想在JeOS虚拟机中键入内容,你必须在控制台窗口中单击鼠标。如果您想退出Windows,请按+,您将弹出VM;
-
D 以用户身份登录:root,密码root;
-
E 如果您连接到真实世界并且希望系统保持完整,请更改密码(passwd)。
-
F Ping www.google.com以测试网络连接。
5. 更新软件发行版 Freshen the Software Distribution
sudo apt-get update
sudo apt-get install
---
*安装 open-vm-tools
apt-get install open-vm-tools-desktop fuse
---
sudo apt-get install pkg-config libxml2 libxml2-dev
sudo apt-get install gcc g++ make automake autoconf binutils
sudo apt-get install openssh-server openssh-client openssl libssl-dev
sudo apt-get install python-dev mercurial
sudo apt-get install tcpdump gdb emacs
exit
6. 以用户身份登录(设备预先配置了一个用户) Log in as User (Appliance comes pre-configured with one user)
-
A.以用户身份登录:用户,密码用户
-
B如果您连接到真实世界并且希望系统保持完整,请更改密码(passwd)
7.获取并测试ns-3-dev Get and Test ns-3-dev
mkdir repos
cd repos
hg clone http://code.nsnam.org/ns-3-dev
cd ns-3-dev
./waf configure -d debug
./waf
./waf --regression
正如一位老数学教授曾经说过的,“我感到快乐”!
现在是休息的时候了。你有一个配置好的UbuntuJeos虚拟机,你已经在上面构建并测试了ns-3。现在可能是将此VM复制到安全的地方作为基础计算机的好时机。如果你想克隆你的机器,你可以使用这个拷贝,或者如果你设法楔入虚拟机,你可以使用拷贝作为检查点,恢复一个工作拷贝,而不必经历我们刚刚经历的所有痛苦。
8. 检查虚拟机 Checkpoint the VM
-
A 注销虚拟机(退出);
-
B 按下VMware服务器控制台上的红色矩形(停止)按钮;
-
C 打开我的计算机/虚拟机
-
D 将“ub710jeos”复制到“ub710jeos检查点”
现在是开始创建测试网络的时候了,这就是我们开始这个过程的原因。我们将使用刚刚创建的检查点VM,并将其复制开始。
9.使用专用网络创建新VM Create new VM with a Private Network
-
A 将“c:\Virtual Machines\ub710jeos checkpoint”复制到“Virtual Machines”目录中的另一个目录,并将其命名为“ns-3-test-1”
-
B 选择文件->打开菜单选项,浏览“ns-3-test-1”目录,打开“ub710jeos.vmx”文件;
-
C 在VMware服务器控制台上选择“编辑虚拟机设置”命令;
-
D 点击“选项”选项卡;
-
E 在“虚拟机名称”文本框中输入“ns-3-test-1”;
-
F 单击“硬件”选项卡;
-
G 点击“添加”按钮。您将启动“添加硬件向导”;
-
H 点击“下一步”;
-
I 单击“以太网适配器”,然后单击“下一步”;
-
J 单击“仅主机:与主机共享的专用网络”单选按钮,然后单击“下一步”;
-
K 点击“确定”;
-
L 在VMware服务器控制台上选择“启动此虚拟机”命令;
-
M 您将看到一个询问新UUID的对话框。选择“创建”单选按钮并按“确定”;
-
N UbuntuJeos将在“控制台窗口”中启动
-
O 以root用户身份登录(您更改了密码,对吗?)
-
P 编辑(vi)“/etc/network/interfaces”,并在主网络接口的类似增量之前添加以下行:
# The private network interface
auto eth1
iface eth1 inet dhcp
-
Q 编辑(vi)/etc/hosts并将“ub710jeos”的实例替换为“ns-3-test-1”;
-
R 编辑(vi)/etc/hostname并将“ub710jeos”替换为“ns-3-test-1”;
-
S 通过执行“主机名ns-3-test-1”更改主机hame;
-
T 注销虚拟机;
-
U 按下VMware服务器控制台上的红方块(停止)按钮以停止VM。
现在您有一个虚拟机,上面有一个专用网络。您可以根据需要重复步骤9多次,重命名虚拟机ns-3-test-2、ns-3-test-3等。继续制作ns-3-test-2虚拟机,这样我们就可以做一些有趣的事情。
10. 启动虚拟测试网络 Start Your Virtual Test Network
-
A 选择VMware服务器控制台上的“ns-3-test-1”选项卡;
-
B 在VMware服务器控制台上选择“启动此虚拟机”命令;
-
C UbuntuJeos将在“控制台窗口”中启动;
-
D 当出现“ns-3-test-1登录”提示时,您应该会看到它;
-
E 选择VMware服务器控制台上的“ns-3-test-2”选项卡;
-
F 在VMware服务器控制台上选择“启动此虚拟机”命令;
-
G UbuntuJeos将在“控制台窗口”中启动
-
H 当出现“ns-3-test-2登录”提示时,您应该会看到它;
现在,您可以通过选择VMware服务器控制台上的相应选项卡在运行的虚拟机之间切换。在控制台窗口中单击以输入VM,然后按+退出。选择正在运行的VM的另一个选项卡,并通过在控制台窗口中单击来输入该VM。
11. 更新/etc/hosts并检查连接 Update /etc/hosts and Check Connectivity
-
A 以root用户身份登录“ns-3-test-1”;
-
B 运行ifconfig-a并记录eth1的IP地址;
-
C 以root用户身份登录到“ns-3-test-2”;
-
D 运行ifconfig-a并记录eth1的IP地址;
-
E 编辑“ns-3-test-1”上的(vi)“/etc/hosts”,并为“ns-3-test-2”添加适当的行。在我的机器上是“192.168.136.129 ns-3-test-2”;
-
F 编辑“ns-3-test-2”上的(vi)“/etc/hosts”,并为“ns-3-test-1”添加适当的行。在我的机器上是“192.168.136.128 ns-3-test-1”;
-
G 在ns-3-test-1上运行“ping ns-3-test-2”进行验证;
-
H 在ns-3-test-2上运行“ping ns-3-test-1”进行验证;
此时,您可能需要设置用户、shell、别名、其他工具(emacs、ddd等)或您需要的任何其他工具。例如,我在所有其他与ns-3相关的机器上设置了一个新用户以匹配我的用户名,将shell设置为bash,复制我的别名、ssh密钥等,yadda,yadda。
警告
-
A 小心不要在这些虚拟机中不小心使用磁盘空间。我们有意将备份磁盘文件的大小限制为1 GB,这样就不会占用您所有的Windows资源。这确实意味着您将被限制为一个或两个完整的ns-3版本,其中包含回归跟踪,具体取决于您安装的其他东西。如果磁盘用完,可以使用Windows“命令提示符”中为您安装的VMware工具来增加磁盘容量
-
i 打开“命令提示符”;
-
ii 更改为“C:\Program Files\VMWare\VMWare Server;
-
iii 那里有一个名为“vmware vdiskmanager.exe”的可执行文件;
-
iv 找到要增加的磁盘映像文件的完整路径;
-
v 使用以下方法增加磁盘大小:
vmware vdiskmanager-x 16GB“C:\Virtual Machines\ns-3-test-1\ub710jeos.vmdk”
祝贺您,您现在已准备好ns-3仿真。
安装 Installation with Bake
Bake是一种新工具,用于在您自己的环境中安装、构建和查找ns-3缺少的需求。
要使用Bake,您的机器中至少需要有Python(2.7或更高版本)和Git(请参阅上面的先决条件部分,了解如何安装这些)。
- 首先,您需要使用Git下载Bake,转到要安装Bake的地方并调用
---
* 需要Git
sudo apt install git
---
git clone https://gitlab.com/nsnam/bake
- 建议将bake添加到路径中。
export BAKE_HOME=`pwd`/bake
export PATH=$PATH:$BAKE_HOME
export PYTHONPATH=$PYTHONPATH:$BAKE_HOME
之后,您可以使用Bake查找丢失的软件包,下载构建并安装ns-3及其模块。
-
要查找系统中缺少的内容以及安装ns-3可能需要的内容,可以调用烘焙检查:
bake.py check
你应该看到这样的东西:
> Python - OK > GNU C++ compiler - OK > Mercurial - OK > CVS - OK > GIT - OK > Bazaar - OK > Tar tool - OK > Unzip tool - OK > Unrar tool - OK > 7z data compression utility - OK > XZ data compression utility - OK > Make - OK > cMake - OK > patch tool - OK > autoreconf tool - OK > Path searched for tools: /usr/lib64/qt-.3/bin/usr/lib64/ccache /usr/local/bin/usr/bin/bin/usr/local/sbin/usr/sbin/sbin/user/dcamara/home/scripts/user/dcamara/home/INRIA/Programs/bin/user/dcamara/home/INRIA/repos/llvm/build/Debug+Asserts/bin
-
在下载和构建ns-3之前,您需要配置bake,以告知它您希望添加到ns-3的模块,例如标准发行版。
bake.py configure -e ns-3.29
-
然后,要查看它添加的模块以及此配置的特定系统要求,可以调用bake show:
bake.py show
博主执行后的情况
--System Dependencies--
> g++ - OK
> gi-cairo - OK
> gir-bindings - OK
> pygobject - OK
> pygraphviz - Missing
>> The pygraphviz is not installed, try to install it.
>> Try: "sudo apt-get install python3-pygraphviz", if you have sudo rights.
> python-dev - OK
> python3-dev - Missing
>> The python3-dev is not installed, try to install it.
>> Try: "sudo apt-get install python3-dev", if you have sudo rights.
> qt - Missing
>> Didn't find: Qt (version 4 or 5); install it from packages, or download from https://info.qt.io/download-qt-for-application-development
>> Try: "sudo apt-get install qt5-dev-tools libqt5-dev", if you have sudo rights.
> setuptools - Missing
>> The python-setuptools package is not installed, try to install it.
博主补入代码
sudo apt-get install python3-pygraphviz
sudo apt-get install python3-dev
sudo apt-get install qt5-dev-tools libqt5-dev
sudo apt-get install python-setuptools
其中qt5-dev-tools libqt5-dev再次遇到了障碍
gt5
获取源代码 Getting the source code
- 首先,将cd放入您希望“qt5”目录所在的目录中。然后,克隆顶级Qt 5 git存储库:
或者(如果您位于防火墙后面,并且希望使用https协议):git clone git://code.qt.io/qt/qt5.git
这将创建一个跟踪“origin/dev”的本地分支。如果您计划向Qt提交更改,请留在该分支。否则,请查看目标分支(请参见分支指南):git clone https://code.qt.io/qt/qt5.git
cd qt5
git checkout 5.12
使用init-repository脚本初始化存储库,该脚本克隆 Qt 5 的各种子模块。
perl init-repository
配置和构建 Configuring and Building
Qt5构建系统应该对任何“外部干扰”具有相当的弹性——不管路径中是否有其他Qt版本,QTDIR都应该被完全忽略。但是,请确保没有qmake特定的环境变量,如QMAKEPATH或QMAKEFEATURES集,并且qmake-query输出不引用任何其他Qt版本($HOME/.config/Qt/qmake.conf应为空)。
有关更多配置选项,请参阅Qt配置选项。
注意:为了将来构建qdoc和Qt文档,您应该设置LLVM_INSTALL_DIR环境变量,该变量指向安装LLVM的目录(它应该是顶级目录,配置脚本使用此目录的相对路径跟踪)。例如,在独立目录(/usr/LLVM)中安装了LLVM的Linux中,在bash提示符下:
export LLVM_INSTALL_DIR=/usr/llvm
一个名为configure(或configure.bat for Windows)的构建脚本将位于您将源代码克隆到的目录中(~/qt5,如果您遵循上面的说明)。您将希望从不同的并行级目录调用该脚本,因为(除非您使用的是Qt自动测试环境),您不希望在保存源代码的目录中构建Qt。相反,您应该使用“影子构建”,这意味着您不应该构建到源目录中。
对于Linux/macOS,若要在~/qt5 build(任意名称)中安装,请假定您在~:
mkdir qt5-build
cd qt5-build
../qt5/configure -developer-build -opensource -nomake examples -nomake tests
-developer构建选项导致导出更多的符号,以允许比常规Qt构建中更多的类和函数进行单元测试。它还默认为“调试”版本,并在当前目录中安装二进制文件,避免了“makeinstall”的需要-“开源”将许可证设置为GPL/LGPL。-nomake examples和-nomake tests参数确保默认情况下不编译示例和测试。您可以随时决定稍后手动编译它们。
一些提示 Some Hints
您可以添加-确认许可证,以消除您是否同意该许可证的问题。
在Windows上,如果sh.exe在您的路径中(例如由于git或msys安装),您可能无法生成。此类错误由qt5 src\qtbase\bin\qmake.exe指示:未找到类似命令。在这种情况下,请确保sh.exe不在您的路径中。如果已配置安装,则必须重新配置。
如果您计划使用git进行贡献,建议在单独的目录中配置和构建源代码,以便git看不到二进制文件。这可以通过导航到所需的构建目录并在该目录中调用configure/make来完成。(但在Qt自动测试环境中不鼓励阴影生成。)
注意:如果执行卷影生成,请按照上面的说明创建与源目录并行的生成目录。不要使生成目录成为源目录树的子目录。如果生成目录与源目录不完全平行,则生成可能会以奇怪的方式失败。
现在,通过运行以下命令,从生成目录中触发生成:
make -j$(nproc)
安装(Linux/OS X) Installing (Linux / OS X)
注意:只有在未使用配置选项-developer build或-prefix“%PWD%/qtbase”时,才需要安装。否则,您可以从build目录使用Qt。
要安装,请运行
make install
打扫 Cleaning
要获得真正干净的树,请使用:
git submodule foreach --recursive "git clean -dfx" && git clean -dfx
因为,从回购协议的顶层来看,make confclean不再起作用。
获取更新 Getting updates
要将qt5.git repo以及子模块更新到已知有效的修订列表,请运行
git pull
perl init-repository -f
此外,您应该向init存储库传递与获取源代码相同的参数。
与“普通”git子模块更新不同,这确保了对模块结构的任何更改也会自动拉取。
如果您打算做夜间构建,请考虑使用QTr5Org/Bin的脚本Qt5x工具。它提供了更新存储库、清理和构建的选项。例如,qt5_工具-u-c-b可用于清理、更新和构建。qt5_工具-p-c-b将用于将所有模块拉至其主分支的头部。
根据自上次更新以来源中发生的更改,您可能需要再次运行配置。安全的做法是始终运行config.status-更新后重新检查生成目录中的所有内容。
提示1:子模块更新在子模块中进行签出,可能会隐藏您所做的任何本地提交。如果后一种情况发生在您身上(而且您还没有使用过分支),git reflog就是您的朋友。
提示2:在Windows上创建更新脚本时,请注意,如果某些进程锁定文件或文件夹,git clean通常会失败。
在子模块中使用最新的分支 Using latest branches in the submodules
默认情况下,签出将不包含每个单独子模块存储库的最新stable/dev分支,而是已知可以一起工作的版本的组合。如果你想得到绝对最新的东西,你可以在每个模块的基础上这样做,例如。
cd qtdeclarative
git fetch
git checkout -b 5.9 origin/5.9
或者告诉init repository签出所有存储库中的分支:
perl init-repository -f --branch
当您在多个模块中进行更改或查看更改时,开发Qt的一些unixshell技巧可能很有用。
- 要下载模块,可以调用bake deploy构建和安装
bake.py deploy
这将下载所选模块及其所有依赖项,并使用所有这些独立模块构建ns-3。您也可以一步一步地执行此安装,即在不同的步骤中调用下载和生成。
bake.py download
bake.py build