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

相关文章

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

python中json.dumps和json.dump区别

《python中json.dumps和json.dump区别》json.dumps将Python对象序列化为JSON字符串,json.dump直接将Python对象序列化写入文件,本文就来介绍一下两个... 目录1、json.dumps和json.dump的区别2、使用 json.dumps() 然后写入文

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级