arp所實現的功能就是通過ip位址獲取到mac位址,並且將ip和mac對映到一起,儲存到arp表中.
dest mac
src mac
frame type
hardware type
protocol type
hardware addr len
protocol addr len
opsend mac addr
send ip addr
dest mac addr
dest ip addr66
2221
1264
64lwip中arp層資料報輸入處理流程
lwip中arp層處理資料報輸出流程
arp表組成
arp快取表是arp協議的核心.傳送資料報時,需要查詢arp表得到目的位址的mac位址;arp還需要不斷的處理arp請求包和應答包,以保證arp表中的有效性.
arp快取表實質上就是對快取表的建立,更新,查詢等操作.
struct etharp_entry
struct etharp_q_entry *q
需使能arp_queueing,做成鍊錶形式
struct pbuf *q
不使能arp_queueing時,單個快取包
ip addr
ip addr
ethaddr
mac addr
ctime
cleanup time
state
empty(0),pending(1),stable(2)
在lwip中的arp快取表的大小為10個表項,在opt.h中配置.
那麼問題來了,如果arp快取表滿了,這時候又有新的ip位址發來新的arp請求,那麼lwip是如何處理這種情況的呢?
關於arp快取表的更新,有兩個重要的函式:etharp_update_arp_entry
和etharp_find_entry
.這兩個函式負責的是arp快取表的查詢和更新操作.無論是傳送資料報還是接受資料報,都需要經過這兩個函式.
收發資料時查詢/更新arp表
arp表的操作過程如下圖所示.
關鍵操作如下:
1.有匹配的arp表項不需要建立直接返回
2.無匹配表項時,先使用empty狀態的表項
3.無empty時,先替換最老pending無資料快取的表項.再替換最老pending有資料快取的表項
4.最後才替換最老stable的表項
定時更新arp表
除了收發資料時,查詢或更新arp快取表外,arp協議還需要定時檢測arp快取表的表項,是否需要更新.這是為了保證arp表中的位址的有效性,這是因為網路硬體狀態隨時發生變化,可能裝置已經不在此網路中,就沒必要佔著茅坑不拉屎了.lwip中使用etharp_tmr
來定時檢測arp快取表,當表項的ctime
大於arp_maxage
時,就清空該表項
lwip協議棧學習 udp
書籍 嵌入式網路那些事 lwip協議 udp協議的優點 1 基於ip協議,無連線的使用者資料報協議,適用於傳送大批量資料,2 實時性比較高,適用於嵌入式網路 udp sendto通過呼叫函式udp sendto if完成報文的組裝和傳送,在呼叫udp sendto if之前,與ip層進行互動操作,機...
LwIP協議棧介面
協議棧api函式 1 netconn new udp tcp struct netconn netconn new enum netconn type t 為新連線申請乙個連線結構netconn空間 2 netconn delete udp tcp err t netconn delete stru...
LwIP協議棧介面
協議棧api函式 1 netconn new udp tcp struct netconn netconn new enum netconn type t 為新連線申請乙個連線結構netconn空間 2 netconn delete udp tcp err t netconn delete stru...