FIB表与快速转发表工作原理

     在一张路由表中,当存在多个路由项可同时匹配目的IP地址时,路由查找进程会选择掩码最长的路由项用于转发,即最长匹配原则。因为掩码越长,所处的网段范围就越小,网段的范围越小,就越能快速的定位到PC机的具体位置,从而加快转发效率。

例子1:在运行了RIP 的MSR 路由器上看到如下路由信息:

<MSR>display ip routing-table 6.6.6.6

Routing Table: Public

Summary Count: 2

Destination/Mask Proto Pre Cost  NextHop  Interface

6.6.6.0/24       RIP   100   1  100.1.1.1  GE0/0

6.0.0.0/8       Static 60    0  100.1.1.1  GE0/0

此时路由器收到一个目的地址为6.6.6.6 的数据包,那么  A 

A. 该数据包将优先匹配路由表中的RIP 路由,因为其掩码最长

B. 该数据包将优先匹配路由表中RIP 路由,因为其优先级高

C. 该数据包将优先匹配路由表中的静态路由,因为其花费Cost 小

D. 该数据包将优先匹配路由表中的静态路由,因为其掩码最短

     尽管如此,路由表中路由项数量越多,所需查找及匹配的次数就越多,其转发效率就会降低。为了实现控制平面与转发平面完全分离,就需要系统构建一张专注于数据报文转发的表,即FIB表。全称为Forwarding Information Base,称为转发表。

     FIB表的生成有2种方式,一种是源于路由表项,另外一种是通过ARP解析获得。

     第一种方式,当开始计算路由信息的时候,因为在一个网络拓扑结构中,可能会运行多个路由协议,而不同路由协议所计算出的路径可能会不同。当出现这种情况时,路由器会选择较高路由优先级的路由协议所发现的路由作为最优路由,即比较路由的优先级将其选出,再置为Active(活跃)状态;而其他路由作为备份路由,置为Inactive(非活跃)状态。系统会再把Active状态的路由表项导入至FIB表中,作为系统转发的依据。

     第二种方式,通过ARP解析,得到MAC地址与IP地址的映射关系,再得到本地网段内的主机路由信息,最后添加至FIB表中。

     在FIB表生成过程中,需要注意的一点是,FIB表与路由表是同步更新的。系统的控制平面会发现新的路由信息,根据路由信息更新到自己的路由表中,生成新的Active状态的路由表项,再更新至FIB表。路由表属于控制平面,FIB表属于转发平面,这样便做到了控制平面与转发平面的分离。如果原路由表中处于Active状态的路由表项失效,系统也会删除相关FIB表项。

     由于FIB表全是处于Active状态的路由,所以FIB表项的数量远远小于路由表项。基于这种特性,在设计的时候,系统可以将FIB表项加载到硬件中,从而加快数据转发速度。例如,在某些高端交换机启动后,FIB表被系统加载到接口业务板的硬件中,数据报文再通过硬件转发,不需要再通过CPU转发,可以大大降低转发时延。

     通过输入"display fib"命令,即可查看到相关FIB表项。

     Flag字段的含义:

U

可用路由

G

网关路由

H

主机路由

B

黑洞路由

 D

动态路由

S

静态路由

R

迭代路由

F

快速重路由

    

     路由器常规转发报文的流程:路由器接收到一个报文后,将它从接口存储器拷贝至CPU中,CPU会根据报文的目的地址寻找FIB表中与之匹配的转发项,最终确定一条最佳的路径。与此同时,再将报文按照数据链路层上使用的协议进行封装,最后,封装后的链路层帧通过DMA(Direct Memory Access,直接内存访问)拷贝至输出队列中进行报文转发。这一个过程经过了2次系统总线,每一个报文都要重复这个过程。

     衡量路由器性能因素之一是报文的转发效率,报文的转发效率越高,性能就越强。所以需要再用到快速转发表来进行转发,快速转发表采用高速缓存来处理报文,使用基于数据流的技术来处理。

     什么是基于数据流,数据流是指在计算机系统中,数据在各个组件(如程序、模块、子系统等)之间传输和处理的过程。在数据流中,数据经过一系列处理后,输出到下一个组件或者最终输出到终端用户。例如,访问HTTP服务的一次操作。

     在计算机网络中,一般用一个5元组来描述一个数据流,源IP地址、源端口号、目的IP地址、目的端口号、协议号。当一个数据流的第一个报文通过查找FIB表转发后,在高速缓存中生成相应的转发信息,该数据流后续报文的转发就可以通过直接查找高速缓存来实现。

     例如,当一个主机需要访问服务器时,主机发出的第一个报文到达路由器的接口后,路由器会查找快速转发表实现快速转发。但由于这个报文是第一个报文,快速转发表中并没有这条数据流的转发信息高速缓存,所以系统无法进行快速转发。便会退而求其次,将报文移交至普通的FIB表,由CPU负责在FIB表中查找相关转发项,然后进行封装,再从接口转发出去。与此同时,系统记录报文中的5元组信息,再高速缓存中会生成相应的快速转发信息。

     系统会根据5元组信息生成相应的快速转发信息缓存的同时也会记录转发时的封装信息及接口信息。在当后续报文来到后,系统会查看报文中的5元组,如果命中了快速转发缓存,则会根据缓存中的封装信息直接进行二层数据帧的封装。然后在中断中直接送到出接口发送,这样,就不需要上报CPU进行查表操作,也不需要内存访问操作,更不用占用系统总线资源。

     快速转发技术就在很大程度上缩减了IP报文的排队流程,也减少了报文的转发时间。

【本文章技术支持:武汉科云信息技术有限公司】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/165142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【分布式】小白看Ring算法 - 03

相关系列 【分布式】NCCL部署与测试 - 01 【分布式】入门级NCCL多机并行实践 - 02 【分布式】小白看Ring算法 - 03 【分布式】大模型分布式训练入门与实践 - 04 概述 NCCL&#xff08;NVIDIA Collective Communications Library&#xff09;是由NVIDIA开发的一种用于多GPU间…

GoLand 2023.2.5(GO语言集成开发工具环境)

GoLand是一款专门为Go语言开发者打造的集成开发环境&#xff08;IDE&#xff09;。它能够提供一系列功能&#xff0c;如代码自动完成、语法高亮、代码格式化、代码重构、代码调试等等&#xff0c;使编写代码更加高效和舒适。 GoLand的特点包括&#xff1a; 1. 智能代码补全&a…

Ubuntu安装CUDA驱动

Ubuntu安装CUDA驱动 前言官网安装确认安装版本安装CUDA Toolkit 前言 CUDA驱动一般指CUDA Toolkit&#xff0c;可通过Nvidia官网下载安装。本文介绍安装方法。 官网 CUDA Toolkit 最新版&#xff1a;CUDA Toolkit Downloads | NVIDIA Developer CUDA Toolkit 最新版文档&…

NX二次开发UF_CAM_update_list_object_customization 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_update_list_object_customization Defined in: uf_cam.h int UF_CAM_update_list_object_customization(tag_t * object_tags ) overview 概述 This function provids the…

UDP客户端使用connect与UDP服务器使用send函数和recv函数收发数据

服务器代码编译运行 服务器udpconnectToServer.c的代码如下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<arpa/inet.h> #include<sys/socket.h> #include<errno.h> #inclu…

Okhttp 浅析

安全的连接 OkHttpClient: OkHttpClient: 1.线程调度 2.连接池,有则复用,没有就创建 3.interceptor 4.interceptor 5.监听工厂 6.是否失败重试 7.自动修正访问,如果没有权限或认证 8是否重定向 followRedirects 9.协议切换时候是否继续重定向 10.Cookie jar 容器 默认…

pycharm 创建的django目录和命令行创建的django再使用pycharm打开的目录对比截图 及相关

pytcharm创建django的项目 命令行创建的django 命令行创建项目时 不带路径时 (.venv) D:\gbCode>django-admin startproject gbCode 命令行创建项目时 带路径时 -- 所以如果有目录就指定路径好 (.venv) D:\gbCode>django-admin startproject gbCode d:\gbCode\

洛谷P1219 [USACO1.5] 八皇后【n皇后问题】【深搜+回溯 经典题】【附O(1)方法】

P1219 [USACO1.5] 八皇后 Checker Challenge 前言题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目分析注意事项 代码深搜回溯打表 后话额外测试用例样例输入 #2样例输出 #2 王婆卖瓜 题目来源 前言 也是说到做到&#xff0c;来做搜索的题&#xff08;虽…

微机原理_2

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案&#xff0c;请将选定的答案填涂在答题纸的相应位置上。&#xff09; 下列数中最大的数为&#xff08;&#xff09; A. 10010101B B. (126)8 C. 96H D. 100 CPU 执行 OUT 60H,…

西门子(Siemens)仿真PLC启动报错处理

目录 一、背景&#xff1a; 二、卸载软件 三、安装软件 三、启动软件 四、下载PORTAL项目 五、测试 一、背景&#xff1a; 在启动S7-PLCSIM Advanced V3.0仿真PLC时报错&#xff0c;报错信息为&#xff1a;>>Siemens PLCSIM Virtual Switch<<is misconfigu…

Ubuntu 23.10 服务器版本 ifconfig 查不到网卡 ip(已解决)

文章目录 1、问题描述2、 解决方案 1、问题描述 服务器&#xff1a;ubuntu 23.10 经常会遇到虚拟机添加仅主机网卡后&#xff0c;通过 ifconfig 无法获取其网卡 ip 2、 解决方案 修改网卡配置文件&#xff1a; # 进入网卡配置文件目录 cd /etc/netplan # 备份原始文件 cp …

ArgoWorkflow教程(一)---DevOps 另一选择?云原生 CICD: ArgoWorkflow 初体验

来自&#xff1a;探索云原生 https://www.lixueduan.com 原文&#xff1a;https://www.lixueduan.com/posts/devops/argo-workflow/01-deploy-argo-workflows/ 本文主要记录了如何在 k8s 上快速部署云原生的工作流引擎 ArgoWorkflow。 ArgoWorkflow 是什么 Argo Workflows 是…

网络安全如何自学?

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…

Android设计模式--装饰模式

千淘万漉虽辛苦&#xff0c;吹尽黄沙始到金 一&#xff0c;定义 动态地给一个对象添加一些额外的职责。就增加功能来说&#xff0c;装饰模式相比生成子类更为灵活。 装饰模式也叫包装模式&#xff0c;结构型设计模式之一&#xff0c;其使用一种对客户端透明的方式来动态地扩展…

<JavaEE> 什么是线程(Thread)?进程和线程有什么区别?

目录 一、线程&#xff08;Thread&#xff09;的概念 二、线程存在的意义 2.1 并发编程 2.2 比进程更“轻量” 三、使用线程时应该注意 四、进程和线程的区别 五、Java中的线程和操作系统中的线程是不同的概念 六、多线程编程 一、线程&#xff08;Thread&#xff09;的…

图神经网络的数学原理总结

图深度学习(Graph Deep Learning) 多年来一直在加速发展。许多现实生活问题使GDL成为万能工具&#xff1a;在社交媒体、药物发现、芯片植入、预测、生物信息学等方面都显示出了很大的前景。 本文将流行的图神经网络及其数学细微差别的进行详细的梳理和解释&#xff0c;图深度学…

Linux中flask项目开启https访问

1.下载阿里云免费证书 2.项目添加https配置 3.服务器开启https访问 3.1 重新安装OpenSSL 3.2.重新安装Python 上一次已经讲过Linux安装部署Python: Linux安装Python3.10与部署flask项目实战详细记录,今天记录一下Python项目如何支持https访问…

性能相关的闪存特性

一、多Plane操作 上章提到若干个Plane组成Die或者叫LUN,即一个Die上有多个Plane 每次进行写操作时&#xff0c;控制器先将数据写入页缓存中&#xff0c;等同一个Die上另一个Plane也写数据的时候&#xff0c;再同时写入&#xff0c;原来单独操作一个Plane的时间变成了可以同时做…

Springmvc实现增删改差

一、包结构 二、各层代码 (1)数据User public class User {private Integer id;private String userName;private String note;public User() {super();}public User(Integer i, String userName, String note) {super();this.id i;this.userName userName;this.note note;…

Qt实现自定义IP地址输入控件(百分百还原Windows 10网络地址输入框)

在开发网络相关的程序时,我们经常需要输入IP地址,例如源地址和目标地址。Qt提供了一些基础的控件,如QLineEdit,但是它们并不能满足我们对IP地址输入的要求,例如限制输入的格式、自动跳转到下一个输入框、处理回车和退格键等。因此,我们需要自己编写一个自定义的IP地址输入…