基于盛科5160VPLS技术实现MPLS L2VPN

  • 概述
  • 5160对MPLS VPN的支持
  • VPLS技术简介
  • 基于sdk2.6.0实现VPLS
  • 实验效果展示
  • 系统框架笔记
  • 总结

概述

最近需要在之前做的MPLS 基础上实现L2VPN,所以想在这里把整个开发流程记录下,以便以后进行回忆。
整体的实现方案是采用VPLS技术,这个技术盛科5160芯片是完全支持的。目前VPLS的信令协议采用LDP协议,所以远端PE需要自己手动配置。

5160对MPLS VPN的支持

看了下5160的DataSheet,支持MPLS L2VPN(VPLS、VPWS)、MPLS L3VPN。我要用的就是VPLS(Virtual Private LAN Service虚拟专用局域网服务)。VPLS可以提供一种点到多点的VPN服务,不像传统的VPN(GRE、L2TP、PPTP)只能在公网上搭建一个点对点的专用网络,进行传输私有数据。

VPLS技术简介

VPLS: 是在公网上提供一种点到多点的L2VPN业务。这种通过VPLS技术把各个分散的站点连接起来,构成一个大的二层VPN网络,称为一个VPLS实例。在某个PE设备上,会对每一个VPLS实例虚拟出一个VSI(Virtual Switch Instance)出来。每个VSI在功能上,相当于一个传统的二层以太网设备。

几个基本概念

  1. CE:Customer Edge 用户网络边缘设备。用于连接PE,无需支持MPLS功能,并感知不到VPN的存在。
  2. PE:Provider Edge 服务提供商网络边缘设备。处于MPLS网络的边缘,用于直连CE,所有的VPN业务都在该设备上实现。在MPLS L2VPN中,主要实现VSI,来处理VPN数据的转发。
  3. AC:Attachment Circuit 接入电路。CE和PE的链接,在PE设备上需要绑定具体的二层端口,和VPN实例一一对应,绑定服务实例。
  4. PW:Pseudowire 伪线即PE–PE的虚链路。用于承载VC标签,链接着同一VPLS实例中的两个PE设备。
  5. Tunnel:公网隧道。由LSP维护,用于承载PW。一条公网隧道可以跑多条PW。
  6. LSP:Label Switching Path标签交换路径,即转发分组在MPLS网络中所走过的路径。
  7. LER:Label Switching Router LSR是MPLS网络的核心交换机,
  8. FEC:Forwarding Equivalence Class 转发等价类,具有相同转发规则的一组数据,例如目的地址前缀相同的数据分组,在LDP协议中,为一个FEC分配一个标签,和路由表的关系是,一条路由可以映射一个FEC。
  9. NHLFE:Next Hop Label Forwarding Entry 下一跳标签转发项。用于描述对标签执行的操作,类似IPUC中的Nexthop表项,代表当前转发分组的编辑方式。
  10. FTN:Fec To NHLFE map 指在Ingress节点将转发等价类 FEC映射到NHLFE的过程。
  11. ILM:Incoming Label Map 入标签映射,存在LSR设备以及Egress设备上。对标签进行交换、空操作、出栈操作等。

VPLS 实现机制

  1. 创建PW-----静态PW、LDP PW(手动指定远端PE)、BGP PW(自动发现远端PE设备)。
  2. 实现VSI 具有传统以太网设备所有功能,包括基于MAC地址表转发、查表失败泛洪、组播/广播的泛洪。
  3. PW全连接 在同一个VPLS实例中,每两个PE之间必须建立PW链接。
  4. 水平分割 在PE设备上,从PW上过来的数据禁止向该VSI内的其它PW转发,仅仅只能向AC转发。

基于sdk2.6.0实现VPLS

静态配置
创建一个vlanif接口,interface v10 绑定一个端口。
SDK下敲的命令:

  1. 使能接口mpls功能
    l3if ifid 1 mpls-property mpls-en value 1
    下面几条命令用于 AC—>PW
  2. 创建用于编辑隧道的NextHop Id,用于承载PW 方向为AC---->PW
    nexthop add mpls-tunnel 10 working-path mac e.e.e vlan-if vlan 10 port 45 label1 200 ttl1 10 exp1 2 exp1-type 0
  3. 创建用于编辑VC的NextHop Id,用于打上VC标签 方向为AC---->PW
    nexthop add mpls 102 push fwd vpls-port 300 payload-op op-l2vpn cvlan-edit-type 1 svlan-edit-type 4 output-cvid 1 output-svid 1 tunnel-id 10 label1 100 ttl1 100 exp1 1 exp1-type 0
  4. 使用vlan mapping映射出fid 方向为AC---->PW
    vlan mapping add port 44 mapping-to fid 4096 vpls-fid
  5. 暂时不知道什么作用,这条如果不设置,不会转发报文。方向为AC---->PW
    port 44 scl-key-type scl-id 1 direction ingress type port
  6. 创建入方向fdb表,AC—>PW 方向为AC---->PW
    l2 fdb add mac 0.0.1 fid 4096 nexthop 102 static
    下面几条命令用于PW—>AC
  7. 出方向弹出隧道标签 PW—>AC
    mpls ilm add space 0 label 200 pop
  8. 出方向报文编辑NextHop规则 PW—>AC
    nexthop add egs-vlan-edit 100 port 44 cvlan-edit-type 1 svlan-edit-type 4 output-cvid 1 output-svid 1
  9. 出方向FDB表 PW—>AC
    l2 fdb add mac 0.0.2 fid 4096 nexthop 100 static
  10. 添加l2vpn信息。方向为AC---->PW
    mpls l2vpn-pw add 100 vpls 4096 pwid 300 vpls-port-type encapsulation-mode raw

动态学习

1. /*使能当前vlanif下的mpls功能*/l3if ifid 1 mpls-property mpls-en value 1
2. /*创建用于承载PW的隧道,即公网隧道,这里可以采用LSP构建的tunnel 隧道*/nexthop add mpls-tunnel 10 working-path mac e.e.e vlan-if vlan 1 port 45 label1 200 ttl1 10 exp1 2 exp1-type 0
3. /*用于VC的NHLFE,可以用在Ingress的FTN动作上,如果是两台PE直连,可以把   Nexthop表项中的label标签去掉,把vc标签放在tunnel中,其实这种实现方法有问题,只是盛科的2.6.0把隧道标签去掉之后会报错*/nexthop add mpls 102 push fwd vpls-port 300 payload-op op-l2vpn cvlan-edit-type 1 svlan-edit-type 1 output-cvid 1 output-svid 1 tunnel-id 10 label1 100 ttl1 100 exp1 1 exp1-type 0
4. /*把ac端口映射到逻辑端口400上,并且加入当前的转发域中,转发域fid为4096,这个范围规定的是4096 ~+1k*/vlan mapping add port 44 mapping-to fid 4096 vpls-fid logic-port 400
5. /*配置端口44的sck-key-type方式*/port 44 scl-key-type scl-id 1 direction ingress type port
6. /*添加默认转发规则,在4096这个域内的默认转发规则为在groupid4096中泛洪*/l2 fdb add vlan-default-entry fid 4096 group 4096 use-logic-port
7. /*Egress设备弹出标签,这个为Tunnel标签*/mpls ilm add space 0 label 200 pop
8. /*配置L2VPN-PW的信息,VC标签100,VPLS-FID 4096,pwid为300也成为PW的逻辑端口,包封装模式tagged*/mpls l2vpn-pw add 100 vpls 4096 pwid 300 vpls-port-type encapsulation-mode tagged
9. /*映射逻辑端口的操作方式,PW交给NHLFE进行编辑,AC交给物理口44*/l2 fdb logic-nhid logic-port 300 nexthop 102 l2 fdb logic-nhid logic-port 400 gport 44
10. /*把ac端口加进去(AC需要和PW在同一个vlan下)盛科FAE的意思是要保证在同一广播域,华三的设备就不需要*/l2 fdb vlan-default-entry fid 4096 add port 44
11. /*(此处需要吧PW的VC下一跳加进去)*/l2 fdb vlan-default-entry fid 4096 add nexthop 102

实验效果展示

组网框图

上面框图介绍了VPLS的一个应用场景,把三个PC连接起来,形成一个二层VPN网络。
各表项的信息:





底层SHL表项信息

系统框架笔记

以下图片信息,来源于走读LDP协议源码,为了更好的开发VPLS所做的学习和总结。
LDPD进程中三个进程之间的关系,并讲解主进程和各子进程负者哪些东西

LDPD主进程维护的全局结构体

LDE进程上维护的FEC树以及邻居信息

总结

做这个协议之前先把相关技术理解透,比如MPLS和LDP协议,再然后去研究VPLS的实现。然后在SDK上去配置一下,参考下其它厂家设备作进一步的对比,然后胸有成竹后再动手开发。
开发的时候先想框架知识,怎么维护底层表项,表项怎么和FIB表关联等等。
本节内容记录到此,以后有问题需要定位时,只需要回头看看这个文档,看看自己画的笔记,就大概知道那块出问题了。

CTC5610-VPLS开发相关推荐

  1. java知识体系介绍

    国内最牛七星级团队马士兵.高淇等11位十年开发经验专家录制 目 录 百战程序员Java1573题 2百战程序员介绍 3JavaSE编程基础 9第一章 初识Java 9阶段项目课程1 11第二章 数据类 ...

  2. 7 家 IT 厂商 6394.5 万元中标天津公安云项目(虚拟化、数据库、软件开发)

    http://mp.weixin.qq.com/s/kjum54HJorGTPtZiM-HE1g 天津市公安局云计算平台项目分为:大数据部分.虚拟化部分.数据库部分,软件开发部分,预算分别为:2350 ...

  3. Stochastic Light Culling for VPLs on GGX Microsurfaces论文研读

    前言 好久没写博客了,今天来共享一下最近研读的一篇论文吧,文章中[***.pdf]为参考文献可自行谷歌学术下载.因为本人还是个图形学菜鸟,所以有什么问题希望大家多多指正. Stochastic Lig ...

  4. 【阶段小结】协同开发——这学期的Git使用小结

    [阶段小结]协同开发--这学期的Git使用小结 一.Git简介 1. Git简单介绍 2. Git工作流程以及各个区域 3. Git文件状态变化 二.Git安装&Git基本配置 三.个人踩坑 ...

  5. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  6. 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发

    基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...

  7. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  8. 基于Golang的对象序列化的程序包开发——myJsonMarshal

    基于Golang的对象序列化的程序包开发--myJsonMarshal[阅读时间:约10分钟] 一.对象序列化概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体程序设计及 ...

  9. 基于Golang的监听读取配置文件的程序包开发——simpleConfig_v1

    基于Golang的监听&读取配置文件的程序包开发--simpleConfig_v1 [阅读时间:约10分钟] 一.配置文件概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 ...

最新文章

  1. Apache Solr 实现去掉重复的搜索结果
  2. iOS多线程开发(三)---Run Loop(一)
  3. 超详细图解!【MySQL进阶篇】MySQL架构原理
  4. linux安装卷管理,Linux安装管理ISCSI卷(initiator端)
  5. oracle 11g release2版本jdbc,Oracle发布JDeveloper11gRelease2更新版
  6. 8.Java 面试题整理(J2EE,MVC方面)
  7. 【GNN】图神经网络入门之GRN图循环网络
  8. Android TextView drawableLeft 在代码中实现
  9. js 音乐播放器(audio属性及其使用方法)
  10. Django在Window下的部署
  11. 计算机科学导论第8章答案,第8章计算机科学导论.ppt
  12. win定时关机_windows如何设置定时关机?
  13. 机器学习笔记(通俗易懂)---监督学习介绍:分类与回归,泛化~过拟合与欠拟合(2)
  14. 从PD充电器取9V/12V给产品供电快充,PD取电芯片概述
  15. 2021程序员必看面试指南-进大厂年薪百万需要付出多少努力?你看看你们配吗......
  16. Android9显示模糊,app进入后台显示模糊效果
  17. 用队列实现栈(Java)
  18. WINCE TCPMP应用一:TCPMP概述
  19. 2011-2020年股票的收益率上下波动比率数据集
  20. VC2010Express的使用说明

热门文章

  1. NFT交易平台2.0来了,源代码,智能合约整套
  2. 收到了CSDN送的图书,表示感谢|对《程序员的三门课》的一表格表示疑问
  3. Spamhaus -影响最大的RBL(实时黑名单列表)服务提供商,非营利性组织
  4. springboot实现微信小程序二维码生成
  5. 我的世界服务器物品代码,我的世界指令代码大全 2021通用指令代码汇总[多图]...
  6. Aocoda-RCF7/F7 MINI飞控无法解锁的疑难杂症-使用 Betaflight 10.8.0调参软件地面站刷写固件以及AOCODAF722MINI 配置文件
  7. PayPal集成标准版案例(asp.net)关键源码
  8. QAOA如何在NISQ处理器中展示应用级量子优势?
  9. w ndows10怎么没体验指数,Win10如何使用WinSAT测试Windows体验指数?
  10. 前端裁图-如何使用ps软件将矩形图片裁剪成圆角矩形