<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ARP的請求與應答都是依賴ARP報文結構進行的,ARP報文是放在以太網數據幀中進行發送的,所以下圖會將以太網首部一同畫出來,具體見圖 10?5。 ![](https://box.kancloud.cn/89188704ea640dcd055e66600299866c_927x372.png) 在ARP表建立前,主機并不知道目標MAC地址,所以在一開始的時候只能通過廣播的方式將ARP請求包發送出去,處于同一局域網的主機都能接收到廣播的數據包。所以一開始目標MAC地址是FF-FF-FF-FF-FF-FF,而以太網首部的幀類型是有多種,對于ARP數據包來說,其值為0x0806,對于IP數據報來說,其值為0x0800,此處我們只需簡單了解一下即可,無需記住。 接下來就是ARP報文部分,ARP也是一種協議,也有ARP首部,在ARP首部一開始的2個字節存儲的是硬件類型,表示要知道目標網卡的硬件類型,其中,值為1表示以太網地址,其他還可能表示令牌環地址;接下來還有2字節的協議類型,其中,0x0800表示IP地址,其他還可能是ICMP/IGMP等;接下來有1個字節表示硬件地址長度,指出該報文中硬件地址的長度,對于以太網,它的值為6;還有1字節的協議地址長度,對于ARP請求或應答來說,該值為4;ARP首部最后的op字段用于記錄ARP操作的類型,分別是: ? ARP請求,其值為1。 ? ARP應答,其值為2。 ? RARP請求,其值為3。 ? RARP應答,其值為4。 我們只關心ARP的請求與應答即可,RARP是逆地址解析協議,在這里我們就不用去了解,它在網絡中基本已經被淘汰,用于主機在啟動的時候獲得自己的IP地址。 對于ARP首部后面的四個字段分別是源MAC地址、源IP地址、目標MAC地址、目標IP地址,這些就是比較簡單的了。 在ARP請求包中,除了目標MAC地址是未知以為,其他地址3個字段都應該填寫正確,然后通過廣播的形式將該ARP請求包發送出去,目標主機接收到該請求包后判斷目標IP地址與自身IP地址是否一致,如果一致則返回ARP應答;對應ARP應答包,只需要把自己的MAC地址填充進去,并且請求包的源主機信息與目標主機信息進行交換位置,然后把op字段設置為2,就返回ARP應答包即可。 注意,在發送ARP請求包的時候,以太網首部的目標MAC地址是FF-FF-FF-FF-FF-FF,而ARP首部目標MAC地址為00-00-00-00-00-00-00,這里千萬不要混淆。 在LwIP中,使用了大量的數據結構對ARP進行描述,比較麻煩,我們暫時不用去學它,只要知道原理是這樣子的即可,關于這些數據結構的定義位于etharp.h 、ethernet.h等頭文件中,具體見代碼清單 10-6。 ``` 1 #define ETH_HWADDR_LEN 6 //以太網地址長度 2 3 truct eth_addr //以太網地址結構體 4 { 5 PACK_STRUCT_FLD_8(u8_t addr[ETH_HWADDR_LEN]); 6 } PACK_STRUCT_STRUCT; 7 8 struct eth_hdr //以太網首部 9 { 10 PACK_STRUCT_FLD_S(struct eth_addr dest); //以太網目標MAC地址 11 PACK_STRUCT_FLD_S(struct eth_addr src); //以太網源MAC地址 12 PACK_STRUCT_FIELD(u16_t type); //幀類型 13 } PACK_STRUCT_STRUCT; 14 15 struct etharp_hdr //ARP報文 16 { 17 PACK_STRUCT_FIELD(u16_t hwtype); //硬件類型 18 PACK_STRUCT_FIELD(u16_t proto); //協議類型 19 PACK_STRUCT_FLD_8(u8_t hwlen); //硬件地址長度 20 PACK_STRUCT_FLD_8(u8_t protolen); //協議地址長度 21 PACK_STRUCT_FIELD(u16_t opcode); //op字段 22 /* 以上是ARP報文首部 */ 23 24 PACK_STRUCT_FLD_S(struct eth_addr shwaddr); //源MAC地址 25 PACK_STRUCT_FLD_S(struct ip4_addr_wordaligned sipaddr);//源ip地址 26 PACK_STRUCT_FLD_S(struct eth_addr dhwaddr); //目標MAC地址 27 PACK_STRUCT_FLD_S(struct ip4_addr_wordaligned dipaddr);//目標ip地址 28 } PACK_STRUCT_STRUCT; 29 30 enum etharp_opcode //op字段操作 31 { 32 ARP_REQUEST = 1, //請求包 33 ARP_REPLY = 2 //應答包 34 }; ``` 為了加深理解,我們使用wireshark網絡抓包工具形象地講解報文格式與內容,關于wireshark網絡抓包工具的使用方式我們就不做過多講解,打開工具,然后抓取電腦網絡中的數據包,具體見圖 10?6。 ![](https://box.kancloud.cn/a71e9bfabdc65be0e4708b7a9a48de2c_1425x800.png) 然后我們找到ARP協議,雙擊進行查看ARP協議中的數據包,然后我們可以看到第一個ARP協議是一個請求包,而第二個ARP協議是一個應答包,具體見圖 10?7與圖 10?8 。 ![](https://box.kancloud.cn/ea388ea8e5b36ff3baa7d2441cde8ad4_868x531.png) ![](https://box.kancloud.cn/66e2cdccc3aaf78cd1f733b99d8b5dab_868x506.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看