桂林理工大学本科毕业设计·论文
格式为“节点号:端口号”;第16列内容表示分组的TTL值;第17列内容表示源节点到目的节点的跳数。
进行数据提取采用的方法是使用AWK程序对trace文件进行分析,字段变量之间的赋值以空格键为划分标准。
4.4 本章总结
本章首先介绍了仿真场景的参数及生成,通过编写代码实现AODV的协议仿真,用NAM动画演示工具可以直观的看到使用AODV协议的网络节点的通信过程。并对仿真的结果进行了分析。
21
桂林理工大学本科毕业设计·论文
5 AODV协议的性能分析
5.1 性能参数
衡量网络协议性能指标通常包括定性指标和定量指标。定性指标在整体上描述了网络某个方面的性能,比如是否按需路由、安全性、分布运行性、提供无环路路由等。定量指标可以更加详细的描述网络某方面的性能,通常会从传输时延、丢包率、归一化路由开销、网络抖动等方面着手。
(1)传输延时
传输延时是源节点发送数据到目的节点接收数据之间的时间差,计算传输延时的公式如下:
Td(k)=Tr(k)-Ts(k)
Td(k)表示第k个分组的传输延时,Tr(k)表示表示接收第k个包的时间,Ts(k)表示发送第k个包的时间。
(2)丢包率
丢包率是指特定的时间段内,传输过程中丢失包的数目与传输包的总数之比,计算丢包率的公式如下:
L表示丢包率,S是指传输的包的总数(Send),R表示成功接收的包的总数。 (3)归一化路由开销(normalized routing load)
指的是每发送一个数据报文所需要的路由控制报文数。对于Ad hoc网络中的协议来说。归一化路由开销越低越好。
(4)分组投递率(packet delivery ratio)指的是一个时间段内成功传输数据分组在所有传输的数据分组总量中多占的比例。反应网络支持的最大吞吐量,表明路由协议的完整性、正确性和适应网络变化的能力。在分析trace 文件时通常以成功传输的数据分组数量与所发送的数据分组总量的比值来衡量数据分组的投递率。计算公式如下:
PDR=NR/NS
其中PDR表示的是分组投递率,NS表示的是节点发送的数据分组数量,NR表示的是节点接收到的数据分组数量。它能反映出网络传输的可靠性。对于Ad hoc网络协议来说,数据分组投递率越高越好。对数据分组投递率要求比较高的实际应用,这个性能指标就显得更加重要了。
22
桂林理工大学本科毕业设计·论文
本次设计主要通过传输时延和丢包率这两个性能参数对采用AODV协议的网络进行性能分析。
5.2 参数分析
本次毕设中,选择编写.awk文件对仿真产生的数据文件.tr进行处理。分别从中求出传输时延和丢包率。其中.awk文件需要自行用C语言进行编写,然后在终端直接调用,则可直接得出相应的数据。
5.2.1 网络延迟的数据提取
整个网络的通信节点在建立了通信之后,通过编写delay.awk脚本从.tr文件中提取出网络延迟的相关数据,具体编写代码如下:
BEGIN {
highest_packet_id = 0; //初始化最高的分组ID为0 } {
action = $1; //将第一列的数据依次赋予给action time = $2; //将第二列的数据依次赋予给time type = $7; //将第七列数据赋予给type pktsize = $8; //将第八列数据赋予给pktsize src_address = $14; dst_address = $15;
packet_id = $6; //将第六列数据赋予给packet id //开始统计通信链路节点间发生通信的次数,并记录时间
if ( type != \ //确定数据链路已经开始建立连接之后才开始统计 {
if ( packet_id > highest_packet_id ) highest_packet_id = packet_id; if ( start_time[packet_id] == 0 ) start_time[packet_id] = time; if ( type == \ if ( action == \
end_time[packet_id] = time;
23
桂林理工大学本科毕业设计·论文
} } else {
end_time[packet_id] = -1; } } } END {
//计算通信链路间节点通信的延迟
for ( packet_id = 0; packet_id <= highest_packet_id; packet_id++ ) { start = start_time[packet_id]; end = end_time[packet_id]; packet_delay = end - start;
if ( start < end ) printf(\ } }
5.2.2 丢包率的数据提取
整个网络的通信节点在建立了通信之后,通过编写drop.awk脚本从.tr文件中提取出网络丢包率的相关数据,具体编写代码如下:
BEGIN {
highest_packet_id = 0; //初始化最高的分组ID为0 Snum = 0; //初始化总发送包的数目为0 Rnum = 0; //初始化总接收包的数目为0 }
//将各列数据相应地赋予到不同变量中 {
action = $1; time = $2; type = $7; pktsize = $8; src_address = $14; dst_address = $15;
24
桂林理工大学本科毕业设计·论文
packet_id = $6;
//开始统计网络中发送数据包和接收数据包的数量
if ( type != \) //确定数据链路已经开始建立连接之后才开始统计
{
if ( packet_id > highest_packet_id ) highest_packet_id = packet_id; if (type == \
Snum++; //统计节点间发送的数据包的数量 if ( type == \ {
if ( action == \ {
Rnum++; //统计节点间接收到的数据包的数量 } } } } END {
printf(\计算并输出丢包率 }
5.2.3 数据平均值的计算
在提取并统计出了不同场景中的网络延迟和丢包率之后,本设计编写了一个求平均值的.awk文件来直接调用相应的统计文件,得出它们平均值,方便数据整理,具体编程代码如下:
BEGIN {
sum = 0; //定义一个变量存放求和值 js =0; //定义一个变量统计值的个数 } {
a = $1; //将第一列的值赋予给变量a
25