📜  TCL脚本通过TCP创建FTP流量

📅  最后修改于: 2021-06-28 08:37:56             🧑  作者: Mango

在本文中,我们将了解如何编写工具命令脚本来模拟2个节点之间的TCP连接,并在ns2中传递它们之间的FTP流量。我们还将知道如何显示丢弃,接收和发送的吞吐量数据包。

介绍 :
该程序中使用的路由算法是距离矢量路由协议。如果您不熟悉网络模拟器和工具命令语言,则可以首先查看以下内容:https://www.geeksforgeeks.org/basics-of-ns2-and-otcltcl-script/。现在,让我们逐步讨论TCL脚本的实现部分,以通过TCP创建FTP通信。

步骤1 :
首先,我们需要创建一个网络模拟器对象,并将路由协议( rtproto )初始化为距离矢量路由协议( DV )。

set ns [new Simulator]
$ns rtproto DV

第2步 :
接下来,我们使用网络模拟器对象中的节点实例创建两个节点,分别为节点0和节点1。

set node0 [$ns node]
set node1 [$ns node]

第三步:
下一步是创建跟踪文件和nam文件。在这里,它们分别命名为out.tr和out.nam。我们需要做的就是使用跟踪文件对象创建一个名为out.tr的新跟踪文件,并以写入模式打开该文件。下一步是使用trace-all将模拟过程中的所有路由信息都跟踪到跟踪文件中。对于nam文件,我们也使用namtrace-all进行相同的操作

set tf [open out.tr w]
$ns trace-all $tf
set nf [open out.nam w]
$ns namtrace-all $nf

第四步 :
现在,我们使用duplex-link实例在节点之间创建双工链接。在这里,我们需要指定三个参数:数据速率(1Mb),延迟(10ms)和队列类型( DropTail )。

$ns duplex-link $node0 $node1 1Mb 10ms DropTail

步骤5:
代理旨在在网络中的节点之间传送信息。现在,我们需要TCP代理来完成该任务。代理初始化如下。此外,代理分别连接到节点0和节点1。下一步是连接这些代理。

set tcp2 [new Agent/TCP]
$ns attach-agent $node0 $tcp2
set sink2 [new Agent/TCPSink]
$ns attach-agent $node1 $sink2
$ns connect $tcp2 $sink2

步骤6:
下一步是初始化FTP流量并附加到源tcp2。这可以通过创建FTP对象并将流量附加到tcp2来完成。

set traffic_ftp2 [new Application/FTP]
$traffic_ftp2 attach-agent $tcp2

步骤7:
接下来,我们添加一个完成过程,将所有数据刷新到跟踪文件中,然后运行nam文件。

proc finish {} {

global ns nf tf
$ns flush-trace
close $nf
close $tf
exec nam out.nam &
exit 0
 
}

步骤8:
最后,我们通过为FTP代理和run命令安排事件来关闭tcl文件。此处的流量始于时间1.0,止于3.0。模拟在时间5.0结束。可以自定义更长或更短的持续时间。该文件以运行实例结尾。

$ns at 1.0 "traffic_ftp2 start"
$ns at 3.0 "traffic_ftp2 stop"
$ns at 5.0 "finish"
$ns run

awk文件创建:
让我们知道如何创建awk文件,以查看接收,丢弃的数据包数量和整体吞吐量,如下所示。

步骤1:初始化部分–

  • awk文件从在BEGIN块中指定的初始化部分开始。它包含所有必需的常量或变量的初始化。在这里,我们需要变量send,receive和drop来分别跟踪此类已发送,已接收和已丢弃的数据包。接下来,我们需要一个开始值和一个停止值来开始和结束流量。
BEGIN{
send=0;
received=0;
dropped=0;
start=1.0;
stop=3.0;
}

步骤2:执行内容块–

  • 下一个块是内容块。在这部分中,将逐行执行。有某些变量$ 1,$ 5具有不同的含义。这样的约定映射到跟踪文件中的特定模式或逻辑。表达式“ / + /”表示已发送数据包,“ r”表示已接收数据包,“ d”表示已丢弃数据包。对于所有此类操作,都使用$ 1映射。 $ 5是用于与字符串“ TCP”进行映射的标志。
{
if($1=="/+/")
{
send++;
}
 
if($5=="tcp")
{
if($1=="r")
{
received++;
}
}
 
if($1=="d"){
dropped++;
}
}  

步骤3:END方块–

  • END块是awk文件中的最后一个块,用于打印接收到的数据包的数量和总体吞吐量。如果ftp流量未初始化,则不会发送或接收任何数据包。在这种情况下,跟踪文件为空。否则,我们可以打印所需的参数。
END{
if(send=="0" && received=="0")
{
print "empty trace file\t"
}
print "Number of Packets Received  " received
print "Throughput =" (received*8)/(start-stop) "bits per second"
print "Number of Packets Dropped = " dropped
}

网络模拟器的可视化:
我们可以如下所示在网络模拟器中可视化输出。

  • 单击图中以绿色突出显示的开始按钮时,流量开始于1.0,结束于3.0。同时,awk文件计算并存储要计算的所需值。

  • 此外,为了评估流量,我们可以计算吞吐量和awk文件中的丢弃数据包。以下命令用于运行awk文件。
awk -f filename.awk filename.tr
  • 获得的输出如下所示。

笔记 –
由于节点之间的连接不会在任何时候终止,因此不会有任何丢弃的数据包。但是,可以自定义仿真,使其以一定间隔包括此类终止,并且在这种情况下,可能会存在丢失的数据包。