我知道L3交换机使用CEF来实现更快的数据包转发。但是,CEF不适用于需要进行NAT的数据包。这是否意味着边缘路由器和边缘L3交换机不使用CEF? CEF的作用仅限于局域网吗?

#1 楼

NAT当然可以使用CEF。这来自Cisco自己的指南,网址为:http://www.cisco.com/en/US/tech/tk648/tk361/technologies_q_and_a_item09186a00800e523b.shtml运行IOS-XR的平台(其中FIB分配到线卡上)也支持运营商级NAT,因此它的作用不仅限于LAN。根本不做NAT

评论


从技术上讲,从入口到出口的CEF路径上都有功能(如NAT)的插入点。如果存在此插入点,则功能启用了CEF。但是与L3查找不同,此功能可能没有可观察到的性能提升,因为CEF只是为功能提供数据,而不更改功能本身。但这主要是无关紧要的细节,重要的细节是保持启用CEF。

–ytti
2013年6月2日15:57

#2 楼

CEF是思科对其FIB的代名词。在L3交换机中执行“ sh ip cef”时,这些信息实际上都没有用于推送数据包,这只是用于填充硬件ASIC的软件树。

CEF是思科只是用来描述其优化数据存储/检索代码的术语,它不是具有特定功能的特定技术。

在大多数硬件平台中,如果没有CEF,您就不能简单地运行该设备,因为需要CEF数据结构来编译硬件特定信息。
诸如MPLS之类的某些功能也依赖于CEF数据结构,因此如果没有它就无法使用。

LAN(L2)交换不会通过CEF进行抽象,因此,它完全不依赖于CEF。

我推荐这本书以获取有关CEF的最新信息(在主要的CEF重写约12.2S之后编写)

如果您限制IP Trie FIB的CEF定义,那么显然不能将其用于NAPT,因为您无法预先确定哪些内容和位置。但是正如所解释的那样,CEF不是特定技术,它是更广泛的概念,因此,如果CEF是否具有NAT功能,则值得商it,我会误以为是CEF功能:

>
没有CEF,我将永远不会运行任何程序,这可能仅是由于遗留原因,甚至选择禁用它。考虑瞻博网络,他们没有用于描述相同概念的特定术语,因为他们不需要将其与某些替代方法区分开,因为此类次等替代方法不存在。

评论


只是要添加此内容-CEF是交换路径,用于转发信息的信息树等,因此名称“ CEF”可能以多种方式使用,并且增加了混乱。实际上,NAT在CEF路径中受支持(其他数千种功能也受支持),但是CEF构建的表并不包含某些数据,如ytti所指出的那样,仅通过使用它们来交换数据包,就需要咨询其他条目(它们是由NAT代码构建和维护的)。无论如何,如果可以在CEF路径中交换数据包而又不退回到过程交换,则CEF仍支持该功能。

–ŁukaszBromirski
2013年6月2日17:14

#3 楼


这是否意味着边缘路由器和边缘L3交换机不使用CEF? CEF的作用仅限于LAN吗?


CEF有用,因为它允许路由器在第3层转发操作期间快速重写第2层信息。 WAN路由器必须像LAN交换机一样重写第2层标头信息。CEF对这两种类型的路由器都非常有用。

CEF在高层具有两个功能: >
包含路由表的卷影副本,该副本将路由的前缀映射到下一跳
包含对Layer2邻接表的引用,该表提供有关重写IP所需的Layer2标头的缓存信息数据包通过第一个项目符号中提到的出口下一跳。 FastEthernet0 / 0 ...

R1#show adjacency internal
Protocol Interface                 Address
IP       Serial1/0                 point2point(5)
                                   0 packets, 0 bytes
                                   0F000800             <--------- HDLC Header rewrite info
                                   CEF   expires: 00:02:17
                                         refresh: 00:00:17
                                   Epoch: 0
                                   Fast adjacency disabled
                                   IP redirect enabled
                                   IP mtu 1500 (0x0)
                                   Fixup disabled
                                   Adjacency pointer 0x6663D3E0, refCount 5
                                   Connection Id 0x000000
                                   Bucket 6


假设要发送到192.0.2.1的IPv4数据包从LAN上的FastEthernet0 / 0进入路由器,并且必须在WAN(在CEF表中找到退出Serial1 / 0的事实...,而CEF表引用了邻接表)。

当路由器从FastEthernet0 / 0接收IPv4数据包时,路由器必须跳出以太网头,然后加上HDLC头,它是0F000800,因为它是IPv4目的地(0x0800是HDLC“类型”值,表示下一个头是IPv4)。

如果CEF具有如果没有为Serial1 / 0缓存(平凡的)报头重写信息,则必须在过程交换级别(非常慢)手动查找信息。只要Serial1 / 0上的封装不变,这些邻接表的值就不会改变。因此,Cisco IOS将邻接重写信息缓存在邻接表中。

当您查看帧中继或ATM PVC时,重写信息会涉及到更多信息。

这份有关CCO的文档(文档ID:17812)通过重新散布大量CCO内容,可能比我能更好地解释事物

评论


不会仅由CAM咨询第2层操作吗?第3层操作将咨询CEF所在的FIB,如果需要在第3层进行更深入的数据包检查(如果数据包需要经过NAT),这是否会使CEF对WAN路由器无效?

–迈克尔·梅(Michael May)
2013年6月2日14:13在

CEF专门不用于/ cache /邻接或l3查找,这是“快速切换”(完全不再受支持)。 CEF是预先构建的,因此您可能需要进行邻接或l3查找的所有数据都已经在结构中,该结构最适合在给定平台设置的约束下进行搜索。

–ytti
2013年6月2日14:29

@ytti,对不起,但是CEF确实缓存了邻接信息,我认为您对缓存的填充方式感到困惑(恕我直言,您认为必须对数据包进行缓存才能缓存,但这不是真的) CEF与其他切换方法(例如快速切换)之间的实质区别在于,CEF是预先计算的。但是,CEF仍必须缓存信息,否则必须在过程交换机级别上查找信息……非常慢,这是LAN和WAN接口都需要CEF的原因。

–迈克·彭宁顿
2013年6月2日14:34



我认为我们只是不同意“缓存”的含义,但关键是它是预构建的,对于许多功能(例如MPLS)来说,它只是数据结构,没有“过程切换”存储可以回退至。

–ytti
2013年6月2日14:43在

@ChristianDelapena,您将硬件查找表(CAM内存)的硬件实现与填充硬件查找表(即CEF)的IOS软件过程混淆了。 CEF存在,因此您可以将第3层前缀条目映射到第2层所需的协议重写信息……但是,第2层可以有许多不同的协议,例如帧中继,atm,sonet分组,hdc,ppp或以太网。 ..所有这些协议都可以承载IPv4,但是在将IP数据包封装起来以供下一个WAN路由器处理之前,它们都需要在标头中填充特定的字段

–迈克·彭宁顿
2013年6月2日14:53