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

时间:2024-03-09 09:23:39

快乐虾

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);


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


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