lwIP ARP協議分析

2021-06-19 09:28:36 字數 1953 閱讀 8708

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

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

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

不送如ip層。

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

-- arp表狀態

enum etharp_state ;

-- arp表項結構

struct etharp_entry ;

-- arp 鏈路層協議分組

struct etharp_hdr

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

中被傳送。

lwIP ARP協議分析0

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

lwIP ARP協議分析0

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

小議LWIP ARP協議1

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