曲奇的ndnSIM API教程翻译 命名数据网络 NDN ndn simulator

1 篇文章 0 订阅
1 篇文章 0 订阅

ndnSIM 开发文档

该网站包括ndnSIM文档,旨在帮助社区使用NDN实验模拟器。它并不打算介绍NDN体系结构和通信模型的原理或设计。我们邀请您加入我们的邮件列表,以查看和参与有关ndnSIM实现和一般模拟(邮件列表存档)的讨论。

1.入门

1-1介绍

基于NS-3的命名数据网络(NDN)模拟器的新版本经历了大量的重构和重写。新版本的主要新功能:数据包格式更改为NDN数据包格式NDNSIM使用NDN CXX库(NDN C++库)的基本NDN原语的实现所有的NDN转发和管理都是使用命名数据网络转发守护进程(NFD)的源代码直接实现的可以模拟一些针对ndn cxx库编写的实际应用程序

注意
请注意,ndnSIM>=2.0已经经历了为ndnSIM 1.0编写的主要重构和模拟场景,很可能需要更改才能在ndnSIM>=2.0平台上运行。

这种与ndn-cxx和NFD的集成确保了模拟的最大真实性,并且可以在真实的环境中重现,几乎不需要对源代码进行任何更改。除此之外,在ndnSIM中使用NDN转发(例如,自定义转发策略)的任何实验都可以直接在实际NFD实现中使用。

具体地说,模拟器直接使用挂起兴趣表(PIT)、转发信息库(FIB)和内容存储数据结构的NFD实现。除此之外,ndnSIM还允许对ndnSIM特定的内容存储进行实验,以及从先前版本的ndnSIM移植的缓存替换策略。

ndnSIM是一种新的网络层协议模型,可以运行在任何可用的链路层协议模型(点对点、CSMA、无线等)之上。此外,模拟器还提供了大量的接口和帮助程序集合,以执行每个组件的详细跟踪行为以及NDN流量。

更多文档

ndnSIM API 文档

支持

ndnSIM的代码正在积极开发中。Bug报告(问题)以及新的特性实现总是受欢迎的。要提交错误报告,请使用NDN Redmine。要创建新功能,请在GitHub上分叉代码并提交Pull请求。当然,我们的邮件列表是与ndnSIM团队和ndnSIM的其他用户沟通并获得支持的最佳方式。

日志

几乎ndnSIM中的每个组件都导出日志接口,因此在调试编译中可以跟踪许多内部细节。例如,faces和Consumer的日志显示了faces和Consumer类中发生的所有事情:

 NS_LOG=ndn.Consumer ./waf --run=ndn-simple

请参阅源代码和NS-3文档,了解可用的日志接口以及有关如何启用一个或多个日志接口的详细信息。

注意:请记住,日志记录仅在调试模式下启用。当模拟器在优化模式下编译(/waf configure-d optimized)时,日志记录将被完全禁用,因为它会显著减慢执行速度。

注意:此页列出了当前版本的NS-3和ndnSIM中可用的日志组件列表。

1.2下载和编译

可移植性

已成功编译ndnSIM 2.x并在以下平台上使用:

Ubuntu Linux 18.04

Ubuntu Linux 16.04

macOS 10.13

macOS 10.14

先决条件

核心依赖项
python >= 2.7

libsqlite3

pkg-config

openssl

Boost libraries >= 1.54

注意:如果您没有安装boost的根权限,则可以将其安装在主文件夹中。但是,您需要确保libboost_iostreams库已成功编译并安装。有关如何在Ubuntu Linux上成功编译和安装boost库的提示,请参考以下示例。

以下是每个平台安装编译器的详细步骤、所有必要的开发工具和库以及ndn-cxx先决条件。
macOS

macOS with HomeBrew:

brew install boost pkg-config openssl libxml2
export PKG_CONFIG_PATH="/usr/local/opt/libxml2/

Linux

Ubuntu Linux

sudo apt install build-essential libsqlite3-dev libboost-all-dev libssl-dev git python-setuptools castxml

Fedora Linux

sudo yum install gcc-g++ git sqlite-devel boost-devel openssl-devel

注意ndnSIM要求boost版本至少为1.54。许多linux发行版(本文撰写时为Fedora 16和17)都附带了boost的旧版本,这使得不可能立即编译ndnSIM。请按照以下简单说明安装最新版本。

NS-3 Python绑定的依赖项

如果计划使用NS-3python绑定,则应安装一些附加依赖项。例如,要运行visualizer模块,应安装以下组件:
macOS

macOS with HomeBrew

brew install cairo goocanvas gtk+3 graphviz gobject-introspection castxml

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/libffi/lib/pkgconfig"  # this needed only for running the next line
pip install pygraphviz pycairo PyGObject pygccxml

Linux

Ubuntu Linux

sudo apt install python-dev python-pygraphviz python-kiwi python-gnome2 ipython libcairo2-dev python3-gi libgirepository1.0-dev python-gi python-gi-cairo gir1.2-gtk-3.0 gir1.2-goocanvas-2.0 python-pip
sudo pip install pygraphviz pycairo PyGObject pygccx

下载ndnSIM源码

ndnSIM包由三部分组成:

NS-3的一个自定义分支,包含一些有用的补丁

一个定制的python绑定生成库(如果您想使用NS-3的python绑定和/或visualizer模块,这是必需的)

ndnSIM模块的源代码

修改了作为git子模块附加到ndnSIM git存储库的ndn cxx库和ndn转发守护进程(NFD)的源代码

以下命令从GitHub存储库下载所有文件:

mkdir ndnSIM
cd ndnSIM
git clone https://github.com/named-data-ndnSIM/ns-3-dev.git ns-3
git clone https://github.com/named-data-ndnSIM/pybindgen.git pybindgen
git clone --recursive https://github.com/named-data-ndnSIM/ndnSIM.git ns-3/src/ndnSIM

最后一个命令下载ndnSIM源代码和所有子模块(即ndn cxx和NFD)的源代码。如果以前克隆时没有–recursive标志,则可以使用以下方法检索子模块的正确版本:

git submodule update --init

当有新的更改可用时,应该运行相同的命令来更新子模块。

注意为了成功编译和运行ndnSIM,需要对基础NS-3和pybindgen进行一些修改。有些更改是针对ndnSIM的,有些是我们提交给NS-3上游的错误修复。我们还定期使用新的NS-3版本更新存储库,通常是在发布的提交上重新调整(如果需要,更新或消除)我们的自定义修补程序。

编译运行ndnSIM

ndnSIM使用标准的NS-3编译过程。通常,以下命令应足以在启用python绑定的情况下配置和构建ndnSIM:

cd <ns-3-folder>
./waf configure --enable-examples
./waf

在macOS(带有MacPorts)上,可能需要修改configure命令以使用MacPorts版本的python:

cd <ns-3-folder>
./waf configure --with-python=/opt/local/bin/python2.7 --enable-examples
# or run ``sudo port select python python27``
./waf

注意在macOS上,配置阶段可能会被困在检测gtk模块上。请确保安装了XQuartz或按照以下说明禁用了python。

Python绑定是NS-3仿真器的一个可选特性,并且不是很稳定。可以禁用python绑定编译以加速编译或避免某些编译错误(例如,“找不到名称为’ns3 visualizer’的任务生成器”:

cd <ns-3-folder>
./waf configure --disable-python --enable-examples
./waf

使用ndnSIM进行仿真

模拟场景示例

当使用–with examples标志配置NS-3时,可以直接运行本教程示例部分中描述的所有示例。例如,要运行ndn-simple.cpp方案,可以运行以下命令:

./waf --run=ndn-simple

为了运行ndn-grib.cpp 场景:

./waf --run=ndn-grid

要在启用了NS-3日志模块的情况下运行示例模拟场景(请注意,只有在以调试模式编译NS-3时,此操作才有效):

NS_LOG=ndn.Producer:ndn.Consumer ./waf --run=<scenario name>

如果已使用python绑定进行编译,则可以尝试使用visualizer运行这些模拟:

./waf --run=ndn-simple --vis

或者:

./waf --run=ndn-grid --vis

注意不要忘记在优化模式下配置和编译NS-3(./waf configure-d optimized),以便运行实际的模拟。

真正的实验

仿真场景可以直接写入scratch/或src/ndnSIM/examples文件夹中的NS-3中。

另一种也是推荐的方法是在单独的存储库中编写模拟场景,与NS-3或ndnSIM都不相关。例如,可以使用以下模板编写扩展、模拟场景和度量处理脚本:https://github.com/cawka/ndnSIM-scenario-template:

mkdir ndnSIM
cd ndnSIM
git clone https://github.com/named-data-ndnSIM/ns-3-dev.git ns-3
git clone https://github.com/named-data-ndnSIM/pybindgen.git pybindgen
git clone --recursive https://github.com/named-data-ndnSIM/ndnSIM.git ns-3/src/ndnSIM

# Build and install NS-3 and ndnSIM
cd ns-3
./waf configure -d optimized
./waf

sudo ./waf install
cd ..

git clone https://github.com/named-data-ndnSIM/scenario-template.git scenario
cd scenario
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

./waf configure

./waf --run <scenario>

1.3常见问题

安装Boost库到/usr/local

注意:以下说明适用于那些希望安装最新版本的boost库并具有根访问权限的用户。

以下命令将安装最新版本的boost库(在编写本文时,版本为1.62)ot/usr/local,前提是您具有对计算机的根访问权限。如果您没有根访问权限,请参阅将boost库安装到非特权位置一节。

注意如果您使用的是Ubuntu,请确保您已经安装了libbz2 dev,否则ndnSIM所需的库不会全部安装(请参阅常见陷阱)

 wget http://downloads.sourceforge.net/project/boost/boost/1.62.0/boost_1_62_0.tar.bz2
 tar jxf boost_1_62_0.tar.bz2
 cd boost_1_62_0
 ./bootstrap.sh
 sudo ./b2 --prefix=/usr/local install

以下命令应允许编译和运行NS-3模拟,并自定义安装boost库:

 cd <ns-3>
 ./waf configure --boost-includes=/usr/local/include --boost-libs=/usr/local/lib --enable-examples
 ./waf
 LD_LIBRARY_PATH=/usr/local/lib NS_LOG=ndn.Face:ndn.Consumer ./waf --run=ndn-simple

注意为了使动态链接器能够找到安装在不同于/etc/LD.so.conf中指定的某个文件夹中的库,在Linux平台上需要LD_LIBRARY_PATH=/usr/local/lib。

将boost库安装到非特权位置

如果您试图将boost库安装到非特权位置(即,您没有根访问权限),请遵循以下一般说明,但有问题。

通常,要在非特权模式下编译和安装boost库,需要发出以下命令(例如,对于boost版本1.62.0):

export BOOSTDIR=/home/non-privileged-user/boost
 wget http://downloads.sourceforge.net/project/boost/boost/1.62.0/boost_1_62_0.tar.bz2
 tar jxf boost_1_62_0.tar.bz2
 cd boost_1_62_0
 ./bootstrap.sh
 ./b2 --prefix=$BOOSTDIR install

但是,在执行以下步骤之后,您可能仍然无法使用ndnSIM。

常见的陷阱

常见的缺陷是ndnSIM需要boost iostreams库,但由于缺少bzip2库而未能构建。可以通过下载和安装bzip2库(例如,使用以下步骤)轻松解决此问题:

 wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
 tar zxf bzip2-1.0.6.tar.gz
 cd bzip2-1.0.6
 make PREFIX=$BOOSTDIR CFLAGS="-fPIC -O2 -g" install

安装bzip2库后,可以使用自定义编译标志重新编译和重新安装boost库:

./b2 --prefix=$BOOSTDIR cxxflags=-I$BOOSTDIR/include linkflags=-L$BOOSTDIR/lib install

或者,您可以通过安装bzip2库的开发包(如果您有根访问权限)来解决这个特定的问题。例如,在Ubuntu 12.04上,它将是以下命令:

sudo apt-get install libbz2-dev

然后在不使用自定义编译标志的情况下编译和安装boost:

./b2 --prefix=$BOOSTDIR

以下命令应允许编译和运行NS-3模拟,并自定义安装boost库:

cd <ns-3>
./waf configure --boost-includes=$BOOSTDIR/include --boost-libs=$BOOSTDIR/lib --enable-examples --enable-ndn-plugins=topology,mobility
./waf
LD_LIBRARY_PATH=$BOOSTDIR/lib NS_LOG=ndn.Face:ndn.Consumer ./waf --run=ndn-simple

注意:LD_LIBRARY_PATH=$BOOSTDIR/lib在Linux平台上是必需的,这样动态链接器才能找到安装在不同于/etc/LD.so.conf中指定的文件夹之一的位置的库。

可视化问题

可视化工具模块不工作

每次尝试运行visualizer时,都会出现以下错误:

Waf: Entering directory `/ndnSIM/ns-3/build'
Could not find a task generator for the name 'ns3-visualizer'..

python绑定和python绑定依赖项有问题。请遵循“先决条件”部分,该部分列出了运行visualizer应安装的内容。

macOS上gtk python模块的问题

/waf配置在gtk模块检查期间卡住
运行/waf configure时,进程在检测gtk模块阶段冻结:

...
Checking for 'sqlite3'                                         : yes
Checking for header linux/if_tun.h                             : not found
Checking for python module 'gtk'   

如果OSX上的./waf configure在gtk python模块检查期间卡住,很可能意味着该模块所需的X11有问题。您可以尝试重新安装X11(XQuartz)或配置没有python绑定的NS-3(/waf configure–disable python)。请注意,禁用python绑定还将禁用visualizer模块。

代码问题

节点之间的链接失败

如何使到NDN节点之间的链接失败?

请参阅链接控制帮助程序。

网络级nack

当前版本的ndnSIM如何处理网络级nack?

ndnSIM 2.3包含了对NDNLPv2的全面支持,因此,可以用于模拟跨模拟节点的网络级nack。

一般性问题

错误/错误报告

我在代码的文档/错误中发现了一个错误。我该怎么办?

请提交一个关于redmine的错误报告,或者告诉我们邮件列表中的错误。

1.4仿真示例

1.5联系

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值