You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:30:11