下一代网际协议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相关推荐

  1. 【SemiDrive源码分析】【X9芯片启动流程】20 - MailBox 核间通信机制介绍(代码分析篇)之 MailBox for RTOS 篇

    [SemiDrive源码分析][X9芯片启动流程]20 - MailBox 核间通信机制介绍(代码分析篇)之 MailBox for RTOS 篇 一.Mailbox for RTOS 源码分析 1. ...

  2. C#中类的继承 override virtual new的作用以及代码分析

    继承中override virtual new的作用 virtual 父类中需要注明允许重写的方法: override 子类中必须显示声明该方法是重写的父类中的方法: new 子类中忽略父类的已存在的 ...

  3. lighttpd1.4.18代码分析

    lighttpd1.4.18代码分析(八)--状态机(2)CON_STATE_READ状态 posted @ 2008-09-24 10:50 那谁 阅读(2225) | 评论 (1)  编辑 lig ...

  4. 使用Hadoop和ELK进行业务代码分析!分分钟捉到Bug!

    大数据是计算领域的新高地,它有望提供一种方法来应对二十一世纪不断增长的数据生成.越来越多的大数据爱好者正在涌现,越来越多的公司正在采用各种大数据平台,并希望提出以客户为中心的解决方案,帮助他们在竞争激 ...

  5. starGAN原理代码分析

    下载: git clone https://github.com/yunjey/StarGAN.git 1 cd StarGAN/ 1 下载celebA训练数据: bash download.sh 1 ...

  6. tensorflow笔记:多层CNN代码分析

    tensorflow笔记系列:  (一) tensorflow笔记:流程,概念和简单代码注释  (二) tensorflow笔记:多层CNN代码分析  (三) tensorflow笔记:多层LSTM代 ...

  7. ARM裸机篇---启动代码分析

    ARM裸机篇---启动代码分析 先搞清楚启动代码和Bootloader的区别,启动代码是指CPU复位后到进入C语言的main函数之前需要执行的那段汇编代码. 下面的代码先暂且这样吧,没啥注释的,时间关 ...

  8. 2018-2019-2 网络对抗技术 20165320 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165320 Exp4 恶意代码分析 一.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行 分析一个恶意软件,就分析Exp2或Exp3中生成后门软 ...

  9. Exp4 恶意代码分析 20164303 景圣

    Exp4 恶意代码分析 实验内容 实验点一:系统运行监控 (1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件,综述一下分析结果.目标就是找出 ...

  10. ecos代码分析(2)

    ecos代码分析(2) 228         bl      hal_mmu_init 此前内存初始化好了,sp也设置好了,可以运行C程序 170 void 171 hal_mmu_init(voi ...

最新文章

  1. r语言中正定矩阵由于误差不正定_Kalman滤波在MOT中的应用(一)——理论篇
  2. ubuntu中查找文件后高亮_ubuntu 中查找文件的命令
  3. imp导入时触发器的状态
  4. java多态替换switch_第1章 重构,第一个案例(3):运用多态取代switch
  5. scikit-learn学习笔记(六)Decision Trees(决策树)
  6. mysql数据库迁移到另一台电脑上
  7. 内存分配详解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc
  8. C语言笔记:格式化输入输出(fprintf、fscanf、sscanf...)
  9. 什么是EulerOS
  10. U-Mail邮件服务器教你反垃圾邮件新方法
  11. ajax同步时,loading加载不显示(谷歌浏览器)
  12. 微软补丁日安全公告|11月份
  13. 电脑桌面壁纸的尺寸分类
  14. ROS | 基于MQTT的通信方式mqtt_bridge
  15. 思科交换机强制恢复出厂设置(清密码)
  16. python打开word并在前台显示_Python办公自动化:自动打开word文档,你学到了吗?
  17. 吐血整理!14个编写Spring MVC控制器的实用小技巧
  18. 网络(HCNA00笔记)
  19. C# 将所有的DLL文件 打包到 exe里面,就是说整个项目只有一个exe
  20. 【目录】从苏宁电器到卡巴斯基(后传)

热门文章

  1. 作业一:建立博客、自我介绍、速读教材、学习进度总结(1)
  2. Java 输出通过 InetAddress 获得的 IP 地址数组
  3. hdu 2642 Stars 树状数组
  4. c# Excel的操作
  5. hadoop2.6.集群搭建
  6. Windows Server 2012 搭建DHCP及远程路由访问
  7. Intel Optane P4800X评测(序):不用缓存和电容保护的SSD?
  8. 使用mysql 函数 IFNULL 解决某些字段为null
  9. 《软件设计师》考点分布
  10. PHP如何大幅度提升运行效率? -- 把它编译成机器码!