zoukankan      html  css  js  c++  java
  • 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包的内容。


      /**

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


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


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




    
  • 相关阅读:
    盛最多水的容器
    寻找2个有序数组的中位数
    从链表中删除总和值为0的连续节点
    链表中的下一个更大节点
    链表的中间节点
    循环有序链表的插入
    设计链表
    链表组件
    扁平化多级双向链表
    将二叉搜索数转化为排序的双向链表
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7162707.html
Copyright © 2011-2022 走看看