SDN环境部署与OpenDaylight开发入门
SDN环境部署与OpenDaylight开发入门
第一篇 理论篇 SDN概述、OpenDaylight简介、Controller项目总述
1 什么是SDN
1.1 SDN的诞生
1.2 SDN的标准及组织机构
1.3 SDN的一些典型应用场景
1.3.1 SDN在数据中心的应用:Cisco的ACI和VMware的NSX
1.3.2 SDN在广域网的应用(SD-WAN):谷歌的B4
1.3.3 SDN与安全——一种基于SDN的云计算安全保护系统及方法
1.4 SDN的一些重要学习资源
1.5 本章总结
2 SDN架构简析
2.1 SDN架构总述
2.2 SDN控制器
2.3 SDN交换机
2.4 南向接口协议
2.4.1 OpenFlow 1.0
2.4.2 OpenFlow 1.3
2.5 北向接口协议
2.6 本章总结
3 现有SDN交换机简介
3.1 OVS简介
3.1.1 认识OVS
3.1.2 OVS常用的命令
3.1.3 OVS的学习参考
3.2 SDN硬件交换机简介
3.2.1 思科
3.2.2 博科
3.2.3 华为
3.2.4 瞻博网络
3.2.5 NEC
3.2.6 戴尔
3.2.7 Arista
3.2.8 新华三
3.2.9 锐捷网络
3.2.10 xNET网锐科技
3.2.11 盛科网络
3.3 本章总结
4 现有SDN控制器简述
4.1 OpenDaylight控制器
4.2 ONOS控制器
4.3 Floodlight控制器
4.4 Ryu控制器
4.5 思科的APIC控制器和Open SDN控制器
4.5.1 思科APIC控制器
4.5.2 思科Open SDN控制器
4.5.3 思科SDN控制器的学习参考资源
4.6 OpenContrail控制器
4.7 NOX控制器
4.8 POX控制器
4.9 Beacon控制器
4.10 Big Network控制器
4.11 博科的Brocade SDN控制器
4.12 Maestro控制器
4.13 IRIS控制器
4.14 Extreme公司的OneController控制器
4.15 本章总结
5 OpenDaylight综述
5.1 OpenDaylight项目介绍
5.2 OpenDaylight版本介绍
5.2.1 氢版本简介
5.2.2 氦版本简介
5.2.3 锂版本简介
5.2.4 铍版本简介
5.2.5 硼版本简介
5.3 OpenDaylight的子项目简介
5.3.1 子项目AAA(认证、授权、审计项目)简介
5.3.2 子项目Federation(联合体项目)简介
5.3.3 子项目Infrastructure Utilities(基础设施项目)简介
5.3.4 子项目MD-SAL(模块驱动项目)简介
5.3.5 子项目ODL Root Parent(父项目)简介
5.3.6 子项目OpenDaylight Controller(控制器项目)简介
5.3.7 子项目YANG Tools(YANG工具项目)简介
5.3.8 子项目BGP LS PCEP(BGP和PCEP项目)简介
5.3.9 NETCONF(NETCONF项目)子项目简介
5.3.10 子项目ODL Lisp Flow Mapping(LISP流映射项目)简介
5.3.11 子项目ODL OpenFlow Plugin(OpenFlow插件项目)简介
5.3.12 子项目OpenFlow Protocol Library(OpenFlow协议库项目)简介
5.3.13 子项目OVSDB Integration(OVSDB集成项目)简介
5.3.14 子项目USC(统一安全通道项目)简介
5.3.15 子项目FaaS(网络构造即服务项目)简介
5.3.16 子项目NeutronNorthbound(Neutron北向项目)简介
5.3.17 子项目ALTO(应用层流量优化项目)简介
5.3.18 子项目CAPWAP(无线接入点的控制和提供)简介
5.3.19 子项目Controller Core Functionality Tutorials(控制器核心功能向导项目)简介
5.3.20 子项目Controller Shield(控制器盾项目)简介
5.3.21 子项目DIDM(设备认证和驱动管理项目)简介
5.3.22 子项目Group Based Policy(GBP)/Project Facts(GBP项目)简介
5.3.23 子项目L2 Switch(L2层交换机项目)简介
5.3.24 子项目LACP(链接聚合控制协议项目)简介
5.3.25 子项目OF-CONFIG(OF-CONFIG项目)简介
5.3.26 子项目OpenDaylight DLUX(ODL的DLUX项目)简介
5.3.27 子项目Service Function Chaining(服务功能链项目)简介
5.3.28 子项目VTN(VTN项目)简介
5.4 OpenDaylight学习参考
5.5 本章总结
6 OpenDaylight的Controller项目综述
6.1 Controller简介
6.1.1 OpenDaylight项目的控制器能满足当今网络发展的需求
6.1.2 OpenDaylight项目的控制器及技术关键组成介绍
6.2 Controller架构
6.3 Controller项目的服务抽象层SAL
6.3.1 MD-SAL
6.3.2 AD-SAL
6.4 Controller项目的学习参考
6.5 本章总结
第二篇 实操篇 控制器的安装指南、操作指南、开发环境准备
7 SDN底层架构的搭建指南
7.1 OVS安装指南
7.1.1 使用系统内置命令直接安装OVS
7.1.2 下载包并手动安装OVS
7.2 仿真环境Mininet安装指南
7.2.1 Mininet的介绍
7.2.2 下载Mininet虚拟机文件进行安装
7.2.3 在本地下载源代码以安装Mininet
7.2.4 使用包安装Mininet
7.2.5 Mininet的升级
7.2.6 升级Mininet的OVS版本
7.2.7 Mininet常用命令
7.3 Xen环境部署SDN网络的安装指南
7.3.1 安装Xen
7.3.2 安装OVS
7.3.3 创建虚拟机
7.3.4 对虚拟机文件进行修改
7.3.5 启动虚拟机
7.4 KVM环境部署SDN网络的安装指南
7.4.1 安装KVM
7.4.2 安装OVS
7.4.3 在KVM上进行相关的配置
7.4.4 创建虚拟机并将其连接到OVS网桥上
7.5 OpenStack环境部署SDN网络的安装指南
7.5.1 在现有的OpenStack的基础上安装OpenDaylight
7.5.2 使用DevStack以同时安装OpenStack和OpenDaylight
7.6 硬件环境部署SDN网络的安装指南
7.6.1 配置硬件交换机
7.6.2 配置硬件交换机所连接的控制器
7.7 本章总结
8 控制器OpenDaylight安装指南、操作指南和开发环境准备
8.1 Controller项目的源码安装指南
8.1.1 基础安装环境要求
8.1.2 项目编译和运行的软件环境要求
8.1.3 下载Controller项目的源码
8.1.4 编译Controller子项目的源码
8.1.5 Controller项目更新
8.1.6 启动运行Controller项目
8.1.7 安装参考
8.2 Controller项目的快速安装指南
8.3 OpenDaylight的Controller项目的开发环境准备
8.3.1 设置Gerrit账户
8.3.2 Eclipse的安装和设置
8.3.3 参考链接
8.4 OpenDaylight的Controller项目的使用指南
8.4.1 使用Controller和Mininet搭建一个简单的SDN环境
8.4.2 控制器OpenDaylight之Controller控制台界面介绍
8.4.3 通过Postman下发、删除、更新流表的操作
8.4.4 相关参考
8.5 OpenDaylight的通用项目源码安装指南
8.5.1 下载OpenDaylight子项目的源码
8.5.2 编译OpenDaylight子项目的源码
8.5.3 编译OpenDaylight子项目更新
8.5.4 启动运行OpenDaylight子项目
8.5.5 安装参考
8.6 OpenDaylight的通用项目快速安装指南
8.7 OpenDaylight的通用开发环境准备
8.8 控制器OpenDaylight的学习参考
8.9 本章总结
9 控制器ONOS安装指南
9.1 控制器ONOS简介
9.1.1 ONOS简述
9.1.2 ONOS的使命
9.1.3 ONOS创建组织简介
9.2 控制器ONOS源码安装指南
9.2.1 安装前提环境的准备
9.2.2 ONOS源码的下载和安装
9.2.3 在本地的开发机器上运行控制器ONOS
9.2.4 安装参考
9.3 控制器ONOS下载包的安装指南
9.4 控制器ONOS通过下载虚拟机进行部署的安装指南
9.5 控制器ONOS的使用指南
9.5.1 控制器ONOS的控制台界面介绍
9.5.2 使用ONOS和Mininet搭建一个简单的SDN环境
9.6 控制器ONOS的学习参考
9.7 本章总结
10 控制器Floodlight安装指南
10.1 控制器Floodlight源码安装指南
10.1.1 安装前提环境的准备
10.1.2 安装Floodlight
10.1.3 Floodlight的更新升级
10.2 控制器Floodlight通过下载虚拟机进行部署的安装指南
10.3 控制器Floodlight的使用指南
10.3.1 控制器Floodlight的常用命令介绍
10.3.2 控制器Floodlight的启动
10.3.3 控制器Floodlight的界面介绍
10.3.4 使用Floodlight和Mininet搭建一个简单的SDN环境
10.3.5 使用Floodlight和硬件交换机连接以搭建一个简单的SDN环境
10.4 控制器Floodlight的学习参考
10.5 本章总结
11 控制器Ryu安装指南
11.1 控制器Ryu源码安装指南
11.1.1 安装前提环境的准备
11.1.2 安装Ryu
11.1.3 安装参考
11.2 使用系统内置命令直接安装控制器的安装指南
11.2.1 安装前提环境的准备
11.2.2 使用系统内置命令直接安装Ryu
11.2.3 安装参考
11.3 控制器Ryu通过下载虚拟机进行部署的安装指南
11.4 控制器Ryu连接Mininet的实验
11.4.1 实验环境设计
11.4.2 控制器Ryu的启动
11.4.3 启动Mininet创建仿真网络
11.5 控制器Ryu的学习参考
11.6 本章总结
第三篇 实操篇 OpenDaylight之MD-SAL开发指南
12 MD-SAL开发的一些必备知识
12.1 OSGi
12.2 Karaf
12.3 Maven
12.3.1 Maven的安装和配置
12.3.2 Maven常用的命令
12.3.3 POM及pom.xml文件的简要介绍
12.3.4 Maven项目的配置文件settings.xml介绍
12.3.5 Maven的学习参考
12.4 MD-SAL
12.4.1 MD-SAL的基本概念
12.4.2 MD-SAL的消息类型
12.4.3 MD-SAL的数据事务
12.4.4 MD-SAL的RPC路由
12.4.5 OpenDaylight控制器MD-SAL:RESTCONF
12.4.6 WebSocket变化事件通知订阅
12.4.7 配置子系统
12.4.8 MD-SAL的学习参考
12.5 YANG
12.5.1 YANG的重要术语说明
12.5.2 YANG的语法规则
12.5.3 YANG的声明介绍
12.5.4 YANG Java Binding:映射规则
12.5.5 YANG的学习参考
12.6 本章总结
13 从简单的Hello World开始
13.1 项目开发环境准备
13.2 使用Maven原型opendaylight-startup-archetype创建项目
13.3 实现Hello World功能
13.3.1 在API目录下编写YANG模型
13.3.2 在impl目录下写实现功能代码——实现HelloService接口
13.3.3 注册RPC
13.4 项目hello的测试
13.4.1 使用HTTP协议通过API浏览器进行测试
13.4.2 使用OpenDaylight自带的YANG UI工具进行测试
13.4.3 使用REST客户端工具Postman进行测试
13.4.4 使用REST客户端curl命令行工具进行测试
13.5 本章总结
14 创建一个简单的项目:myproject
14.1 创建项目
14.1.1 使用Maven原型创建项目
14.1.2 编译项目
14.1.3 将项目导入IDE中
14.2 项目创建的关键目录和文件介绍
14.2.1 子项目myproject-api介绍
14.2.2 子项目myproject-artifacts介绍
14.2.3 子项目myproject-features介绍
14.2.4 子项目myproject-impl介绍
14.2.5 子项目myproject-it介绍
14.2.6 子项目myproject-karaf介绍
14.3 YANG常用的定义及其自动转化的Java代码
14.3.1 identity声明实例及其生成的Java文件
14.3.2 container声明实例及其生成的Java文件
14.3.3 typedef声明实例及其生成的Java文件
14.3.4 leaf声明实例及其生成的Java文件
14.3.5 leaf-list声明实例及其生成的Java文件
14.3.6 list声明实例及其生成的Java文件
14.3.7 choice声明和case声明实例及它们生成的Java文件
14.3.8 grouping声明实例及其生成的Java文件
14.3.9 uses声明实例及其生成的Java文件
14.3.10 augment声明实例及其生成的Java文件
14.3.11 YANG创建模型的一些实验
14.4 本章总结
15 RPC的开发
15.1 RPC开发过程的简要说明
15.2 RPC的YANG文件定义
15.2.1 RPC的YANG文件示例
15.2.2 RPC的YANG文件映射的包和Java文件
15.2.3 运行测试
15.3 RPC的实现
15.4 注册RPC并处理相应的关闭工作
15.4.1 MyprojectProvider.java的初始代码
15.4.2 在MyprojectProvider类中完成注册工作
15.4.3 编译
15.5 项目测试
15.5.1 启动myproject项目测试
15.5.2 my-rpc0功能测试
15.5.3 my-rpc1功能测试
15.5.4 my-rpc2功能测试
15.5.5 my-rpc3功能测试
15.5.6 my-rpc4功能测试
15.6 本章总结
16 DataStore相关的开发
16.1 DataStore相关开发过程的简要说明
16.1.1 使用DataBroker实现对DataStore的操作
16.1.2 完成Data Change事件的实现
16.2 利用DataBroker实现对DataStore的操作
16.2.1 实现对DataStore的异步读写操作
16.2.2 传递DataBroker参数
16.2.3 测试验证
16.3 Data Change事件的实现
16.3.1 实现DataChangeListener接口完成onDataChange函数
16.3.2 将数据树变动的监听注册到MD-SAL
16.3.3 测试验证
16.4 本章总结
17 Notification的开发
17.1 Notification开发过程的简要说明
17.1.1 通知提供的实现
17.1.2 通知接收处理的实现
17.2 在Yang Model中实现定义
17.2.1 notification的YANG文件示例
17.2.2 notification的YANG文件映射的包和Java文件
17.3 通知提供的实现
17.3.1 实现通知的提供
17.3.2 注册提供通知并传递NotificationProviderService参数
17.4 通知接收处理的实现
17.4.1 实现通知的接收
17.4.2 注册接收通知
17.5 项目测试
17.6 本章总结
18 使用Eclipse进行项目开发的介绍
18.1 使用Eclipse创建项目
18.2 使用Eclipse导入项目
18.3 使用Eclipse编辑项目
18.3.1 使用Eclipse编辑YANG文件
18.3.2 使用Eclipse编辑其他普通文件
18.3.3 在Eclipse工具之外对项目进行修改后的处理
18.4 使用Eclipse调试运行项目
18.4.1 使用Eclipse调试在其中编辑的项目
18.4.2 使用其他工具调试在Eclipse中编辑的项目
18.5 一些可能出现的错误及其解决方法
18.5.1 新建项目中出现mavenarchiver相关错误及解决方法
18.5.2 Maven的Lifecycle Mapping相关问题的解决方法
18.5.3 项目导入Eclipse后无法显示的解决方案
18.4.4 其他的一些错误和解决方法
18.6 本章总结
第四篇 实操篇 OpenDaylight之北向开发指南
19 OpenDaylight北向开发的基础知识
19.1 RestConf协议简介
挂载点
URI parameters/RestConf的操作格式
可能返回的状态码及其代表的意思
19.1.1 RestConf的HTTP方法
1.OPTIONS/restconf
2.GET/restconf/config/
3.GET/restconf/operational/
4.PUT/restconf/config/
5.POST/restconf/config
7.POST/restconf/operations/:
8.DELETE/restconf/config/
19.1.2 RestConf的工作原理
1.GET操作
2.PUT操作
19.2 NetConf协议简介
19.2.1 NetConf的协议层
19.2.2 NetConf的内容层
19.2.3 NetConf的操作层
19.2.4 NetConf的消息层
19.2.5 NetConf的安全传输层
19.2.6 NetConf的参考资料
1.NetConf的wiki
2.NetConf协议内容层相关RPC参考
3.NetConf协议操作层相关RPC参考
4.NetConf协议消息层相关RPC参考
5.NetConf协议安全传输层相关RPC参考
19.3 OpenDaylight主要的北向接口
19.4 北向开发的官方参考资料
1.官方wiki参考链接
2.控制器自带的参考资料
19.5 本章总结
20 利用Java实现OpenDaylight北向下发流表的功能
20.1 OpenDaylight北向下发流表开发的基础依据
20.1.1 模块opendaylight-action-types介绍
20.1.2 模块opendaylight-match-types介绍
20.2 获取流表的功能实现
20.2.1 代码展示
20.2.2 实验验证
20.3 添加流表的功能实现
20.3.1 代码展示
20.3.2 实验验证
20.4 删除流表的功能实现
20.4.1 代码展示
20.4.2 实验验证
20.5 本章总结
21 使用OpenDaylight北向接口的通用应用
21.1 获取北向接口的信息并进行开发
21.2 使用API进行北向编程
21.3 本章总结
参考资料
推荐阅读
思维导图
防止博客图床图片失效,防止图片源站外链:
http://www.processon.com/chart_image/5e5b2f3ce4b0cb56dab11400.png)
思维导图在线编辑链接:
版权声明:本文为jingle1267原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。