快乐虾

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

欢迎转载,但请保留作者信息

在NS3使用了一个叫Packet的类来表示一个数据帧,本节尝试用它构造一个以太网帧。

以下是一个典型的ARP请求帧:

NS3网络仿真(9): 构建以太网帧-LMLPHP

我们就用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);

在内存中能够非常清楚地看见此操作加入的内容:

NS3网络仿真(9): 构建以太网帧-LMLPHP

接下来为此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);

再看看生成的数据包的内容:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

哈哈。这就和我们从网络上抓下来的包一模一样了!


05-11 13:42