来源:http://blog.51cto.com/redant/314151
多层交换是指交换机使用硬件来交换和路由数据包,通过硬件来支持4-7层的交换。交换机执行硬件交换,第3层引擎(路由处理器)须将有关路由选择、交换、访问列表和QoS的信息下载到硬件中,以对数据包进行处理。
MLS使用ASIC(Application-Specific Integration Circuit,应用专用集成电路)执行2层的重写操作。2层重写包括重写源与目标MAC地址以及写入重新计算后的CRC(Cyclic Redundancy Check,循环冗余校验)。传统的MLS是基于NetFlow的交换。3层交换引擎(路由处理器)和2层交换ASIC芯片协同工作,建立3层条目。
3层条目包括3种形式:
1.源IP地址(S)
2.源和目标IP地址(S/D)
3.包含4层协议信息的完整流信息(FFI)
例:
工作站A向B发送数据包,首先将包发送给默认网关即RSM(route switch modual),MLS-SE交换机根据数据包所包含的目标IP为B的IP而目标MAC为MLS-RP模块的MAC地址这一特性识别出该包为一个MLS候选包。交换机由此创建流候选条目,接收包,重写2层MAC地址和CRC,转发数据包。交换机将RSM转发的数据包视为enabler数据包。在看到候选数据包和enabler包后,交换机耕硬件中创建一个MLS条目,以便后续包的的转发。
基于CEF的MLS
CEF的MLS是基于控制平面信息和数据平面信息进行多层交换。
控制平面是指第3层引擎(路由处理器),数据平面指交换机用来进行硬件交换的硬件组伯(ASIC,Catalyst6500的Supervisor Engine和PFC模块)。
CEF是基于拓扑的转发模型,预先将路由信息加入Forwarding Information Base中,动态更新邻接表中的第2层重写信息,因此可以快速查找路由选择信息(IP邻接关系,下一跳IP地址,MAC地址)。
CEF的两个组件:
FIB:基于目标IP前缀的交换决策,类似于路由器的路由表,FIB表为路由表中转发信息的镜像。
邻接关系表:如果在两个节点间,数据链路层只有一跳,则称为彼子相邻。用来存储第2层编址信息,维护所有FIB条目的第2层址。3层的交换引擎和硬件交换组件都维护一个邻接关系表。
控制平面(3层信息)用软件建立FIB表和邻接关系表,然后将这些信息下载到数据平面。
Catalyst6500系列交换机中,MSFC子卡负责控制平面的操作,Supervisor Engine和PFC模块负责数据平面的操作。
交换机上第3层交换方式包括集中式和分布式交换:
集中式交换是在一个专用的ASIC上做出转发决策,此ASIC芯片为3层交换中所有接口的枢纽。此时由Supervisor Engine或第3层引擎做出路由选择、ACL、QoS和转发决策。使用集中式交换时,交换机性能取决于中央交换引擎和交换矩阵/总线体系结构。
分布式交换是使用3层交换机的接口或线路模块独立地做出转发决策。中央交换引擎将负责第3层转发、路由选择表和重写表与本地表(位于分布式交换的模块上)进行同步。分布式交换机将CEF FIB和邻接表的副本放在线路模块或接口中,由此各线路卡独立的做出转发决策,数据帧通过交换矩阵直接在端口间传输,而不借助中央交换引擎。(*使用分布式交换,系统性能为所有转发引擎之和)
Catalyst6500交换机使用集成交换矩阵(中央分布式交换引擎)和DFC线路模块的Supervisor Engine720(分布式交换线路模块)。
地址解析协议抑制:可以使得第3层引擎避免过多的ARP处理或基于ARP的DoS攻击。
过程:
1.收到数据包
2.使用glean邻接关系表,查看表中有没有相关目标IP的2层重写信息
3.如果有交换信息,则直接交换数据包。如果没有,则发送ARP请求获取重写信息
4.转发前几个数据包给3层引擎,载入抑制邻接关系表
5.在ARP响应前丢弃所有后续数据包。
6.接到ARP请求回复,清除抑制邻居关系表。添加邻接关系条目。
7.如果2秒内没有ARP回复,清除抑制邻接关系表,允许更多的数据包转发给3层引擎来重新发起ARPP请求。
交换表的体系结构:多层交换机使用高速内存表来建立路由选择表(CEF FIB和邻接关系表),桥接表,QoS表和ACL。
多层交换用专门的内存体系结构:CAM(Content addressable Memory)和TCAM(Ternary Content Addressable Memory)。CAM提供两种结果0和1,TCAM提供三种结果0、1和无关紧要。CAM表可以构建准确查找的表(MAC地址表),TCAM用于构建最长匹配表(根据IP前缀的IP路由选择表)。
CAM表用于存储2层交换表,交换机以2进制方式精确查找CAM表,如果没有就采用默认的Flood行为。步骤:1.将用于查找的关键字传递给哈希算法,哈希算法在CAM中查找匹配的关键字。2.哈希算法返回一个与关键字匹配的指针。3.交换机根据指针找到结果,从而避免了顺序搜索整个表。
CAM表包括:目标VLAN、目标MAC地址和目标端口等信息。交换机在CAM表中不仅查找精确匹配的条目,还查找与掩码值相匹配的IP地址条目。
TCAM表是一种为快速查找而设计的表,用于最长匹配。通过使用TCAM,就用ACL不会影响交换机的性能。TCAM中每个条目由:value(模式值)+Mask(掩码值)+result(结果)组成。这种条目被称VMR条目。
Value(模式值)指的是要匹配的模式,如:IP地址、协议端口、DSCP值
Mask(掩码值 )用于决定前缀
Result(结果值)指的是与模式和掩码匹配时的结果(TCAM中存储IP路由选择表,则结果为返回一个指向硬件邻接关系表中的一个条目的指针,该条目包含下一跳MAC重写信息)或根据ACL匹配时所采取的permit或deny措施(TCAM中存储ACL)。
TCAM定义了三种匹配方式:
1.精确匹配区域:存储第3层条目的区域,如IP邻接关系条目(包含IP地址下一跳信息“MAC地址”),第2层交换表和UDP扩散表。
2.最长匹配区域:包含多个3层地址条目组,按掩码长度降序排列。相同组内所有条目具有相同的掩码值和关键字长度。条目组可以通过从邻接组中借用地址条目的方法,动态的改变条目组的大小。重新启动系统后,重新配置的协议区域大小才会生效。
3.首次匹配区域:找到匹配后立即停止查找的区域,如ACL条目。
常见的TCAM协议区域:
精确匹配区域:in-adjacency(IP邻接关系)32 bit,12-switching(第2层交换)64 bit,udp-flooding(UDP扩散)64 bit。
最长匹配区域:ip-prefix(IP前缀)32 bit,ip-mcast(IP多播)64 bit
首次匹配区域:access-list(访问列表)128 bit
基于CEF的MLS的交换机默认情况下启用CEF,启用基于CEF的MLS和基于目标的负载均衡。
查看第3层引擎的CEF表:show ip cef [detail]
查看第3层引擎的邻接表:show adjacency
CEF将用ARP获得的MAC地址来填充邻接关系表,邻接关系表包含邻接节点的MAC地址重写信息和目标接口。CEF表中所有IP路由选择条目都对应于一个下一跳地址。当交换机收到目标IP非自身,目标MAC为交换机自身时,将在CEF表中查找目标IP所对应的转发MAC地址,然后从接口中传出。
单条CEF条目可能指向多个邻接关系条目。FIB表将维护该子网的前缀。子网前缀指向一个glean邻接关系条目。
如果接口配置了NAT或收到的数据包中包含IP报头选项,则需要对数据包进行特殊处理。邻接关系处理的特殊情况有:
1.Punt(转出)邻接关系条目:需要3层引擎进行处理或硬件交换不支持的特性
2.drop邻接关系条目:用于丢弃入站数据包
3.Null邻接关系条目:用于丢弃前往Null0接口的数据包,Null0接口用于过滤开自特定源的IP数据包
不能被硬件交换方式所支持的常见帧类型:
1.包含IP报头选项的数据包
2.源自/去往隧道接口的数据包
3.使用的以太网封装类型(非APRA)的数据包
4.需要分段的数据包
- (转载)Log4Net 在多层项目中的使用小记
(原创)Log4Net 在多层项目中的使用小记 这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用Log4Net的一些记录.网上有很多相关的教程,但是各 ...
- Qt中使用CEF(Windows下)
最近项目中要在Qt中使用CEF(Chromium Embedded Framework),在这里总结下其中的几个要点. 下载合适的CEF版本 关于CEF的简介我们这里就不做介绍了,下载CEF可以有2种 ...
- 无感知的用同步的代码编写方式达到异步IO的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护
golang/goroutine 和 swoole/coroutine 协程性能测试对比 - Go语言中文网 - Golang中文社区 https://studygolang.com/articles ...
- 使用CEF(四)— 在QT中集成CEF(1):基本集成
QT作为C++下著名的跨平台软件开发框架,实现了一套代码可以在所有的操作系统.平台和屏幕类型上部署.我们前几篇文章讲解了如何构建一款基于CEF的简单的样例,但这些样例的GUI都是使用的原生的或者是控件 ...
- Log4Net 在多层项目中的使用小记
原文地址:http://www.cnblogs.com/zdh8675/p/3645556.html 这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用 ...
- UIGestureRecognizer在多层视图中的触发问题
在一个superview中,添加了一个subview.tap一下superview,将subview隐藏起来. 在视图superview添加一个UITapGestureRecognizer对象,在UI ...
- (原创)Log4Net 在多层项目中的使用小记
这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用Log4Net的一些记录.网上有很多相关的教程,但是各有各的说法,我结合我自己这个项目的需要,首先,项 ...
- go语言怎么从(json后的)多层map中取值
// 一个PHP中的多层关联数组,即Go中的多层map,如何从json字符串中解析,然后取到map中的某个具体的值. // 数据结构如下: cityInfo := "{ "stat ...
- webdriver如何定位多层iframe中元素
在 web 应用中经常会出现 iframe 嵌套的应用,假设页面上有 A.B 两个 iframe,其中 B 在 A 内,那么定位 B 中的内容则需要先到 A,然后再到 B. iframe 中实际上是嵌 ...
随机推荐
- awt多线程聊天
public class ChatServer { boolean started = false; ServerSocket serverSocket = null; public void sta ...
- tomcat配置内存
windows: Create a new script named as setenv.bat under TOMCAT_HOME/bin folder holding the following ...
- CF280D k-Maximum Subsequence Sum
题目链接:洛谷 题目大意:[题意翻译已经够直白了] 首先,相信大家一开始都是想去直接dp,但是发现复杂度不对. 于是我们考虑一个黑科技:模拟费用流(相信大部分人看见数据范围就绝对不会想到费用流) 我们 ...
- Spring中的事务操作
事务的特性 原子性:强调事务的不可分割. 一致性:事务的执行的前后数据的完整性保持一致. 隔离性:一个事务执行的过程中,不应该受到其他事务的干扰. 持久性:事务一旦结束,数据就持久化到数据库. 如果不 ...
- property 和 魔法方法
property和魔法方法 一.property 二.model,class,bases,mro 三.__doc__, __dict__,__call__,__item__,__len__,__str ...
- docker centos 老是退出
1. 使用docker 镜像可以加快拉去.操作系统的使用第二种格式. 您可以使用以下命令直接从该镜像加速地址进行拉取: $ docker pull registry.docker-cn.com/myn ...
- 如果merge分支出现问题,使用git方式查看日志
Administrator@IT-20161115IKEG MINGW32 ~$ cd e: Administrator@IT-20161115IKEG MINGW32 /e$ ls$RECYCLE. ...
- 使用Navicat定时备份mysql数据库和创建报表并邮件自动发送
数据库备份在现代计算机高速发展的今日变得日益重要,程序员往往因为不重视而忽略备份数据,导致数据丢失,造成非常严重的后果.定时备份无疑是解决备份的最好的途径,本文主要使用Navicat来自动备份数据库和 ...
- JSP 修改不能编辑
JSP做修改功能时候,有的时候,某些值要设置成只读状态,不能修改,刚开始做的时候,出现了修改之后值传不到后台的情况,由于刚出来工作不久,不是很了解这个.思索了半天,才发现是由于这个属性的缘故.浪费了大 ...
- input 输入速度和方向判断、搜索功能的延迟请求
1.input 输入速度和方向判断 var wxApp = {} wxApp.click = function (str,speed) { var lastInput = { d: "&qu ...