LWIP手記 A arp高速緩衝區清零

2021-07-26 16:53:01 字數 980 閱讀 1734

arp快取記憶體裡面存放了最近的internet位址到mac位址之間的對映記錄。快取記憶體的每一項的生存時間一般是20分鐘,起始時間從被建立時開始計算。lwip裡面的全域性變數arp_talbe的結構體成員ctime就是記錄這個時間的。這裡注意,每一項都有乙個生存時間,每一項都是單獨計時的。另外注意,如果對乙個不存在的主機發出arp請求,一般設定超時時間是3分鐘。這個在lwip裡面似乎沒有看到。

何時重設超時值?卷1的第4章說「」「host requirements rfc表明即使表項正在使用時,超時值也應該啟動,但是大多數從伯克利系統演變而來的系統沒有這樣做--它們每次都是在訪問表項的時候重設超時值。」

那麼liwp是何時設定超時值得呢?

我們這裡討論遮蔽dubug的情況。如果設定//#define lwip_debug  那麼在etharp_tmr裡面會有這個函式etharp_free_entry內部有

#ifdef lwip_debug

/* for debugging, clean out the complete entry */

arp_table[i].ctime = 0;

arp_table[i].netif = null;

ip_addr_set_zero(&arp_table[i].ipaddr);

arp_table[i].ethaddr = ethzero;

#endif /* lwip_debug */

所以下面討論不定義debug的情況。

首先是呼叫etharp_find_entry進行對應條目ctime清零,然後在函式etharp_update_arp_entry對mac位址賦值且ctime又清零。

然後超時,然後mac位址保持,ctime這個計數器也是保持的,就是保持240這個數值。(為什麼240?因為240 * 5=20分鐘。5是etharp_tmr這個函式的引數),然後把state變為empty。

然後下次在執行傳送ip的時候,然後重複以前步驟(注意重複的過程中,後來的mac將以前的覆蓋)。

LWIP手記 A arp胡思亂想

今天看了維基百科的arp攻擊介紹,裡面寫到 欺騙 e6 ac ba e9 a8 99 簡單案例分析 這裡用乙個最簡單的案例來說明arp欺騙的核心步驟。假設在乙個lan裡,只有三颱主機a b c,且c是攻擊者。攻擊者聆聽區域網上的mac位址。它只要收到兩台主機洪氾的arp request,就可以進行欺...

lwip包緩衝區pbufs

lwip資訊包是儲存在pbufs中,pbufs作為lwip的資料緩衝區,是由pbuf結構組成的鍊錶。資料存在pbufs鏈中各個pbuf節點所指向儲存塊中。pbuf結構體的定義如下 struct pbuf pbuf中的type成員表示pbuf的型別 pbuf一共有四種型別 在pbuf.h中的型別包含在...

快取記憶體與緩衝區

作業系統中使用磁碟快取記憶體技術來提高磁碟的i o速度,對快取記憶體複製的訪問要比原始資料訪問更為高效。例如,正在執行的程序的指令既儲存在磁碟上,也儲存在物理記憶體上,也被複製到cpu的二級和一級快取記憶體中。不過,磁碟快取記憶體技術不同於通常意義下的介於cpu與記憶體之間的小容量高速儲存器,而是指...