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:
阅读(1251) | 评论(0) | 转发(0) |