NS2中無ARP的無線網絡模擬

Wireless Simulation in NS2 without ARP

參考資料: ARP協議分析 http://sec.chinabyte.com/484/8578484.shtml

 

ARP(Address Resolution Protocol,地址解析協議) 是屬於數據鏈路層的協議,用於將網絡節點的網絡地址(IP地址)轉化為硬件地址(MAC地址).以太網中的數據幀通過硬件地址而非網絡地址來確定接口.但是,當前的某些非使用TCP/IP協議的無錫網絡(如無限感測器網絡, Wireless Sensor Network),節點可能只具有簡單的節點標識,不存在MAC地址和IP地址之間的相互映射.因此,在節點大規模部署的無線網絡系統的模擬中,節點ARP封包的廣播也會導致對網絡性能評測的影響.

 

[方法]

以下步驟在NS2.31版本上完成,其他版本可相應參考.

1.         修改mac/mac.cc

//static int MacIndex = 0; 不使用該變量生成MAC地址index_

 

Mac::Mac() :

       BiConnector(), abstract_(0), netif_(0), tap_(0), ll_(0), channel_(0), callback_(0),

       hRes_(this), hSend_(this), state_(MAC_IDLE), pktRx_(0), pktTx_(0)

{

       //index_ = MacIndex++; 不使用該方法生成MAC地址index_

       bind ("index_", &index_);  //index_變量和tcl空間中的index_變量綁定

       bind_bw("bandwidth_", &bandwidth_);

       bind_time("delay_", &delay_);

       bind_bool("abstract_", &abstract_);

}

 

2.         修改tcl/lib/ns-default.tcl

#

# Wireless simulation support

#

 

Mac set debug_ false

Mac set index_ -1 ; #tcl空間的index_變量賦初始值

ARPTable set debug_ false

ARPTable set avoidReordering_ false ; #not used

God set debug_ false

 

3.         修改tcl/lib/ns-mobilenode.tcl

       set nullAgent_ [$ns set nullAgent_]

       set netif $netif_($t)

       set mac $mac_($t)

# IP地址id_直接賦予MAC地址index_

$mac set index_ [$self set id_]

       set ifq $ifq_($t)

       set ll $ll_($t)

 

4.         修改mac/arp.cc中的arpresolve函數

int

ARPTable::arpresolve(nsaddr_t dst, Packet *p, LL *ll)

{

    ARPEntry *llinfo ;

      

       assert(initialized());

// 根據上文的修改,每個節點的id_index_相同

// 在傳輸時只需要將封包中的下一跳MAC地址設為網絡地址ch->next_hop_即可

// 下一跳節點的網絡地址ch->next_hop_在節點的路由層時已經確定,這裡直接使用

hdr_cmn *ch = HDR_CMN(p);

       mac_->hdr_dst((char*) HDR_MAC(p), ch->next_hop_);

       return 0;

}

 

1.         重新編譯NS2,在模擬Script中將MAC Trace選項打開,觀察模擬結果.

 

Contact Information

方維維

Email: fangvv@gmail.com

Website: http://sites.google.com/site/fangvv