lwIP ARP協議分析0

2021-09-09 03:48:11 字數 2143 閱讀 9983

arp 協議分析

總的來說,lwip將鏈路層ethernet的協議分組格式分為ether和etherarp

分開處理。ip分組先進入etharp_ip_input更新一下arp表項,然後直接進入

netif的input傳遞給上層ip層。arp分組直接進入etharp_arp_input。

不送如ip層。

奇怪的是,lwip把ether header的結構定義在etharp中。

-arp 資料結構

-- arp表狀態

enum etharp_state ;

-- arp表項結構

struct etharp_entry ;

-- arp 鏈路層協議分組

struct etharp_hdr

- arp 函式

void etharp_init();

初始化所有靜態arp表項,狀態為empty。

static err_t update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags);

首先排除廣播、多播及any位址。然後,

將ipaddr及ethaddr對加入arp表項中,該表項索引由find_entry獲得。

加入後,將該arp表項中還未傳送的ip包(這些ip包是由etharp_ouput函式,在

處理ip包傳送時,由於未找到對應ip的mac位址,由etharp_query加入到

pending arp的未傳送ip包煉表中。現在我們得到mac和ip對應值後,就

可以將這些ip包傳送出去),傳送到netif驅動。

該函式被etharp_ip_input及etharp_arp_input呼叫。

static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags);

查詢包含ipaddr的表項。

查詢優先順序:1. pending 2. stable 3. empty。

find_entry總是根據這些優先順序查詢是否由匹配項,如果有,立刻返回該項

索引。否則根據優先順序產看是否有過期表項,並覆蓋它。

void etharp_ip_input(struct netif *netif, struct pbuf *p);

該函式是再ip分組傳上ip層之前,將ip分組的mac和ip對映到

arp表項中做更新。這樣的設計好像比較浪費。完全可以加大arp

表項,去除該過程

void etharp_arp_input(struct netif *netif,

struct eth_addr *ethaddr, struct pbuf *p);

arp分組到來,直接交給該函式處理。

無論netif的ip位址是否被配置過,都將該arp分組的源ip和mac位址

加入到arp表項中。如果乙個arp請求的目的ip位址是本地ip位址。

則傳送response arp分組。

err_t etharp_output(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q);

該函式分開處理兩種位址型別的網路層包,

1)多播及廣播。直接呼叫netif->linkoutput傳送出去,該函式為網絡卡驅動。

2)單播。單播的ip包又分三種處理方式。a. 目的ip在arp表項中,並且stable。

則直接構造以太頭,呼叫網絡卡驅動,傳送以太幀。b. 目的ip不在arp表項中,

修改arp表項狀態為pending,並呼叫etharp_request,傳送arp request。

c. 目的ip在arp表項中。但狀態為pending(這個狀態是由b條件引起的,可能

arp response在處理該條件時還為返回)。將待傳送的ip包的緩衝區pbuf_ref

替換成pbuf_pool或pbuf_ram(暫時不知道為啥)。這些包將會在update_arp_input

中被傳送。

- arp 協議處理流程圖

lwIP ARP協議分析0

arp 協議分析 總的來說,lwip將鏈路層ethernet的協議分組格式分為ether和etherarp 分開處理。ip分組先進入etharp ip input更新一下arp表項,然後直接進入 netif的input傳遞給上層ip層。arp分組直接進入etharp arp input。不送如ip層...

lwIP ARP協議分析

總的來說,lwip將鏈路層ethernet的協議分組格式分為ether和etherarp 分開處理。ip分組先進入etharp ip input更新一下arp表項,然後直接進入 netif的input傳遞給上層ip層。arp分組直接進入etharp arp input。不送如ip層。奇怪的是,lwi...

小議LWIP ARP協議1

在tcp ip網路中,arp協議始終是相當重要的乙個環節,它主要是負責將32位的ip位址 ipv6則是128位 對映為48位的mac位址 規定每一種網路通訊裝置具備唯一的mac位址 從而可以在底層資料鏈路層中標記不同的網路通訊裝置。由於ip位址和mac位址沒有固定的對映規則,所以為了描述這種對映關係...