二、进程交换/快速交换/CEF区别

2024-03-25 13:20
文章标签 快速 进程 交换 区别 cef

本文主要是介绍二、进程交换/快速交换/CEF区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 交换/路由的区别和联系

  • 路由
  • 名词:信息从源IP到目的IP的一条最优路径
  • 动词:信息从本设备的一个接口根据FIB表转发到另一个接口的过程
  • 交换
  • 动词:根据三层到二层的地址映射,从本设备的出接口将信息转发到下一个设备的进接口的过程
  • 名词:从设备的一个接口转发到设备的另一个接口的过程(我们下面介绍的就是这种交换方式

我们常说的“一次路由多次交换”,其中的路由指“名词”的路由,实际上一个“名词”的路由里面不只包含了多次“交换”,也包含了多次的“动词”的路由;

  • 路由器的路由过程通常包括以下几个步骤:
    从下面的步骤也能看出,“路由”这个过程是不需要进行二层的封装的,是路由到对应接口之后才可能会进行二层的封装
    在这里插入图片描述
    在这里插入图片描述

2 三种交换方式

  • Process switching
  • 所有的包都需要通过CPU来检测转发
  • 路由表驱动的交换

在这种模式下,一条数据流(flow)中的第一个包(packet)将被置入系统缓存(system buffer).其目的地址将会拿到路由表中去查询比对,路由器的处理器(CPU or Processer)同时将进行CRC校验,检查包是否正确.然后数据包的二层MAC地址将会被重写,替换为下一跳接口的MAC地址,这样的过程将会继续,对这条数据流(flow)中的第2个、第3个数据包.…….相同的操作,包括查询路由表、重写MAC地址,CRC校验等。这种方式无疑是延迟最大的,因为它要利用system buffer 以及 processor去处理每个收到的包.但是我们仍然有机会使用这种交换方式,比如在进行基于每个包的负载分担时,或是debug ip packet 时。

  • Fast switching
  • 快速交换只是按需建立
  • 第一个报文不得不进行进程交换
  • 第一个报文交换完成后,建立缓存条目,后续报文就可以进行快速交换

快速交换要优于process switching,它采用了route cache(路由缓存)来存储关于某条数据流(flow)的特定信息,当然会包括诸如目的MAC地址,目的接口等内容.这时我们只需要对一条数据流(flow)中的第一个包做processswitching,并把信息存入cache,所有后续数据包,可以不必再中断system processor去执行查询等操作,直接从cache中提取目的接口,目的MAC地址等,这样大大加速了包转发速度。


在这里插入图片描述

  • ①将IGP的表项计算后加入RIB表中
  • ②在出现访问10.0.0.0/8网段流量时,开始进行递归查找直到下一跳的IP为直连为止,将对应信息填入switching Cache中
  • ③并且通过ARP请求下一跳IP对应MAC存入ARP 表中
  • ④将ARP表中获取MAC存入Switching Cache的DestinatMAC处
  • ⑤后续设备在封装二层时,根据IP就可以直接在switchingCache中找到相应的IP前缀,然后直接将Layer 2 Header的内容加到二层头部;
  • CEF
  • Topology driven switching

思科CEF 是最为高效的一种三层协议。CEF 采用了基于硬件的平台,它不仅仅是将数据都存入system buffer,而是将整个路由表、拓扑表,以及所有的下一跳地址、MAC地址全部进行"预存".只要路由表、拓扑表中存在的条目,无论是否有数据请求发往其目的地址,都会提前预读取,预设置缓存.这样,当有新的数据请求发送时,就不需要 CPU去查询目的接口,目的MAC地址等等信息,而是直接从缓存中读取,从而使转发速度得以大大提高.


在这里插入图片描述

  • ①将IGP的表项计算后加入RIB表中
  • ②根据IGP表马上进行递归查找算出最终出接口和下一跳IP并且放入FIB表中
  • ③根据FIB表中下一跳IP进行ARP请求获取MAC(如果没有下一跳IP,则直接使用目的IP做为请求IP)
  • ④将获取的MAC填入Adjacency Table的Destinat MAC中
  • ⑤流量转发直接查询FIB表然后再查Adjacency表封装二层

3 三个层面

  • 控制层面
  • 概念:控制层面为数据层面转发数据提供了各种必要的信息,是各种协议工作的层面。
  • 作用:为数据层面提供计算出的相应的素材,同时管理设备也是使用控制层面(管理层面的话高端设备会加)
  • 主要占用资源:CPU
  • 相关表项:RIB(路由表)、LIB(标签表)、OSPF邻居表、OSPF的LSDB、BGP的数据库…
  • 转发层面
  • 概念:网络设备中,对数据的各种具体的处理、转发过程都属于数据层面的范畴。
  • 作用:控制层面构建了路由表等数据发送的必要信息,数据层面根据这些信息来发送数据。
  • 主要占用资源:专用硬件资源(ASIC芯片)
  • 相关表项:FIB(CEF转发表)、LFIB(标签转发表)、Adjacency Table、switching Cache、MAC…
  • 数据层面
  • 概念:数据层面是转发层面的父级
  • 作用:除了负责转发层的将数据转发到一个接口,还负责数据的其他处理操作(上下标签,添加IP头部等等)
  • 主要占用资源:专用硬件资源(ASIC芯片)
  • 相关表项:涉及真实数据的处理操作都可以算是数据平面的操作
  • 总结
    联系交换的三种方式和三个层面可以得出以下总结
交换方式占用主要资源及表项交换速度
Process Switching全CPU(RIB、ARP)
Fast Switching半CPU(RIB)、半ASIC(switching Cache)较快
CEF全ASIC(FIB、Adjacency Table)

为什么使用ASIC芯片就可以更快速转发呢?我们看下面

4 CPU\GPU\ASIC\FPGA芯片区别

  • 各芯片之间的差别

在这里插入图片描述

  • CPU 算力较弱,并行处理能力较弱(串行处理能力强),强在灵活性,可以进行多种协议的计算
  • GPU 算力较强,并行处理能力较强,本身管理控制能力弱需要借助CPU调度管理,灵活性还行
  • ASIC 算力最强,并行处理能力强,根据用户需求定制灵活性差,很贵
  • FPGA 算力很强,并行处理能力强,可编程半定制电路灵活性较好,稍贵
  • 对于交换的影响
  • 像控制层,表项是在CPU中的,可以进行多种网络协议的计算,但是转发速度较慢;
  • 像转发层(数据层)的表项是缓存在ASIC芯片(网络设备中叫PHY)中的,由于是定制化专门用于转发的,所以转发速度很快;

4 FIB表

  • 在默认启用FIB表的情况下,报文转发查看FIB表而不是RIB表;
  • 命令:show ip cef detail
  • FIB表会提前计算出路由的最终出接口并存储在表中
    在这里插入图片描述
  • FIB表会存储已经成功访问的IP的具体表项方便转发
    在这里插入图片描述
  • FIB还能实现MPLS的打上标签和弹出标签的动作(所以MPLS离不开FIB)
    在这里插入图片描述

5 Adjacency Table表

  • 封装二层直接查看Adjacency Table来进行封装
  • 查看命令:show adjacency detail
  • Adjacency Table 包含了二层头部的所有信息
  • HDLC链路
    在这里插入图片描述
    在这里插入图片描述

  • EthernetII链路
    在这里插入图片描述
    在这里插入图片描述

  • 具体参数

在这里插入图片描述

  • Protocol
    上层协议,用于确定二层所使用的Type(如IP就是0x0800,MPLS就是0x8847,VLAN就是0x8100)
  • Interface
    出接口
  • Address
    下一跳IP地址(也有可能直接是目的IP地址)
  • 长串
    二层封装的完整信息
  • ARP
    这里是获取的方式

6 具体封装过程分析(以ICMP包举例)

注意:即使配置的静态路由只有下一跳IP没有配置出接口,最终在FIB表中也会存在出接口,因为下一跳IP必须可达才可以进入路由表,而FIB表就可以根据迭代查找找到最终的出接口;
在这里插入图片描述

这篇关于二、进程交换/快速交换/CEF区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/845150

相关文章

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R