HASH存儲、查找
定義:HASH是指一類函數,該函數不可以出現單射,即不可以出現某一值只對應一個自變量,這樣就不能通過HASH函數的結果倒推出原來的輸入,原理上比較安全.例如階躍函數(大於0函數值為1,小於等於0函數值為0),不能通過結果推出輸入是多少.
滿足上述條件的函數都可以成為HASH哈希函數.一般認為,HASH函數會將不同長度輸入映射為相同長度的輸出.HASH函數所得到值稱為哈希值(HASH Value).常用的哈希函數(算法)有:MD4、MD5、SHA-1、CRC校驗、奇偶校驗等。
應用:HASH函數在計算機工程中應用及其廣泛.密碼學或者算法中會經常使用取余數進行HASH映射,一般會取兩個雙方約定的非常大的質數相乘來對要處理的數求余,以增加破解難度;也可以通過一系列HASH操作,將不同長度的字符映射為統一長度的字符,用於校驗;等等.
基於HASH的數據存儲:計算機存儲中會將要存儲的內容通過適當的HASH函數映射成固定長度(地址長度),得到的HASH值直接作為該數據的存儲地址,同時在RAM中存儲對應的Hash表,好處是極大加快查找速度,不用對存儲對象一一遍歷,達到O(1)復雜度
哈希沖突:在存儲數據時使用數據的某些字段直接通過HASH函數映射成存儲地址,這樣的好處是查找該數據時可直接通過HASH函數計算出該地址,並直接找到該數據.但由於哈希函數的多對一的特性,會出現多個數據映射到同一個地址的可能(沖突的概率取決於HASH函數的選取,采取適當的HASH函數可以將這種可能性降到非常低,例如上述對兩個非常大的指數求余的操作,一般認為不會重復)由於HASH函數的多對一本質特性,HASH沖突總是存在.對於MAC芯片硬件而言,產生哈希沖突的幀會被丟掉從而學不到對應的MAC地址.使用TCAM則可以避免哈希沖突問題,或者在出現哈希沖突的時候,改用TCAM.
TCAM(Ternary Content Address Memory )三元內容可尋址存儲器
定義:一種數據存儲方式,以方便查找.存儲時結合匹配規則或者掩碼,用X(I don't care)來代替原先的掩碼位置,故需要2個bit來取代原先1個 bit存儲的信息.
用於快速在存儲中查找路由項,將路由的查找從硬件轉到軟件. 在表項查找時,常用最長前綴匹配(例如ip路由表查找),TCAM不依賴傳統的前綴匹配查找算法,TCAM可以並行查找所有表項,意味着一次遍歷即可找到最長的前綴匹配地址
上圖表示一個典型的路由查找過程
TCAM的存儲結構:
如圖所示,路由表項被分別存儲在CAM(內容可尋址存儲器)和RAM當中,TCAM在存儲地址表項的時候有三種bit類型: 0,1,X(I don't care),X用來代替掩碼的功能.方便起見,我們假設我們的尋址空間只有5個bit,在存儲的地址的時候,我們總是將更長前綴匹配的地址放在高優先級的地方(靠近查找入口),即前綴相同的時候,存儲優先級1>0>X,優先級高的存放在更靠前的位置.在查找的時候,我們只需要從頭到尾遍歷一遍,先命中的一定是最長的前綴匹配,從而實現了硬件級別的快速查找,其快速性依賴於順序的存儲結構.查找命中后,到對應的RAM當中取查找對應的下一跳Port B.
TCAM查找的硬件級別實現:
在查找某一地時候,需要對所有CAM存儲器都通上電,初始的時候,所有的地址存儲單位都輸出“匹配”-True的狀態,只要該路上有一個字節不匹配,則該路的輸出將變為“不匹配”-False的狀態,即同一時刻對所有的存儲硬件進行匹配,最后只有一路維持電路上通的狀態,實現了硬件上的一次性快速查找.
TCAM的優缺點:
優點:硬件級快速路由查找
缺點:1,需要用2個bit來表示原先的每個bit的三個狀態,需要更大的存儲空間;2,由於每次查找,所有地址所在的存儲器都要通電,故要消耗更多的電力;總體而言是犧牲存儲空間和電力消耗來換取快速硬件路由.
參考:
TCAM and CAM memory usage inside networking devices,Valter Popeskic,TCAM and CAM memory usage inside networking devices (howdoesinternetwork.com)