FRR BGP 协议分析 0 --- IMPLEMENTATION abourt BGP structures

BGP的基础配置实验 BGP的基础配置实验 一、拓扑图搭建 二、地址规划配置 R1的配置: [R1-LoopBack0]ip add 1.1.1.1 24 [R1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 R2的配置: [R2-GigabitEthernet0/0/0]ip add 12.1.1.2 24 [R2-GigabitEthernet0/0/1]ip add 23.1.1.2 24 [R2-LoopBack0]ip add 2.2.2.2 24 R3的配置: [R3-LoopBa 阅读详情

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 the repository in the hopes that it will be significantly more helpful than not.


* FILES
bgp_advertise.[hc]:

   data structures: advertised prefixes, attributes


bgp_aspath.[hc]:

  struct aspath: These are stored in a hash, apparently in wire format.


bgp_attr.[hc]:

  struct attr: contains all attributes size(ILP32) 26 words/104 bytes (poor packing, v6/multicast is 10)
  bgp_attr_parse: origin, aspath, next hop probably most of interest

  bgp_attr_origin: set flag bit
  bgp_attr_aspath: put in refcounted hash table, so share pointer

  bgp_attr_nexthop: store in attribute structure

 

bgp_btoa.c:

    ? test program


bgp_clist.[hc]:

data structures: community lists (including permit/deny state)


bgp_community.[hc]:

    data structures: community atttributes (multiple communities per struct)


bgp_damp.[hc]:

     per-route damping data, and damping control information


bgp_debug.[hc]:

     debugging support (vty config, dump of packets)


bgp_dump.[hc]:

    MRT-compatible dump format routines


bgp_ecommunity.[hc]:

      Extended communities attributes (multiple ecommmunities per struct)


bgp_filter.[hc]:

       AS path access list filtering


bgp_fsm.[hc]:

        Per-peer state machine for TCP connection, hold time, etc.


bgp_main.c: Daemon startup.


bgp_mplsvpn.[hc]:

        parsing of attribute structures for MPLS VPNs [need better description]


bgp_network.[hc]:

        Opening and binding of sockets, finding addresses for interfaces


bgp_nexthop.[hc]:

  data structures: Nexthop cache [not clear how used, if truly cache
  in sense of memoization, or something else]
  importing EGP routes into IGP (thread created)
  "scanning" (thread created)
  bgp_scan: has useful clues to data structure complexity.  Scanning process iterates over database of received

   advertisements,   and builds 'cache' structure.

bgp_open.[ch]:

         Open messages, and capability negotiation


bgp_packet.[hc]

  sending and receiving of UPDATE/WITHDRAW
  collision resolution for simultanteous opens
  bgp_read: top-level read routine: reads whole packet (nonblocking) and dispatches to per-message-type receive
 

 bgp_update_receive: calls bgp_attr_parse
    reads nrli into struct bgp_nrli update
    uninterning of aspath, community, ecommmunity, cluster,
    transit which were interned in bgp_attr_parse

bgp_regex.[ch]:

   Glue to convert BGP regexps to standard (_ means many things).


bgp_route.[hc]:

  data structures: routes as received, static routes
  Application of filters.  Lots of route processing.
 

  bgp_nlri_parse: sanity checks, then calls bgp_update with peer, prefix, attributes pointer
 

  bgp_update: bgp_update_main, then RS processing
 

  bgp_update_main:

   find 'struct bgp_node *' for this afi/safi
    look for route in table, then 'intern' attributes
    ** interning is process of looking for data in hash table, and putting there if missing, refcnt using pointer to existing data many validity checks
    get new struct bgp_path_info
    call bgp_path_info_add with rn and bgp_path_info
    call bgp_process

 

bgp_routemap.c

     implementation of route maps (match and set)

 

bgp_snmp.c

    SNMP glue.  Not particularly interesting except to add variables or debug SNMP.

bgp_table.[hc] data structures:

  struct bgp_table, struct bgp_node
  allocation/lookup/utility operations - not a lot of protocol processin


bgp_vty.[hc]

    protocol-wide vty hooks


bgp_zebra.[hc]

    Processing interface events from zebra, redistribution of routes.


bgpd.h

  struct bgp_master: daemon main data structure 
  struct bgp: per-instance structure
  struct peer_group
  struct bgp_notify: (in-core representation of wire format?)
  struct bgp_nexthop: (v4 and v6 addresses, *ifp)
  struct bgp_filter: distribute, prefix, aslist, route_maps
  struct peer: neighbor structure (very rich/complex)
  struct bgp_nlri: reference to wire format
  #define of protocol constants attribute type codes fsm states/events
  timer values

 

bgpd.c

  instance/peer allocation
  configuration
  initialization/termination
* DATA STRUCTURE SIZES

 

Question: How much memory does quagga's bgpd use as a function of state received from peers?
It seems that a struct bgp_path_info is kept for each prefix.  The "struct attr *" is interned, and variables within that are interned.  So, 40 bytes are kept per received prefix, plus interned shared values.  This could be 36 if 'int suppress' where changed to a u_char and moved to be with the other u_chars.  Without MPLS, this could be 32 bytes. Note that 8 bytes of this is linked list overhead, meaning that 24 bytes are the raw per-prefix storage requirements.
Also, a struct bgp_damp_info is apparently maintained per route; this is fairly large (about 44 bytes).
[TODO: the role of struct bgp_node.]
* TIME COMPLEXITY
It appears that received prefixes from each peer are stored in a linked list. 

MRT格式的RIB分析工具BGP-dump的安装 MRT格式的RIB分析工具BGP-dump的安装1.安装环境和依赖2.安装流程3.BGP-dump的使用 1.安装环境和依赖 最近在尝试分析Route view project中的BGP数据库中的RIB条目,由于文件类型为MRT格式的,所以需要BGP-dump作为分析工具。但是发现网上的教程主要针对BGP-dump 1.6.0,Github上1.6.2的安装方法似乎不太一样,所以我尝试安装了一下,根据官网的教程,下面的流程亲测可行。 (1)ubuntu 16.04 系统 (2)bzip2 这里是原网址:bz 阅读详情

相关推荐

BGP双栈原理Basic

NLRI:网络层可达信息<前缀,前缀长度> MP-NLRI:携带IPv6和VPNv4、VPNv6路由信息 BGP原理: BGP工作原理: BGP特点: 1.使用TCP作为传输协议,端口号179 2.BGP路由聚合方式:静态路由(直接在network聚合路由)、手动聚合、自动聚合 3.BGP不会周期性泛洪,只传递更新的路由信息 4.矢量路由协议:BGP向外通告路由时必须保证该路由在自己的BGP表中是最优的 5.无环路: BGP如何防止路由环路: a.水平分割:从IBGP学来的路由不会在发送给IBG

qq_43704340的博客 924

FRR BGP 协议分析2 -- 创建对等体的命令分析

本次继续分析BGP最简单的配置的代码实现,这样大家对BGP的框架会有进一步的熟悉: router bgp 200 bgp router-id 2.2.2.2 neighbor 3.3.3.3 remote-as 200 neighbor 3.3.3.3 update-source 2.2.2.2 router bgp XX 命令执行函数是router_bgp_cmd,主要...

~~ LINUX ~~ 2032

结合 Conda 手动安装 RepeatMasker

RepeatMasker 是一个广泛使用的生物信息学工具,用于识别和屏蔽(mask)基因组序列中的 重复序列(repeats) 。在使用过程中需要调用重复序列数据库(Repbase 和 Dfam),如果使用Conda安装的话会出现许多问题,因此推荐手动安装。在此记录我手动安装RepeatMasker的流程,希望对各位同学有所帮助。

m0_65437087的博客 2534

FRR BGP代码分析21 -- 路由刷新 && MAX-PREFIX

路由刷新 && MAX-PREFIX

~~ LINUX ~~ 1026

STM32F407与W5100S的SPI通信实战:从硬件连接到TCP服务器搭建

本文详细介绍了STM32F407微控制器通过SPI接口驱动W5100S以太网模块,并搭建TCP服务器的完整实战过程。内容涵盖硬件连接、SPI驱动配置、网络参数设置及Socket编程,重点解析了SPI通信时序、W5100S寄存器操作和TCP连接管理,为嵌入式网络通信开发提供实用指南。

weixin_29173777的博客 193

图数据挖掘 ECC K-core core number truss number clique

K-core:什么叫k-core,给定一个正整数k(k>=0),k-core是一个G的最大子图(也就是说k-core是一个图的限制),将这个子图定义为Hk,对于Hk中的每个顶点v,他的度数都是大于等于k的。 k-core是内嵌的,如下图所示,集合{ABCD}是H3,也就是3-core的子图。而集合{ABCDE}是H2,也就是2-core的子图,集合{ABCDEGF}是H1,也就是1-core的子图,而从集合的角度来讲H3<H2<H1。 core number:什么叫kcor

weixin_45193103的博客 1683

FRRouting User Guide

原文:http://docs.frrouting.org/en/latest/ Introduction Overview How to get FRR About FRR Mailing Lists Bug Reports Installation From Packages From Snapcraft From Source Basic Setup Crash logs Daemons Configuration File Services Sy

weixin_39094034的博客 915

抖音a_bogus参数逆向避坑指南:从环境检测到XHR请求的全流程解析

本文详细解析了抖音a_bogus参数在v1.0.1.19版本下的逆向工程全流程,重点介绍了如何通过PyV8Env框架进行有效的补环境操作,以绕过严格的环境检测。内容涵盖从环境初始化、关键事件触发到模拟XHR请求获取签名的完整步骤,并提供了可运行的Python代码示例和常见检测点的避坑指南,帮助开发者稳定生成有效的a_bogus参数。

tech5的博客 599

FRR BGP代码分析20 -- 6PE\6VPE

下一代网际协议IPv6,是IPv4的增强版本,提供改进的地址空间、配置、维护和安全功能,支持更多的用户和设备接入互联网。 虚拟专用网络是由共享的链路或公网(如因特网)组成的专用私有网络的扩展,使用户在两个不同地域的计算机通过穿越共享链路或公网互通数据。 IPv6 层3隧道与IPv4 层3隧道的区别是IPv6 层3隧道中PE从CE接收到的是IPv6报文,IPv4 层3隧道中PE从CE接收到的是I...

~~ LINUX ~~ 2420

西红柿成熟度检测数据集总结

成熟度类别标注数量semiripe(半成熟)10275rotten(腐烂)13470fullyripe(完全成熟)35031unripe(未成熟)26212。

crz1336768325的博客 2125

Apollo EM Planner中路径-速度解耦优化的数学建模与仿真分析

摘要 Apollo EM Planner采用路径-速度解耦优化策略解决自动驾驶运动规划问题。该算法将时空轨迹规划分解为路径规划和速度规划两个子问题:首先在静态环境下生成几何最优路径,再优化沿路径的速度曲线。通过五次多项式表示路径和速度,构建包含平滑性、安全性、舒适性的多目标优化函数,并引入弹性模型处理动态障碍物约束。算法具有解耦优化、弹性适应、实时求解等特点,适用于高速公路、城市交叉口等多种场景。数学建模包括路径几何优化、速度动态优化和弹性势能函数,最终生成满足车辆动力学和环境约束的安全轨迹。

走向CTO的路上... 932

bgpdump的安装与使用

bgp协议,也就是边界网关协议,主要用于AS之间的通讯。bgpdump,是Linux下用来解析MRT格式bgp数据包的工具。这是其官方网址 https://bitbucket.org/ripencc/bgpdump/wiki/Home。 其安装过程在官网上有写: 值得注意的是,需要两个额外的包zlib和bzip2.如果是32位操作系统,在这两个包的官网上下载相应版本并安装后,bgpdump

JevonsAn-计算机专业的小学生 2181

PCB制造工艺参数到AD规则设置

本文提供了PCB设计与制造的落地指南,强调需先了解PCB厂的工艺参数,再在Altium Designer中设置相应规则。核心步骤包括:获取PCB厂的关键工艺参数(线宽/线距、过孔尺寸等),在AD中设置电气规则、布线规则、阻焊规则等,并进行DRC检查。文章还给出了常见问题避坑建议和快速落地模板,帮助设计师确保设计符合生产要求,避免因工艺不匹配导致的报废或成本增加。

qq_37999850的博客 292

BGP-4的多协议扩展MP-BGP

在BGP中引入两个非传递可选属性,   (1)多协议可达NLRI(MP_REACH_NLRI) :通告新的多协议路由。 (2)多协议不可达NLRI(MP_UNREACH_NLRI):撤销多协议可达NLRI路由。 MP_REACH_NLRI携带可达目的以及到达目的地的下一跳。MP_UNREACH_NLRI携带不可达目的地。 MP_REACH_NLRI属性中包含一组或多组信息,有一下三项组成...

weixin_34198453的博客 1906

swl安装无法与服务器建立链接,如何解决?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 2074

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

浅谈MPLS

MPLS-VPN 思维导图 ·MPLS VPN的起源 ·VPN专用术语 一.MPLS VPN的起源 MPLS在提高数据转发速度上的优势逐渐弱化,但其支持多层标签嵌套和设备内转控分离的特点,使其在VPN等新兴应用中得到广泛的应用 传统的VPN存在一些固有缺陷,导致客户组网时很多需求没法满足,MPLS VPN将传统的两种VPN模型整合到一起,推动了VPN的发展 二.VPN专用术语 客户端的网络设备 ...

flat0809的博客 3204

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

FRR BGP 协议分析 5 -- 路由更新(2)

处理NLRI 获取NLRI的报文长度,填入nlris[NLRI_UPDATE],到现在为止nlris里面的4种类型(如果有的话),已经全部填写到nlris数组结构体里面 然后我们遍历这个数组,处理里面所有的NLRI的类型,本次先分析NLRI_UPDATE,MP后面再分析。 根据前面解析出来的SAFI选取不同的处理函数,afi/safi定义如下: AFI_IP 的组合定义如下...

~~ LINUX ~~ 3137

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

浅谈BGP原理

BGP 思维导图 ·概念及术语 ·BGP特性 ·BGP邻居关系的建立及BGP消息类型 ·BGP表 ·BGP基础部署 ·BGP属性 ·BGP路径选择 ·BGP高级属性(团体等) 一.BGP的基本概念 1.BGP所解决的问题 BGP是为了解决不同路由域之间的消息交互而产生的,其作用是提供路由域间的路由系统,保证在各个自治系统之间交换无环的路由信息 2.自治系统的概念 自治系统内的路由器使用同一路由协议...

flat0809的博客 2913

quagga源码学习--BGP协议创建对等体

现有的路由协议都是通过分布式协议逐个配置协商运行的,协议协议,一个就不需要协议咯,至少2个才能够协议着做事情嘛,不过呢,这样就出现网元过多配置困难的问题,对网管软件要求也越来越高, SDN或许可能改变这个局面,但不管软件如何定义,报文还是在一个一个网络节点传输的,所以我们看到quagga这样多的传统网络配置命令不要觉得繁琐,不配置的话,协议不会工作哦。 嗯,这章的主题是创建对等体,就是通...

weixin_30654419的博客 553

BGP详解

BGP协议详解 BGP是一种边界网关协议。但是也属于动态路由协议。 一.BGP的特征(一种外部路由协议,用来在AS之间传递路由信息,是一种增强版的距离矢量协议) 1.可靠的路由更新机制 传输协议:TCP,短口号:179(可跨越设备更新RIB) 无需周期性更新 路由更新:只发生增量路由,原因:路由表太过庞大 周期性发送Keepalive报文检测TCP连通性(与OSPF的不同点,发送的不再是hello...

qq_39965491的博客 2994

BGP协议概况及数据包分析

BGP详细介绍 BGP概述 BGP(BorderGatewayProtocol)边界网关协议,是互联网上一个核心的互联网去中心化自治路由协议。 英文名称:Border Gateway Protocol 中文名称: 边界网关协议 缩写名称: bgp 传输层协议: tcp 服务端口 : 179 BGP理解 如果把广域网抽象成一个城市,其中包含的城域网抽象成城市中的小区,通过接下来的描述,大致就能了...

刘坏坏的博客 5097

BGP——图解5种报文

例如:当BGP的入口路由策略发生变化时,可以通过手动触发请求邻居重新通告路由,对BGP路由表进行动态刷新。Optional Parmeters可变长字段,用于携带BGP邻居会话协商过程中使用的可选字段。1.Marter:检查BGP对等体的同步信息是否完整,不使用此验证时所有比特均为1。可变长字段,被包含在BGP路由更新中,携带路由的前缀和掩码信息。每个属性由可变长的三元组(属性类型、属性长度、属性值)组成。----此处指的就是Open报文。----此处就是不使用此验证。----长度为19~4096。

m0_49864110的博客 2万+

FRR BGP协议分析4 -- 路由更新(1)

BGP协议建立起来后,后续的核心就是UPDATE路由,其关键的部分还是在路由的更新与撤销上面,这之间包含了繁杂的属性的处理过程。 我们知道,BGP发布路由时采用如下策略: 存在多条有效路由时,BGP Speaker只将最优路由发布给对等体。 BGP Speaker从EBGP获得的路由会向它所有BGP对等体发布(包括EBGP对等体和IBGP对等体)。 BGP Speaker从IBGP获得的路...

~~ LINUX ~~ 6069

FRR BGP协议分析9 -- FLOW SPEC

Flowspec引入了一种新的NLRI编码格式,用于分发流量规则流规范。基本上,IP前缀不是简单地依赖于IP前缀的目标IP地址,而是由包含规则的n元组替换。该规则可以是或多或少复杂的以下组合: 网络源/目标(可以是一个或另一个,或两者)。 UDP / TCP的第4层信息:源端口,目标端口或任何端口。 ICMP类型和ICMP代码的第4层信息。 TCP标志的第4层信息。 第3层信息:DSC...

~~ LINUX ~~ 5276
上一篇: FRR的ATOMIC 利用GCC的实现
下一篇: FRR BGP 协议分析2 -- 创建对等体的命令分析
废言Pro
博客等级 码龄16年 1092粉丝 142原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值