船商; 在二層交換機環境下,當通(tōng)信雙方持年森續交互數據時(shí),會(huì)不(bù)斷命文話中雙方主機的MAC轉發表項,使其處于一個熱狀态。當某一主機自黃長(cháng)時(shí)間不(bù)與外界聯系時草樹(shí),該主機的MAC轉發表項就會(huì)長的冷(cháng)時(shí)間不(bù)被使用,其為(wèi)冷狀态。MAC通年地址老化意思就是MAC轉發表項長(cháng)時(sh志就í)間不(bù)用到,觸發老化機制将其從表項中清除。樂上表項到底要到多冷的狀态,具體是多長(cháng)時(shí)間不(bù)用到才購謝被老化,這個時(shí)間叫做老化時(shí)間。
&nb分林sp;MAC地址為(wèi)什麼要老化?銀兵要做老化的主要原因是MAC轉發表項不(bù)夠用,換更大(d靜還à)容量則比較費錢。産品在有限的資(zī)源下對雨總是想幹點更大(dà)的事情。出發點是好(hǎo)的,現實也是允許的。算術交換機允許做老化是跟他(tā)的應用場景、網絡通(tō為家ng)信模型相關的。流量交互越密集、節點分布越離散對MAC轉發表的容量要很離求越大(dà),反之容量可以較小。老化就是在容量和時(shí男會)間的兩個維度上做出的一種優化策略,核心是一種對成本的優化考慮。将理論的容國男量大(dà)小縮減,調整老化的時(shí)間長(cháng)短(duǎn)作算,使其達到一個均衡穩定狀态。這一狀态是指網絡的通(tōng門匠)信服務質量是可被接受的。一味的調小轉發表容量和縮短(duǎn)音門老化時(shí)間,會(huì)讓網絡通(tōng)信産他行生不(bù)可容忍的服務質量。故在不(bù)同的應用場景下,交換機的MAC轉著文發表容量不(bù)同、老化時(shí)間也不(bù)盡相等。體綠
MAC地址問子老化是以時(shí)間為(wèi)參考進行處理的,故在MAC轉發表員事字段中需要新設置時(shí)間戳字段,用以房志記錄MAC轉發表項的最新使用時(shí)間。MAC轉懂一發表項的定義修改如(rú)下:
struct row_port_匠劇mac
{
&n頻也bsp; u8 port;
u8 p草廠ad;/*内存對齊*/
u8 ma家睡c[MAC_LEN];
 厭唱; struct timeval tv;/*記錄MAC最新更拿看新時(shí)間*/
}
&藍個nbsp; 1)老化方法
相路
每次器山MAC查表命中都要進行MAC表項的時(shí)間更新,MAC轉發在科表的老化要根據表項的更新時(shí)間來判斷,與明河當前檢查時(shí)間相比較,如(rú)果超過了預先設定的閥值則将該表項器長老化。老化在交換機中的具體實現是怎樣的?以下講述兩種方法。一種是傳統了頻較好(hǎo)理解的老化線程方法;另一種是本平台實現場木鐘景下的最大(dà)化資(zī)源優化方法——話笑X方法。
老化線程的方法是指制靜,通(tōng)過啟動額外的專門線程,負責掃描整個MAC轉發表,逐項比較鐵也表項時(shí)間是否達到老化要求,從而做出正确的老化行為(wèi)。該市有方法的實現方法即是線程循環、遍曆表項、比較時(shí)間、清除表日個項、休眠、進入下次循環。該方法實現簡單,也比較适合硬件實現。
腦聽
X方法是指不(b離村ù)采用額外線程輪詢遍曆的方式實現老化,那不(bù)遍曆也火,不(bù)判斷如(rú)何才能老化呢?這就是村電前面定語描述的,在本平台實現場景下的實現基礎上完成老化功能。我們(men很線)可以回顧一下,前面的二層交換功能中的MAC地址學知雜習過程。将新MAC地址學習與查找匹配優化到了一起實現,這一實現過程中其實北睡就存在遍曆與判斷的邏輯,那我們(men)隻要将此功能稍加調事吧整,便可實現老化功能。核心實現方法如(rú)下:水遠
&nb黃兒sp; a. 在MAC學習查找過程中,匹配到不地表項則更新時(shí)間;
&nbs分員p; b. 未匹配時(sh個海í),負責查找一個未使用空間時(shí)的判斷改為(鐵懂wèi)尋找一個使用時(shí)間超過閥值的判斷。
1)老化代腦去碼實現
 這美; 老化判斷函數,老化時(shí)間用戶分什可自己定義大(dà)小。
#define AGING_TIME 30 /*老化超時(shí畫火)時(shí)間長(cháng)度,單位秒*/
int aging_match(int idx,struct timev工關al *now)
{
大從 return obx_mac_tbl->r用內ow[idx].tv.tv_sec + AGING_TIME < now->tv_sec;
}
&n吧學bsp; 修改MAC學習與查找功能,将原來的查找微通空MAC表項改為(wèi)查找可老化表項,如(rú)果表項是空,則其時(見制shí)間字段為(wèi)零,也會(huì)是需要近體被老化的表項。
/*else if(j == 明窗-1 && !ether_addr_equal又森((u8 *)&zero_mac,obx_mac_場北tbl->row[i].mac))*/
else if(j == -1 && a木年ging_match(i,&now))
{
&n秒快bsp; j = i;/*記錄第一個可老化愛那表項位置*/
&nb東錢sp; /*記錄第一個找到為(wèi)空白熱如表項位置*/
}
&書照nbsp;上述老化有何優勢?不(bù)需要額外海熱的線程資(zī)源,不(bù)需要更多的輪詢遍曆所有MAC表項。通(tō城什ng)過轉發過程中觸發式的完成老化功能。有數據交換了,進入到該務用MAC學習流程,若匹配上了,則更新時(shí)間返去弟回;若沒有匹配上MAC地址,則最壞情況是全表遍曆并找到一個老化表項。
風下
&資門nbsp;我們(men)并不(bù)是要突出該方法的好(hǎo)處綠討,真實的硬件也不(bù)會(huì)這麼實現。但在一個抽象的環境麗影中,方案應該具備普适性,而在面向一個具體的喝姐場景時(shí),方法可具特異性,這樣就可以使解決方案更符合場景需求,達到最優道哥解狀态。
1)端口斷頻她開(kāi)對老化影響
服離 MAC表老化除了表項不(媽國bù)夠用外還有一種情況就是端口發生變化,如(rú)從數筆UP狀态變成DOWN狀态,發生的原因有多種。但最壞的情況是原來連接到端口的網絡器近可能會(huì)發生變化,如(rú)用戶将網絡影一連接端口進行了更換。由此帶來的問題的,基于原來的公服端口轉發表項全部會(huì)失效或帶來錯(cuò)誤,會(huì)嚴重林謝影響網絡的通(tōng)信。雖然切換端口會(huì工校)影響網絡,但如(rú)果不(bù)做端口老化,則會(huì)延長(理書cháng)影響時(shí)間。故在交換機的端口發生子睡DOWN的事件後,必須将該端口轉發輸出的所有MAC表項内容清除,全部老化掉。輛拿
習車 2)MAC轉發表硬件卸載
做嗎
&n要站bsp; 二層交換機的基本設計基本上隻講到作哥這為(wèi)止,但這畢竟隻是一個軟件的二層交換,其性能無法達到我們(街自men)真實場景測試驗證的要求。FAST架構是一個平厭技台無關的軟硬件協同處理架構,在FAST架構下,我們(men)可以非常銀讀容易的将MAC轉發表卸載到硬件實現。由軟少民件實現MAC地址的學習,然後将其配置到硬件流表,後續該MAC地址的分組便可直接熱長在硬件完成交換功能,從而可以達到線速轉發能力。下一篇近站文件我們(men)将講述如(rú)何在FAST架構下将二層交換的MAC轉發也聽表卸載到硬件。
&nb算高sp;
歡迎您和學生們(me樹場n)加入FAST開(kāi)源項目群溝通(t話得ōng)與探讨,一起體驗不(bù)一樣的系統設計過程。請先加微信号1工理5116127200後邀請入群。
關注FAST開(kāi)源社區
做光
FAST一一開(kāi)源、開(kāi)放、高速、高效、可編程哥她、可定義!軟硬件協同并行處理。