要求

利用网络仿真工具NS3实现一种改进的安全路由协议(自主选择),要求:

  • 设置仿真空间1*1 KM2
  • 随机生成100个对等节点(趋向于均匀分布)
  • 通信协议任选(如使用Zigbee 协议框架)
  • 最大传输速率200kb/s,最大通信距离75m,源节点与目标节点间距1KM以上。
  • (选1)该路由协议可抗冲突,考虑遮挡模型(可穿透与不可穿透)、丢包、中间辅助节点中途损坏,可考虑多路径(至少考虑一种环境,此部分10分)
  • (选1)计算总丢包率(需给出丢包率计算公式,提示每个点实际收包数/理论收包数)
  • 数据量1MB,协作传输,并尽可能的提高传输效率
  • (选2)结合上题安全路由技术,设计无线传感器网络数据安全聚合协议,并用NS3进行模拟(应用背景自拟)

NS-3 example-tutorial

first.cc

second.cc

third.cc

NS-3 安装

先决条件 Prerequisites Windows

1. 获取VMware服务器软件 Get the VMware server software

  • A 您可以在各种版本说明或文档中阅读您需要的各种Microsoft服务器。事实并非如此。您可以在XP上运行VMware server;

  • B 去http://www.vmware.com/download/server/ 获取软件;

  • C 选择立即下载按钮(照常下载);

  • D 以通常的方式安装软件;

  • E 忽略有关要求Microsoft IIS继续的警告。

2. 请求序列号 Request a Serial Number

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存储库:
    git clone git://code.qt.io/qt/qt5.git
    
    或者(如果您位于防火墙后面,并且希望使用https协议):
    git clone https://code.qt.io/qt/qt5.git
    
    这将创建一个跟踪“origin/dev”的本地分支。如果您计划向Qt提交更改,请留在该分支。否则,请查看目标分支(请参见分支指南):
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