linux网络协议栈分析笔记13-路由3-FIB2

linux内核 路由fib表之创建 路由fib表之创建 阅读详情
当然,我们选择路由1那章的遗留的接口进入分析
fib_lookup()       我们前面提到过fib初始化时,CONFIG_IP_MULTIPLE_TABLES  宏导致了两种方式的fib表初始化,
因此存在了有多路由表存在和无多路由表存在的情况,我们先看无多路由表的情况

static inline int  fib_lookup(struct net *net, const struct flowi *flp,
                    struct fib_result *res)
{
     struct fib_table *table;

     table =  fib_get_table(net,  RT_TABLE_LOCAL);             先查LOCAL 
     if (!table-> tb_lookup(table, flp, res))
          return 0;

     table =  fib_get_table(net,  RT_TABLE_MAIN);                再查MAIN
     if (!table-> tb_lookup(table, flp, res))
          return 0;
     return -ENETUNREACH;
}

static inline struct fib_table * fib_get_table(struct net *net, u32 id)
{
     struct hlist_head *ptr;

     ptr = id ==  RT_TABLE_LOCAL ?
          &net->ipv4.fib_table_hash[ TABLE_LOCAL_INDEX] :
          &net->ipv4.fib_table_hash[ TABLE_MAIN_INDEX];
      return hlist_entry(ptr->first, struct fib_table, tb_hlist);                 根据传入的id找到fib_table
}
上一章的一幅图说明了这种结构

!table-> tb_lookup(table, flp, res))   即 fn_hash_lookup
static int
fn_hash_lookup(struct fib_table *tb, const struct flowi *flp, struct fib_result *res)
{
     int err;
     struct fn_zone *fz;
     struct fn_hash *t = (struct fn_hash *)tb->tb_data;             获得路由区队列

     read_lock(&fib_hash_lock);
     for (fz =  t->fn_zone_list; fz; fz = fz->fz_next) {               扫描网络区
          struct hlist_head *head;
          struct hlist_node *node;
          struct fib_node *f;
          __be32 k = fz_key(flp->fl4_dst, fz);          取目标地址在该网络区的网络号  fl4_det&((fz)->fz_mask)

          head = &fz->fz_hash [fn_hash(k, fz)];             fn_hash(k, fz)得到hash关键字    获得hash链头
          hlist_for_each_entry(f, node, head, fn_hash) {       
               if (f->fn_key != k)                                   通过fn_key找到匹配的fib node节点                        
                    continue;

                err = fib_semantic_match(&f->fn_alias,           进入fib semantic查找
                              flp, res,
                        
网络配置过程分析(linux网络协议栈笔记) 配置过程分析在本篇,我们先介绍配置普通设备的IP地址的内部过程,接着再转到loopback接口的配置过程,这两个过程有相似之处,所以一起解说。然后再转入FIB系统,讲解路由系统,并用图例演示路由表的变化。最后介绍接口状态的变化,这对于驱动程序开发人员来说也是比较重要的。 .1)配置是如何下达到内核的? 我们假设在安装我们的Linux系统时,没有配置IP地址,也没有挂上网线,完完全全是一台“裸机” 阅读详情

相关推荐

TCP/IP 协议栈 Linux 网络包收发全流程:从网卡到 Socket 的 13 步拆解

本文深入解析了 Linux 系统中 TCP/IP 协议栈的网络包收发全流程,从网卡接收、协议栈处理到应用层 Socket 的 13 个关键步骤。详细介绍了硬件中断、链路层处理、网络层路由、传输层拆封等核心机制,并提供了性能观测工具和优化技巧,帮助网络工程师深入理解 Linux 网络基础。

weixin_33806859的博客 270

【信息科学与工程学】计算机科学与自动化——第五十一篇 Linux内核函数算法与依赖关系

函数名称算法表达式/方程名称方程表达参数列表软件依赖硬件依赖应用场景时间复杂度空间复杂度​进程调度决策算法P:进程集合t:时间w_i:权重cpu:CPU1. 定时器中断2. 进程状态机3. 负载均衡4. 上下文切换协议1. 时间戳计数器2. 缓存层次3. 中断控制器4. TLB刷新进程调度O(log n)O(k)​进程创建算法clone_flags:克隆标志1. 命名空间时序2. 资源计费3. 信号处理4. 调度器激活。

weixin_49199313的博客 442

【信息科学与工程学】计算机科学与自动化 第二百三十四篇 企业业务系统的架构01

以上10个编号(16-25)覆盖了自然语言处理、边缘计算、生物信息学、金融风控、云计算、社交网络、航天、教育、能源、游戏AI等领域。每个字段均提供了极其详细的内容,数学分析融合了离散数学、几何、拓扑、图论、测度论、代数、概率论、统计学、运筹学等多种学科。: 首先计算毛需求 (Gross Requirements, GR),然后减去现有库存 (On-Hand Inventory, OH) 和在途订单 (Scheduled Receipts, SR),加上安全库存 (Safety Stock, SS)。

weixin_49199313的博客 102

【信息科学与工程学】【产品体系】计算机科学与自动化——第一百八十九篇 操作系统内核(微内核/宏内核)函数与算法02

宏内核(Linux)更多典型内核函数/算法,从编号271开始,覆盖中断管理、热插拔、PCI、ACPI、固件、崩溃转储、kexec、休眠、watchdog、RTC、hwmon、LED、backlight、input子系统、remoteproc等更多领域。编号类型领域内核类型内核中的函数/算法/模块/模组模块的调用关系模块/函数/算法逐步推理思考的数学表达式及参数列表及参数数值设计模块的C/C++/其他代码关联知识271中断管理中断描述符宏内核 / (中断子系统核心)驱动申请中断 → → → 分配irq_

weixin_49199313的博客 105

【信息科学与工程学】计算机科学与自动化——第三十五篇 调度理论和调度算法01——资源调度算法

算法逻辑

weixin_49199313的博客 681

深度解析Linux协议栈源码实现与网络机制

若ACK丢失,对方重发FIN,仍可响应,防止旧连接残留报文干扰新连接。

weixin_32324637的博客 1164

linux中路由转发表的检索过程

转发表的检索过程(fib_lookup) 1) 转发表(fib_table)是记录IP转发信息的索引表, 转发表的每一记录(节点)描述了具有某一类目的地址的IP包应该使用哪一输出设备发给哪一目的主 机. 转发表记录按网络区进行分类, 每一网络区描述了在特定网络地址位长下具有不同网络号的目的地址的转发信息. 第0区的网络地址位长为0, 与所有的IP地址都匹配, 用来描述缺省网关, 第32区的网络地址位长为32, 用来与完整的IP地址匹配. 在建立网络区时, 它们按网络地址位长从大到小的顺序排列, 在搜索IP地址时, 先从全主机地址的第32区开始匹配, 最后第0区与所有的地址都匹配, 产生缺省网关. 2) 系统至少使用两个转发表, 一个是局部转发表local, 描述与所有本地地址匹配的转发信息, 另一个是主转发表main, 描述与外部地址匹配的转发信息. 可以通过策略表来选择指定的转发表.

SFF-8654接口引脚定义全解析:从SAS到U.2的高速硬件连接核心

在高速数据存储与传输领域,接口标准是连接主机与存储设备、确保信号完整性与协议互通性的物理基础。其核心原理在于通过精确定义的物理引脚和电气特性,承载不同的高速串行通信协议,如SAS和PCIe。这类高密度连接器的技术价值在于以紧凑的形态支持多协议兼容与高速率传输,满足了企业级存储、高性能计算对带宽和可靠性的苛刻要求。典型的应用场景包括服务器硬盘背板连接、NVMe U.2固态硬盘直连以及外部存储扩展。本文聚焦于SFF-8654(亦称Mini SAS HD)这一关键接口,深入剖析其引脚定义、信号分区(如高速数据通道

weixin_29188043的博客 705

ESP32+micro-ROS机器人开发实战:轻量级ROS2嵌入式集成

ROS2是现代机器人软件栈的核心框架,其基于DDS的分布式通信与QoS保障能力为多节点协同提供基础支撑;而micro-ROS作为专为微控制器优化的ROS2兼容中间件,解决了资源受限设备(如ESP32)接入ROS2生态的关键难题。其通过分层架构将DDS通信下沉至上位机Agent,使MCU仅需运行轻量Client,大幅降低内存开销(实测<180KB)并保留标准ROS2接口语义。该方案广泛应用于教育机器人、移动底盘、传感器节点等嵌入式场景,尤其适合基于ESP-IDF开发的Wi-Fi/BLE物联网机器人系统。本文以

weixin_29025501的博客 398

工业焊缝缺陷检测实战:我用PatchCore在自建数据集上踩过的那些坑

本文详细介绍了PatchCore算法在工业焊缝缺陷检测中的实战应用,包括数据准备、模型调参和阈值优化等关键环节。通过分析焊缝图像的特殊性和anomaly detection技术的优化策略,分享了在自建数据集上提升检测精度的实用经验,为工业质检领域提供有价值的参考方案。

weixin_42624889的博客 396

基于Hadoop的NBA篮球球员大数据分析与可视化系统大数据分析系统python的项目(源码+lw+部署文档+讲解等)

本系统以 Hadoop 为基础,致力于对 NBA 篮球球员的海量数据进行深入分析与可视化呈现。它能够收集来自多个数据源的丰富数据,包括球员比赛统计数据、身体素质数据、技术特点数据等。利用 Hadoop 的分布式存储和计算能力,对这些大规模数据进行高效处理。通过数据分析算法,挖掘球员的潜在价值和特点,如球员的得分能力趋势、篮板球效率变化、不同位置球员的技术差异等。同时,借助先进的可视化技术,将分析结果以直观的图表、图形等形式展示出来。教练和球队管理层可以通过可视化界面清晰地了解球员的综合表现和发展态势,从而制

QQ3359892174的博客 1314

大数据预测分析:精准把握市场趋势

传统市场预测多依赖经验判断(比如“去年卖了1000件,今年加20%”)或小数据统计(比如用近6个月的销量做线性回归)。而大数据预测分析是:利用海量结构化+非结构化数据(销售、用户、社交媒体、天气等),通过机器学习/深度学习模型,挖掘数据中的关联关系与趋势规律,实现对未来市场走势的精准预测。更全面:覆盖内部(企业数据)+外部(行业、环境数据)的全维度数据;更精准:用算法替代人工,避免主观偏差;更实时:支持分钟级/小时级的实时预测(比如直播带货的销量预测)。错误做法。

AI智能探索者的博客 1024

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

Far planner代码系列(2)

graph_decoder系列(2) 承接上文 我们接着来看decoder_node.cpp的代码部分 void GraphDecoder::Init() { /* initialize subscriber and publisher */ //graph_sub_ 订阅节点/robot_vgraph 其类型是visibility_graph_msg/Graph的消息 graph_sub_ = nh.subscribe("/robot_vgrap...

博客 1533

10天冲刺国自然基金!用这套实战AI提示词指令教程,助你中标率翻倍!亲测DeepSeek和ChatGPT不好用

虽然以上国自然提示词指令经过反复实测,但并不是万能无脑帮你搞定所有,大模型AI的特性是你专业领域能力越强,它的智商表现就会更加强大,通过以上提示词教程的使用,大大提升中标概率是肯定的。还有就是大模型的使用上,不是市面上大家都说好的就一定适用,目前来看,Gemini和Claude的两个模型是非常适合国自然本子的修改的。在使用大模型进行国自然本子撰写修改时,首先是角色的设定,然后是目标和背景的描述,好用的提示词指令都是要经过无数次的实测,比对输出结果后又反复调整,达到最佳的效果状态的提示词指令。

智能AI让学术科研更容易 1244

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: linux网络协议栈分析笔记12-路由2-FIB1
下一篇: linux网络协议栈分析笔记14-路由4-FIB3
白水煮鸡蛋
博客等级 码龄15年 106粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值