
FRR
FRR学习笔记
废言Pro
时间加努力
展开
-
FRR BGP代码分析21 -- 路由刷新 && MAX-PREFIX
路由刷新 && MAX-PREFIX原创 2020-01-10 15:51:38 · 924 阅读 · 0 评论 -
FRR BGP代码分析20 -- 6PE\6VPE
下一代网际协议IPv6,是IPv4的增强版本,提供改进的地址空间、配置、维护和安全功能,支持更多的用户和设备接入互联网。虚拟专用网络是由共享的链路或公网(如因特网)组成的专用私有网络的扩展,使用户在两个不同地域的计算机通过穿越共享链路或公网互通数据。IPv6 层3隧道与IPv4 层3隧道的区别是IPv6 层3隧道中PE从CE接收到的是IPv6报文,IPv4 层3隧道中PE从CE接收到的是I...原创 2020-01-20 09:31:48 · 2196 阅读 · 0 评论 -
FRR MPLS协议分析 3 --- MPLS ZEBRA处理
MPLS ZEBRA处理原创 2019-12-25 13:58:15 · 668 阅读 · 0 评论 -
FRR MPLS协议分析 2 --- LDP 协商
LDP 协商原创 2019-12-20 13:44:54 · 925 阅读 · 0 评论 -
FRR MPLS协议分析 1 --- MPLS初始化
MPLS初始化原创 2019-12-20 13:44:24 · 723 阅读 · 0 评论 -
FRR BGP协议分析18 -- RR
路由反射器??原创 2019-12-20 13:43:25 · 1193 阅读 · 0 评论 -
FRR BGP协议分析17 -- labeled-unicast
LABELED_UNICAST 的update消息和前面的不同点是在bgp_attr_parse解析属性的时候会调用bgp_mp_reach_parse解析BGP_ATTR_MP_REACH_NLRI,而在bgp_mp_reach_parse会处理label和vpn的一些选项,本地我们只说明处理label的,VPN的参照前面的文章。在bgp_mp_reach_parse会解析label里面的n...原创 2019-12-20 13:39:37 · 1090 阅读 · 0 评论 -
FRR BGP协议分析16 -- EVPN
EVPN ??窝,好难写原创 2019-12-18 19:16:19 · 1401 阅读 · 1 评论 -
FRR BGP协议分析15 -- 路由策略
路由策略的实现分为两个步骤:定义规则:定义将要实施路由策略的路由信息的特征,即定义一组匹配规则。可以用路由信息中的不同属性作为匹配依据进行设置,如目的地址、发布路由信息的路由器地址等。 应用规则:将匹配规则应用于路由的发布、接收和引入等过程的路由策略中。过滤器路由策略的核心内容是过滤器,通过使用过滤器,可以定义一组匹配规则。提供了以下几种过滤器供路由策略使用。其中,ACL、地址...原创 2019-12-17 14:03:23 · 1709 阅读 · 0 评论 -
FRR BGP协议分析14 -- 静态路由的处理流程
vty_execute静态路由进程执行命令static_add_routestatic_install_routestatic_zebra_nht_registerstatic_nht_updatestatic_nht_update_safi static_zebra_route_add发往zebra...原创 2019-12-11 10:34:47 · 1033 阅读 · 0 评论 -
FRR BGP协议分析13 -- ZEBRA路由的处理2
前面可知,消息被enqueue了mq的work queue,当zebra的mq的work queue被调度的时候,meta_queue_process回调函数会被执行,for循环执行一个就退出,是为了实现subq的绝对优先级调度。process_subq 取出头结点的存放的struct route_node,然后直接调用rib_process继续处理route_node,其核心思想是遍历r...原创 2019-12-11 10:33:36 · 2215 阅读 · 1 评论 -
FRR BGP协议分析12 -- ZEBRA路由的处理1
当前面初始化完成的时候,zebra客户端线程(zebra_apic)静静等待客户端的消息,zebra dplane也急不可待了。本次我们以BGP 为例,当BGP 根据自己的规则优选路由后,就会发给zebra,在函数bgp_process_main_one里面,把路由发布出去后,就会执行fib update动作,调用bgp_zebra_announce函数发布路由到zebra里面。他...原创 2019-12-11 10:32:55 · 3086 阅读 · 0 评论 -
FRR BGP协议分析11 -- ZEBRA初始化
zebra,翻译是斑马,它负责管理其他所有协议进程的路由信息的更新与交互,并负责与内核交换信息,整体的架构如下: Zebra的初始化在zebra/main.c里面,代码也来的干净直接frr_init创建zebra主进程的master数据结构,用来做事件驱动,我们可以看下thread_master的数据结构。其整合了事件的可读、可写、定时器、信号的处理,后面有时间可以来学习下...原创 2019-11-29 16:36:11 · 3518 阅读 · 0 评论 -
FRR BGP协议分析10 -- 路由衰减
路由不稳定的主要表现形式是路由振荡(Route Flapping),即路由表中的某条路由反复消失和重现。发生路由振荡时,路由器就会向邻居发布路由更新,收到更新报文的路由器需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和CPU资源,严重时会影响到网络的正常工作。路由衰减(Route Dampening)用来解决路由不稳定的问题。多数情况下,BGP协议都应用于复杂的网络环...原创 2019-11-29 09:57:53 · 2292 阅读 · 0 评论 -
FRR BGP协议分析9 -- FLOW SPEC
Flowspec引入了一种新的NLRI编码格式,用于分发流量规则流规范。基本上,IP前缀不是简单地依赖于IP前缀的目标IP地址,而是由包含规则的n元组替换。该规则可以是或多或少复杂的以下组合:网络源/目标(可以是一个或另一个,或两者)。 UDP / TCP的第4层信息:源端口,目标端口或任何端口。 ICMP类型和ICMP代码的第4层信息。 TCP标志的第4层信息。 第3层信息:DSC...原创 2019-11-27 19:04:41 · 4863 阅读 · 0 评论 -
FRR BGP协议分析8 -- BGP 层3隧道 (2)
本文,我们分析UPDATE消息的处理过程层3VPN 的UPDATE消息和前面的路由更新报文的接受处理是一样的,从解析属性的地方开始区别,报文如下图:2019/12/26 09:32:44 BGP: : 20.20.20.20 rcvd UPDATE w/ attr: , origin ?, metric 100, extcommunity RT:12.1.1.2:2, path 200...原创 2019-11-27 19:41:56 · 1220 阅读 · 0 评论 -
FRR BGP协议分析7 -- BGP 层3隧道 (1)
本文,我们分析BGP 和层3隧道 相关的命令处理这些命令的原理这里不再介绍labelexport auto配置label export auto 后,执行如下的命令命令会给每个VRF 分配一个标签,然后下发到MPLS 的LFIB表里面,涉及MPLS表项下发到内核的流程,先大概给个流程,后续再补充。 vpn_leak_postchange vpn...原创 2019-11-27 19:07:36 · 791 阅读 · 0 评论 -
FRR BGP协议分析6 -- 路由更新(3)
本文,我们继续分析配置network 主动发出update消息的处理过程原创 2019-11-27 17:46:15 · 1458 阅读 · 1 评论 -
FRR BGP 协议分析 5 -- 路由更新(2)
处理NLRI获取NLRI的报文长度,填入nlris[NLRI_UPDATE],到现在为止nlris里面的4种类型(如果有的话),已经全部填写到nlris数组结构体里面然后我们遍历这个数组,处理里面所有的NLRI的类型,本次先分析NLRI_UPDATE,MP后面再分析。根据前面解析出来的SAFI选取不同的处理函数,afi/safi定义如下:AFI_IP 的组合定义如下...原创 2019-11-26 20:52:56 · 2929 阅读 · 1 评论 -
FRR BGP协议分析4 -- 路由更新(1)
BGP协议建立起来后,后续的核心就是UPDATE路由,其关键的部分还是在路由的更新与撤销上面,这之间包含了繁杂的属性的处理过程。我们知道,BGP发布路由时采用如下策略:存在多条有效路由时,BGP Speaker只将最优路由发布给对等体。 BGP Speaker从EBGP获得的路由会向它所有BGP对等体发布(包括EBGP对等体和IBGP对等体)。 BGP Speaker从IBGP获得的路...原创 2019-11-26 14:49:52 · 5622 阅读 · 0 评论 -
FRR BGP 协议分析 3 --- FSM 状态机
前面创建完bgp peer之后,peer是active的话就会开启bgp start timer,然后开始BGP状态机的协商,不然费那么大劲创建出来不做事情就就很尴尬。状态机简介下面是BGP的状态和事件驱动的定义:bgp是基于tcp协议的,即包含了tcp协议的优点,因此上面的状态机也就跟tcp连接有一定的关系:tcp连接建立阶段的状态:Idle, Connect,...原创 2019-11-20 23:13:29 · 3169 阅读 · 0 评论 -
FRR BGP 协议分析2 -- 创建对等体的命令分析
本次继续分析BGP最简单的配置的代码实现,这样大家对BGP的框架会有进一步的熟悉:router bgp 200bgp router-id 2.2.2.2neighbor 3.3.3.3 remote-as 200neighbor 3.3.3.3 update-source 2.2.2.2router bgp XX命令执行函数是router_bgp_cmd,主要...原创 2019-11-18 18:51:02 · 1787 阅读 · 0 评论 -
FRR BGP 协议分析 0 --- IMPLEMENTATION abourt BGP structures
This file contains notes about the internals of the BGP implementation. The initial impetus is understanding the memory usage of Quagga'a BGP implementation. There may be some inaccuracies; it is in...原创 2019-11-18 16:08:54 · 843 阅读 · 1 评论 -
FRR BGP协议分析 1 --- BGP 初始化
FRR支持BGP-4,BGP-4+协议,BGP协议本身的知识点,可以参考很多资料,TCP/IP路由技术是一本不错的书,建议多看几次,还有红茶哥的博客和视频http://blog.sina.com.cn/vinsoney初始化在bgp_main.c的main函数里开始,其他协议也类似,比如ospf的main函数就在ospf_main.c.main里最重要是初始化,包含:事件驱动的初始化...原创 2019-11-14 23:22:28 · 2976 阅读 · 0 评论 -
zebra 的Thread机制 -- 003
==========================================================一、线程机制概述zebra这个软件包整体结构大致可分为两大块:协议模块和守护进程模块。协议模块实现各协议的功能,各协议以子模块的形式加载到zebra中;守护进程模块的功能主要是管理各协议的信令传输、表项操作、系统操作调用等事务,为各协议提供底层信息以及相关的硬件处理等功能支持...转载 2019-08-21 16:27:42 · 2627 阅读 · 1 评论 -
对zebra的一点思考 --- 002
此文并不针对zebra的应用,甚至不是一个架构的分析,只是对于Zebra的一点儿思考。Zebra 设计得是如此简洁明快。每一种数据结构均对应于一定的应用,它们之间以一种松耦合的方式共存,而多种数据结构组成的功能模块几乎完美的结合在一起,完成了非常复杂的功能。它的设计思想就在于对C语言面向对象式的应用。虽然很多程序均借鉴面向对象设计方式,但是Zebra的代码风格是易读的,非常易于理解和学习,...转载 2019-08-21 16:04:34 · 802 阅读 · 0 评论 -
zebra代码简单分析 --- 001
1) zebra是很有名的linux下的开源路由软件项目,代码写的非常漂亮,模块化,很清晰的结构。 关于软件的框架部分就不说了,zebra 官方网站上已经有详细的解释了,简单的来说:zebra作为一个守护进程来维护linux路由信息,其他模块rip, bgp 和这个守护进程通过消息通信来更新和获取路由信息。2) 项目主要是用到了RIP协议功能3) 每一个模块实际上是一个单进程的工作方式,在...转载 2019-08-21 15:37:24 · 1804 阅读 · 0 评论 -
Zebra 命令模式分析2
1. Zebra 功能认识ZEBRA 提供了一个类Cisco命令行的分级多用户命令解析引擎--VTY(Virtual Terminal)。它是类似于Linux Shell的虚拟终端接口,负责对访问的安全验证、数据缓冲、命令解析、模式切换和命令调用。用户通过VTYSH的每一次接口访问都会发起一个对应的VTY。VTY会根据用户优先级初始化并挂载相应的命令集Command Node。Comman...转载 2019-08-21 15:34:08 · 1111 阅读 · 0 评论 -
Zebra命令模式分析
命令存储结构 对于上图中略去的cmd_elemnt,它代表了一条命令,具体展开如下: 每条命令按上图存储,命令被分拆为tokens,存储在vector中 如此,形成了zebra命令模式的基本框架:所有命令被分类到不同模式下。这里的模式即上面图中的 节点cmd_node,而命令则相当于cmd_element,可见,命令被放到了不同的node下...转载 2019-08-21 15:21:58 · 1137 阅读 · 0 评论 -
zebra的命令存储原理及使用方法
zebra在设计命令格式的时候,将命令节点Node和命令Command分开,整个命令结构是一个树状的,如图:NODEn表示命令节点,CMDn表示具体的命令。在zebra的整个命令行设计当中,zebra用向量的概念将命令和节点连接起来,建立起隶属关系。一个全局向量CMDVEC,指向整个命令结构,CMDVEC的每一个索引值都是一个具体的命令节点(如果有的话);在每个命令节点的结构中又存在...转载 2019-08-21 15:19:38 · 1928 阅读 · 0 评论 -
FRR -- CLI简要分析
FRR作为一个路由器软件,自然要提供人机接口。FRR提供snmp管理接口,而且,自然就会有对应的命令行管理格式,当然一般路由软件不会提供界面形式的,也许有webui,然而FRR并没有。我们要看的就是这个命令行处理的代码 command。接触过类似命令行的朋友肯定有一点点好奇吧,那么数量庞大的命令和参数输入,还可以提供提示和自动补齐,这肯定不是一件很简单的事情。下面是一个配置示例:...原创 2019-08-21 14:50:06 · 4685 阅读 · 0 评论 -
FRR -- Process Architecture
FRR inherited its overall design architecture from Quagga. The chosen model for Quagga is that of a suite of independent daemons that do IPC via Unix domain sockets. Within each daemon, the architectu...原创 2019-08-12 17:47:27 · 1432 阅读 · 0 评论