NS2模拟器Xgraph绘图报错:搭建跨路由器TCP链路及带宽图问题
嘿,我来帮你搞定NS2里搭建TCP链路+Xgraph绘图的问题,顺便解决你遇到的报错~
一、完整的TCL链路搭建代码
你提供的代码缺了finish过程、节点创建和链路连接这些关键部分,我给你补全了完整可运行的版本:
# Step 1: 定义全局模拟器对象 set sn [new Simulator] # Step 2: 为数据流定义不同颜色(用于NAM可视化) $sn color 1 Red $sn color 2 Blue # Step 3: 打开NAM追踪文件 set nt [open simulate.nam w] $sn namtrace-all $nt # Step 4: 打开通用追踪文件 set tr [open simulate.tr w] $sn trace-all $tr # Step 5: 定义finish过程(用于结束模拟并清理文件) proc finish {} { global sn nt tr $sn flush-trace # 关闭追踪文件 close $nt close $tr # 启动NAM可视化(可选,不想看NAM可以注释掉) exec nam simulate.nam & exit 0 } # Step 6: 创建节点(两个主机+两个路由器) set n0 [$sn node] set n1 [$sn node] set r0 [$sn node] set r1 [$sn node] # Step 7: 给节点加标签(方便NAM里识别) $n0 label "Host0" $n1 label "Host1" $r0 label "Router0" $r1 label "Router1" # Step 8: 建立链路(带宽、延迟、队列类型按需调整) $sn duplex-link $n0 $r0 10Mb 10ms DropTail $sn duplex-link $r0 $r1 1Mb 20ms DropTail $sn duplex-link $r1 $n1 10Mb 10ms DropTail # 设置链路方向(优化NAM显示效果) $sn duplex-link-op $n0 $r0 orient right $sn duplex-link-op $r0 $r1 orient right $sn duplex-link-op $r1 $n1 orient right # Step 9: 设置队列大小(防止链路拥塞) $sn queue-limit $r0 $r1 20 # Step 10: 创建TCP连接和FTP应用 set tcp [new Agent/TCP] $tcp set class_ 1 $sn attach-agent $n0 $tcp set sink [new Agent/TCPSink] $sn attach-agent $n1 $sink $sn connect $tcp $sink set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP # Step 11: 安排模拟事件 $sn at 0.1 "$ftp start" $sn at 10.0 "$ftp stop" $sn at 10.1 "finish" # 启动模拟器 $sn run
二、用Xgraph绘制带宽图的完整步骤
1. 从trace文件提取带宽数据
首先用awk脚本过滤simulate.tr里的有效流量数据,创建一个名为bandwidth.awk的文件:
BEGIN { last_time = 0; last_bytes = 0; print "Time Bandwidth(Mbps)"; } { # 过滤接收端的TCP数据 if ($1 == "r" && $4 == 1 && $7 == "tcp") { time = $2; bytes = $6; duration = time - last_time; if (duration > 0) { # 计算带宽(转换为Mbps) bandwidth = (bytes - last_bytes) * 8 / (duration * 1000000); print time, bandwidth; last_time = time; last_bytes = bytes; } } }
然后在终端执行命令生成数据文件:
awk -f bandwidth.awk simulate.tr > bandwidth.dat
2. 启动Xgraph绘图
执行以下命令就能生成带宽变化图:
xgraph bandwidth.dat -x "Time (s)" -y "Bandwidth (Mbps)" -title "TCP Link Bandwidth" &
三、常见Xgraph报错解决
- 报错:
xgraph: command not found
解决:说明Xgraph没安装或者没在环境变量里。Ubuntu下可以直接sudo apt-get install xgraph安装;如果是手动编译的,把Xgraph的可执行文件路径添加到PATH里就行。 - 报错:
Error opening data file bandwidth.dat
解决:检查bandwidth.dat是否生成成功,路径是否正确。先确认simulate.tr有数据,再重新跑一遍awk脚本。 - 报错:Xgraph窗口无法显示
解决:如果在远程服务器运行NS2,要开启X11转发(用ssh -X连接服务器),本地也要有X11客户端支持。
内容的提问来源于stack exchange,提问作者Kushan Peiris
相关产品推荐
相关产品推荐

