零基础玩转NS2Ubuntu 22.04网络仿真从安装到可视化全攻略记得第一次接触NS2时我在实验室熬到凌晨三点面对满屏的报错信息几乎崩溃。现在回想起来那些依赖缺失、Tcl版本冲突的问题其实都有迹可循。本文将带你用最省力的方式在Ubuntu 22.04上一次性跑通第一个网络仿真包括nam动画演示和Xgraph性能分析——所有你可能会踩的坑我都提前帮你填平了。1. 环境准备打造专属NS2实验室1.1 系统选择与基础配置推荐使用原生Ubuntu 22.04 LTS非WSL这个长期支持版本与NS2的兼容性经过充分验证。如果是虚拟机环境建议分配至少2核CPU、4GB内存和30GB存储空间。执行以下命令更新系统sudo apt update sudo apt upgrade -y sudo apt install -y build-essential autoconf automake libxmu-dev注意避免使用root用户操作所有命令如无特殊说明都不需要sudo权限1.2 依赖库精准安装NS2的依赖就像拼图——少一块都会导致编译失败。这个组合经实测可完美适配Ubuntu 22.04sudo apt install -y tcl8.6 tk8.6 libotcl1.14 libx11-dev libxt-dev \ libssl-dev libffi-dev python3-dev zlib1g-dev常见问题排查报错cannot find -ltk8.6执行sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk8.6.so警告Xgraph: command not found额外安装sudo apt install -y xgraph2. NS2安装避坑指南2.1 源码安装标准化流程建议使用ns-allinone-2.35这个经典版本下载量超百万次wget https://downloads.sourceforge.net/project/nsnam/allinone/ns-allinone-2.35/ns-allinone-2.35.tar.gz tar xvf ns-allinone-2.35.tar.gz cd ns-allinone-2.35 ./install安装完成后将以下内容追加到~/.bashrcexport PATH$PATH:/home/你的用户名/ns-allinone-2.35/bin:/home/你的用户名/ns-allinone-2.35/tcl8.5.10/unix:/home/你的用户名/ns-allinone-2.35/tk8.5.10/unix export LD_LIBRARY_PATH/home/你的用户名/ns-allinone-2.35/otcl-1.14:/home/你的用户名/ns-allinone-2.35/lib export TCL_LIBRARY/home/你的用户名/ns-allinone-2.35/tcl8.5.10/library2.2 验证安装成功三步检验法终端输入ns应出现%提示符执行puts Hello NS2应输出字符串输入exit退出后执行nam应弹出图形窗口3. 第一个仿真实验动态网络可视化3.1 拓扑构建实战创建first_ns2.tcl文件以下代码构建了一个星型拓扑# 初始化模拟器 set ns [new Simulator] # 开启nam跟踪 set nf [open out.nam w] $ns namtrace-all $nf # 定义结束过程 proc finish {} { global ns nf $ns flush-trace close $nf exec nam out.nam exit 0 } # 创建4个节点 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] ;# 中心节点 set n3 [$ns node] # 建立双向链路 $ns duplex-link $n0 $n2 10Mb 10ms DropTail $ns duplex-link $n1 $n2 10Mb 10ms DropTail $ns duplex-link $n3 $n2 10Mb 10ms DropTail # 设置nam布局方向 $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right # 启动模拟 $ns at 5.0 finish $ns run运行命令ns first_ns2.tcl你将看到三个边缘节点通过中心节点互连nam窗口展示动态拓扑结构链路带宽和延迟参数可视化3.2 流量注入与性能分析扩展脚本实现真实流量模拟# 在节点n0和n3之间添加UDP流 set udp [new Agent/UDP] $ns attach-agent $n0 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null # 添加CBR流量 set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set packetSize_ 1000 $cbr set interval_ 0.005 $ns at 1.0 $cbr start $ns at 4.0 $cbr stop关键参数解析参数说明典型值packetSize_数据包大小(byte)500-1500interval_发送间隔(s)0.001-0.1rate_传输速率(bps)1M-10M4. 高级技巧Xgraph绘制性能图表4.1 多流对比实验创建xgraph_demo.tcl以下代码同时监测三条数据流set ns [new Simulator] # 开启三个跟踪文件 set f0 [open flow0.tr w] set f1 [open flow1.tr w] set f2 [open flow2.tr w] # 创建5节点拓扑 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] ;# 汇聚节点 set n4 [$ns node] ;# 接收节点 $ns duplex-link $n0 $n3 2Mb 10ms DropTail $ns duplex-link $n1 $n3 2Mb 10ms DropTail $ns duplex-link $n2 $n3 2Mb 10ms DropTail $ns duplex-link $n3 $n4 2Mb 10ms DropTail # 定义记录过程 proc record {} { global sink0 sink1 sink2 f0 f1 f2 set ns [Simulator instance] set time 0.5 set bw0 [$sink0 set bytes_] set bw1 [$sink1 set bytes_] set bw2 [$sink2 set bytes_] set now [$ns now] puts $f0 $now [expr $bw0/$time*8/1000000] puts $f1 $now [expr $bw1/$time*8/1000000] puts $f2 $now [expr $bw2/$time*8/1000000] $sink0 set bytes_ 0 $sink1 set bytes_ 0 $sink2 set bytes_ 0 $ns at [expr $now$time] record } # 创建监测器 set sink0 [new Agent/LossMonitor] set sink1 [new Agent/LossMonitor] set sink2 [new Agent/LossMonitor] $ns attach-agent $n4 $sink0 $ns attach-agent $n4 $sink1 $ns attach-agent $n4 $sink2 # 启动记录 $ns at 0.0 record $ns at 10.0 $ns run4.2 结果可视化技巧运行后生成三个.tr文件使用Xgraph绘制对比图xgraph flow0.tr flow1.tr flow2.tr -geometry 800x400 -t 吞吐量对比 -x 时间(s) -y 吞吐量(Mbps)图表优化参数-nl不使用折线连接数据点-bar以柱状图显示-bg white设置白色背景-lw 2线宽设为2像素5. 常见问题百科全书5.1 编译类问题g: error: unrecognized command line option ‘-fno-builtin-log’修改ns-2.35/Makefile删除该编译选项libotcl.so: cannot open shared object file确认.bashrc中的LD_LIBRARY_PATH包含otcl库路径5.2 运行时报错nam: no display name确保已安装X11转发工具虚拟机用户需启用3D加速ns: finish: no such class检查proc finish的全局变量声明是否完整5.3 性能优化大型仿真建议关闭nam跟踪使用set ns [new Simulator -multicast on]启用多播支持对于无线仿真提前设置set val(chan) Channel/WirelessChannel
别再对着实验报告发愁了!手把手教你用NS2在Ubuntu 22.04上跑通第一个网络仿真(附完整代码)
发布时间:2026/5/28 2:43:14
零基础玩转NS2Ubuntu 22.04网络仿真从安装到可视化全攻略记得第一次接触NS2时我在实验室熬到凌晨三点面对满屏的报错信息几乎崩溃。现在回想起来那些依赖缺失、Tcl版本冲突的问题其实都有迹可循。本文将带你用最省力的方式在Ubuntu 22.04上一次性跑通第一个网络仿真包括nam动画演示和Xgraph性能分析——所有你可能会踩的坑我都提前帮你填平了。1. 环境准备打造专属NS2实验室1.1 系统选择与基础配置推荐使用原生Ubuntu 22.04 LTS非WSL这个长期支持版本与NS2的兼容性经过充分验证。如果是虚拟机环境建议分配至少2核CPU、4GB内存和30GB存储空间。执行以下命令更新系统sudo apt update sudo apt upgrade -y sudo apt install -y build-essential autoconf automake libxmu-dev注意避免使用root用户操作所有命令如无特殊说明都不需要sudo权限1.2 依赖库精准安装NS2的依赖就像拼图——少一块都会导致编译失败。这个组合经实测可完美适配Ubuntu 22.04sudo apt install -y tcl8.6 tk8.6 libotcl1.14 libx11-dev libxt-dev \ libssl-dev libffi-dev python3-dev zlib1g-dev常见问题排查报错cannot find -ltk8.6执行sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk8.6.so警告Xgraph: command not found额外安装sudo apt install -y xgraph2. NS2安装避坑指南2.1 源码安装标准化流程建议使用ns-allinone-2.35这个经典版本下载量超百万次wget https://downloads.sourceforge.net/project/nsnam/allinone/ns-allinone-2.35/ns-allinone-2.35.tar.gz tar xvf ns-allinone-2.35.tar.gz cd ns-allinone-2.35 ./install安装完成后将以下内容追加到~/.bashrcexport PATH$PATH:/home/你的用户名/ns-allinone-2.35/bin:/home/你的用户名/ns-allinone-2.35/tcl8.5.10/unix:/home/你的用户名/ns-allinone-2.35/tk8.5.10/unix export LD_LIBRARY_PATH/home/你的用户名/ns-allinone-2.35/otcl-1.14:/home/你的用户名/ns-allinone-2.35/lib export TCL_LIBRARY/home/你的用户名/ns-allinone-2.35/tcl8.5.10/library2.2 验证安装成功三步检验法终端输入ns应出现%提示符执行puts Hello NS2应输出字符串输入exit退出后执行nam应弹出图形窗口3. 第一个仿真实验动态网络可视化3.1 拓扑构建实战创建first_ns2.tcl文件以下代码构建了一个星型拓扑# 初始化模拟器 set ns [new Simulator] # 开启nam跟踪 set nf [open out.nam w] $ns namtrace-all $nf # 定义结束过程 proc finish {} { global ns nf $ns flush-trace close $nf exec nam out.nam exit 0 } # 创建4个节点 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] ;# 中心节点 set n3 [$ns node] # 建立双向链路 $ns duplex-link $n0 $n2 10Mb 10ms DropTail $ns duplex-link $n1 $n2 10Mb 10ms DropTail $ns duplex-link $n3 $n2 10Mb 10ms DropTail # 设置nam布局方向 $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right # 启动模拟 $ns at 5.0 finish $ns run运行命令ns first_ns2.tcl你将看到三个边缘节点通过中心节点互连nam窗口展示动态拓扑结构链路带宽和延迟参数可视化3.2 流量注入与性能分析扩展脚本实现真实流量模拟# 在节点n0和n3之间添加UDP流 set udp [new Agent/UDP] $ns attach-agent $n0 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null # 添加CBR流量 set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set packetSize_ 1000 $cbr set interval_ 0.005 $ns at 1.0 $cbr start $ns at 4.0 $cbr stop关键参数解析参数说明典型值packetSize_数据包大小(byte)500-1500interval_发送间隔(s)0.001-0.1rate_传输速率(bps)1M-10M4. 高级技巧Xgraph绘制性能图表4.1 多流对比实验创建xgraph_demo.tcl以下代码同时监测三条数据流set ns [new Simulator] # 开启三个跟踪文件 set f0 [open flow0.tr w] set f1 [open flow1.tr w] set f2 [open flow2.tr w] # 创建5节点拓扑 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] ;# 汇聚节点 set n4 [$ns node] ;# 接收节点 $ns duplex-link $n0 $n3 2Mb 10ms DropTail $ns duplex-link $n1 $n3 2Mb 10ms DropTail $ns duplex-link $n2 $n3 2Mb 10ms DropTail $ns duplex-link $n3 $n4 2Mb 10ms DropTail # 定义记录过程 proc record {} { global sink0 sink1 sink2 f0 f1 f2 set ns [Simulator instance] set time 0.5 set bw0 [$sink0 set bytes_] set bw1 [$sink1 set bytes_] set bw2 [$sink2 set bytes_] set now [$ns now] puts $f0 $now [expr $bw0/$time*8/1000000] puts $f1 $now [expr $bw1/$time*8/1000000] puts $f2 $now [expr $bw2/$time*8/1000000] $sink0 set bytes_ 0 $sink1 set bytes_ 0 $sink2 set bytes_ 0 $ns at [expr $now$time] record } # 创建监测器 set sink0 [new Agent/LossMonitor] set sink1 [new Agent/LossMonitor] set sink2 [new Agent/LossMonitor] $ns attach-agent $n4 $sink0 $ns attach-agent $n4 $sink1 $ns attach-agent $n4 $sink2 # 启动记录 $ns at 0.0 record $ns at 10.0 $ns run4.2 结果可视化技巧运行后生成三个.tr文件使用Xgraph绘制对比图xgraph flow0.tr flow1.tr flow2.tr -geometry 800x400 -t 吞吐量对比 -x 时间(s) -y 吞吐量(Mbps)图表优化参数-nl不使用折线连接数据点-bar以柱状图显示-bg white设置白色背景-lw 2线宽设为2像素5. 常见问题百科全书5.1 编译类问题g: error: unrecognized command line option ‘-fno-builtin-log’修改ns-2.35/Makefile删除该编译选项libotcl.so: cannot open shared object file确认.bashrc中的LD_LIBRARY_PATH包含otcl库路径5.2 运行时报错nam: no display name确保已安装X11转发工具虚拟机用户需启用3D加速ns: finish: no such class检查proc finish的全局变量声明是否完整5.3 性能优化大型仿真建议关闭nam跟踪使用set ns [new Simulator -multicast on]启用多播支持对于无线仿真提前设置set val(chan) Channel/WirelessChannel