Using OpenFlow 1.3
RYU
SDN Framework
RYU project team
前言
Contents
1
1 交换器(Switching Hub )
3
1.1 Switching Hub ....................................................................................................................... 3
1.2 OpenFlow 实作的交换器 ..................................................................................................... 3
1.3 在 Ryu 上实作交换器 ........................................................................................................... 6
1.4 执行 Ryu 应用程序 ............................................................................................................. 14
1.5 本章总结 ........................................................................................................................ 20
2 流量监控(Traffic Monitor )
21
2.1 定期检查网络状态 ........................................................................................................ 21
2.2 安装 Traffic Monitor ............................................................................................................ 21
2.3 执行 Traffic Monitor ............................................................................................................ 27
2.4 本章总结 ........................................................................................................................ 29
3 REST API
31
3.1 整合 REST API ................................................................................................................... 31
3.2 安装包含 REST API 的 Switching Hub ........................................................................... 31
3.3 安装 SimpleSwitchRest13 class ...................................................................................... 33
3.4 安装 SimpleSwitchController Class ................................................................................. 34
3.5 执行包含 REST API 的 Switching Hub ........................................................................... 36
3.6 本章总结 ........................................................................................................................ 38
4 网络聚合(Link Aggregation )
39
4.1 网络聚合(Link Aggregation ) ....................................................................................... 39
4.2 执行 Ryu 应用程序 ............................................................................................................. 39
4.3 实作 Ryu 的网络聚合功能 ................................................................................................. 50
4.4 本章总结 ........................................................................................................................ 59
5 生成树(Spanning Tree )
61
5.1 Spanning Tree .................................................................................................................... 61
5.2 执行 Ryu 应用程序 ............................................................................................................. 63
5.3 使用 OpenFlow 完成生成树 .............................................................................................. 74
5.4 使用 Ryu 实作生成树 ......................................................................................................... 75
5.5 本章总结 ........................................................................................................................ 84
6 OpenFlow 通讯协议
85
6.1 Match ................................................................................................................................... 85
i
6.2
Instruction .................................................................................................................................. 86
6.3 Action ......................................................................................................................................... 87
7 ofproto 函式库
89
7.1 简单说明..................................................................................................................................... 89
7.2 相关模块..................................................................................................................................... 89
7.3 基本使用方法 ............................................................................................................................. 90
8 封包函式库
93
8.1 基本使用方法 ............................................................................................................................. 93
8.2 应用程序范例 ............................................................................................................................. 95
9 OF-Config 函式库
99
9.1 OF-Config 通讯协议 ................................................................................................................. 99
9.2 函式库架构 ................................................................................................................................. 99
9.3 使用范例................................................................................................................................... 100
10 防火墙(Firewall )
103
10.1 Single tenant 操作范例 .................................................................................................... 103
10.2 Multi tenant 操作范例....................................................................................................... 112
10.3 REST API 列表 ........................................................................................................................ 116
11 路由器(Router )
119
11.1 Single Tenant 的操作范例 ................................................................................................ 119
11.2 Multi-tenant 的操作范例 ................................................................................................... 129
11.3 REST API 列表 ........................................................................................................................ 141
12 OpenFlow 交换器测试工具
143
12.1 测试工具概要 ............................................................................................................... 143
12.2 使用方法 ....................................................................................................................... 145
12.3 测试工具使用范例 ............................................................................................................. 148
13 组织架构
157
13.1 应用程序开发模型(Application programming model ) ............................................. 157
14 协助项目开发
159
14.1 参与项目 ....................................................................................................................... 159
14.2 开发环境 ....................................................................................................................... 159
14.3 送交更新的程序代码 ......................................................................................................... 160
15 应用案例
161
15.1 Stratosphere SDN Platform (Stratosphere)....................................................................... 161
15.2 SmartSDN Controller(NTT COMWARE ) ........................................................................ 161
ii
前言
本书是给那些使用 Ryu 作为开发的框架,而目的是为了实现软件定义网络(Software Defined
Networking,SDN )而写的一本参考书。
那么为什么要选择 Ryu 作为开发平台呢? 我们衷心的希望您可以在
本书中找到解答。
建议您依照本书的章节,依序的阅读第 1 章至第 5 章。首先第 1 章是 Simple Switch 的实作,
接着后面的章节是流量监控(Traffic Monitor )以及网络聚合(Link Aggregation )。透过实际的
例子,我们将介绍 Ryu 的程序是如何运作的。
第 6 章到第 9 章,我们将详细的说明 OpenFlow 通讯协议(OpenFlow Protocol )以及封包函数
的使用方法。接着第 10 章到第 12 章,我们会讨论如何使用 Ryu 内建的防火墙(Firewall )和
测试工具(test tool )来开发应用程序。第 13 到 15 章将介绍 Ryu 的架构(architecture )及
实际应用案例。
最后,我们非常感谢您对于 Ryu 项目的青睐及支持,特别对于 Ryu 的使用者而言。希望在不久
的将来能有机会在 Mailing List 上得到来自于您的宝贵意见,让我们一起加入 Ryu 项目并进行
开发吧。
繁体中文版本是由台湾信息工业策进会- SDN 团队协助整理及翻译,除了不吝批评与指教之
外也欢迎更多朋友加入,让中文读者可以更快更实时的了解 Ryu 这个优秀的开放原始码的框
架。
5
Contents
2
CHAPTER 1
交换器(Switching Hub )
本章将会用简单的 Switching hub 安装做为题材,说明 Ryu 如何安装一个应用程序。
1.1 Switching Hub
在交换器中有许许多多的功能。在这边我们将看到拥有下列简单功能的交换器。
. 学习连接到端口的 host 之 MAC 地址,并记录在 MAC 地址表当中。
. 对于已经记录下来的 MAC 地址,若是收到送往该 MAC 地址的封包,则转送该封包到相
对应的端口。
. 对于未指定目标地址的封包,则执行 Flooding。 让我们使
用 Ryu 来实现这样一个交换器吧。
1.2 OpenFlow 实作的交换器
OpenFlow 交换器会接受来自于 controller 的指令并达到以下功能。
. 对于接收到的封包进行修改或针对指定的端口进行转送。
. 对于接收到的封包进行转送到 Controller 的动作(Packet-In )。
. 对于接收到来自 Controller 的封包转送到指定的端口(Packet-Out )。 上述的功能所组合
起来的就是一台交换器的实现。
首先,利用 Packet-In 的功能来达到 MAC 地址的学习。Controller 使用 Packet-In 接收来自交换
器的封包之后进行分析,得到端口相关数据以及所连接的 host 之 MAC 地址。
在学习之后,对所收到的封包进行转送。将封包的目的地址,在已经学习的 host 数据中进行检 索,
根据检索的结果会进行下列处理。
. 如果是已经存在记录中的 host:使用 Packet-Out 功能转送至先前所对应的端口
. 如果是尚未存在记录中的 host:使用 Packet-Out 功能来达到 Flooding 下面将一步一步的
说明并附上图片以帮助理解。
1. 初始状态
3
Chapter 1. 交换器(Switching Hub )
Flow table 为空白的状况。
将 host A 接到端口 1,host B 接到端口 4,host C 接到端口 3。
1
2
3
4
MAC address table
Flow table
Host A
Host C
Host B
2. host A → host B
当 host A 向 host B 发送封包。这时后会触发 Packet-In 讯息。host A 的 MAC
地址会被端口 1 给记录下来。由于 host B 的 MAC 地址尚未被学习,因此会
进行 Flooding 并将封包往 host B 和 host C 发送。
1
2
3
4
MAC address table
Host A: Port 1
Flow table
Host A
Host C
Host B
Packet-In:
in-port: 1
eth-dst: host B
eth-src: host A
Packet-Out:
action: OUTPUT: Flooding
3. host B → host A
封包从 host B 向 host A 返回时,在 Flow table 中新增一笔 Flow Entry,并将封
包转送到端口 1。因此该封包并不会被 host C 收到。
4