【lwip】08-ARP協議一圖筆記及源碼實現

目錄

  • 前言
  • 8.1 IP地址與MAC地址
  • 8.2 ARP協議簡介
  • 8.3 ARP協議報文
  • 8.4 ARP緩存表
    • 8.4.1 ARP緩存表簡介
    • 8.4.2 LWIP中的緩存表
    • 8.4.3 ARP緩存表數據結構
    • 8.4.4 ARP緩存表數據緩沖隊列
    • 8.4.5 ARP緩存表entry狀態信息
    • 8.4.6 ARP緩存表超時處理
    • 8.4.7 ARP緩存表entry更新
  • 8.5 ARP協議超時機制框圖
  • 8.6 ARP收發報文數據流圖
  • 8.7 ARP報文組包源碼實現
    • 8.7.1 ARP報文數據結構
    • 8.7.2 ARP報文組建發送函數(基函數)
    • 8.7.3 發送ARP請求包
    • 8.7.4 發送ARP IP探測包
    • 8.7.5 發送ARP IP宣告包
  • 8.8 數據包發送分析
    • 8.8.1 數據發包處理簡述(ARP相關)
    • 8.8.2 etharp_output():IP數據包是否ARP協議處理
    • 8.8.3 etharp_output_to_arp_index():需要維護arp entry的IP數據包轉發函數
    • 8.8.4 etharp_query():需要發起ARP請求的IP數據包轉發函數
    • 8.8.5 etharp_find_entry():查找可被新建的arp entry
  • 8.9 數據包接收分析
  • 8.10 LWIP ARP一圖筆記
前言主要簡述TCPIP協議族相關的 。
ARP協議源碼在etharp.c和etharp.h中,也是本次筆記的主要內容 。
ARP源碼實現的重要數據結構:
  • ARP緩存表 。
  • ARP報文 。
原文:李柱明博客
8.1 IP地址與MAC地址TCP/IP協議的網絡層有自己的IP地址 。
單看網絡層,傳輸數據包時只需要知道目標主機的IP地址即可 。
但是網絡層數據包下傳到鏈路層時,鏈路層需要知道下一個節點的MAC地址,才能發包 。
為了實現網絡層對MAC地址無感,又能實現數據包收發,就需要把IP地址和MAC地址綁定 。
一個網卡,有IP地址,而網卡對接物理設備時,物理設備有MAC地址,可以把IP地址和網卡設備MAC地址綁定 。
而有時候,IP地址可能是動態的,即是當前網卡設備根據需求被賦予不同的IP,所以IP地址與MAC地址映射也需要動態才能更好地把網絡層和鏈路層分割 。
8.2 ARP協議簡介地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議 。
主機A知道主機B的ip地址,但是在二層鏈路,也就是數據鏈路層,是通過mac地址進行轉發的,通過ARP協議實現IP和MAC地址綁定 。
ARP協議有靜態獲取和動態獲取:
  • 靜態獲取:即是手動配置ARP映射表 。
  • 動態獲取:主機通過ARP協議主機獲取、主機維護ARP映射表 。

【lwip】08-ARP協議一圖筆記及源碼實現

文章插圖
8.3 ARP協議報文ARP請求和應答分組的格式如圖:
【lwip】08-ARP協議一圖筆記及源碼實現

文章插圖
以太網首部:
  • 目的MAC(6):鏈路層的數據幀的下一個目標結點設備的MAC 。當攜帶ARP請求報文時,以太網目的地址MAC為廣播地址:0xFFFFFF 。
  • 源MAC(6):當前設備的MAC 。
  • 幀類型(2):為0x0806時,表示ARP報文 。
ARP報文: