SylixOS網絡協議棧---Lwip協議棧之ARP表

1 適用範圍

本文檔適用於分析SylixOS網絡相關問題的技術人員。

 

2 ARP介紹

       地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機,並接收返回消息,以此確定目標的物理地址;收到返回消息後將該IP地址和物理地址存入本機ARP緩存中並保留一定時間,下次請求時直接查詢ARP緩存以節約資源。基本流程如圖 2.1所示。

圖片.png

                                                       圖2.1 ARP請求基本流程

3 Lwip ARP介紹

3.1 ARP表結構

ARP表結構是由ARP單元結構組成的數組,最大長度默認爲256。ARP單元結構如程序清單 3.1 ARP單元結構所示。

                           程序清單 3.1 ARP單元結構

struct etharp_entry {

    struct etharp_q_entry *q;         /*  即將發送的包隊列  */

    ip4_addr_t ipaddr;                   /*  IP地址                    */

    struct netif *netif;                    /*  網卡                       */

    struct eth_addr ethaddr;         /*  MAC地址               */

    u16_t ctime;                            /*  生存時間                */

    u8_t state;                               /*  單元狀態                */

};

 

3.2 ARP狀態

       ARP有三種基本狀態EMPTY、PENDING和STABLE。EMPTY表示當前ARP單元位置空,可以使用。PENDING表示已發送正在等待ARP響應。STABLE表示當前ARP單元數據有效,可直接使用緩存中的MAC數據。

 

3.3 ARP請求發送流程

      IP數據包在發送時都會經過發送接口etharp_output()。etharp_output()在發送IP數據包時會根據目的IP地址查詢ARP表。如果爲找到對應節點則使用第一個EMPTY狀態節點,將其改爲PENDING狀態,將數據包接入此節點的即將發送包隊列,再發送ARP請求。若狀態爲PENDING,則直接將數據包接入此節點的即將發送包隊列。若狀態爲STABLE,則使用節點內的目的MAC,再檢查此節點時間是否超時,若超時則重新發送ARP請求。詳細流程如圖 3.1所示。

圖片.png

                                                              圖3.1 ARP請求發送流程圖

 

3.4 ARP響應接收流程

       ARP請求包廣播發送後,對應目的IP的設備接收到後就會回覆ARP響應提供自己的MAC地址。ARP響應包的接收流程如圖 3.2所示。

圖片.png

                                                                圖3.2 ARP響應接收流程


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章