1. 程式人生 > >NS3網絡仿真(9): 構建以太網幀

NS3網絡仿真(9): 構建以太網幀

構造 style lib ans 嘗試 pos height prot art

快樂蝦

http://blog.csdn.net/lights_joy/

歡迎轉載,但請保留作者信息


NS3使用了一個叫Packet的類來表示一個數據幀,本節嘗試用它構造一個以太網幀。


以下是一個典型的ARP請求幀:

技術分享


我們就用Packet來創建一個同樣的幀。

首先創建一個空的數據包:

Ptr<Packet>pkt = Create<Packet>();


接下來加上ARP頭:


//加入arp

ArpHeader ah;

ah.SetRequest(Mac48Address("00:50:56:c0:00:01"),"192.168.24.1"

,

Mac48Address("00:0c:29:e6:e9:cd"),"192.168.24.129");

pkt->AddHeader(ah);


這裏的SetRequest用以設置ARP包的內容。


/**

* \brief Set the ARP request parameters

* \param sourceHardwareAddress the sourcehardware address

* \param sourceProtocolAddress the source IPaddress

* \param destinationHardwareAddress thedestination hardware address (usually the broadcast address)

* \param destinationProtocolAddress thedestination IP address

*/


void SetRequest (AddresssourceHardwareAddress,

Ipv4AddresssourceProtocolAddress,

AddressdestinationHardwareAddress,

Ipv4AddressdestinationProtocolAddress);


在內存中能夠非常清楚地看見此操作加入的內容:

技術分享


接下來為此ARP幀加上以太幀的幀頭:


//加入以太網頭

EthernetHeader eh;

eh.SetDestination("00:0c:29:e6:e9:cd");

eh.SetSource("00:50:56:c0:00:01");

eh.SetLengthType(ArpL3Protocol::PROT_NUMBER);

pkt->AddHeader(eh);


再看看生成的數據包的內容:

技術分享


哈哈。這就和我們從網絡上抓下來的包一模一樣了!




??

NS3網絡仿真(9): 構建以太網幀