程序和相关解释可以参考:http://nile.wpi.edu/NS/ ,为英文文档。
本文假设已有课本教材和相关代码。
这个实验的仿真网络结构图包含:两个传输节点/路由器和数据接收端。传输节点到路由器的传递延迟是10ms,路由器到接收端是20ms。链路的管理机制是DropTail机制(丢掉队列尾部以实现更好的QoS 服务)。s1到d之间有一条FTP的联机,建构在TCP之上,接收TCP的数据后,会回复ACK封包给发送端。s2到d之间有一条CBR(const bit rate)的联机,建构在UDP之上。
TCL的程序代码略。
在目录文件下运行:
ns lab3.tcl
本实验的重点应该是分析数据(out.tr)吧,下面是对自己的一些理解,花了一定的时间,不过可能还是有一些理解的不到位。
记录的格式字段包括--事件/时间/发送节点/接收节点/包的类型/包大小/封包的标记标注/封包属于哪一个数据流/封包的来源端/封包的目的端/封包的序号/封包的ID。共12个字段。
out.tr中按时间记录了网络中的所有封包,包括tcp/cbr/ack类型,封包的来源端和目的端的格式为a.b,a代表结点编号,b表示端口号。 封包的序号(seq number)好像表示网络层包的序号,封包的id是标识一个包的。
1.0--3.1表示从结点1的端口0发送包到结点3的端口1,中间会经过路由器的转发(被路由器接收并转发)。每个封包都会发两次?!。tcp报文大小为1040byte,cbr为1000byte???
awk语言是一行一行的来读取数据文件,要注意它的工作流程。在此不多做介绍。
使用awk对out.tr的数据做简单分析,分析的物理量包括:端点到端点的延迟/抖动率/封包的遗失率/吞吐量。
1.端点到端点的延迟
顾名思义,是计算包从发送端到接收端之间的时间,比如从节点1到节点3之间经过的时间,前面分析过大约是30ms左右的时间,会在队列中等待,导致延迟时间会大于30ms,比如38.7ms等,等待的时间不同,导致延迟时间不同,这个不同就是抖动率。
awk中一段程序为:
if ( flow_id == 2 && action != "d" ) { if ( action == "r" ) { end_time[packet_id] = time; } }
使用gnuplot工具可以画出每个包的延时(横轴为包的发送时间,纵轴位延时时间),图当然可以画的更细致/更好看一些。画图的代码为:
set terminal gif set output "cbr_delay.gif" plot "cbr_delay"图为:
2.抖动率(jitter)
如前所述,抖动就是因为在队列中的等待时间或者在链路上的传输时间不一样,导致的每个封包的延迟时间不一样。这个物理量可以描述网络的稳定情况,抖动率越大,表示网络越不稳定。抖动率的计算公式为:(封包n2的延时-封包n1的延时)/(n2封包的序列号-n1封包的序列号) ???。 awk程序略。
使用类似的画图程序(这里,如果前面做了一些绘图环境的设置,想要重置环境的话,使用reset命令即可),可以得到抖动率的统计图为:
3.封包的遗失率
其含义是:丢失包占发送包的比例。awk程序中统计的是,发送包的数量和丢失包的数量。
4.吞吐量
表示单位时间内,某个节点发送和接收的数据量。
实验中统计的是,from结点2 to 节点3在不同接收时刻的吞吐量。公式为:th=pkt_byte_sum[j]/(end_time[j]-start_time)*8/1000;单位是kbps。
模拟图为: