2.2.4 过去三种算法协议的比较总结
表3-1 三种算法比较
算法 TPSN RBS DMTS 复杂度 不随网络规模扩大而变化太大,可扩展性良好,复杂度一般 用到了线性拟合运算,补偿了时钟偏移,复杂度一般 算法最简单 精度 约为RBS的两倍 算法精度高于DMTS 精度较低 能耗 耗能大,主要是网络开销 能耗大,主要是节点能耗 能耗最少
通过比较可以得出结论。采用算法相对简单的协议同时拥有低能耗但精度必然下降,并且如果在无线传感器时间同步算法的计算过程中涉及“广播特性”,则可以有效的降低网络通信能量开销,例如DMTS和RBS的计算过程。RBS用到了需要较多计算量的数学方法通过线性拟合理论来计算全部接收节点的时间数据,过分依靠机器计算从而导致耗能大但同步精确度相对DMTS确实很高;而DMTS理论色彩浓厚且过于理想化,力求通过极低的消耗来同步时间,忽略了信息的传播时延甚至不考虑节点晶振的不同所带来的影响即不考虑时钟偏移,结果必然会导致精度的缺失。传播时延在时间同步的问题中其实是产生误差的因素中影响较小的了,正如在传统的计算机网络中,有线网络在相等的信道长度上,采用双绞线的传播时延其实是小于光纤的,也就是说信息流在铜线中的传播速度比在全反射的玻璃纤维中还要快一些。而造成通常所说的光纤速度快的原因是在信息流通过信道入口处所花费的时间,即是发送时延——光纤的发送时延要远远小于双绞线。而计算网络速度需要同时计算发送时延和传播时延(当然还有处理时延),所以经过计算后光纤的速度就比双绞线的要快很多了。所以说若只像RBS那样忽略传播时延在精度上还是能够保证一定的级别的,但DMTS连续忽略传播时延和时钟偏移,造成的误差太大。所以对于无线传感器网络中的误差产生的较大因素——时钟偏移来说,RBS确是解决时钟偏移问题的合适方法。那么DMTS适用的场合也就有所限制了,只适合没有高精度需求的系统,又或者是只在临时的短时间内采用统一的全新设备的时间同步系统,因为这种系统中的节点硬件设备较新,老化程度低,也可以算是如RBS那样补偿了时钟偏移问题。
7
在基于Pair—Wise同步算法中,TPSN算法通过在MAC层检测到信道空闲时给同步包标记时间后发射,并在MAC层为接收到的同步包标记接收时间戳,从而排除了Send Time、Access Time和 Reception time对同步精度的影响,同步精度较高约为RBS的两倍,达到了16.9us的同步精度的开销。
[11]
。缺点就是同步计算阶段的双向成对同步增加了网络资源
8
9
3 NS2网络仿真模拟
3.1 NS2网络仿真模拟简介
网络模拟是进行网络技术研究的一种基本手段。在新技术的研究过程中,由于各种原因,使得实际网络系统的实现代价较高或者是不现实。在这种情况下, 模拟就成了最佳可供选择的测试、评估和验证手段之一。网络模拟有着周期小、成本低等特点,而且可以使研究者更容易利用他人的研究成果,使研究者更专注于自己所研究的部分而不必为系统的其它部分耗费过多精力。 NS2就是这样一个针对网络技术的源代码公开的、免费的软件模拟平台。在目前已有的网络模拟仿真软件中,NS2以其对有线和无线网络、局域网和广域网、网络分层模型中各协议的丰富支持、强大的层次开发能力以及可扩展、易配置等特性,在国际网络研究界得到了广泛的应用。它的仿真环境中主要有两种分工不同的程序开发语言。C++程序的运行时间很短,但转换时间很长,正适合用于实现具体的协议。Otcl运行得很慢,但可以很快的转换(或是交互),用来进行仿真的配置最适合不过。当然以上的分法并不是绝对的,例如:许多路由是由Otcl实现的,但其核心——Dijkstra算法是用C++来实现。通常,如果需要在一秒钟内调用许多次的模块,最好还是用C++实现。所以说NS-2 为分层模型软件,内核使用高效的编译型C + + 语言,而外壳使用OTcl 脚本语言;内核完成数据处理任务,外壳完成配置、控制任务. 一般NS2使用的大致步骤如下:
(1)开始编写OTcl脚本。首先配置模拟网络拓扑结构,此时可以确定链路的基本特性,如延迟、带宽和丢失策略等。
(2) 建立协议代理,包括端设备的协议邦定和通信业务量模型的建立。 (3) 配置业务量模型的参数,从而确定网络上的业务量分布。
(4)设置Trace对象。NS2通过Trace文件来保存整个模拟过程。仿真完后,用户可以对Trace文件进行分析研究。
(5)编写其他的辅助过程,设定模拟结束时间,至此OTcl脚本编写完成。 (6)用NS2解释执行刚才编写的OTcl脚本。 (7)对Trace文件进行分析,得出有用的数据。
[8]
3.2 NS2 仿真模拟
最初NS2仅支持对有线网络的模拟,后来CMU的Monarch工作组在NS2中添加了对无线网络的扩展模块。为了让NS2更适合对无线传感器网络的模拟,许多研究者都在NS2上进行了扩展。这些研究补充了NS2之对无线传感器网络模拟支持的不足,为适用于无线传感器网络的相关算法在NS2下的模拟仿真提供了较好的支持。但到目前为止,无线传感器网络在NS2上的扩充并没有形成一个完全整合的完整模块,并且缺乏对无线
10
传感器网络时间同步支持的构件。为了进行时间同步的仿真,需要对NS2做出扩展,来实现节点间时间的同步。在
C:\\cygwin\\home\\Administrator\\ns-allinone-2.27\\ns-2.27\\tcl\\lib文件下的ns-lib.tcl脚本末端做了扩展。
(1) 对Agent类进行扩展,建立新类MyAgent: class MyAgent : public Agent { public:MyAgent();
double mytime; //节点自身时间 int mylevel; //节点层次号 double myrecvtime;
nsaddr_t souraddr; //消息源地址 int counter; //计数下层节点个数
int neighbor[10]; //存放该节点的下层节点号 int command(int argc,const char *const *argv); void recv(Packet *,Handler *); };
根据NS2分列对象模型规定,还需对MyAgent进行Otcl绑定,才能加入到NS2中并可以在Tcl代码中使用,如下所示:
Static class MyClass : public TclClass { public:MyClass():TclClass(\TclObject * create(int,const char *const *){ return(new MyAgent()); } }class_my;
这样Agent/MyAgent制定的C++中的MyAgent类和Tcl中的Agent/MyAgent绑定在了一起。
(2) 为得到新算法中节点收发消息的时间信息,需要对NS2原有的分组头进行扩展,重
新定义算法所需的分组头,具体定义如下:
struct hdr_my{ double myselftime;
double timearray[4]; //记录消息往返的4个时间标记:T1-T4
11
[9]