ns2中广播代理实现中的问题

1.  根据网上的说法,在发包的广播代理中添加包头时加入:

          hdr_ip* iph = HDR_IP(p);
    iph->daddr() = IP_BROADCAST;
     即可实现广播

2.  为了达到广播的效果,一般需要设置ttl即跳数,广播为1跳。跳数可在1中同样位置加入:

                iph->ttl_ = n;

     进行设置,

     但是设置后出现问题:从广播节点发出的包经过aodv至目的节点,trace文件中显示目的节点路由层收到了广播包,但目的节点处的代理并没有接到路由层的转发。原因出在ttl_值的设定上(比较诡异,发现错误时完全木有想到哦),设置为1则路由层不会向上转发至代理,设置为2即可。这样既能实现目的节点处代理的接收又能满足广播的跳数要求。

      不明确为什么ttl_会影响路由层向上层代理的转发,向上转发也算一跳?


ps: 

      ns2中代理需要connect,没有该操作或者connect的对象不在通信范围内的话会报错如下:

       _o44: no target for slot -1
        _o44 type: Classifier/Port
content dump:
classifier _o44
        0 offset
        0 shift
        2147483647 mask
        2 slots
                slot 0: _o56 (CMUTrace/Recv)
                slot 255: _o46 (CMUTrace/Recv)
---------- Finished standard no-slot{} default handler ----------

但实际上作为广播节点,在ad-hoc网络中发包的对象往往都不固定,或者说很有可能移动出通信范围,因此connect到固定的目标不现实,因此有如下解决方法(汗一个,折腾了两天,甚至都用god找邻居列表,最后发现这么简单,so easy噻):

代理可以与自己连接,当然这种连接对于普通的单播代理没有意义,但对于广播代理来说却能很好的解决connect的不固定问题。连接到自身既能避免因为连接对象处于通信范围外带来的报错,又能很好的完成广播任务,被通信范围内的节点接收。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值