二、进程交换/快速交换/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

相关文章

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

java中的HashSet与 == 和 equals的区别示例解析

《java中的HashSet与==和equals的区别示例解析》HashSet是Java中基于哈希表实现的集合类,特点包括:元素唯一、无序和可包含null,本文给大家介绍java中的HashSe... 目录什么是HashSetHashSet 的主要特点是HashSet 的常用方法hasSet存储为啥是无序的

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Python中@classmethod和@staticmethod的区别

《Python中@classmethod和@staticmethod的区别》本文主要介绍了Python中@classmethod和@staticmethod的区别,文中通过示例代码介绍的非常详细,对大... 目录1.@classmethod2.@staticmethod3.例子1.@classmethod