1 適用範圍
本文檔適用於分析SylixOS網絡相關問題的技術人員。
2 ARP介紹
地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機,並接收返回消息,以此確定目標的物理地址;收到返回消息後將該IP地址和物理地址存入本機ARP緩存中並保留一定時間,下次請求時直接查詢ARP緩存以節約資源。基本流程如圖 2.1所示。
3 Lwip ARP介紹
3.1 ARP表結構
ARP表結構是由ARP單元結構組成的數組,最大長度默認爲256。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所示。
圖3.1 ARP請求發送流程圖
3.4 ARP響應接收流程
ARP請求包廣播發送後,對應目的IP的設備接收到後就會回覆ARP響應提供自己的MAC地址。ARP響應包的接收流程如圖 3.2所示。