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)