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

本文深入探讨了下一代网际协议IPv6的特性,特别是IPv6层3隧道技术及其在6VPE方案中的应用。通过实验演示,详细解析了IPv6层3隧道如何在IPv4骨干网上实现,以及PE设备如何处理和转发IPv6报文。此外,还介绍了MP-IBGP在PE间交换层3隧道v6路由信息的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下一代网际协议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 路由的来源。

我们分段来详细过下这个函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值