主要参考ndnSIM的官网文档http://ndnsim.net/2.3/examples.html
一、简单场景
仿真拓扑结构如图:三个节点之间用点对点网络相连,其中一个是ndn生产者,另一个是ndn消费者。
发送者参考应用程序使用ConsumerCbr产生以每秒10个兴趣包的速率发送生产者的兴趣包。
生产者使用Producer类,将用虚拟的有效负载数据满足所有到达的兴趣包
每个节点的转发信息库都使用默认路由填充,并且使用原有ndnsim中的内容存储结构。
// ndn-simple.cpp
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/ndnSIM-module.h"
namespace ns3 {
int
main(int argc, char* argv[])
{
// 设置点对点连接及信道的默认参数
Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));//设置数据速率
Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));//设置时延
Config::SetDefault("ns3::DropTailQueue::MaxPackets", StringValue("20"));//
// 阅读可选的命令行参数(e.g., 可视化操作 ./waf --run=<> --visualize
CommandLine cmd;
cmd.Parse(argc, argv);
// 创建节点
NodeContainer nodes;
nodes.Create(3);
// 使用两条链路连接节点
PointToPointHelper p2p;
p2p.Install(nodes.Get(0), nodes.Get(1));
p2p.Install(nodes.Get(1), nodes.Get(2));
// 在所有的节点上安装NDN stack
ndn::StackHelper ndnHelper;
ndnHelper.SetDefaultRoutes(true);
ndnHelper.InstallAll();
// 选择转发策略
ndn::StrategyChoiceHelper::InstallAll("/prefix", "/localhost/nfd/strategy/multicast");
//安装应用程序
// Consumer
ndn::AppHelper consumerHelper("ns3::ndn::ConsumerCbr");
// 消费者将请求/前缀/ 0 /前缀/ 1,…
consumerHelper.SetPrefix("/prefix");
consumerHelper.SetAttribute("Frequency", StringValue("10")); // 10 interests a second
consumerHelper.Install(nodes.Get(0)); // first node
// Producer
ndn::AppHelper producerHelper("ns3::ndn::Producer");
// 生产者将根据开始前缀回复所有的请求
producerHelper.SetPrefix("/prefix");
producerHelper.SetAttribute("PayloadSize", StringValue("1024"));
producerHelper.Install(nodes.Get(2)); // last node
Simulator::Stop(Seconds(20.0));
Simulator::Run();
Simulator::Destroy();
return 0;
}
} // namespace ns3
int
main(int argc, char* argv[])
{
return ns3::main(argc, argv);
}
如果该代码被放在scratch/ndn-simple.cpp中,cpp和NS-3是在调试模式下进行编译,您可以使用以下命令(在优化模式没有将打印)运行和看到你的进步的模拟:
NS_LOG=ndn.Consumer:ndn.Producer ./waf --run=ndn-simple
如果没有将代码放到scratch文件夹中,则可以直接./waf