加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

网络协议模拟与分析

发布时间:2020-12-15 20:58:54 所属栏目:大数据 来源:网络整理
导读:? ? 协议模拟 ? ? 工具: NS2 , awk , shell , perl 等; ? ? 要求:掌握 NS2 网络模拟的基本流程; ? ? 内容: NS2 网络模拟基本流程 编写 TCL 脚本,搭建如下图所示的一个网络,共 6 个节点,其中 2 、 3 节点用做 ftp 服务器和客户端, 4 、 5 节点用

??协议模拟

?? 工具:NS2awkshellperl等;

?? 要求:掌握NS2网络模拟的基本流程;

?? 内容:NS2网络模拟基本流程

编写TCL脚本,搭建如下图所示的一个网络,共6个节点,其中23节点用做ftp服务器和客户端,45节点用做cbr流量的源和目的,而01节点用做转发设备。各节点间的链路属性见图。

模拟时间设为13秒钟,在0.1秒开始产生cbr流量,在1.0秒开发发送发ftp流量;8.0ftp流量结束,12.0cbr流量结束。编写脚本(可用shellawk,或perl等)分析模拟日志文件,统计每0.5s01节点间链路通过的分组数以及字节数。

设计与实现

1.仿真脚本代码与详细注解?

 
 
  1. #Create?a?simulator?object??#创建一个模拟器对象?
  2. set?ns?[new?Simulator]??????#将模拟器对象赋值给变量ns?
  3. ?
  4. #Define?different?colors?for?data?flows?(for?NAM)???#对不同的数据流定义不同?
  5. $ns?color?1?Blue????????????????????????????????????#的颜色,是给NAM用的?
  6. $ns?color?2?Red?
  7. ?
  8. #Open?the?NAM?trace?file?
  9. set?nf?[open?out.nam?w]?#打开一个nam文件,若存在则清空,若不存在则新建?
  10. $ns?namtrace-all?$nf?
  11. ?
  12. #Open?the?Trace?file?
  13. set?tf?[open?out.tr?w]??#打开一个trace?file,方式同上。用来记录封包传送的过程?
  14. $ns?trace-all?$tf?
  15. ?
  16. #Define?a??'finish'?procedure???#定义一个finish过程?
  17. proc?finish?{}?{?
  18. ????global?ns?nf?tf?
  19. ????$ns?flush-trace?
  20. ????close?$nf???????#关闭nam文件?
  21. ????close?$tf???????#关闭trace?文件?
  22. ????exec?nam?out.nam?&??#以后台方式执行nam?
  23. ????exit?0?
  24. }?
  25. ?
  26. #Create?four?nodes??????#创建六个节点?
  27. set?n0?[$ns?node]?
  28. set?n1?[$ns?node]?
  29. set?n2?[$ns?node]?
  30. set?n3?[$ns?node]?
  31. set?n4?[$ns?node]?
  32. set?n5?[$ns?node]?
  33. ?
  34. #Create?links?between?the?nodes?????#根据条件创建节点之间的连接?
  35. $ns?duplex-link?$n0?$n2?1.5Mb?10ms?DropTail?
  36. $ns?duplex-link?$n0?$n4?1.5Mb?10ms?DropTail?
  37. $ns?duplex-link?$n1?$n3?1.5Mb?10ms?DropTail?
  38. $ns?duplex-link?$n1?$n5?1.5Mb?10ms?DropTail?
  39. $ns?duplex-link?$n1?$n0?2Mb?20ms?DropTail?
  40. ?
  41. #Give?node?position?(for?NAM)???????#设置节点的位置,供NAM使用?
  42. $ns?duplex-link-op?$n2?$n0?orient?right-down?
  43. $ns?duplex-link-op?$n4?$n0?orient?right-up?
  44. $ns?duplex-link-op?$n0?$n1?orient?right?
  45. $ns?duplex-link-op?$n0?$n1?orient?right?
  46. $ns?duplex-link-op?$n1?$n3?orient?right-up?
  47. $ns?duplex-link-op?$n1?$n5?orient?right-down?
  48. ?
  49. #Set?Queue?Size?of?link?(n0-n1)?to?10???#设置n0和n1之间的最大队列长度为10?
  50. $ns?queue-limit?$n1?$n0?10?
  51. ?
  52. #Setup?a?TCP?connection?#建立一条TCP链接?
  53. set?tcp?[new?Agent/TCP]?
  54. $tcp?set?class_?2?
  55. $ns?attach-agent?$n2?$tcp?
  56. set?sink?[new?Agent/TCPSink]?
  57. $ns?attach-agent?$n3?$sink?
  58. $ns?connect?$tcp?$sink?
  59. $tcp?set?fid_?1?????#在NAM中,TCP的连接以蓝色表示?
  60. ?
  61. #Setup?a?UDP?connection?????#建立一个UDP连接?
  62. set?udp?[new?Agent/UDP]?
  63. $ns?attach-agent?$n4?$udp?
  64. set?null?[new?Agent/Null]?
  65. $ns?attach-agent?$n3?$null?
  66. set?null?[new?Agent/Null]?
  67. $ns?attach-agent?$n5?$null?
  68. $ns?connect?$udp?$null?
  69. $udp?set?fid_?2?????#在NAM中,UDP的链接以红色表示?
  70. ?
  71. #Setup?a?FTP?over?TCP?connection????????#在TCP连接之上建立FTP应用?
  72. set?ftp?[new?Application/FTP]?
  73. $ftp?attach-agent?$tcp?
  74. $ftp?set?type_?FTP?
  75. ?
  76. #Setup?a?CBR?over?UDP?connection????#在UDP连接之上建立CBR应用?
  77. set?cbr?[new?Application/Traffic/CBR]?
  78. $cbr?attach-agent?$udp?
  79. $cbr?set?type_?CBR?
  80. $cbr?set?packet_size_?1000?
  81. $cbr?set?rate_?1mb?
  82. $cbr?set?random_?false?
  83. ?
  84. #Schedule?events?for?the?CBR?and?FTP?agents?#设置FTP和CBR开始的时间?
  85. $ns?at?0.1?"$cbr?start"?#在0.1秒开始产生cbr流量??
  86. $ns?at?1.0?"$ftp?start"?#在1.0秒开发发送发ftp流量?
  87. $ns?at?8.0?"$ftp?stop"??#8.0秒ftp流量结束?
  88. $ns?at?12.0?"$cbr?stop"?#12.0秒cbr流量结束?
  89. ?
  90. #Call?the?finish?procedure?after?13?seconds?of?simulation?time???
  91. #在13秒调用finish过程结束模拟?
  92. $ns?at?13.0?"finish"?
  93. ?
  94. #Run?the?simulation?#执行模拟?
  95. $ns?run?

2.仿真过程示意图

3.日志分析脚本设计(设计思路与代码、注解)

  1. 设计思路:首先按取出每行的时间(第二字段)、分组大小(第六字段);?
  2. 若时间大于当前的时间段(interval)$i*0.5,令变量i加1,开始统计下一个时间段信息;
  3. 数组count1记录分组的数目,它的下标与时间段的序号对应(比如0~0.5时间段内的通过的分组数的值为$count1[1])。
  4. 数组count2记录每个时间段通过的分组的总字节数,它的下标也与时间段的序号对应。?

?perl脚本:

 
 
  1. #!/usr/bin/perl?
  2. #count?the?number?of?packets?between?node0?and?node1?,the?interval?is?0.5?seconds.?
  3. ?
  4. $i=0;???????#定义变量i?
  5. @info;??????#定义三个数组?
  6. @count1;?
  7. @count2;?
  8. while(<>){??????#从标准输入读入数据?
  9. @info?=?split(/?+/,$_);?#split函数以一个以上的空格为分隔符对每行数据进行分割。分割后的数据返回给info数组?
  10. $reason?=?$info[0];?#封包事件发生原因?
  11. ????$time?=?$info[1];???????#info中的下标1对应的数据(第二字段)为时间?
  12. $src?=?$info[2];????#开始节点?
  13. $dst?=?$info[3];????????????#结束节点?
  14. ????$length?=?$info[5];?????#info中下标5对应数据(第六字段)为分组大小?
  15. if($reason==’r’?&&?($src==0?&&?$dst==1)?||?($src==1?&&?$dst==0)){????
  16. #封包进入队列,且在0——1链路上,执行以下操作?
  17. if($time?>?$i*0.5){?????#若时间大于当前的时间段,则开始统计下一?
  18. ????????????$i++;???????????????????时间段的信息?
  19. ????}????
  20. ????$count1[$i]++;??????#对应时间段的分组数加1?
  21. ????$count2[$i]+=$length;???????#对应时间段的字节数累加?
  22. }?
  23. }#end?of?while?
  24. printf("intervals(s)ttpacketsttbytesn");?
  25. $i=1.0;?
  26. while($count1[$i]){?#只要count1数组不为空就打印?
  27. ????printf("%4.1f~%4.1ftt$count1[$i]tt$count2[$i]n",($i-1)*0.5,$i*0.5,);?
  28. ????$i++;?
  29. }?

4.分析结果展示(通过自绘图来说明)

第一列:时间段,每0.5秒分成一个时间段;第二列为分组数;第三列为通过的分组的总字节数。

绘制成统计图如下:

?

注:

NS2

NS2是指 Network Simulator version 2,NS(Network Simulator) 是一种针对网络技术的源代码公开的、免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块几乎涉及到了网络技术的所有方面。所以,NS成了目前学术界广泛使用的一种网络模拟软件。

NS2仿真器封装了许多 功能模块,最基本的是节点、链路、代理、数据包格式等等

1.节点(node):由tclobject对象组成的复合组件,在NS2中表示端节点和路由器

2.链路(link):由多个组件复合而成,用来连接网络节点。所有的链路都是以队列的形式来管理分组的到达、离开和丢弃。

3.代理(agent):负责网络层分组的产生和接收,也可以用在各层次的协议实现中。每个agent连接到一个网络节点上,由该节点给它分配一个端口号。

4.包(packet):由头部和数据两部分组成。一般情况下,packet只有头部没有数据部分。

软件构成
NS2包含Tcl/Tk,OTcl,NS,Tclcl。其中Tcl是一个开放 脚本语言,用来对NS2进行编程;Tk是Tcl的图形界面开发工具,可帮助用户在图形环境下开发图形界面;OTcl是基于Tcl/Tk的 面向对象扩展,有自己的类层次结构;NS2为本 软件包的核心,是面向对象的 仿真器,用C++编写,以OTcl 解释器作为前端;Tclcl则提供NS2和OTcl的接口,使对象和 变量出现在两种语言中。为了直观的观察和分析仿真结果,NS2 提供了可选的Xgraphy、可选件 Nam。
?
NAM ——The Network Animator(网络动画绘制者)

Animate? vt,使有生气;驱动。adj,有生气的,生气勃勃的,活的

?

#模拟结束后,会产生两个文件。一个是out.nam,这是给NAM用的,用来把模拟的过程用视觉化的方式呈现出来,这可以让使用者“看”的方式去了解封包传送是如何从来源端送到接收端。另一个文件是out.tr,这个文件记录了模拟过程中封包传送中所有的事件,例如第一笔记录是一个cbr的封包,长度为1000bytes,在事件0.1秒的时候,从n1传送到n2.这个问价你对我们做效能分析很重要。
?
日志文件(out.tr)各个字段的含义:
?
第一个字段:都是封包事件发生的原因:r表示这个封包被某个节点接受,+表示进入队列,-表示离开队列,d表示封包被队列丢弃;
第二个字段:事件发生的时间
第三个字段:开始节点
第四个字段:结束节点
第五个字段:封包的类型
第六个字段:封包的大小,单位为byte
第七个字段:封包的标记标注
第八个字段:表示封包属于哪一个数据流。即在TCL脚本中所定义的类似$udp set fid_ 2
第九、十两个字段表示封包的来源端和目的端,格式为a.b,a代表节点编号,吧表示端口号;
第十一字段表示封包的序号;第十一个字段表示的是网络层包的顺序号,需要注意的是,对于UDP应用来说是不需要顺序号的,但是对于NS2依然保持这个顺序号是为了方便分析。
第十二字段表示封包的id。

?

CBR(Constants Bit Rate)即固定码率,就是恒定比特率的意思。
题目汇总图的意思是节点4以1Mbps的恒定速率发送大小为1KB的IP包。

?

以上为本人《网络协议模拟与分析》课程设计的内容,我只是通过短暂的学习完成了课程要求,搞出了合格的结果(感觉已经很牛掰了),但是对其中涉及的东西并非很熟悉,比如TCL脚本语言,如有错误,请大神指正。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读