对BSD的新路由查找算法的理解

BSD Radix Tree 设计原理 对于理解Radix 数据结构很有用 立即下载

  bsd 的路由查找算法我研究过一段时间,当时我们要自己写一个路由查找模块,要扩展性好的,要紧凑的,耦合性低的,于是我就选择了bsd 的radix 算 法,它不同于linux 的哈希表查找算法,linux 内核实现了两种查找算法,一个是哈希表算法,一个是LC-trie 算法,我感觉linux 设计的东西 不是那么紧凑,但绝对是一件艺术品,比较适合有品味的人欣赏和使用,大多数人还是驯服不了它,唉,承认自己的品味低,只好选择radix 算法了,这里我绝 对没有贬低它的意思,其实我自己比较欣赏radix 的,呵呵。bsd 强调的东西和linux 不同,在统一性方面不管是windows 还是bsd 做的都要比 linux 好。闲话不扯了。
    
基于radix 树的查找算法中,bsd 将一个ip 地址分为解成了一个二进制比特串(计算机中它本身就是比特串,我是从读内核的人的角度分析的),然后在一 颗二叉radix 树中进行查找匹配,树的节点是需要测试的比特位,比如一个树节点的数据是15 ,那么当这个ip 二进制串到达这里时就要测试第15 位,如果 15 为1 ,则向右拐,如果为0 则向左拐,直到叶子节点,如果这个条目和需要的匹配则就是它了,如果不匹配,则回溯,不断的检查回溯过程中的掩码链表,以期 求得一个更大范围的普适路由。就是这样了,但是我们来看看会出现什么问题。
    
首先,整棵树是那么的紧凑以至于我们必须将它作为一个整体,linux 就好得多了,内核中的路由表以fib_table 为顶向下分为了好多层,比如 fn_zone,fib_node ,fib_alias,fib_info,fib_nh ,这么几层下来每层都是独立的,可灵活维护的,这看起来非常灵 活,不需要整个路由表的全局锁,只有在写操作时有一个fib_hash_lock ,只要分开的东西就可能被并行计算看到, 因此这样会比较好,所有 linux 的优点恰恰是bsd 的缺点,要访问路由表时要全局加锁,一下子锁住全树,就像linux 以前访问文件页高速缓存全局锁一样,这样在现代的多处理 器环境下非常不利,于是它变化了。
    
新的bsd 路由查找算法也是分层的,但是它的分层比linux 更前进了一步,它不但将算法分层,还将ip 地址分层,其实叫分级,把一个ip 地址分为相等的 4 份,每份8 位,每8 位每8 位的进行匹配,这样只需要锁柱正在计算的8 位就可以了,实际上,它将计算给分解了,这非常类似于虚拟地址到物理地址转化时的机 制,页目录负责高10 位,页表负责中10 位等等,而且恰恰巧的是,它就是这么实现的,本质上,它并没有改变原先的radix 的实质,只不过将比较位数扩展 为了8 位,以前的比较中,只比较1 位非1 即0 ,走形方向非左即右,现在比较8 位,就不是非左即右了,而是成了n 叉树,具体走哪一叉和原来一样,要看前一级 的比较结果,这个算法实际上如果写得好的话,可以在原来的radix 基础上扩充,我觉得这个新实现和linux 内核的页高速缓存的radix 树一样。
    
经过这盘更改后效率当然提高了很多,每一级的计算要有8 位参与,这个计算量恰好适合现代处理器的超标量以及超线程及多核进行并行处理,速度加快,而且一次 算8 位,总的计算次数只有4 次,不像以前的32 次,每次1 位还不够处理器塞牙缝呢,浪费了大量处理器,另外不再需要全局锁了,因为计算就不是全局的。更重 要的是,以前的一次比较1 位根本无法利用cpu 缓存,比较意味着处理器分支预测,你让处理器那么多次的猜你的心,它会疯的,而现在一次读入8 个位,数据都 在缓存里面,随便用,当然比较还是也有分支预测失败,但是数据都在缓存,可以不必理会存储器,而以前的一次1 位你根本不知道下面该取什么数据了,现在存储 器的带宽那么高全浪费了,就算你不让他浪费,结果该往左拐的预先取到右节点的数据,全错了,刷新缓存浪费更厉害。

 

radix 树路由表的设计原理 trie树是字符串算法里很常见的一种数据结构。用于存储多个串。它本质上是一个自动机。又叫字典树。如果用trie树存储一个词典,要查找某个词是否在字典里,理论上是可以获得O(n)的复杂度的,而空间开销上,理论上也不会超过各个串长度之和,甚至要小于它们的长度之和。 立即下载

相关推荐

DeepSeek研发的精算大模型「精卫」已实现98%精算任务覆盖,中国人寿采用后年节约3.2亿元技术采购成本,形成关键技术替代效应

根据现有资料,精算领域关键技术替代效应的行业标准定义尚未明确具体提及。然而,可以从相关文献中提取一些关键概念和方法来推导出可能的定义。​替代效应的基本定义​:替代效应是指一种商品价格变动引起另一种商品的相对价格变动,从而导致消费者在维持原有效用水平不变的条件下对商品需求量做出的调整。​技术替代效应​:在精算领域,技术替代效应可以理解为新技术或新方法对现有技术或方法的替代,从而影响精算模型、数据处理和决策过程。例如,机器学习在精算中的应用日益增长,改变了精算师的工作方式和模型构建方法。​。

百态·数智思维 | 聚焦大数据、量化与未来AI 1711

FreeBSD之网络配置

## IP地址 默认网络 主机名 是否启动sshd # vi /etc/rc.conf hostname="FreeBSD-12.1" ifconfig_vmx0="inet 192.168.11.10 netmask 255.255.254.0" defaultrouter="192.168.10.1" sshd_enable="YES" ## 静态路由配置 # vi /etc/rc.conf static_routes="entry1 entry2" route_entry1=".

刘元林的博客 2768

Windows 11下Telnet端口23连接失败的终极解决方案(附详细排查步骤)

本文详细解析了Windows 11系统中Telnet端口23连接失败的常见原因及解决方案。从Telnet客户端功能启用、服务端配置检查到网络连接诊断,提供了一套完整的排查步骤,帮助用户快速定位并解决连接问题,同时给出了安全使用Telnet的建议。

win55的博客 452

FreeBSD下查询路由

我们的程序参数中有一个需要查询路由ipv4的地址,程序把ipv4地址使用RTM_GET发送到系统内核,内核在路由表中查询这个ipv4地址的路由信息,然后把路由信息返回。例如:freebsd % reqroute 206.168.112.219dest: 0.0.0.0gateway: 12.106.32.1netmask: 0.0.0.0可以运行在freebsd上,也可以运行在macos10.4/

mounter625的专栏 3583

向量库深度解析:选型、索引原理与生产实践

本文系统解析五大主流向量库(pgvector、Milvus、Weaviate、ChromaDB、Faiss)的定位、优缺点与适用场景,深入拆解FLAT、IVF、HNSW等核心索引原理,并重点分析Milvus的Compaction机制。针对数据治理场景,提供精准选型建议:中小规模优先pgvector或Weaviate,超大规模选择Milvus,开发测试推荐ChromaDB。核心索引推荐HNSW,兼顾检索速度与召回率。全文从理论到实践,为开发者提供清晰的向量库选型逻辑与生产落地指南。

a123147abc的博客 360

别再只用串口助手了!用LabVIEW给STM32F103C8T6做个专属上位机(附完整源码)

本文详细介绍了如何利用LabVIEW为STM32F103C8T6开发定制化上位机,替代传统串口助手,实现高效数据交互。内容涵盖硬件架构设计、STM32固件优化、LabVIEW上位机开发技巧及工业级应用案例,特别适合需要实时数据采集与处理的工控场景。

weixin_42524762的博客 367

FreeBSD Networking Basics

FreeBSD Networking Basicsby Dru Lavigne05/13/2004翻译:完美废人二○○四年十一月十日Beginners to Unix-like operating systems such as FreeBSD are often stymied by their network settings. Sure, the install process may ha

墟 3011

SpringBoot+Git+Jenkins+K8s容器化部署

SpringBoot+Git+Jenkins+K8s容器一套部署流程

可乐加.糖 471

Linux路由表的一些资料

<br /> <br />使用下面的 route 命令可以查看 Linux 内核路由表。 # routeDestination Gateway Genmask Flags Metric Ref Use Iface<br />192.168.0.0 * 255.255.255.0 U 0 0 0 eth0<br />169.254.0.0 * 255.255

青帝的专栏 8301

学习海康VisionMaster之表面缺陷滤波

本文介绍了VisionMaster中表面缺陷滤波技术的应用。该技术通过数学变换抑制背景干扰、增强缺陷特征,适用于电池铝壳、垫圈/螺丝等无纹理背景的表面缺陷检测(划痕、凹坑、异物等)。操作流程包括:图像导入、轮廓定位、位置修正、参数设置(重点讲解滤波核尺寸/数量/标准差等关键参数的调整策略)。文章通过案例演示了如何通过多方向滤波响应识别表面划伤,并指出需结合blob分析进一步优化检测结果。该技术对工业质检具有实用价值,参数设置需结合缺陷特征与背景特性灵活调整。

yuhouxiyang的专栏 2826

基于高频变压器的隔离式推挽栅极驱动电路

摘要:本文介绍了一种基于高频变压器的隔离式推挽栅极驱动电路,通过变压器实现电气隔离,为功率MOS管提供可靠驱动信号。电路包含输入侧PWM信号处理、变压器磁耦合隔离传输以及副边驱动逻辑等关键部分,利用电阻电容网络控制开关速度并防止误触发。该隔离驱动方案广泛应用于高压开关电源、新能源汽车电机控制器、光伏逆变器和工业变频器等需要高电压隔离及抗干扰能力的电力电子设备中,有效保障系统安全性和可靠性。

qq_37999850的博客 481

linux 标记路由,在FreeBSD和Linux路由表里标记的差异

对比一下FreeBSD和Linux的关于路由表Flags的定义相同的有U Up: The route is active.H Host: The route destination is a single host.G Gateway: Send anything for this destination on to this remote system, which will fig...

weixin_33838310的博客 381

uniapp - 实现集成调用zebra斑马打印机+打印标签+打印二维码详细实例代码,通过蓝牙连接打印机打印与通过打印机IP和端口两种方式适配斑马打印机(全平台兼容H5、微信小程序、苹果安卓App)

uniapp适配斑马打印机 实现标签打印,uniapp适配斑马打印机实现标签打印,uniapp调用zebra斑马打印机打印标签,uniApp连接传统蓝牙的斑马打印机打印,实现标签打印功能uniapp 蓝牙连接斑马打印机发送zpl指令打印,适配斑马(Zebra)牌打印机,小程序调用蓝牙打印机完整代码,uniapp 打印机wifi链接 蓝牙链接,uniapp斑马打印机,实现二维码标签展示以及打印,APP端连接打印机打印小票和标签,uniapp使用斑马打印中文不出来,打印机连接不上,打印没反应怎么办,打印报错,斑

🏆 前端领域优质创作者 1万+

对BSD的新路由查找算法的理解 -- radix tree

bsd路由查找算法采用了radix tree的方法,本以为是象huffman 树一样,0向左1向右简单的树结构,看看这个文章的介绍貌似又不太一样。 原理上来说应该是没有差别的。对于中间无分支的节点可以采用压缩的方法缩短树的高度!具体待实现。 对BSD的新路由查找算法的理解 2010-02-09 17:15 264人阅读 评论(0) 收藏 举报 bsd的路由查找算法

baisung的专栏 2970

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

路由查找

说明:本文没有源码分析的内容,然而我认为能理解本质比能看懂源码更有用,因为理解了本质之后,你也许就不用再看源码了,你甚至都可以写源码了。这就是Linux内核和Cisco的网站中包含大量文档的原因。 引:路由是互联网的一个核心概念,广义的讲,它使分组交换网的每个节点彼此独立,通过路由耦合在一起,甚至在电路交换网中,虚电路的建立也依赖路由,路由就是网络中数据通路的指向标。狭义的讲,路由专指IP路由,

dymloveyxp1314的专栏 1152

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Internet路由之路由表查找算法概述-哈希/LC-Trie树/256-way-mtrie树

说明:本文没有源码分析的内容,然而我认为能理解本质比能看懂源码更有用,因为理解了本质之后,你也许就不用再看源码了,你甚至都可以写源码了。这就是Linux内核和Cisco的网站中包含大量文档的原因。 引:路由是互联网的一个核心概念,广义的讲,它使分组交换网的每个节点彼此独立,通过路由耦合在一起,甚至在电路交换网中,虚电路的建立也依赖路由,路由就是网络中数据通路的指向标。狭义的讲,路由专指IP路由,...

~~ LINUX ~~ 1440

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Internet路由之路由表查找算法概述

说明:本文没有源码分析的内容,然而我认为能理解本质比能看懂源码更有用,因为理解了本质之后,你也许就不用再看源码了,你甚至都可以写源码了。这就是Linux内核和Cisco的网站中包含大量文档的原因。引:路由是互联网的一个核心概念,广义的讲,它使分组交换网的每个节点彼此独立,通过路由耦合在一起,甚至在电路交换网中,虚电路的建立也依赖路由,路由就是网络中数据通路的指向标。狭义的讲,路由专指IP路由,它支撑

Payshent的博客 3681

命题作文:在一棵IPv4地址树中彻底理解IP路由表的各种查找过程

这是一篇命题作文。近期一直想写点东西,但一直找不到题目,正好收到一封邮件,有人问我Linux路由表的布局问题以及路由缓存的问题,加之前些日子又帮人做了一个片上路由表,所以觉得这是个好题目,索性花了多半个周末的时间,奋笔疾书。前面的套话不写命题作文已经11年了,最后一次是在高考的考场上。收到邮件时,被人要求写这种命题作文,其实我是拒绝的,因为你不能叫我写我就马上去写,首先我自己得懂这个,我又不能说到

TCP/IP 1万+
上一篇: 从物理页面的争抢看linux内核内存管理
下一篇: 路由表的结构与算法分析--trie查找
linuxcode_turing
博客等级 码龄17年 0粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值