“ 动起手来P2P “——《开源网络模拟器NS-3架构与实践(周之迪)》学习之旅(2)

随便说说

上一节我们似乎只是简单地说了“Hello“,然后介绍了一丢丢技巧,对NS3这个庞大的世界还没有进行真正的探索。

先前在自己的帖子搭建P2P网络介绍过first脚本,但当时的自己也是一知半解(虽然现在也没好多少),文章里只是简单分析了代码各部分的功能,然后展现了实验结果和工具的使用过程,并没有很细致去学习代码。因此决定带领读者和自己一起动手搭建一个最简单的P2P网络,一起学习NS3的代码逻辑。

顺口一提,关于工具NetAnim、Tracemetrics的使用方法,在之前的文章中有详细的介绍,如有需要可移步~搭建P2P网络

问题来了

 现需要创建一个包含两个节点的有线网络,链路层使用点对点协议(Point-To-Point,PPP)进行分组传输,点对点信道要求传输速率5Mbit/s、传播延迟2ms,其中1号节点作为服务器、0号节点作为客户端。

 认识头文件

 NS3脚本主要以C++语言编写,其头文件的均以:”<模块名>-module.h"命名,因此根据脚本需要的模块进行引入即可。

那么我们一起来想一下,搭建一个p2p网络需要哪些模块呢?当新手看到这里八成是要在心里骂街,模块那么多那么多,。别急,让我们一起去认识他们。

#include "ns3/core-module.h":定义了ns3的核心功能:模拟事件、事件调度巴拉巴拉

#include "ns3/network-module.h":基本网络组件:网络结点、分组和地址

以上两个头文件是所有脚本必须要有的,NS3可是一个模拟器,怎么能少了core~要是连网络节点都无法定义,怎么能继续进行呢?

#include "ns3/internet-module.h": 定义了TCP/IP协议栈

#include "ns3/applications-module.h": 定义了分组收发模型:贪婪模型、ON/OFF模型等

这两个模块不是必需的,但是基本都会用到,毕竟网络和应用的环节还是不可缺少的。

命名空间与日志系统

using namespace ns3: ns3命名空间保护整个ns3源代码,方便项目与非ns3项目隔离与整合

这也意味着如果只引用ns3命名空间时,想要使用标准库函数(cin、cout等)必须使用std::cin...

因此一般习惯性地将标准库命名空间一同加上

using namespace std;

下面定义一个日志组件,名为“My New First"

NS_LOG_COMPONENT_DEFINE("My New First");

日志系统对代码调试和了解模拟流程都有着很重要的作用,但目前对这部分了解还不太多,后续会继续学习。

准备阶段

 现在让我们进入main,开始正式编写脚本吧

    CommandLine cmd;
    cmd.Parse(argc,argv); 

   这里定义了一个命令行变量,其作用是可以通过终端去临时修改一些变量,方便调试

    LogComponentEnable(
        "UdpEchoClientApplication",LOG_LEVEL_INFO);
    LogComponentEnable(
        "UdpEchoServerApplication",LOG_LEVEL_INFO);

     这里的两步是为了打印Log组件的信息,分别输出服务器和客户端的信息

准备阶段里设置命令行与日志组件,可能一开始很不好理解,不过随着学习的深入,会越来越明了的。这部分内容推荐大家去阅读马春光先生的教材

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值