2.5.1 脚本助理:助手类
ns-3中类名以Helper结尾的C++类是助手类
助手类的设计初衷是,通过屏蔽实现细节,来降低脚本编写的复杂度
ns-3每个模块都有自己的助手类,这些助手类的源代码位于【src/<模块名>/helper】,例如,为结点安装TCP/IP协议栈的【InternetStackHelper】在【src/internet/helper/internet-stack-helper.h】中定义
2.5.2 参数输入:属性变量
1. 属性
ns-3中,属性是网络模拟中的用户可配置参数,从程序角度来讲,属性其实就是C++类中的一个变量
由于这些变量的取值往往影响着网络性能和模拟结果,因此需要一种方法让用户在脚本中对其进行配置,这种方法即为属性系统
属性系统的任务就是把这些内部的私有成员变量变成外部可配置的参数
这样,只需要一个脚本就可以模拟多个拓扑相同但配置不同的网络场景,如通过设置不同的传输速率和传播延迟可以模拟出高宽带低延迟和低宽带高延迟两种应用场景
2. 配置属性
ns-3中配置属性的方法很多,根据单次可配置属性的数量和新属性值的作用时间范围划分为3类
(1)第一类:助手类、命令行和Config::SetDefault()
可以一次性对多个对象中的同名属性进行配置,但只能在对象创建之前使用
(2)ObjectBase::SetAttribute()函数
Node,Application,NetDevice,Channel都是ObjectBase的子类
一种更为精确的属性配置方法,一次只能修改一个属性的取值,并且针对的是已创建对象中的属性,如在模拟过程中改变一个网络设备的传输速率
(3)Config::Set()
Config是ns3命名空间中的一个嵌套命名空间,Config命名空间中的函数主要用于设置属性和trace变量
Config::Set()可以被视为前两类的综合体,可以一次性配置多个已创建对象中的同名属性