图2.1 无线路由协议的分类
2.1.2 无线网络路由协议方案选择
AODV协议是一种的到广泛认可的先验式路由协议,它借用了先验式路由协议DSR中路由发现和路由文护的基础程序及反应式路由协议DSDV的逐跳路由、目的节点序列号和路由文护的周期更新机制,以DSDV为基础,结合DSR中的按需路由思想并加以改进。然而这些传统的网络协议也存在不足,当网络负载增大时,由于输出队列长度的限制会出现节点转发的数据包丢失和重传的情况,这会造成网络拥塞,降低网络的吞吐量。为此,业界进一步提出了网络编码协议(cope),使节点不止仅仅具有存储转发的功能,更允许节点对来自不同链路的数据包进行编码组合后再发送,从而减少传输次数,提高网络吞吐量。本文选取AODV协议与COPE协议作为研究对象,对两种协议性能进行直观的比较。
2.2 网络仿真工具NS简介
NS2即Network Simulator Version 2,由加利福尼亚大学伯克利分校和VINT项目组联合开发的,是一种面向对象的、离散事件驱动的网络环境模拟器,主要用于解决网络研究方面的问题。它使用一整套C++库实现大多数常见网络协议以及链路层模型,利用这些类的实例可以搭建起整个网络的模型,而且包括具体的细节实现。
NS2是一种面向对象的网络仿真器,它本质上是一个离散事件模拟器,其本身有一个虚拟时钟,所有的仿真都由离散事件驱动的。目前NS2可以用于仿真各种不同的通信网络。它功能强大,模块丰富,已经实现的一些仿真模块有:网络传输协议,如TCP和UDP;业务源流量产生器,如FTP、Telnet、Web CBR和VBR ;路由队列管理机制,如Droptail、RED和CBQ;路由算法,如Dijkstra ,以及无线网络的WLAN, Ad hoc 路由,移动IP和卫星通信网络等。NS2 也为进行局域网的仿真而实现了多播以及一些MAC子层协议。
NS2使用两种编程语言,Tcl脚本程序设计语言(OTcl)和C++,它底层的模拟引擎主要由C++编写,而对模拟时的命令和配置借口等工作,则主要由Tcl脚本语言编写。一方面,通过C++程序的快速的运行速度,精确的设计和复杂的算法,就可以很好地模拟出底层协议;另一方面,具有面向对象特性的Tcl脚本语言通过调用引擎中各类的属性、方法定义网络的拓扑结构,配置数据源,建立连接,产生所有事件的时刻表,运行并跟踪模拟结果,还可以对结果分析处理或制图。
而这两种语言主要是通过Tclcl关联起来的,C++的类和对象为编译类和编译对象,而OTcl的类和对象为解释类和解释对象,Tclcl是在OTcl基础上的封装。其结构如图2.2所示:
图2.2 NS2的基本结构
2.3 NS2中的无线网络
NS2中的无线模型本质上是以移动节点为核心,通过附加一些特性来支持自组网和无线局域网的模拟。在NS2中,使用node-config函数来配置一个移动节点,可以配置的选项包括有:路由层、链路层、Mac层、信道等。
下面介绍几个主要的网络构件:
Link Layer:移动节点使用LL连接了一个ARP模块,用来将IP地址解析层MAC地址。对于所有分发出的分组,路由代理(Agent)都会将数据包传递给LL。LL再将此包传递给输出队列。丢与所有待接收的分组,MAC层将分组传递给LL,LL在将分组传递给node_entry_。
ARP:地址解析。若ARP已知目的节点的物理地址,则将该地址写入数据包的MAC头中。否则,就广播一个ARP请求并暂时缓存当前数据包。一旦ARP获知数据包下一跳的物理地址,则将其放入输出队列中。
Interface Queue:接口队列是由类PriQueue实现的。PriQueue类是一个优先级队列。它将特定协议的路由包插入到队首优先处理路由协议数据包。 基于网络编码的路由协议的实现与仿真(3):http://www.751com.cn/tongxin/lunwen_4858.html