logo资料库

RYU book中文版.pdf

第1页 / 共165页
第2页 / 共165页
第3页 / 共165页
第4页 / 共165页
第5页 / 共165页
第6页 / 共165页
第7页 / 共165页
第8页 / 共165页
资料共165页,剩余部分请下载后查看
前言
交换器
1.1 Switching Hub
1.2 OpenFlow 实作的交换器
1.3 在 Ryu 上实作交换器
1.4 执行 Ryu 应用程序
1.5 本章总结
流量监控
2.1 定期检查网络状态
2.2 安装 Traffic Monitor
2.3 执行 Traffic Monitor
2.4 本章总结
REST API
3.1 整 合 REST API
3.2 安 装 包 含 REST API 的 Switching Hub
3.3 安 装 SimpleSwitchRest13class
3.4 安 装 SimpleSwitchControllerClass
3.5 执 行 包 含 REST API 的 Switching Hub
3.6 本章总结
网络聚合
4.1 网络聚合(Link Aggregation )
4.2 执行 Ryu 应用程序
4.3 实作 Ryu 的网络聚合功能
4.4 本章总结
生成树
5.1 Spanning Tree
5.2 执行 Ryu 应用程序
5.3 使用 OpenFlow 完成生成树
5.4 使用 Ryu 实作生成树
OpenFlow通讯协议
6.1 Match
6.2 Instruction
6.3 Action
ofproto函数库
7.1 简单说明
7.2 相关模块
7.3 基本使用方法
封包函数库
8.1 基本使用方法
8.2 应用程序范例
OF-Config函数库
9.1 OF-Config 通讯协议
9.2 函式库架构
9.3 使用范例
防火墙(Firewall)
10.1 Single tenant 操作范例
10.2 Multi tenant 操作范例
10.3 REST API 列 表
路由器(Router)
11.1 Single Tenant 的操作范例
11.2 Multi-tenant 的操作范例
11.3 REST API 列 表
OpenFlow交换器测试工具
12.1 测试工具概要
12.2 使用方法
12.3 测试工具使用范例
组织架构
13.1.1 应用程序
协助项目开发
14.1 参与项目
14.2 开发环境
14.3 送交更新的程序代
应用案例
15.1 Stratosphere SDN Platform (Stratosphere)
15.2 SmartSDN Controller(NTT COMWARE )
Using OpenFlow 1.3 RYU SDN Framework RYU project team
前言 1 交换器(Switching Hub ) 1.1 Switching Hub . . . . . . 1.2 OpenFlow 实作的交换器 1.3 在 Ryu 上实作交换器 . . 1.4 执行 Ryu 应用程序 . . . 1.5 本章总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 流量监控(Traffic Monitor ) 2.1 定期检查网络状态 . . 2.2 安装 Traffic Monitor . . 2.3 执行 Traffic Monitor . . 2.4 本章总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . REST API 3.1 整 合 REST API . . . . . 3.2 安装包含 REST API 的 Switching Hub 3.3 安 装 SimpleSwitchRest13 class . . 3.4 安装 SimpleSwitchController Class 3.5 执行包含 REST API 的 Switching Hub 3.6 本章总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 网络聚合(Link Aggregation ) 4.1 网络聚合(Link Aggregation ) . 4.2 执行 Ryu 应用程序 . . . . . . . 4.3 实作 Ryu 的网络聚合功能 . . 4.4 本章总结 . . . . . . . . . . . 生成树(Spanning Tree ) 5.1 Spanning Tree . . . . . . . 5.2 执行 Ryu 应用程序 . . . . 5.3 使用 OpenFlow 完成生成树 . 5.4 使用 Ryu 实作生成树 . . . . 5.5 本章总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OpenFlow 通讯协议 6.1 Match . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 4 5 6 Contents 1 3 3 3 6 14 20 21 21 21 27 29 31 31 31 33 34 36 38 39 39 39 50 59 61 61 63 74 75 84 85 85 i
6.2 6.3 Instruction . Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 ofproto 函式库 7.1 简单说明 . . . 7.2 相关模块 . . . 7.3 基本使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 9 封包函式库 8.1 基本使用方法 8.2 应用程序范例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OF-Config 函式库 9.1 OF-Config 通讯协议 9.2 函式库架构 . . . . 9.3 使用范例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 防火墙(Firewall ) 10.1 Single tenant 操作范例 10.2 Multi tenant 操作范例 10.3 REST API 列 表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 路由器(Router ) 11.1 Single Tenant 的操作范例 11.2 Multi-tenant 的操作范例 . 11.3 REST API 列 表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 OpenFlow 交换器测试工具 12.1 测试工具概要 . . . . 12.2 使用方法 . . . . . . 12.3 测试工具使用范例 . 13 组织架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.1 应用程序开发模型(Application programming model ) . . . . . . . . . . . . . 14 协助项目开发 14.1 参与项目 . . . . . 14.2 开发环境 . . . . . 14.3 送交更新的程序代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 应用案例 15.1 Stratosphere SDN Platform (Stratosphere) 15.2 SmartSDN Controller(NTT COMWARE ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 87 89 89 89 90 93 93 95 99 99 99 100 103 103 112 116 119 119 129 141 143 143 145 148 157 157 159 159 159 160 161 161 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 这个优秀的开放原始码的框架。 1
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。 MAC address table Flow table 1 2 4 3 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 发送。 MAC address table 4 Host A: Port 1 Flow table 1 2 3 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
1.2. OpenFlow 实作的交换器 1 2 4 3 MAC address table Host A: Port 1 Host B: Port 4 Host A Host C Host B Flow table in-port:4, eth-dst:Host A -> output: Port 1 Packet-In: in-port: 4 eth-dst: host A eth-src: host B Packet-Out: action: OUTPUT: port 1 4. host A → host B 再一次,host A 向 host B 发送封包,在 Flow table 中新增一个 Flow Entry 接着转送 封包到端口 4。 1 2 4 3 MAC address table Host A: Port 1 Host B: Port 4 Host A Host C Host B Flow table in-port:4, eth-dst:Host A -> output: Port 1 in-port:1, eth-dst:Host B -> output: Port 4 Packet-In: in-port: 1 eth-dst: host B eth-src: host A Packet-Out: action: OUTPUT: port 4 接下来,让我们实际来看一下在 Ryu 当中实作交换器的原始码。 5
分享到:
收藏