FRR BGP代码分析20 -- 6PE\6VPE
下一代网际协议IPv6,是IPv4的增强版本,提供改进的地址空间、配置、维护和安全功能,支持更多的用户和设备接入互联网。
虚拟专用网络是由共享的链路或公网(如因特网)组成的专用私有网络的扩展,使用户在两个不同地域的计算机通过穿越共享链路或公网互通数据。
IPv6 层3隧道与IPv4 层3隧道的区别是IPv6 层3隧道中PE从CE接收到的是IPv6报文,IPv4 层3隧道中PE从CE接收到的是IPv4报文。
BGP/MPLS IPv6 层3隧道组网方案包括两种:
- IPv6 层3隧道业务由服务提供商的IPv4骨干网来实现,此种方案又被称为6VPE方案。
- IPv6 层3隧道业务由服务提供商的IPv6骨干网来实现。
当前仅支持6VPE方案。这种情况下,骨干网是IPv4网络,客户站点是IPv6地址族,PE应支持IPv4和IPv6(双协议栈),如下图。CE和PE设备之间的连接使用可承载IPv6流量的任意网络协议。PE在连接客户端的接口上使用IPv6,在连接公网的接口使用IPv4。
在提供IPv6 层3隧道服务的同时,PE和PE之间的运营商骨干网仍然运行IPv4协议。这样,可以使运营商网络逐步从IPv4过渡到IPv6。
在骨干网络是IPv4的情况下,PE之间使用IPv4地址建立层3隧道v6邻居,传递层3隧道IPv6路由,层3隧道IPv6路由可以选择骨干网中的IPv4隧道来承载IPv6 层3隧道业务。在骨干网络是IPv6的情况下,PE之间使用IPv6地址建立层3隧道v6邻居,传递层3隧道-IPv6路由,层3隧道v6路由可以选择骨干网中的IPv6隧道承载层3隧道 VPN业务。
本次实验讲解的拓扑图如下图所示:
- CE与PE之间使用IPv6 EBGP交换路由信息。
- PE之间采用OSPF作为IGP实现PE的互通,配置LDP打通 MPLS
- PE之间配置MP-IBGP交换层3隧道v6路由信息。
本次实验讲解的拓扑图如下图所示:
CE2的配置如下,本次我们从CE2配置network 3::3/128 开始整个报文处理的流程。
CE2配置了network命令后,会构造一个IPV6 unicast的UPDATE报文,我们抓包看下:
我们会发现IPV6的UPDATE报文是封装在MP_REACH_NLRI里面的,和IPV4 unicast是不一样的。
PE2的配置如下:
注意此时IPV6 层3隧道 地址族下的neighbor 用的是IPV4地址建立的邻居,RT、RD配置在vrf下的ipv6 unicast下面的。
PE2 收到UPDATE报文后的处理和前面讲解UPDATE的报文一样的不在说明,这里说明下不一样的处理。
PE2处理
解析路径属性
bgp_process_packet
--bgp_update_receive
--bgp_attr_parse
--bgp_mp_reach_parse
bgp_mp_reach_parse解析MP_REACH_NLRI,此时UPDATE报文里面的NHLEN是32字节,一个是IPV6的global地址,一个是link local地址,可以参看前面的报文,解析出来后,存放在attr属性的mp_nexthop_global、mp_nexthop_local 以便后面使用。
处理NLRI
处理NLRI的内容和前面文章分析的一样,本次update结果会生成3份路由:
- 在bgp 的vrf 1路由表里面生成IPV6 3::3的路由,然后在通告给peer(2001:3::2)又发给了对端?
show ip bgp vrf 1 ipv6
Network Next Hop Metric LocPrf Weight Path
*> 3::3/128 fe80::5054:ff:fe57:53c0
0 0 65300 i
- 然后在通告给zebra,zebra里面的处理和前面的分析也差不多,然后在zebra的vrf 1路由表里面生成3::3的路由
show ipv6 route vrf 1
VRF 1:
B>* 3::3/128 [20/0] via fe80::5054:ff:fe57:53c0, ens6, 02:32:21
C>* 2001:3::/64 is directly connected, ens6, 1d21h12m
C>* fe80::/64 is directly connected, ens6, 1d21h12m
K>* ff00::/8 [0/256] is directly connected, ens6, 1d21h12m
- 然后在导入到层3隧道 里面,生成层3隧道 路由,然后在UPDATE出去,这个我们在leak-vrf-to-vpn讲解
show ip bgp ipv6 层3隧道
Network Next Hop Metric LocPrf Weight Path
Route Distinguisher: 100:1
*> 3::3/128 2001:3::2@9< 0 0 65300 i
UN=2001:3::2 EC{100:1} label=16 type=bgp, subtype=5
Displayed 1 routes and 1 total paths
大概总结下处理的debug+结果+函数调用如下:
前面没有说明bgp_find_or_add_nexthop函数,这里重点补充下
Nexthop valid
bgp_find_or_add_nexthop 函数引入了一个新的数据结构struct bgp_nexthop_cache
然后会使用nexthop构建前缀,在nexthop_cache_table缓存的table里面查找,如果没有会创建struct bgp_nexthop_cache,并存放在path里面,同样bnc里面会记录path信息,同时调用register_zebra_rnh向zebra注册nh,然后返回nexthop的有效性,其实有效性的检查是在zebra接收到register_zebra_rnh发送的消息后处理的,这块的分析,后面再这里继续补充。
这个数据保存后具体的作用??还不太明白
LEAK-VRF-TO-层3隧道
Vrf的路由导入到层3隧道 的处理函数如下,其调用关系如下图,这里也能说明BGP 路由的来源。
我们分段来详细过下这个函数。
FRR BGP代码分析20 -- 6PE\6VPE相关推荐
- 【SemiDrive源码分析】【X9芯片启动流程】20 - MailBox 核间通信机制介绍(代码分析篇)之 MailBox for RTOS 篇
[SemiDrive源码分析][X9芯片启动流程]20 - MailBox 核间通信机制介绍(代码分析篇)之 MailBox for RTOS 篇 一.Mailbox for RTOS 源码分析 1. ...
- C#中类的继承 override virtual new的作用以及代码分析
继承中override virtual new的作用 virtual 父类中需要注明允许重写的方法: override 子类中必须显示声明该方法是重写的父类中的方法: new 子类中忽略父类的已存在的 ...
- lighttpd1.4.18代码分析
lighttpd1.4.18代码分析(八)--状态机(2)CON_STATE_READ状态 posted @ 2008-09-24 10:50 那谁 阅读(2225) | 评论 (1) 编辑 lig ...
- 使用Hadoop和ELK进行业务代码分析!分分钟捉到Bug!
大数据是计算领域的新高地,它有望提供一种方法来应对二十一世纪不断增长的数据生成.越来越多的大数据爱好者正在涌现,越来越多的公司正在采用各种大数据平台,并希望提出以客户为中心的解决方案,帮助他们在竞争激 ...
- starGAN原理代码分析
下载: git clone https://github.com/yunjey/StarGAN.git 1 cd StarGAN/ 1 下载celebA训练数据: bash download.sh 1 ...
- tensorflow笔记:多层CNN代码分析
tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代 ...
- ARM裸机篇---启动代码分析
ARM裸机篇---启动代码分析 先搞清楚启动代码和Bootloader的区别,启动代码是指CPU复位后到进入C语言的main函数之前需要执行的那段汇编代码. 下面的代码先暂且这样吧,没啥注释的,时间关 ...
- 2018-2019-2 网络对抗技术 20165320 Exp4 恶意代码分析
2018-2019-2 网络对抗技术 20165320 Exp4 恶意代码分析 一.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行 分析一个恶意软件,就分析Exp2或Exp3中生成后门软 ...
- Exp4 恶意代码分析 20164303 景圣
Exp4 恶意代码分析 实验内容 实验点一:系统运行监控 (1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件,综述一下分析结果.目标就是找出 ...
- ecos代码分析(2)
ecos代码分析(2) 228 bl hal_mmu_init 此前内存初始化好了,sp也设置好了,可以运行C程序 170 void 171 hal_mmu_init(voi ...
最新文章
- r语言中正定矩阵由于误差不正定_Kalman滤波在MOT中的应用(一)——理论篇
- ubuntu中查找文件后高亮_ubuntu 中查找文件的命令
- imp导入时触发器的状态
- java多态替换switch_第1章 重构,第一个案例(3):运用多态取代switch
- scikit-learn学习笔记(六)Decision Trees(决策树)
- mysql数据库迁移到另一台电脑上
- 内存分配详解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc
- C语言笔记:格式化输入输出(fprintf、fscanf、sscanf...)
- 什么是EulerOS
- U-Mail邮件服务器教你反垃圾邮件新方法
- ajax同步时,loading加载不显示(谷歌浏览器)
- 微软补丁日安全公告|11月份
- 电脑桌面壁纸的尺寸分类
- ROS | 基于MQTT的通信方式mqtt_bridge
- 思科交换机强制恢复出厂设置(清密码)
- python打开word并在前台显示_Python办公自动化:自动打开word文档,你学到了吗?
- 吐血整理!14个编写Spring MVC控制器的实用小技巧
- 网络(HCNA00笔记)
- C# 将所有的DLL文件 打包到 exe里面,就是说整个项目只有一个exe
- 【目录】从苏宁电器到卡巴斯基(后传)