Chinaunix首页 | 论坛 | 博客
  • 博客访问: 106641
  • 博文数量: 36
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-28 21:29
文章分类
文章存档

2015年(1)

2014年(30)

2013年(5)

我的朋友

分类: 系统运维

2014-08-14 15:32:14

E-mail:
 
 
   拥塞控制是网络层协议必备的一个功能,TCP采用拥塞窗口机制避免接收方被数据淹没! 同时为了更高效的传送数据,网络协议的设计者们引入了非常实用的加性增、乘性减的机制,取得了很好的效果!
   以下,我们将演示两个节点间TCP连接的拥塞窗口机制,方法上比较简单,演示结果也相当的明显! 应该把焦点集中在具体应用中该机制的运行机理,以及如何在具体应用和科研的其他类似场合使用这么一种巧妙的机制!
 
以下列出了运行时的所有命令:
(其中3和4步骤需要自行修改,我已在相应位置给出了提示,做简单替换即可!)
1. TCL脚本: tcpsim.tcl
2. 运行的命令格式:
   $ns tcpsim.tcl  bandwidth delay  window  simulation_time
   如: ns tcpsim.tcl 1Mb   100ms  64  5
3. 使用 TCP/RFC793edu   协议获得文件 TCP_RFC793edu.tr
4. 使用 TCP/Reno        协议获得文件 TCP_Reno.tr
5. 绘图比较的命令: xgraph TCP_RFC793edu.tr TCP_Reno.tr -geometry 800x400
 
  实例11:
 

#TCP滑动窗口及慢启动算法的模拟
#场景:
#  两个节点: n0, n1,
#   在这两个节点间创建一条TCP连接,
#   通过命令行传参数的方式对操作窗口大小进行设置;

# 运行的命令格式:
#   $ns tcpsim.tcl  bandwidth delay  window  simulation_time
#   如: ns tcpsim.tcl 1Mb 100ms  64  5
#
#处理命令行部分:
if { $argc==4} {
   set bandwidth [lindex $argv 0]
   set delay [lindex $argv 1]
   set window [lindex $argv 2]
   set time [lindex $argv 3]
   } else {
          puts "       bandwidth   "
    puts "    n0-----------n1"
    puts " Usage: $argv0 bandwidth delay window simulation_time"
    exit 1
    }
 
set ns [new Simulator]
set nf [open tcpsimnam.nam w]
$ns namtrace-all $nf
set ftr [open tcpsim_slidewin.tr w]
$ns trace-all $ftr
 
proc finish {} {
    global ns nf
 $ns flush-trace
 close $nf
 
 exec nam tcpsimnam.nam &
 exit 0
}
 
 #以下部分的代码, 很明了, 如有问题,请查看前面的博客!
set n0 [$ns node]
set n1 [$ns node]
 
$ns duplex-link $n0 $n1 $bandwidth $delay DropTail
$ns duplex-link-op $n0 $n1 orient left-right
 
#3. 使用 TCP/RFC793edu   协议获得文件 TCP_RFC793edu.tr
#4. 使用 TCP/Reno        协议获得文件 TCP_Reno.tr
set tcp [$ns create-connection TCP/RFC793edu $n0 TCPSink $n1 1]
$tcp set window_ $window
$tcp set ssthresh_ 60
$tcp set packetSize_ 500

set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ftp set type_ FTP


#用于统计和绘图, 每隔0.1s后采样窗口大小,并写入文件 f0 中
#3. 使用 TCP/RFC793edu   协议获得文件 TCP_RFC793edu.tr
#4. 使用 TCP/Reno        协议获得文件 TCP_Reno.tr
set f0 [open TCP_RFC793edu.tr w]
proc Record {} {
    global f0 tcp ns
 set intval 0.1
 set now [$ns now]
 set cwnd [$tcp set cwnd_]
 puts $f0 "$now $cwnd"
 $ns at [expr $now+$intval] "Record"
 }
 
$ns at 0.1 "Record"
$ns at 0.5 "$ftp start"
$ns at $time "finish"
$ns run

运行结果:

      拓扑图: (很简单的!)

 

      效果图:

思考:

    注意: 其中,慢启动曲线,指数增长到的最大值是我们设定的window值, 而不是理论上应该有的慢启动门限值ssthresh的值, 为什么?

E-mail:
阅读(974) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~