NS2可以做什么,不可以做什么?

时间:2013-02-08 04:34:07

标签: simulation ns2

在提出问题之前,我想告诉我,我已经搜索了一个多月了。我会说我知道ns2,但我肯定能够理解你会说的任何事情[希望]

我想实现广度优先搜索(BFS)并在NS2中的无线移动节点拓扑中创建BFS树。 [让我们先做静态系统。]

我的挑战:向节点的所有邻居多播消息。

现在我在想象中想到了

  1. 节点将设置在那里。 [可行]
  2. 每个节点都能找到它的邻居。 [它可行吗?]或者我必须自己制作“团体”并做“加入团体”以形成这些邻居。
  3. 向邻居发送多播消息。 [可以使用“group”]但我希望有一些方法让节点知道我可以连接到什么并自行完成。
  4. 这些可能有哪些?

1 个答案:

答案 0 :(得分:3)

好的,所以在完成我的项目后,我想分享我是如何做到的。我还在学习,但是,我是这样做的。

场景是无线。

在NS中生成节点很简单:

  

设置节点(0)[$ ns node]

     

设置节点(1)[$ ns node]

其中nodes是一个数组。

设置节点的位置:

  

$ nodes(0)设置X_ 20.0

     

$ nodes(0)设置Y_ 100.0

您可以使用某种数学方程式来生成节点拓扑。即他们的定位。查看ns2-directory / tcl / ex / wireless-flooding.tcl。

为每个节点生成代理并将其与节点连接。

  

设置座席(0)[新座席/ MyAgent]

     

$ nodes(0)attach-agent $ agents(0)$ MESSAGE_PORT

由于协议的所有逻辑工作都在代理中完成,因此我们创建了一个MyPgent的cpp类。也可以在Makefile中添加它。

  

类MyAgent:公共代理{

     

//覆盖recv()函数。

     

//为此类添加命令函数,只要该类的对象被要求在tcl文件中执行某些操作,就会调用该函数。

     

//用于存储来自PING和PING_REPLY的邻居地址    std :: vector myNeighbors;

     

}

然后每个代理都广播PING消息并使用PING_REPLY消息回复给发件人。

这可以通过使用参数addr_ = -1

发送地址ns_addr_t来完成
 ns_addr_t naddr;
 naddr.addr_ = -1

这些消息是不同类型的数据包,并在cpp类中再次创建,如

  

枚举类型{PING,PING_REPLY};

     

班级HdrPing {

     

类型类型;

     

// getter和setter函数以及offset等其他变量。

     

}

为了编写接收任何消息的逻辑,这与我们的分布式协议的制作方式完全相同,我们覆盖了Agent的recv()

  

void MyAgent :: recv(Packet * p,Handle * h){

     

开关(HdrPing :: access(p) - > type){

    case PING:
    // send PING_REPLY back to sender and add the source of the packet p 
    // to my neighbor list. 

    // we can get it from ipHdr->saddr(), which is source address in the 
    // IP header of the packet.

    break;

    case PING_REPLY:
    // add the sender of messge to my neighbor list.
    break;

    // other types of messages are also programmed here.
  

} //关闭开关

     

}

通过这种方式,我知道谁是我的邻居。

可以添加更多类型的消息和更多功能。