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