当前位置: 首页 > news >正文

浅谈路由器交换结构

一、路由器技术概述

        路由器(Router)是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议,例如某个局域网使用的以太网协议,因特网使用的TCP/IP协议。

        其功能主要可以划分成两点:路由和转发。        

        路由指的是分组从源端到目的端的过程中,确定端到端路径的过程;转发指的是路由器输⼊端的数据包移送⾄适当的路由器输出端的过程(在路由器内部进⾏)。

        其中路由部分由cpu和内存完成,属于控制平面;转发的部分由硬件处理芯片(交换结构)完成,属于数据平面。

二、交换结构

        交换结构是路由器的核心组件。作用是根据FID表(转发表)对分组进行处理将某个输入端口进入的分组从个合适的输出端转发出去。交换结构本身就是络(一种NoC,片上网络),但这种络完全包含在路由器中,因此交换结构可看成是”在路由器中的网络”。

        至今路由器的发展已经演化出了三种交换方式,分别是:

  • 通过存储器进行交互
  • 通过总线进行交换
  • 通过内部交换网络进行交换 表示分组通过纵横交换结构进行交换

2.1 通过存储器进行交换

       这种方式主要的工作原理是CPU负责运行预设的路由协议,同时读取线路卡(Linecard)中的数据,处理后通过写入新线路卡(Linecard)的方式完成转发。

        这种方式常见于第一代路由器,这一类的路由器具有共享总线背板,采用集中式的共享CPU和缓存的方式,完成数据包的转发判决(软件)。其主要的功能都是通过软件进行实现,结构简单。其特点是能够集中处理,但是吞吐率受限,原因在于CPU既要运行路由协议,又负责数据包的处理和转发,存在严重的处理瓶颈。

2.2 通过总线进行交换

        通过总线进行交换与之前提到的通过内存进行交换最大的区别在于,这种方式把CPU的权限和功能下放到了各个Linecard之中。以此技术为代表的有第二代路由器和第三代路由器。

        其中第二代路由器把转发表从路由器的处理器下发至接口线卡缓存,一次查表多次路由,接种类多,配置灵活。该体系结构的路由器主要是数据在第次到达时生成转发表,然后将转发表从路由处理器下发到接线卡缓存,次查表多次路由,这样的方式在定程度上释放了路由处理器(CPU)使得其有限次参与路由的转发,但是在路由状况不断变化的环境中,IP路由表的改变会使得转发无效,线卡缓存需要不断从路由处理器中同步转发表,性能优势会受到很限制(对总线的性能要求较高)。这样的发展方式就类似于计算机在演进过程中,缓存cache的诞生,通过把一部分需要频繁使用的数据进行单独缓存,可以有效提高系统的工作效率。

        第三代路由器通过提高Linecard的处理能力,同时将路由计算的处理器从路由转发中解放出来 ,把处理的任务下发到各个Linecard上。这种主板和从板的分布式结构大大提高了系统的整体性能,使得第二代路由器每块线卡(从板)是拥有自己的处理器、内存和如果网卡的独立子系统,在本地线卡进行存储和转发判断,主板基本上不参与路由转发操作,主要负责整个系统的管理操作和路由计算等任务,并把用于转发判决的转发表发布到各个从板上,共享总线的容量直接限制了路由器的吞吐率,成为系统无法避免的瓶颈。

2.3 通过内部交换网络进行交换 表示分组通过纵横交换结构进行交换

        不同于前两种交换方式,这种方式采用了不再采用共享背板的方式,而是采用了交换式背板,采用分散的CPU和缓存,使用ASIC+RISC的CPU系统。这样的交换机我们称之为交换式路由器,第四代路由器、第五代路由器和第六代路由器都是采用的这种交换结构。

        第四代路由器引入了交换网。它的引解决了总线的瓶颈,实现阻塞交换。但是对QOS、MPLS VPN、组播、IPv6支持弱。 该体系结构路由器引了交换结构代替原有的共享总线,交换结构可以提供比共享总线得多的带宽,线卡上般不再采处理器,而是采ASIC实现的专转发引擎或者是针对络处理进行了优化的网络处理器,以提高对报文的处理和转发能力。中央处理器负责完成路由协议和其它控制协议的处理,并根据路由表成转发引擎所需要的转发表,将转发表同步到各个线卡上。路由器的整体性能主要由线卡对报文的转发处理能力,以及交换结构的交换容量决定。

        第五代路由器出来之前:路由器都是专用路由器。第五代路由器有了np芯片(有可编程性),可以对很多的业务进行处理加速(全业务加速)。

        第六代路由器采用三级交换结构、严格意义上的无阻塞结构。第二级通常是单独的中央交换框,F1、F2、F3之间采用光纤互连(光背板) 。随着分组搜索系统的日趋复杂,设计师需要采用各种各样的解决方案以满足千差万别的搜索要求。策略查表法(例如存取控制表(ACL)和服务质量(QoS))需要高性能以及超群的搜索灵活性和易用性——而所有这些都需要采用TCAM。另一方面,转发查表(包括虚拟路由器转发(VRF)和虚拟专用网络(VPN))也可以使用TCAM技术进行加速。

        随着网络速度的剧增,传统的解决方案已经无法满足速度要求,这时就需要一个专门的硬件来解决这个矛盾,该硬件通常称为NSE(网络搜索引擎),TCAM其实就是一种基于CAM技术的NSE多级交换结构是由多个交换单元互联起来的,每个交换单元具有一整套输入输出,与普通交换机类似,提供输入输出的连接。通过互联多个小的交换单元,就可以制造一个大型的、可扩展的交换结构。多级结构之间的不同取决于交换单元之间是如何互联的。典型的结构包括Benes网、Butterfly网、Clos网等形式。

          ​​​​​

三、总结

        在最初的交换结构中,我们采用存储器实现交换结构,这样的方式特点是能够集中处理,但是吞吐率受限,原因在于CPU既要运行路由协议,又负责数据包的处理和转发,存在严重的处理瓶颈;为了进一步提高处理速度,我们把CPU的功能逐渐下放,让linecard有了更高的处理能力,由此诞生了第二第三代路由器;但是对于linecard来说,它并不必要完成路由的计算功能,我们希望的是更快的处理和转发速度,因此将linecard中通用的CPU优化成专用属性更强的ASIC,进一步优化交换网络结构,这才有了第四第五第六代路由器。

相关文章:

浅谈路由器交换结构

一、路由器技术概述 路由器(Router)是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议,例如某个局域网使用的以太网协议…...

Linux第51步_移植ST公司的linux内核第3步_添加修改设备树

1、设备树文件的路径 1)、创建linux中的设备树头文件 在“my_linux/linux-5.4.31/arch/arm/boot/dts/”目录中,以“stm32mp15xx-edx.dtsi”为蓝本,复制一份,并命名为 “stm32mp157d-atk.dtsi”,这就是我们开发板的设备树头文件。…...

【PyTorch】PyTorch中张量(Tensor)统计操作

PyTorch深度学习总结 第五章 PyTorch中张量(Tensor)统计操作 文章目录 PyTorch深度学习总结前言一、最值查找二、特殊值查询 前言 上文介绍了PyTorch中张量(Tensor)的计算操作,本文将介绍张量的统计操作。 一、最值查找 函数描述torch.max()找出张量中的最大值to…...

安卓游戏开发框架应用场景以及优劣分析

一、引言 在移动游戏开发领域,选择合适的开发框架是项目成功的关键因素之一。特别是对于安卓平台,由于其开放性和庞大的用户基础,不同的游戏开发框架应运而生,旨在帮助开发者高效地构建游戏应用。以下是一些流行的安卓游戏开发框架…...

单片机学习笔记---LCD1602

LCD1602介绍 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符(比如日文的片假名),还可以有8个自定义字符 显示容量:…...

django中实现适配器模式

在Django中实现适配器模式(Adapter Pattern)涉及到创建一个适配器类,它允许不兼容的接口之间进行交互。适配器模式通常用于将一个类的接口转换为另一个客户端期望的接口。 一:实现例子 下面是一个简单的例子,演示如何…...

题记(42)--EXCEL排序

目录 一、题目内容 二、输入描述 三、输出描述 四、输入输出示例 五、完整C语言代码 一、题目内容 Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。 对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号&#…...

【学网攻】 第(28)节 -- OSPF虚链路

系列文章目录 目录 系列文章目录 文章目录 前言 一、什么是OSPF虚链路? 二、实验 1.引入 实验目标 实验背景 技术原理 实验步骤 实验设备 实验拓扑图 实验配置 扩展 实验拓扑图 实验配置 实验验证 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻…...

百面嵌入式专栏(面试题)驱动开发面试题汇总1.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍驱动开发面试题 。 1、Linux驱动程序的功能是什么? 对设备初始化和释放。进行内核与硬件的数据交互。检测和处理设备出现的错误。2、内核程序中申请内存使用什么函数? 答案:kmalloc()、kzalloc()、vm…...

Starknet 的 JavaScript 库:Starknet.js、get-starknet和starknet-react

文章目录 Starknet 的 JavaScript 库Starknet.jsget-starknetstarknet-reactStarknet 的 JavaScript 库Starknet.js 官方:https://www.starknetjs.com/ Starknet.js 是一个与 Starknet 交互的 JavaScript 库,通常以脚本或去中心化形式进行交互应用程序。 Starknet.js 的灵感…...

debian11 安装 k8s,containerd ,阿里云镜像(已成功)

1. 环境准备 系统要求:至少 2GB RAM(建议 4GB 或更多),网络连接。 节点准备:至少 3 台机器,1 台作为 Master 节点,2 台作为 Worker 节点。 安装sudo apt update apt install sudo设置主机名&a…...

Spring Task定时任务

目录 1、介绍 2、cron表达式 2.1、在线生成器 2.2、通配符 3、代码示例 3.1、使用步骤 3.2、 代码开发 3.3、测试 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发…...

【设计模式】23中设计模式笔记

设计模式分类 模板方法模式 核心就是设计一个部分抽象类。 这个类具有少量具体的方法,和大量抽象的方法,具体的方法是为外界提供服务的点,具体方法中定义了抽象方法的执行序列 装饰器模式 现在有一个对象A,希望A的a方法被修饰 …...

类加载过程介绍

一、类的生命周期 类被加载到jvm虚拟机内存开始,到卸载出内存为止,他的生命周期可以分为:加载->验证->准备->解析->初始化->使用->卸载。 其中验证、准备、解析统一称为链接阶段 1、加载 将类的字节码载入方法区中&#xf…...

pytorch创建模型方式

1.继承自nn.Module的方式 from torch import nn import torch.nn.functional as F 继承自nn.Moduleclass LModel(nn.Module):def __init__(self):super().__init__()self.L1 nn.Linear(10,10)self.L2 nn.Linear(10,64)self.L3 nn.Linear(64,10)self.L4 nn.Linear(10,5)se…...

MySQL 基础知识(五)之数据增删改

目录 1 插入数据 2 删除数据 3 更改数据 创建 goods 表 drop table if exists goods; create table goods ( id int(10) primary key auto_increment, name varchar(14) unique, stockdate date )charsetutf8; 1 插入数据 当要插入的数据为日期/时间类型时,如果…...

紫微斗数双星组合:廉贞天府在辰戌

文章目录 前言内容总结 前言 紫微斗数双星组合:廉贞天府在辰戌 内容 紫微斗数双星组合:廉贞天府在辰戌 性格分析 廉贞天府同坐辰、戌宫,若无煞星冲破,为“天府朝垣格”,也为“府相朝垣格”,富贵双全&am…...

人工智能|深度学习——基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统

代码下载: 基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统.zip资源-CSDN文库 1.研究的背景 水下场景目标检测是水下机器人、水下无人机和水下监控等领域中的重要任务之一。然而,由于水下环境的复杂性和特殊性,水下目标检测面临着许多挑…...

使用 C++23 从零实现 RISC-V 模拟器(1):最简CPU

👉🏻 文章汇总「从零实现模拟器、操作系统、数据库、编译器…」:https://okaitserrj.feishu.cn/docx/R4tCdkEbsoFGnuxbho4cgW2Yntc 本节实现一个最简的 CPU ,最终能够解析 add 和 addi 两个指令。如果对计算机组成原理已经有所了…...

顺序表、链表(ArrayList、LinkedList)

目录 前言: 顺序表(ArrayList): 顺序表的原理: ArrayList源码: 的含义:​编辑 ArrayList的相关方法:​编辑 向上转型List: 练习题(杨辉三角&#x…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

网络编程(UDP编程)

思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【C++进阶篇】智能指针

C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

离线语音识别方案分析

随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...

Unity中的transform.up

2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...