FRR BGP协议分析8 -- BGP 层3隧道 (2)

【重识云原生】第四章云网络4.3.7.4节——BGP协议高级特性 为保证 IBGP 对等体之间的连通性,需要在 IBGP 对等体之间建立全连接关系。假设在一个 AS 内部有 n 台设备,那么建立的 IBGP 连接数就为 n(n-1)/2。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和 CPU 资源的消耗都很大。在 IBGP 对等体间使用路由反射器可以解决以上问题。 如图,在一个 AS 内部关于路由反射器有以下几种角色:​路由反射器示意图 同一集群内的客户机只需要与该集群的 RR 直接交换 阅读详情

本文,我们分析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/12/26 09:32:44 BGP: : 20.20.20.20 rcvd UPDATE wlen 0 attrlen 69 alen 0

2019/12/26 09:32:44 BGP: : 20.20.20.20 rcvd RD 12.1.1.2:2 1.1.1.1/32 label 154 IPv4 vpn

2019/12/26 09:32:44 BGP: : vpn_leak_to_vrf_update: start (path_vpn=0x5589ff3debf0)

2019/12/26 09:32:44 BGP: : vpn_leak_to_vrf_update_onevrf: skipping: import not set

2019/12/26 09:32:44 BGP: : vpn_leak_to_vrf_update_onevrf: updating 1.1.1.1/32 to vrf VRF 1

2019/12/26 09:32:44 BGP: : vpn_leak_to_vrf_update_onevrf: pfx 1.1.1.1/32: num_labels 1

2019/12/26 09:32:44 BGP: : leak_update: entry: leak-to=VRF 1, p=1.1.1.1/32, type=9, sub_type=0

2019/12/26 09:32:44 BGP: : leak_update: nexthop is valid (in vrf VRF default)

2019/12/26 09:32:44 BGP: : leak_update: ->VRF 1: 1.1.1.1/32: Added new route

2019/12/26 09:32:44 BGP: : group_announce_route_walkcb: afi=IPv4, safi=vpn, p=1.1.1.1/32

2019/12/26 09:32:44 BGP: : subgroup_process_announce_selected: p=1.1.1.1/32, selected=0x5589ff3debf0

2019/12/26 09:32:44 BGP: : bgp_zebra_announce: p=1.1.1.1/32, bgp_is_valid_label: 2

2019/12/26 09:32:44 BGP: : Tx route add VRF 7 1.1.1.1/32 metric 100 tag 0 count 1

2019/12/26 09:32:44 BGP: :   nhop [1]: 20.20.20.20 if 0 VRF 0 label 154

2019/12/26 09:32:44 BGP: : bgp_zebra_announce: 1.1.1.1/32: announcing to zebra (recursion set)

2019/12/26 09:32:44 BGP: : u11:s11 send UPDATE w/ attr: , origin ?, extcommunity RT:12.1.1.2:2, path 200

2019/12/26 09:32:44 BGP: : u11:s11 send MP_REACH for afi/safi 1/128

2019/12/26 09:32:44 BGP: : u11:s11 send UPDATE RD 12.1.1.2:2 1.1.1.1/32 label 154 IPv4 vpn

2019/12/26 09:32:44 BGP: : u11:s11 send UPDATE len 89 numpfx 1

2019/12/26 09:32:44 BGP: : u11:s11 20.20.20.20 send UPDATE w/ nexthop 10.10.10.10 and RD

 

属性解析

在属性解析函数 bgp_attr_parse里面,我们分析和层3隧道相关的属性解析。

解析MP_REACH_NLRI

 

  • 首先解析报文的afi和safi的值为1和128,然后转化为FRR 内部自己定义的afi和safi的值。

  • 解析下一跳

获取下一跳的长度为12,然后获取RD(8字节),但没有存储,只是跳过,在获取IP地址4字节,存放在attr下一跳nexthop里面。

最后存放在bgp_nlri的NLRI_MP_UPDATE里面,nlri保存的是MP_REACH_NLRI信息。

 

解析EXT_COMMUNITIES

NLRI处理

bgp_nlri_parse 函数里面由于前面解析的safi是SAFI_MPLS_VPN,所以NLRI的处理会是bgp_nlri_parse_vpn函数,主要处理过程如下,可以结合上面的报文一起看代码处理过程:

bgp_update 前面分析的时候,大概过程已经分析过了,下面会分析下,前面忽略的L3VPN相关的处理过程。

  • has_valid_label处理会变成1,因为前面传入了解析出来的label值

  • 在构建struct bgp_path_info的时候,如果label有值,还需要构建struct bgp_path_info_extra,然后把label值存放在info_extra里面

  • 把路由信息导入到VRF的BGP里面

vpn_leak_to_vrf_update 函数处理有点长,主体处理的是把vpn peer收到的路由信息,导入到VRF的BGP里面

 

发送端ospf vrf的路由导入BGP处理:

Zebra:

ubuntu# 2019/12/26 13:05:00 ZEBRA: : netlink_parse_info: netlink-listen (NS 0) type RTM_NEWNEIGH(28), len=76, seq=0, pid=0

2019/12/26 13:05:00 ZEBRA: :    Neighbor Entry received is not on a VLAN or a BRIDGE, ignoring

2019/12/26 13:05:00 ZEBRA: : netlink_parse_info: netlink-listen (NS 0) type RTM_NEWNEIGH(28), len=76, seq=0, pid=0

2019/12/26 13:05:00 ZEBRA: :    Neighbor Entry received is not on a VLAN or a BRIDGE, ignoring

2019/12/26 13:05:08 ZEBRA: : zebra message[ZEBRA_ROUTE_ADD:7:45] comes from socket [42]

2019/12/26 13:05:08 ZEBRA: : Read 1 packets from client: ospf

2019/12/26 13:05:08 ZEBRA: : rib_add_multipath: 7:1.1.1.1/32: Inserting route rn 0x56275b8132b0, re 0x56275b812140 (ospf) existing (nil)

2019/12/26 13:05:08 ZEBRA: : rib_add_multipath: dumping RE entry 0x56275b812140 for 1.1.1.1/32 vrf 7

2019/12/26 13:05:08 ZEBRA: : 1.1.1.1/32: uptime == 118014, type == 6, instance == 0, table == 1

2019/12/26 13:05:08 ZEBRA: : 1.1.1.1/32: metric == 100, mtu == 0, distance == 110, flags == 0, status == 0

2019/12/26 13:05:08 ZEBRA: : 1.1.1.1/32: nexthop_num == 1, nexthop_active_num == 0

2019/12/26 13:05:08 ZEBRA: : 1.1.1.1/32: NH 12.1.1.1[5] vrf 1(7) with flags

2019/12/26 13:05:08 ZEBRA: : 1.1.1.1/32: dump complete

2019/12/26 13:05:08 ZEBRA: : rib_link: 7:1.1.1.1/32: rn 0x56275b8132b0 adding dest

2019/12/26 13:05:08 ZEBRA: : rib_meta_queue_add: 7:1.1.1.1/32: queued rn 0x56275b8132b0 into sub-queue 2

2019/12/26 13:05:08 ZEBRA: : 7:1.1.1.1/32: Processing rn 0x56275b8132b0

2019/12/26 13:05:08 ZEBRA: : 7:1.1.1.1/32: Examine re 0x56275b812140 (ospf) status 2 flags 0 dist 110 metric 100

2019/12/26 13:05:08 ZEBRA: : 7:1.1.1.1/32: After processing: old_selected 0x0 new_selected 0x56275b812140 old_fib 0x0 new_fib 0x56275b812140

2019/12/26 13:05:08 ZEBRA: : 7:1.1.1.1/32: Adding route rn 0x56275b8132b0, re 0x56275b812140 (ospf)

2019/12/26 13:05:08 ZEBRA: : netlink_route_multipath(): RTM_NEWROUTE 1.1.1.1/32 vrf 7(1)

2019/12/26 13:05:08 ZEBRA: : netlink_route_multipath() (single-path): nexthop via 12.1.1.1  if 5(7)

2019/12/26 13:05:08 ZEBRA: : netlink_talk: netlink-dp (NS 0) type RTM_NEWROUTE(24), len=60 seq=115 flags 0x501

2019/12/26 13:05:08 ZEBRA: : 7:1.1.1.1/32: rn 0x56275b8132b0 dequeued from sub-queue 2

2019/12/26 13:05:08 ZEBRA: : update_from_ctx: 7:1.1.1.1/32: SELECTED

2019/12/26 13:05:08 ZEBRA: : 7:1.1.1.1/32 update_from_ctx(): no fib nhg

2019/12/26 13:05:08 ZEBRA: : 7:1.1.1.1/32 update_from_ctx(): rib nhg matched, changed 'true'

2019/12/26 13:05:08 ZEBRA: : 7:1.1.1.1/32: Redist update re 0x56275b812140 (ospf), old 0x0 (None)

2019/12/26 13:05:08 ZEBRA: : zsend_redistribute_route: ZEBRA_REDISTRIBUTE_ROUTE_ADD to client bgp: type ospf, vrf_id 7, p 1.1.1.1/32

2019/12/26 13:05:08 ZEBRA: : Not Notifying Owner: 6 about prefix 1.1.1.1/32(1) 2 vrf: 7

Bgp:

ubuntu# 2019/12/26 13:05:08 BGP: : vpn_leak_from_vrf_update: from vrf VRF 1

2019/12/26 13:05:08 BGP: : vpn_leak_from_vrf_update: post merge static_attr.ecommunity{12.1.1.2:2}

2019/12/26 13:05:08 BGP: : vpn_leak_from_vrf_update: new_attr->ecommunity{12.1.1.2:2}

2019/12/26 13:05:08 BGP: : leak_update: entry: leak-to=VRF default, p=1.1.1.1/32, type=6, sub_type=3

2019/12/26 13:05:08 BGP: : leak_update: nexthop is valid (in vrf VRF 1)

2019/12/26 13:05:08 BGP: : leak_update: ->VRF default: 1.1.1.1/32: Added new route

2019/12/26 13:05:08 BGP: : vpn_leak_to_vrf_update: start (path_vpn=0x557deca2fe90)

2019/12/26 13:05:08 BGP: : vpn_leak_to_vrf_update_onevrf: skipping: import not set

2019/12/26 13:05:08 BGP: : Rx route ADD VRF 7 ospf[0] 1.1.1.1/32 nexthop 12.1.1.1 (type 3 if 5) metric 100 tag 0

2019/12/26 13:05:08 BGP: : group_announce_route_walkcb: afi=IPv4, safi=vpn, p=1.1.1.1/32

2019/12/26 13:05:08 BGP: : subgroup_process_announce_selected: p=1.1.1.1/32, selected=0x557deca2fe90

2019/12/26 13:05:08 BGP: : u4:s4 send UPDATE w/ attr: nexthop 0.0.0.0, metric 100, extcommunity RT:12.1.1.2:2, originator 2.2.2.2, path

2019/12/26 13:05:08 BGP: : u4:s4 send MP_REACH for afi/safi 1/128

2019/12/26 13:05:08 BGP: : u4:s4 send UPDATE RD 12.1.1.2:2 1.1.1.1/32 label 154 IPv4 vpn

2019/12/26 13:05:08 BGP: : u4:s4 send UPDATE len 92 numpfx 1

2019/12/26 13:05:08 BGP: : u4:s4 10.10.10.10 send UPDATE w/ nexthop 20.20.20.20 and RD

2019/12/26 13:05:08 BGP: : 10.10.10.10 rcvd UPDATE w/ attr: , origin ?, extcommunity RT:12.1.1.2:2, path 100 200

2019/12/26 13:05:08 BGP: : 10.10.10.10 rcvd UPDATE wlen 0 attrlen 66 alen 0

2019/12/26 13:05:08 BGP: : 10.10.10.10 rcvd UPDATE about RD 12.1.1.2:2 1.1.1.1/32 label 154 IPv4 vpn -- DENIED due to: as-path contains our own AS;

 

Bgp端的函数subgroup_update_packet构造的update报文发送

发送的时候如果报文里面nexthop属性为0的话,bpacket_reformat_for_peer 这个函数会改nexthop的IP地址

叶脊网络全三层设计实战:BGP配置、ECMP与VXLAN避坑指南 在数据中心网络架构中,叶脊拓扑与全三层设计是应对东西向流量激增的关键技术。其原理是通过Spine-Leaf全互联结构,结合BGP与ECMP实现无阻塞转发,从而提升带宽利用率和故障域隔离能力。这种设计能有效支撑分布式存储、AI训练集群及跨校区专网等场景,尤其适合虚拟化与容器平台。具体落地时,需关注收敛比计算、地址规划、BGP邻居配置及VXLAN隧道建立,并规避ECMP失效、环回口冲突等常见问题。本文基于实战经验,系统拆解从Underlay路由到Overlay扩展的完整配置路径与排查方法。 阅读详情

相关推荐

VS2022+Qt6保姆级环境配置指南:从插件安装到项目互通全流程

本文提供VS2022与Qt6深度整合的全流程指南,涵盖环境配置、插件安装、项目互通等关键步骤。详细解析编译器版本匹配、跨IDE协作方案及效能优化技巧,帮助开发者高效搭建C++界面设计开发环境,实现软件项目无缝互通。

zero1的博客 731

FRR MPLS协议分析 3 --- MPLS ZEBRA处理

MPLS ZEBRA处理

~~ LINUX ~~ 734

基于Arduino与Velostat的智能鞋垫:DIY足底压力监测系统全解析

压力传感器是物联网和健康监测领域的基础元件,其核心原理是将物理压力转换为可测量的电信号。通过压阻效应,材料的电阻值随压力变化,从而实现压力感知。这项技术为低成本、定制化的健康监测方案提供了可能,尤其在运动分析和康复训练中具有重要价值。本文聚焦于利用Velostat压敏材料和Arduino平台,详细解析如何从传感器制作、信号调理到无线数据传输,构建一套完整的足底压力监测系统。文中深入探讨了传感器阵列构建、信号滤波等关键技术,并针对常见问题提供了实用的解决方案,为创客和开发者实现可穿戴健康监测设备提供了清晰的工

weixin_32818781的博客 399

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

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

~~ LINUX ~~ 3137

四足机器人跨楼层轨迹规划:SCAN-Planner-Pure-ROS2开源项目实践指南

在机器人导航领域,路径规划是让机器人从起点安全、高效移动到目标点的核心技术。其原理通常基于环境地图(如占据栅格地图或八叉树地图),通过搜索算法(如A*、RRT*)在配置空间中找到一条无碰撞的可行路径。这项技术的价值在于赋予机器人在复杂、非结构化环境中的自主移动能力,是巡检、救援、物流等应用场景的基石。对于四足机器人而言,其运动能力超越了轮式平台,能在楼梯、斜坡等三维地形中移动,这使得传统的二维规划不再适用,需要专门的三维轨迹规划算法。SCAN-Planner-Pure-ROS2正是这样一个专注于解决四足机器

weixin_30700977的博客 461

卷积神经网络中的边缘检测:从Canny算法到深度学习(PyTorch实现)

本文系统梳理了边缘检测从经典Canny算法到深度学习方法的演进,重点解析了Canny算法的数学原理及其对卷积神经网络设计的深远影响。通过PyTorch实战,详细演示了如何构建并训练一个基于HED架构的深度学习边缘检测模型,并探讨了模型优化、评估及与传统方法融合的高级技巧。

jenkins8butler的博客 151

FRR BGP协议分析11 -- ZEBRA初始化

zebra,翻译是斑马,它负责管理其他所有协议进程的路由信息的更新与交互,并负责与内核交换信息,整体的架构如下: Zebra的初始化在zebra/main.c里面,代码也来的干净直接 frr_init创建zebra主进程的master数据结构,用来做事件驱动,我们可以看下thread_master的数据结构。 其整合了事件的可读、可写、定时器、信号的处理,后面有时间可以来学习下...

~~ LINUX ~~ 3878

从零到一:AIGC+Unity3D打造动态天空盒的实战指南

本文详细介绍了如何利用AIGC技术结合Unity3D打造动态天空盒的实战指南。通过AIGC生成360全景图,再集成到Unity3D中,实现高效、多样化的天空盒效果。文章涵盖了从AIGC全景图生成、工作流搭建到Unity场景集成的完整流程,并提供了代码示例和优化建议,帮助开发者快速掌握这一技术。

weixin_29021291的博客 603

Frrouting学习笔记(五)——OSPF Segment Routing

实现分段路由的地球。它添加了一个新的分段路由数据库,用于管理每个链路和前缀的分段标识符和分段路由启用节点,回调功能用于处理传入。这里是启用分段路由的简单配置示例。这里的想法是,一旦知道备份路径,它也是路径上所有节点本身的备份路径。它专注于提供基本的基础设施,这些基础设施稍后也可以用于增强算法方面。洪泛节点的分段路由功能。运行配置了路由表,则会为每个前缀增加额外的备份路径。)的框架内进行的,该项目的部分资金由欧盟委员会提供。因此,在第一次之后,每个进入的。年龄,以确定它是安装还是将来删除,即刷新的。

luanshenshen的博客 1114

STM32 热敏电阻测量温度

1、硬件 STM32F103C8T6、热敏电阻传感器、OLED。 2、热敏电阻传感器的介绍

weixin_54721788的博客 1万+

强化学习与行为树的融合在游戏编程中的应用

在游戏中,我们可以将游戏的状态作为智能体的状态,将游戏的奖励作为强化学习中的奖励信号,从而训练智能体在游戏中做出最佳决策。强化学习通过试错学习来优化角色的决策策略,而行为树提供了一种灵活的方式来组合和调整不同的行为。行为树可以灵活地调整和组合不同的行为,以适应游戏中不同的情境和目标。在游戏开发中,强化学习和行为树是两种常见的技术,它们被广泛应用于游戏智能的实现。接下来,我们可以定义一个具体的行为树(BehaviorTree),该行为树由一系列节点组成,每个节点代表一个特定的行为或决策。

TechO_O的博客 678

Linux上实现mpls的环境配置

ubuntu和centos的内核升级 在这两个里面安装quagga-ldpd

CJ的博客 3390

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

FRR BGP协议分析7 -- BGP 层3隧道 (1)

本文,我们分析BGP 和层3隧道 相关的命令处理 这些命令的原理这里不再介绍 labelexport auto 配置label export auto 后,执行如下的命令 命令会给每个VRF 分配一个标签,然后下发到MPLS 的LFIB表里面,涉及MPLS表项下发到内核的流程,先大概给个流程,后续再补充。 vpn_leak_postchange vpn...

~~ LINUX ~~ 886

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

~~ LINUX ~~ 2420

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

FRR vxlan实验

用docker搭建了一个FRR evpn vxlan的实验相比手动配置vxlan隧道端点,利用FRR起个evpn作为控制面可以自动发现隧道端点。这里的FRR是Linux和Unix平台的IP路由协议套件,其中 包括BGP,IS-IS,LDP,OSPF,PIM和RIP的协议守护程序。熟悉网络的朋友们不要和快速重路由搞混了。

老网工的岁月独白 1506

MPLS隧道——隧道迭代与MPLS高可靠性(FRR、GR)

以下文举例:R4去往10.0.0.1的下一跳为1.1.1.1,则将报文封装1.1.1.1的标签转发给R3,此时R3通过LDP学习到1.1.1.1的标签,进行标签转发,最终到达R2,R2倒数第二跳弹出标签发给R1,R1再将路由发给10.0.0.1。在CE多归场景下,当本端PE与远端多个PE上的VPN实例的RD值不同时,如果从此多个PE传来的多个目的地址相同vpnv4地址,只会将其中最优的路由交叉到vpn实例中,开启隧道迭代后,才会将10.0.0.1的非标签路由封装进关于1.1.1.1的标签隧道。

m0_49864110的博客 2777

【k8s】K8s网络打通:CalicoBGP模式对接OpenWrt/FRR实战

打通pod和普通网络

Freesia_2350的博客 637

MPLS TE Lab FRR

前面已经说了关于TE的保护的原理了。今天重点来说明一下FRR- fast-reroute在TE里面的保护是如何配置,以及怎么看状态的。 在介绍配置以前,要说明的是,FRR快速重路由是一种保护机制。 试想一下,如果图中R2到R6就是普通的IGP网络。中间链路down了以后,是一个什么情况呢? 应该是首先问题路由器通过其他接口发送LSA然后泛红到整个区域。 然后整个区域要重新计算拓扑图,并且同步拓扑数...

繁星流动天际 571

为SRv6实验铺路:手把手教你将Ubuntu中的FRR升级至最新v10.5稳定版

按照官方说法,FRR从7.5版本开始引入了初步的SRv6基础框架,当前Ubuntu默认支持的8.1版本也是SRv6支持的一个重要里程碑。期间,我们还发现,FRR通过Zebra组件与内核交互,只要不是由FRR自己生成的路由,无论是netplan配置还是ip route命令添加,如果有条件的话,应该还是要体验一下最新的FRR 10.5版本,是时候让官方源中年事已高的8.1版本退休了。由于Ubuntu官方仓库默认只提供8.1版本的FRR,要安装最新的稳定版,我们需要使用FRR官方维护的Ubuntu仓库。

衡水铁头哥的博客 926

Kubernetes BGP集成实战:构建生产级Anycast服务网络

BGP(边界网关协议)是互联网自治系统间路由交换的基础协议,其核心原理在于通过AS路径、本地优先级和多出口判别(MED)等属性实现跨域最优路径选择;技术价值在于赋予Kubernetes集群网络主权,摆脱云厂商负载均衡器的路由黑盒与协议限制;典型应用场景包括多云/混合云服务统一入口、边缘计算低延迟接入、金融级高可用网关及全球Anycast服务IP部署;本文聚焦2018年成熟稳定的FRRouting + MetalLB组合方案,详解BGP邻居建立、Service IP动态宣告、Anycast地址规划与四层连通性

weixin_34414650的博客 659

BGP总结

BGP动态路由协议划分算法 距离矢量型 RIP EIGRP BGP (传输路由表)(BGP也会传输路径信息) 链路状态型 OSPF ISIS (传输链路状态信息(拓扑)) 路径矢量型 BGP范围 AS IGP 内部网关 EGP 边界网关协议BGP 区分号 AS 1-65535 64512-65535私有AS 2^16次方AS号不足特点: 1. 可以跨跳建立邻居 2. 强调路由传递控制的一种协议,控制:路由学习选择性,选路的控制 3. 手动建立邻居 4. BGP

weixin_48303524的博客 893

2021年HCIE-RS数通新版LAB-论述题-BGP-04

2021年HCIE-RS数通新版LAB-论述题-BGP-04

Frank-月凡的博客 482

终极进化:当swanctl遇上FRR,让你的Linux加密隧道化身SD-WAN雏形

此外,我们还发现,因为实现机制问题,使用基于路由的IPsec VPN时,CPU负载会低于基于策略的配置方式,转发效率自然更胜一筹。,其中Ubuntu1和Ubuntu5充当两端的内网主机,Ubuntu3充当中间转发设备,我们在Ubuntu2和Ubuntu4上配置基于XFRM接口的IPsec VPN,并通过FRR运行OSPF协议以实现两端私网互通的完整过程。同样的,Ubuntu4需要配置互联接口IP地址,使能IPv4转发,并添加去往Ubuntu2的明细路由。手把手教你甩掉策略包袱,玩转路由模式IPsec。

衡水铁头哥的博客 600

【硬核实战】Containerlab + Arista cEOS:部署 EVPN VXLAN 及常见报错深度解析

本文记录了在MacOS上搭建EVPN-VXLAN混合网络实验环境的完整过程。通过UTM+UbuntuServer构建轻量级虚拟化基座,采用Arista cEOS作为Leaf节点、FRR作为Spine节点,实现了异构厂商设备的兼容组网。重点阐述了Containerlab声明式拓扑编排、Underlay/Overlay网络配置、常见问题排查方法,以及使用nsenter工具进行VXLAN报文抓包分析的技巧。实验成功验证了控制面路由与数据面封装的有效性,展示了云原生网络基础设施的灵活性和可扩展性。

gaogugao1985的博客 1319

FRRouting Protocol Suite IPv6过渡技术:6to4与DS-Lite配置

随着IPv6的普及,IPv4到IPv6的过渡成为网络管理员面临的重要挑战。FRRouting Protocol Suite(FRR)提供了多种IPv6过渡技术,帮助网络平滑迁移。本文将详细介绍如何在FRR中配置6to4和DS-Lite两种主流过渡技术,解决IPv4地址枯竭问题,实现IPv6网络的逐步部署。 ## IPv6过渡技术概述 IPv6过渡技术主要分为双栈、隧道和翻译三大类。6to4和D...

gitblog_00774的博客 1131
上一篇: FRR BGP协议分析7 -- BGP 层3隧道 (1)
下一篇: FRR BGP协议分析9 -- 路由重分发
废言Pro
博客等级 码龄16年 1092粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值