第1章 OpenFlow概要 1
1.1 OpenFlow的发展历程 2
1.1.1 OpenFlow的历史 2
1.1.2 ONF 2
1.2 有效运用现有硬件,实现高效设计 4
1.3 所谓OpenFlow,具体是指什么 5
1.3.1 OpenFlow的网络构成示例 5
1.3.2 控制面和数据面的分离 5
1.3.3 控制面的构建方法 6
1.3.4 数据面的构建方法 7
1.3.5 OpenFlow控制器和OpenFlow通道 9
1.3.6 流表 10
1.4 控制器和交换机的基本动作 11
1.4.1 OpenFlow交换机的初始动作 11
1.4.2 Proactive模式设置 11
1.4.3 Reactive模式设置 11
1.5 OpenFlow的动作示例 14
1.5.1 动作示例1 14
1.5.2 动作示例2 15
1.5.3 动作示例3 15
1.5.4 其他动作示例 16
1.6 不断变化的OpenFlow规范 17
1.6.1 OpenFlow 1.0版本以后快速变化的规范 17
1.6.2 实现OpenFlow 1.3标准化后 17
1.6.3 本书中对OpenFlow 1.1以上版本的说明 18
第2章 OpenFlow 1.0的机制 19
2.1 OpenFlow 1.0中的流表和流表项 20
2.2 流表项 22
2.2.1 头字段 22
2.2.2 计数器 25
2.2.3 行动 26
2.3 行动 27
2.3.1 Forward行动 27
2.3.2 Drop行动 28
2.3.3 Enqueue行动(可选) 29
2.3.4 Modify-Field行动(可选) 29
2.4 控制器和交换机之间的消息 32
2.4.1 安全通道的建立 32
2.4.2 消息格式 32
2.4.3 安全通道的建立和初始设置 33
2.4.4 握手 35
2.4.5 Flow-Mod消息 39
2.4.6 Packet-In消息 45
2.4.7 Packet-Out消息 46
2.4.8 Port-Status消息 47
2.4.9 Flow-Removed消息 48
2.4.10 Error消息 49
2.4.11 Barrier消息 50
2.4.12 Echo消息 51
2.5 OpenFlow Switch Errata Version 1.0.1 53
2.6 新规范变化很大,需要注意 54
第3章 LLDP 和OpenFlow 55
3.1 LLDP和OpenFlow 56
3.2 LLDP的机制 58
3.2.1 在LLDP中使用的目标以太网地址 58
3.2.2 LLDP中使用的3 种组播以太网地址 59
3.2.3 LLDPDU格式 60
3.3 OpenFlow中有效使用LLDP的方法示例 62
3.3.1 事先准备 62
3.3.2 通过Packet-Out消息发送LLDP帧 63
3.3.3 通过Packet-In消息将LLDP帧发送至OpenFlow控制器 64
3.4 基于迪杰斯特拉算法的路径计算 66
第4章 通过实现L2交换机的功能来学习OpenFlow 69
4.1 通过具体网络设备的实现理解OpenFlow 70
4.2 中继器HUB 71
4.2.1 该示例中的网络构成 71
4.2.2 通过Proactive模式设置实现 71
4.2.3 将所有数据包Packet-In至OpenFlow控制器的方法 73
4.3 自学习桥接器 77
4.3.1 该示例中的网络构成 77
4.3.2 使用OpenFlow 1.0挑战自学习桥接器 78
4.3.3 监控ARP 并创建流表项 83
4.3.4 如果将PC A和PC B对调,结果会怎样 89
4.3.5 通过发送源和目标以太网地址的配对进行管理的方法 90
4.3.6 在OpenFlow 1.1以上版本中实现自学习桥接器的方法 90
4.4 Tagged VLAN 92
4.4.1 该示例中的网络构成 92
4.4.2 实现Tagged VLAN的设置(OpenFlow交换机1) 93
4.4.3 实现Tagged VLAN的设置(OpenFlow交换机2) 96
4.4.4 该示例中的注意事项 98
第5章 OpenFlow与虚拟化 99
5.1 服务器虚拟化和网络虚拟化 100
5.1.1 服务器虚拟化 100
5.1.2 动态迁移 101
5.1.3 多租户 102
5.1.4 网络虚拟化 103
5.2 基于OpenFlow的网络虚拟化的实现方法示例 105
5.2.1 使用VLAN ID的方法 105
5.2.2 使用物理端口/逻辑端口的方法 105
5.2.3 OpenFlow控制器的实现要点 106
5.2.4 其他方法 106
5.3 FlowVisor 107
5.3.1 FlowVisor概要 107
5.3.2 FlowVisor和OpenFlow控制器之间的OpenFlow通道 107
5.3.3 FlowVisor的串联 108
5.3.4 FlowVisor和虚拟网络 109
5.3.5 设置FlowVisor时的注意事项 110
第6章 通过用例考察OpenFlow 111
6.1 使用以太网地址的用户管理 112
6.2 ECMP 114
6.2.1 该示例中的网络构成 114
6.2.2 通过发送源地址区分时 115
6.2.3 通过TCP端口号区分时 116
6.2.4 轮询方式 116
6.3 简易负载均衡 117
6.4 选择性端口映射 118
6.4.1 单纯的端口映射 118
6.4.2 仅映射特定的TCP端口 119
6.4.3 OpenFlow 1.1的“组”和映射 120
6.4.4 从多个OpenFlow交换机持续进行选择性映射并转发至监控设备 120
6.5 重定向至安全产品 121
6.6 与虚拟路由近似的动作(多层交换机) 122
6.6.1 该示例中的网络构成 122
6.6.2 同一子网内的数据包转发处理 123
6.6.3 经过路由器的数据包转发处理 123
6.6.4 作为虚拟路由器响应ARP请求 124
6.6.5 虚拟路由器使用ARP解决以太网地址 125
6.6.6 TTL 的处理 126
第7章 OpenFlow1.1 127
7.1 OpenFlow 1.1中的变更要点 128
7.2 匹配字段的变更 129
7.3 多流表规范的变更(流水线处理) 130
7.3.1 流水线处理 130
7.3.2 元数据 134
7.3.3 OpenFlow 1.1中的自学习桥接器的实现手法 135
7.4 指令 136
7.4.1 何谓指令 136
7.4.2 行动、行动集、行动列表、指令的区别 136
7.4.3 对行动的变更 137
7.5 组 139
7.5.1 组表 139
7.5.2 组表项 139
7.5.3 组类型 140
7.5.4 组的组 144
7.6 虚拟端口的扩展 145
7.7 TTL 字段操作 146
7.7.1 copy TTL inwards/copy TTL outwards 146
7.7.2 接收到包含非法TTL 值的数据包时的处理 147
7.7.3 不能实施TTL 的匹配 148
7.8 OpenFlow 1.1中其他的变更 149
7.8.1 支持MPLS标签和VLAN 标签的Push/Pop 149
7.8.2 OpenFlow混合交换机 149
7.8.3 支持SCTP 149
7.8.4 支持ECN 150
7.8.5 OpenFlow交换机和控制器之间连接名称的变更 150
7.8.6 紧急事态流缓存的取消 151
7.8.7 Vendor消息名称的变更 151
第8章 OpenFlow 1.2 153
8.1 OpenFlow 1.2中的变更点 154
8.2 OpenFlow eXtensible Match(OXM) 155
8.2.1 OXM TLV 的基本结构 155
8.2.2 匹配字段解析规范的取消和Pre-requisite 157
8.2.3 OXM匹配字段 158
8.2.4 OXM中的通配符 159
8.2.5 OXM TLV示例 160
8.2.6 基于OXM的Set-Field 162
8.2.7 取消TCP、UDP、SCTP、ICMP重载使用相同字段 162
8.3 支持基本的IPv6 163
8.4 支持多台控制器(故障转移和负载均衡) 164
8.4.1 Role 164
8.4.2 Role变更 165
8.4.3 OpenFlow控制器之间的协作 165
8.5 OpenFlow 1.2中的其他变化 167
8.5.1 将虚拟端口分离为逻辑端口和保留端口 167
8.5.2 Flow-Mod的MODIFY/MODIFY_STRICT的规范变更 167
8.5.3 对实验性扩展的支持 167
8.5.4 变更历史记录的添加 168
第9章 OpenFlow 1.3 169
9.1 OpenFlow 1.3中的变更要点 170
9.2 计量表(QoS支持) 171
9.3 Table-miss的默认动作改为Drop 173
9.3.1 Table-miss流表项 173
9.3.2 流表匹配流程的变更 173
9.4 OpenFlow 1.3中的其他变更 175
9.4.1 OpenFlow控制器和OpenFlow交换机之间的辅助连接 175
9.4.2 可以通过UDP、DTLS等与OpenFlow控制器进行通信 175
9.4.3 支持IPv6扩展头 176
9.4.4 OXM 匹配字段的添加 176
9.4.5 支持PBB 176
9.4.6 多框架 177
9.4.7 从握手时的Features响应消息中删除端口号 178
9.4.8 流表项构成要素的变更 178
9.5 OpenFlow 1.3.1和1.3.2 179
9.5.1 OpenFlow通道中版本协商的变更 179
9.5.2 建立与OpenFlow控制器之间的OpenFlow 通道 179
第10章 OpenFlow的注意事项 181
10.1 Packet-In消息的处理负载 182
10.1.1 控制面带宽较窄导致的故障 183
10.1.2 Packet-In导致的消息延迟 183
10.2 匹配和流相关的注意事项 184
10.2.1 未发现TCP标志 184
10.2.2 并非数据包及帧的任意字段都可进行匹配 184
10.2.3 匹配字段的依赖关系 185
10.3 取决于实现的事项 187
10.3.1 流表项数量的上限 187
10.3.2 OpenFlow控制器可同时控制的OpenFlow交换机数量的上限 187
10.3.3 通过buffer_id表示的数据包未必保存着 187
10.3.4 OpenFlow通道断开时的重新连接计时器 188
10.4 从下流发送Flow-Mod 189
10.5 Barrier消息和错误 190
10.5.1 Flow-Mod之后的Packet-Out 190
10.5.2 向不同的OpenFlow交换机发送Flow-Mod 消息和Packet-Out
消息时 192
10.6 没有检测Packet-Out失败的方法 194
10.7 IP 碎片处理 195
第11章 OpenFlow的未来 197
11.1 互通性验证 198
11.1.1 OF-Test 198
11.1.2 PlugFest 198
11.1.3 2012 年进行的第1次PlugFest 198
11.1.4 第2次、第3次PlugFest 199
11.1.5 今后的课题 199
11.2 Northbound API 201
11.3 OF-CONFIG 202
附录 203
附录1 各版本的行动一览 204
附录1.1 OpenFlow 1.0的行动 204
附录1.2 OpenFlow 1.1的行动 205
附录1.3 OpenFlow 1.2的行动 206
附录1.4 OpenFlow 1.3的行动 207
附录2 各版本的消息一览 209
附录 2.1 OpenFlow 1.0的消息 209
附录2.2 OpenFlow 1.1的消息 210
附录2.3 OpenFlow 1.2的消息 211
附录2.4 OpenFlow 1.3的消息 212
附录3 OpenFlow 从1.0到1.3.2的变更之处 213
附录3.1 行动集 213
附录3.2 指令 213
附录3.3 行动列表 213
附录3.4 组表 214
附录3.5 计量表 214
附录3.6 行动 214
附录4 参考文献及URL 215
· · · · · · (
收起)