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

2015年(1)

2014年(30)

2013年(5)

我的朋友

分类: 系统运维

2014-08-14 15:32:27

E-mail:
 
    本实例比 NS2进阶实例11---有线场景下观察TCP滑动窗口大小的变化 的场景设计更为高明,在NAM演示方面的使用技巧也更高,将会是我以后做演示例子的很好参考,希望对广大阅览者也会有所帮助!
    至于TCP快速重传和快速恢复算法,我想运行测试我的例子的读者可能早已经相当熟悉,那就直接进入代码部分吧!  有何见解,欢迎留言或给我邮件!
 
进阶实例12:
 

#TCP快速重传和快速恢复过程的模拟演示
#场景:
#   四个节点: n0, n1,n2, n3
#   n1 和 n2 之间设置带宽瓶颈;
#   主要监控模拟过程中丢失包发生后cwnd和ssthresh 以及重复确定的情况;  
#  运行命令:ns tcpsim_fz.tcl

set ns [new Simulator]
set nf [open tcpnam.nam w]
$ns namtrace-all $nf
set ftr [open tcpsim_slidewin.tr w]
$ns trace-all $ftr
 
foreach i "0 1 2 3" {
    set n$i [$ns node]
 }
#创建节点间的连接, 在n1~n2间设置一个带宽较小的链路;
$ns duplex-link $n0 $n1 5Mb 20ms DropTail
$ns duplex-link $n1 $n2 0.5Mb 100ms DropTail
$ns duplex-link $n2 $n3 5Mb 20ms DropTail
 $ns queue-limit $n1 $n2 5
 
$ns duplex-link-op $n0 $n1 orient right
$ns duplex-link-op $n1 $n2 orient right
$ns duplex-link-op $n2 $n3 orient right
 
 #设置队列在Nam中的显示方向
 $ns duplex-link-op $n1 $n2 queuePos 0.5
 #TCP/Reno已经实现了快速重传和快速回复算法;
set tcp [new Agent/TCP/Reno]
$ns attach-agent $n0 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $n3 $sink
$ns connect $tcp $sink

#增加业务流量, 使用FTP
set ftp [new Application/FTP]
$ftp attach-agent $tcp
 
 
 #用于统计和绘图
set f0 [open cwndrec.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"
 }
 
proc finish {} {
    global ns nf
 $ns flush-trace
 close $nf
 
 exec nam tcpnam.nam &
 exec xgraph cwndrec.tr -x "Simulation Time" -y "Win_Size" &
 exit 0
 }
 
# 设置监控变量, 用于Nam演示时实时显示这些参数的变化;
# 一下代码需要添加在TCP代理创建之后;
$tcp set nam_tracevar_ true      ;# 打开Nam的跟踪变量
$ns add-agent-trace $tcp tcp     ;# 新增对TCP代理的跟踪并设置跟踪标签为 “tcp”
$ns monitor-agent-trace $tcp     ;# 监控跟踪对象
$tcp tracevar cwnd_              ;# 设置需要监控的变量名, cwnd值
$tcp tracevar ssthresh        ;# 慢启动门限
$tcp tracevar masseq_            ;# 已发送的最大包序号
$tcp tracevar ack_               ;# 已接收的最大确定序号
$tcp tracevar dupacks_           ;# 重复ACK计数器

$ns at 0.0 "$n0 label TCP"
$ns at 0.0 "$n3 label TCP"
$ns at 0.0 "$ns trace-annotate \"TCP Reno: Fast Recovery\""
$ns at 0.0 "Record"
$ns at 0.1 "$ftp start"
$ns at 5.0 "$ftp stop"
$ns at 5.25 "finish"
$ns run

 
 运行结果:
    拓扑图:
 
    效果图:
 
    简单分析:
         (欢迎读者分析,留言!)
 
 
E-mail:
阅读(1204) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~