(3)da_index和da_index+1的Valid字段組成二元組<valid0,valid1>,<0,0>轉(4)、<0,1>轉(5)、<1,0>轉(6)、<1,1>轉(7)。
(4)da_mac不在地址表中,轉(9)。
(5)da_index+1表項內(nèi)容中MAC地址與da_mac比較,若兩者相同,轉(8),否則轉(9)。
(6)da_index表項內(nèi)容中MAC地址與da_mac比較,若兩者相同,轉(8),否則轉(9)。
(7)da_mac在地址表中轉(8),否則轉(9)。
(8)讀取表項內(nèi)容中的端口號,與da_mac組成一組數(shù)據(jù)發(fā)給到fifo_out,完成一次查找。
(9)廣播該MAC地址,發(fā)送da_mac和需要廣播標志位給fifo_out,完成一次查找。
(10)I_Find標志位為1代表地址表中有廣播請求的MAC地址,不需要繼續(xù)廣播下去。I_Find標志位為0代表需要繼續(xù)廣播下去,轉(11)。
(11)發(fā)送sa_mac和需要廣播標志位給fifo_out,完成一次查找。
1.2.2 地址老化的實現(xiàn)
交換機通過端口發(fā)送和接收幀的源地址(源MAC地址、端口號)將存儲到地址表中。老化時間是一個影響交換機學習進程的參數(shù)。為地址表中每條地址項添加一個計數(shù)器用于表示該地址項的更新時間,通過查詢計數(shù)器位是否為零判斷一個地址是否已經(jīng)老化。在更新過程中,所有的輸出引腳處于“懸掛”。
老化過程如下:
(1)檢測到更新信號upd_en為高電平時,開始遍歷整個地址表。
(2)表項中Age字段為1,代表上一次遍歷周期到此遍歷周期內(nèi)該表項對應的MAC 地址被重新寫入過,轉(3),否則(4)。
(3)表項中的Valid字段保持1,Age字段置0。
(4)表項中的Valid字段置0 (刪除已老化的)。
(5)等待upd_en為低電平時停止遍歷,完成一次地址老化。
3 地址表的輸出調(diào)整(fifo_out)
Fifo_out模塊根據(jù)前一級提供的各種標志信號,實現(xiàn)對輸出的控制。輸入的數(shù)據(jù)信號有源地址,目的地址,查找到的表項,輸入的標志信號有nd_br_packet (需要廣播標志),Is_br_packet(是廣播包標志)。
Is_br_packet=1,nd_br_packet=0代表“是廣播包,不需要廣播”,對應地址表處理機制中的事件—接收到廣播包中的MAC地址存在地址表中。沒有輸出。
Is_br_packet=1,nd_br_packet=1代表“是廣播包,需要廣播”,對應地址表處理機制中的事件—繼續(xù)廣播下去。sa_mac經(jīng)過封裝由dout0~dout3輸出。
Is_br_packet=0,nd_br_packet=0代表“不是廣播包,不需要廣播”,對應地址表處理機制中的事件—單播包中目的地址存在地址表中。表項經(jīng)過封裝,對應端口輸出。
Is_br_packet=0,nd_br_packet=1代表“不是廣播包,需要廣播”,對應地址表處理機制中的事件—目的地址不存在地址表中。da_mac經(jīng)過封裝由dout0~dout3輸出。
2 不同hashing函數(shù)的沖突率
Hashing算法的主要原理就是把大范圍映射到小范圍,沖突率和hashing函數(shù)的選取有密切的關系,圖4中選取了4種不hashing函數(shù)下發(fā)生地址沖突的概率。情況一采用的Hashing函數(shù)為MAC地址和自身倒序做異或運算所得的結果經(jīng)過CRC計算后取最后11位索引值;情況二采用的Hashing函數(shù)為MAC地址和自身倒序做異或運算所得的結果經(jīng)過CRC計算后取前11位索引值;情況三采用的Hashing函數(shù)為MAC地址平方后取中間11位為索引值,情況四采用的Hashing函數(shù)為將MAC地址分割成位數(shù)相同的3部分,疊加這三部分的和取后11位為索引值。
仿真過程描述如下:
48位二進制數(shù)表示的范圍劃分為三子段,每個子段隨機生成3000個數(shù)。一共有9000個隨機MAC地址,依次按照4種情況提供的hashing函數(shù)計算結果,索引值一樣沖突加一,分別在不同的地址表容量下求沖突率。
評論