FRR与VPP路由和转发层面流程

  首先了解一下VPP和FRR结合的架构如下图所示

参考文档:
路由平面和转发平面分离:https://wiki.fd.io/view/VPP_Sandbox/router
FRR实现官方文档:https://github.com/FRRouting/frr/wiki/Alternate-forwarding-planes%3A-VPP

1.FRR与VPP结合中路由层面处理方式

  如上UML图所示,路由层面为步骤2,3,5,6,其由frr中zebra以及vpp中router_plugin自动完成。

  在FRR中第四步配置好frr后,通过配置协议获取多种协议的路由,按照各自协议AD值进行优先级选择,代表参数为各路由的metric值;值越小,优先级越高;然后同步到内核,然后再到VPP中,形成环路,写入VPP的fib路由表进行路由引导。

  AD(administrate distance),也就是说用来判断此路由的可信度,也表示默认的管理距离,EIGRP默认AD是90,IGRP是100,OSPF是110,RIP是120,直接连接是0,静态路由是1。AD最大值255,越小可靠性越高。通常可以通过修改AD值调整路由优选路径。AD值主要在IGP协议中采用,BGP更多采用med值,和本地优先级进行选路。

  上图简单示例重分发情况下,路由选择的情况。

2.VPP转发平面

  在VPP中,路由配置来源相对单一:

  • VPP配置端口IP;
  • VPP配置静态路由;
  • 从内核同步的动态路由。

  其中VPP处理规则是按照AD值进行处理,内核直连等优先级高于静态路由、静态路由优先级高于从内核同步获取的动态路由。即内核直连>静态>动态。有一种可能性,当VPP从内核同步过来FRR中的路由时,会根据上述AD值进行判断,解决隐形的路由冲突问题;

  如上图所示,VPP端口路由同步到内核的路由作为内核路由,第一条,其metric优先级为0最高级;第二条为linux 内核中配置的静态路由;第三条为内核从frr中同步学习到的ebgp路由,metric值为20.

《FRR与VPP路由和转发层面流程》有7个想法

  1. 您好,请问一个问题,用veth建立在vpp和linux建立一对虚网口,linux虚网口的动态路由报文转发给vpp对应虚网口,那么vpp虚网口怎么把报文转发给对应的vpp物理网口,然后转发出去

    1. 不太清楚您那边具体场景。这边之前是在VPP不同fib表中添加静态路由指向对应VPP物理网口IP。

  2. 那请问 vpp dpdk物理网口怎么把动态路由报文转发给对应虚网口,不可能把所有的报文都转发给对应的虚网口吧

  3. 请问一下 怎么把dpdk物理网口的报文转发给对应的虚网口linux内核里面,总不可能是把所有报文都转发给虚网口吧

  4. dengxianfang

    请教一下,VPP和FRR之间是什么样的关联?为什么不选择其中一种部署呢?要部署两种

    1. 嗯嗯,vpp可以简单理解为虚拟路由器,主要进行数据转发,但对于路由协议方面,需要通过frr来弥补。

发表评论

邮箱地址不会被公开。 必填项已用*标注