TCAM (ternary content addressable memory)是一种三态内容寻址存储器,主要用于快速查找ACL、路由等表项。

它是从CAM的基础上发展而来的。一般的CAM存储器中每个bit位的状态只有两个,“0”或“1”,而TCAM中每个bit位有三种状态,除掉“0”和“1”外,还有一个“don’t care”状态,所以称为“三态”,它是通过掩码来实现的,正是TCAM的这个第三种状态特征使其既能进行精确匹配查找,又能进行模糊匹配查找,而CAM没有第三种状态,所以只能进行精确匹配查找。

1、TCAM 表内所有条目都可以并行访问,比如,如果你有100条ACL,TCAM能一次就能对比这100条ACL进行对比操作,过去如果有100条ACL的话,需要第一条ACL对比完后再对比第二条,然后第三条,直至N条,效率很明显没有TCAM高。

2、TCAM得结构已经经过了优化,支持更抽象的操作,通常是基于二进制关键字匹配,查询相当快

如FIB TCAM中每个表项都有对应的下一条,而每个下一条有维护了下一条邻居的MAC。

2、正因为有上边的这些特性,所以无论表内有多少条数目,性能都不会减弱。

3、TCAM 包含多组的Mask 与Value 对应关系,对应比例为1:8,一个Mask可对应8个Value。最长掩码位于TCAM顶部,如255.255.255.255位于最顶部,用于最长匹配,提升查找速率。

4、Mask 用于表示Value 的匹配方法,1 为必须比较并匹配,0 为不用比较。

5、TCAM的可用掩码、值模式、LOU表项有限,如果

访问列表很大或需要很多第四层运算,TCAM表和寄存器很可能溢出。

6、TCAM成本比较高,

存储空间的单位价格高于普通的sram,而且耗能也远远高于sram

7、由于TCAM的并行查找特性和三态,存储必须以前缀形式来存储,比如一个range需要拆分成几个更小的可以表示成前缀形式的range才可以存储在TCAM中

TCAM在高端路由器中的应用及查找过程

tcam开发C语言,TCAM相关推荐

  1. 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一第1章 C语言与内存1.1 引言...

    本节书摘来自异步社区<嵌入式Linux与物联网软件开发--C语言内核深度解析>一书中的第1章,第1.1节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区"华章计算机&quo ...

  2. 在Linux下开发多语言软件(gettext解决方案)

    最近的项目出现了一个bug.项目是基于一个已有的成熟开源软件之上做修改的,新写了加解密库,用于为该成熟开源软件增添加解密功能.功能增加完成后效果都很好,可是就是中文出不来了,也就是说没办法自适应多语言 ...

  3. 系列:iOS开发-C语言基础

    #系列:iOS开发-C语言基础 之前也说了iOS中的OC是扩充C的面向对象编程语言 那么无论是从什么角度来说都要首先回顾一下C的内容,虽然很多人在大学的时候都有学习过C语言,一提到谭浩强,我估计90% ...

  4. python是基于什么语言开发-python是哪个国家的人开发的语言

    python是Google的吉多·范罗苏姆设计的,Python是一种跨平台的计算机程序设计语言.作为一种面向对象的动态类型语言,它最初设计用于编写自动化脚本. 是Google的吉多·范罗苏姆设计的. ...

  5. VC开发多语言界面支持的简单方法

    VC开发多语言界面支持的简单方法 作者:成晓旭 (需要完整源代码请留言) 最近在做一个小程序,要求实现对多语言界面显示支持功能,并且,界面显示内容用户能够自己设置. 初步设计用INI文件来配置显示内容 ...

  6. ios c语言头文件,iOS开发 -- C语言基础12(预处理指令)

    iOS开发 -- C语言基础12(预处理指令) 宏定义 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源 ...

  7. 李洪强漫谈iOS开发[C语言-038]-if else if语句

    李洪强漫谈iOS开发[C语言-038]-if else if语句

  8. 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一2.4 位运算构建特定二进制数...

    本节书摘来自异步社区<嵌入式Linux与物联网软件开发--C语言内核深度解析>一书中的第2章,第2.4节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区"异步社区" ...

  9. [译]使用LazZiya.ExpressLocalization开发多语言支持的ASP.NET Core 2.x项目

    介绍 开发多语言支持的ASP.NET Core 2.x Web应用程序需要大量的基础架构设置,并且耗费时间和精力.这篇文章,我们将使用LazZiya.ExpressLocalization nuget ...

最新文章

  1. web开发的一些心得
  2. 业务脆弱性评估是业务持续性保障(BCM)的基础数据
  3. 控制台调用win32 API 示例二则
  4. oracle数据库图书,基于oracle数据库,创建图书表(一)
  5. Android源码中添加 修改应用
  6. 编码基本功:以文件大小进行性能测试是错误的
  7. 测试远程服务器udp端口,udp端口怎么测试 - 全文
  8. 微信添加好友查找失败服务器繁忙,微信加载联系人失败_微信添加好友失败有哪些原因...
  9. PBFT(一):过程
  10. Pyrene-PEG-Biotin,芘丁酸聚乙二醇生物素,Biotin-PEG-Pyrene
  11. 从微软官网下载win10镜像.iso文件
  12. android 找不到手机,找不到 Android 开发者选项,难道我的手机系统没有?| 有轻功 #290...
  13. 安卓系统入门_安卓玩家不可错过的神器:55GMagisk模块下载
  14. Vector使用报错:Expression:vector subscript out of range
  15. 【实用工具系列】(5) 在RHEL7.x中安装MySQL8
  16. JS中对象key为数字的使用
  17. f(t)=tu(t)matlab,设f(t)=ε(t)-ε(t-1),f1(t)=f(t)cos(10πt),试用MATLAB...
  18. 《先知·爱》 《先知·婚姻》
  19. (转载)毕博管理咨询公司全球高级副总裁黄辉演讲实录
  20. 富士通打印机调整位置_打印机页首空调整和左边距调整

热门文章

  1. xshell的一些基本操作
  2. Transformer-XL论文笔记
  3. element ui背景图_vue+element-ui如何为元素设置背景图片
  4. R语言多重比较示例:Bonferroni校正法和Benjamini Hochberg法
  5. XML中PCDATA与CDATA的区别
  6. WLAN领域AP集群化的关键 CAPWAP协议
  7. C++ ,C 筛法求素数
  8. Makefile编写和使用技巧
  9. 高通平台开发系列讲解(USB篇)Composite USB gadget framework
  10. gensim学习之corpora.Dictionary