NS3網絡仿真(9): 構建以太網幀
快樂蝦
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): 構建以太網幀