TCP与UDP模拟实验学习笔记

程序和相关解释可以参考: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)和一个NAM记录文件(out.nam),通过弹出的nam窗口,运行,可以观察网络仿真的过程(发包/回ACK等)。


本实验的重点应该是分析数据(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;
      }
   }

这里的“r”表示接收包的意思,其时间表示接收该包的时间,out.tr中的每一行表示一个包,一个包肯定会被路由器转发(接收),当被目的端接收时就会覆盖掉路由器的这个end_time[packet_id],从而得到packet_id包的接收时间。接收时间-发送时间就可以得到这个包的延时,该延时表示端点到端点的延时。

使用gnuplot工具可以画出每个包的延时(横轴为包的发送时间,纵轴位延时时间),图当然可以画的更细致/更好看一些。画图的代码为:

set terminal gif
set output "cbr_delay.gif"
plot "cbr_delay"
图为:

TCP与UDP模拟实验学习笔记_第1张图片

2.抖动率(jitter)

如前所述,抖动就是因为在队列中的等待时间或者在链路上的传输时间不一样,导致的每个封包的延迟时间不一样。这个物理量可以描述网络的稳定情况,抖动率越大,表示网络越不稳定。抖动率的计算公式为:(封包n2的延时-封包n1的延时)/(n2封包的序列号-n1封包的序列号)  ???。 awk程序略。

使用类似的画图程序(这里,如果前面做了一些绘图环境的设置,想要重置环境的话,使用reset命令即可),可以得到抖动率的统计图为:

TCP与UDP模拟实验学习笔记_第2张图片

3.封包的遗失率

其含义是:丢失包占发送包的比例。awk程序中统计的是,发送包的数量和丢失包的数量。

4.吞吐量

表示单位时间内,某个节点发送和接收的数据量。

实验中统计的是,from结点2 to 节点3在不同接收时刻的吞吐量。公式为:th=pkt_byte_sum[j]/(end_time[j]-start_time)*8/1000;单位是kbps。

模拟图为:

TCP与UDP模拟实验学习笔记_第3张图片









你可能感兴趣的:(TCP与UDP模拟实验学习笔记)