NS2中Z=10.0时FANET的DSR路由未按多跳工作问题排查
核心现象
在NS2搭建的24节点FANET中,将所有节点Z坐标从0.0改为10.0后,NAM显示源节点Server1与目的节点Server2直接连通,未触发DSR多跳路由,而Z=0.0时路由行为正常。
根本原因
1. TwoRayGround传播模型的通信范围随高度骤增
你使用的Propagation/TwoRayGround模型会根据节点Z轴高度(天线高度)计算无线信号接收功率,核心公式为:
Pr = (Pt * Gt * Gr * λ² * h_t² * h_r²) / (d^4 * L)
其中h_t和h_r是发射/接收节点的Z坐标。当Z从0.0提升到10.0时,接收功率呈平方级增长,直接导致节点通信范围大幅扩大。
Server1与Server2的初始直线距离约为560米(计算:√[(490-5)² + (285-5)²] ≈ 560m),Z=0.0时,TwoRayGround模型因地面反射抵消效应,通信范围不足以覆盖该距离;而Z=10.0时,信号接收功率足够支撑远距离传输,两者直接进入彼此通信范围,自然无需多跳路由。
2. 未限制无线物理层的通信阈值
默认Phy/WirelessPhy的RXThresh_(接收灵敏度阈值)为3.652e-10,对应约250米的通信半径,但在Z=10.0的TwoRayGround模型下,该阈值对应的实际通信距离会远大于250米,直接覆盖了源目节点的间距。
3. NAM可视化的潜在误导
NAM的“直接连线”仅表示节点在通信范围内,但若trace文件中存在DSR路由请求(RREQ)/路由回复(RREP)记录,可能只是NAM未正确渲染多跳路径,但根据你的描述,实际是未触发DSR,因此核心原因还是通信范围问题。
代码与概念修正建议
1. 调整无线物理层参数,缩小通信范围
在node-config配置前添加以下代码,降低接收阈值,强制缩小通信半径:
# 调整接收阈值,将通信半径限制在200米以内(示例值) Phy/WirelessPhy set RXThresh_ 1.0e-11 # 可选:调整载波侦听阈值,保持与接收阈值匹配 Phy/WirelessPhy set CSThresh_ 1.0e-11
2. 更换传播模型(可选)
若无需模拟地面反射,改用Propagation/FreeSpace模型,其通信范围仅随距离平方衰减,Z轴高度对通信范围的影响极小:
set val(prop) Propagation/FreeSpace ;# 替换原TwoRayGround模型
3. 验证实际路由行为
查看dsr.tr trace文件,搜索关键字:
- 若存在
s 1 2 tcp类记录(源1,目的2),说明确实直接通信; - 若存在
RREQ/RREP记录,说明DSR已触发,可能是NAM显示问题。
4. 调整节点间距(可选)
增大Server1与Server2的初始距离,例如将Server2的初始位置改为X_ 495.0 Y_ 395.0,即使Z=10.0也超出默认通信范围。
修正后的核心代码片段(示例)
set val(chan) Channel/WirelessChannel ;# channel type set val(prop) Propagation/TwoRayGround ;# radio-propagation model set val(netif) Phy/WirelessPhy ;# network interface type # 新增:调整无线物理层阈值,缩小通信范围 Phy/WirelessPhy set RXThresh_ 1.0e-11 Phy/WirelessPhy set CSThresh_ 1.0e-11 set val(mac) Mac/802_11 ;# MAC type # ... 其余配置保持不变 ... ### Setting The Initial Positions of Nodes $Server1 set X_ 5.0 $Server1 set Y_ 5.0 $Server1 set Z_ 10.0 $Server2 set X_ 490.0 $Server2 set Y_ 285.0 $Server2 set Z_ 10.0 # ... 其余代码保持不变 ...
内容的提问来源于stack exchange,提问作者rony01

