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.mfbz.cn/a/184433.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AC自动机(简单模板)

AC自动机&#xff0c;就相当于是在字典树上用kmp。next数组回退的位置为最大匹配字符串在字典树上的节点位置。 在获取字典树上的next数组的时候用的是BFS每次相当与处理的一层。 下图中红线为&#xff0c;可以回退的位置&#xff0c;没有红线的节点回退的位置都是虚拟原点。…

Nginx 配置错误导致的漏洞

目录 1. CRLF注入漏洞 Bottle HTTP头注入漏洞 2.目录穿越漏洞 3. http add_header被覆盖 本篇要复现的漏洞实验有一个网站直接为我们提供了Docker的环境&#xff0c;我们只需要下载下来就可以使用&#xff1a; Docker环境的安装可以参考&#xff1a;Docker安装 漏洞环境的…

Android笔记(十五):JetPack Compose的附带效应(二)-produceState和derivedStateOf

在本笔记中&#xff0c;将结合实例介绍produceState和derivedStateOf两个可组合函数。它们分别实现状态的转换。 &#xff08;1&#xff09;produceState将非Compose状态转换虫Compose状态 &#xff08;2&#xff09;derivedStateOf将多个状态转换成其他状态。 一、produceSta…

NFC技术简介

NFC简介 NFC(近场通信&#xff0c;Near Field Communication&#xff09;是一种短距高频的无线电技术&#xff0c;由非接触式射频识别(RFID)演变而来。 NFC工作频率为13.56Hz&#xff0c;通常只有在距离不超过4厘米时才能启动连接&#xff0c;其传输速度有106 Kbit/秒、212 Kb…

「Whale 帷幄」连续入选科技榜单,AGI 冲击波正在加速行业洗牌

以 AGI 为底座&#xff0c;品牌 MarTech 正在经历一场前所未有的深度变革。 近日&#xff0c;弯弓研究院发布「中国 MarTech 500 强榜单」&#xff0c;以 2023 中国营销技术&#xff08;MarTech&#xff09;生态为研究对象&#xff0c;洞察行业现象与未来趋势。作为品牌数字化…

视频剪辑新招:批量随机分割,分享精彩瞬间

随着社交媒体的普及&#xff0c;短视频已经成为分享生活、交流信息的重要方式。为制作出吸引的短视频&#xff0c;许多创作者都投入了大量的时间和精力进行剪辑。然而&#xff0c;对于一些没有剪辑经验的新手来说&#xff0c;这个过程可能会非常繁琐。现在一起来看云炫AI智剪批…

AI制作的《大多数普通女孩的一生》——公开教程和工作流

内容来源&#xff1a;JiamigouCn ​这周由AI制作的《大多数普通女孩的一生》&#xff0c;在抖音爆火&#xff0c;获得新华网转发。到目前为止&#xff0c;全网还没有公开教程和工作流&#xff0c;需要花费800-2000购买。 本着AI社区共享原则&#xff0c;我委托公众号“楚思智能…

Debian12试用报告

环境: win11vbox 虚拟机 网络: host-only访问局域网 nat 访问外网, 配置为dhcp动态获取ip 遇到的问题: 偶尔卡死: nat每次开机都不生效, 外网无法访问; 开机后 重启网络可解决 sudo /etc/init.d/networking restart host-only倒是没问题, 内网正常访问 vim9还是用不习…

ubuntu22.04 arrch64版在线安装java环境

脚本 #安装java#!/bin/bashif type -p java; thenecho "Java has been installed."else#2.Installed Java , must install wgetwget -c https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-arm64-vfp-hflt.tar.gz;tar -zxvf ./jdk-8u151-linux-arm6…

【Spring集成MyBatis】核心配置文件

文章目录 1. typeHandlers标签2. plugins标签通过PageHelper的API获取分页的信息 1. typeHandlers标签 可以重写类型处理器&#xff0c;或创建类型处理器来处理不支持/非标准的类型。选择性地将它映射到一个JDBC类型&#xff1a;如Java中的Date类型&#xff0c;将其存放到数据…

“土味出海”,屡试不爽!短剧出海引来新一轮爆发?

土味和“钱途”并存的短剧不仅在国内迅猛爆发&#xff0c;今年下半年以来海外市场多部爆火短剧出现&#xff0c;“短剧出海”的话题热度不断攀升&#xff0c;丝毫不差2021年网文出海的盛况。 “霸总的爱&#xff0c;日入千万刀”&#xff0c;是真实存在的&#xff01; 据统计…

快手ConnectionError

因为运行的程序被中断导致 top然后查看站用处内存高的accelerate kill进程号 9回车

概要设计文档案例分享

1引言 1.1编写目的 1.2项目背景 1.3参考资料 2系统总体设计 2.1整体架构 2.2整体功能架构 2.3整体技术架构 2.4运行环境设计 2.5设计目标 3系统功能模块设计 3.1个人办公 4性能设计 4.1响应时间 4.2并发用户数 5接口设计 5.1接口设计原则 5.2接口实现方式 6运行设计 6.1运行模块…

图像标记上线,描点信息尽在掌握丨三叠云

图像标记 路径 表单设计 >> 组件 >> 增强组件 功能简介 「图像标记」字段是「增强字段」类型字段。用户通过上传图片的方式构建一个背景图片&#xff0c;并在构建的图片背景上添加描点信息。搭配「仪表盘」中的「图像轨迹」&#xff0c;可绘制出相应的数据轨迹…

MySQL数据库入门到大牛_基础_14_视图及基本操作

本章开始将会介绍表之外的数据库对象。 文章目录 1. 常见的数据库对象2. 视图概述2.1 为什么使用视图&#xff1f;2.2 视图的理解 3. 创建视图3.1 创建单表视图3.2 创建多表联合视图3.3 基于视图创建视图 4. 查看视图5. 更新视图的数据5.1 一般情况5.2 不可更新的视图 6. 修改…

马斯克星链与芯事:30亿美元炸出卫星互联网革命,GPU算力创无限可能

★卫星互联网&#xff1b;算力&#xff1b;卫星通信&#xff1b;互联网&#xff1b;低轨卫星互联网&#xff1b;5G基础设施&#xff1b;GPT-4 Turbo&#xff1b;算力&#xff1b;地面通信&#xff1b;液冷&#xff1b;水冷&#xff1b;AI服务器&#xff1b;东数西算&#xff1b…

收藏这几个开源库,写css你会笑出声

你是否遇到过写css没灵感&#xff0c;写不出酷炫的效果&#xff0c;那这篇文章你一定要看完。知道这几个开源库&#xff0c;它能让你写出炸天的效果并且有效地增加你的摸鱼时长。 1.CSS Inspiration 网址&#xff1a;https://chokcoco.github.io/CSS-Inspiration/#/ CSS Insp…

时间序列分析算法的概念、模型检验及应用

时间序列分析是一种用于研究随时间变化的数据模式和趋势的统计方法。这类数据通常按照时间顺序排列&#xff0c;例如股票价格、气温、销售额等。时间序列分析的目标是从过去的观测中提取信息&#xff0c;以便预测未来的趋势。 以下是关于时间序列分析的一些重要概念、模型检验…

[Android]使用Retrofit进行网络请求

以下是使用 Retrofit 发送 POST 请求获取分页城市列表的 Kotlin 代码示例 1.在你的 build.gradle 文件中添加 Retrofit 和 Gson 的依赖 dependencies {......implementation("com.squareup.retrofit2:retrofit:2.9.0")implementation("com.squareup.retrofit2…

在Linux服务器部署爬虫程序?大佬只需七步!

之前在某乎上看见一篇关于《为什么很多程序员都建议使用 Linux》的文章&#xff0c;结合我自身关于Linux的使用经验。心血来潮得写了一段关于我在Linux系统部署爬虫程序的心得&#xff0c;希望结识更多的爬虫技术大佬&#xff0c;一起游弋在代码世界中。 根据我多年在Linux上部…