当前位置: 首页 > OFP 1.3 > 正文

OpenFlow 1.3 指南

OpenFlow 1.3 Tutorial

本文档由http://sdnhub.cn译自:
http://sdnhub.org/tutorials/openflow-1-3/
如果你想更方便的离线阅读,请下载PDF版本:OpenFlow 1.3 Tutorial教程中文版,另,PDF版已经自带书签 :)。

OpenFlow 1.3是交换机厂商支持的最新的OpenFlow版本。1.3版和1.0版有存在显著的不同。各版本增加的主要特性如下:

  • 1.1版:支持MPLS, Q-in-Q, VLANs, multipath(多径), multiple tables(多表), logical ports(逻辑端口)
  • 1.2版:支持可扩展的报文头(headers),IPv6
  • 1.3版:支持隧道(tunneling),per-flow traffic meters,Provider Backbone Bridging

通过本教程,你将学习更多关于OpenFlow 1.3的内容。

1 设置

下载可以运行在Virtualbox 和 VMware中的SDNHub VM(百度网盘下载地址:SDNhub.cn VM)。

虚拟机内已经安装了支持OpenFlow 1.3的 wiresharkOFDissector。OpenFlow协议解析器基于 CPqDofdissector,它可以让我们能够查看OpenFlow报文的精确语法。

2 快速入门

2.1 在终端窗口中运行如下的命令,启动一个包含1个交换机和3个主机的网络模拟环境:

sudo mn --topo single,3 --mac --controller remote --switch ovsk,protocols=OpenFlow13

注意:上面的命令仅能工作在打过补丁的Mininet上。对于其它的Mininet,可以运行如下的命令使交换机支持OpenFlow 1.3:

ovs-vsctl set bridge s1 protocols=OpenFlow13

2.2 虚拟机内置的Wireshark 1.11.3可以解析OpenFlow 1.0,1.1,1.2和1.4版本的报文。使用如下命令启动Wireshark并查看OpenFlow报文:

sudo wireshark &

2.3 下一步,启动 RYU 控制器。假设ryu安装的主目录是/home/ubuntu/ryu。如下的命令将启动控制器,并初始化OpenFlow协议处理器(OpenFlow Protocol Handler)和一个简单的支持OpenFlow 1.3交换机应用:

cd /home/ubuntu/ryu && ./bin/ryu-manager --verbose ryu/app/simple_switch_13.py

2.4 下一步,用如下命令检查Mininet网络拓扑中的主机是否彼此可达(ping通):

mininet> h1 ping h3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_req=1 ttl=64 time=2.76 ms
64 bytes from 10.0.0.3: icmp_req=2 ttl=64 time=0.052 ms
64 bytes from 10.0.0.3: icmp_req=3 ttl=64 time=0.051 ms

2.5 现在,使用如下的命令显示交换机上当前的流(针对OpenFlow 1.3)

sudo ovs-ofctl dump-flows s1 -O OpenFlow13

3 理解OpenFlow报文

假设你已经按照本文先前介绍的方法构建了学习型交换机应用程序。现在,我们可以深入的理解控制器和交换机之间的OpenFlow报文,如下图所示:

1.OF_Msg_Exchanges

3.1 连接设置(Connection Setup)

交换机初始化一个到控制器的TCP(或TLS)连接。当OpenFlow连接建立后,每一个实体(entity)必须发送一个OPFT_HELLO报文(此报文设置了发送者所支持OpenFlow协议的最高版本)。如下图所示,可以看到报文设置了OpenFlow 协议版本1.3:

2.OF_Hello1

3.2 特性(Featue)请求(Request)与应答(Reply)

回话成功建立后,控制器发送一个OFPT_FEATURES_REQUEST报文,此报文仅包含OpenFlow报文头,没有报文体(body)。如下图所示:

3.OF_Feature_Request

交换机则以一个OFPT_FEATURES_REPLY报文作为响应。注意Datapath ID和交换机的capabilities作为Feature应答报文的一部分被发送给控制器。如下图所示:

4.OF_Feature_Reply

3.3 设置配置信息(Set Configuration)

接下来,控制器向交换机发送OFPT_SET_CONFIG报文。此报文包括一个标识集合(a set of flags)和“datapath”发送给控制器的数据包的最大字节数。如下图所示:

5.OF_Set_Config

3.4 多部分请求与应答(Multipart Request – Reply)

控制器可以使用OFPT_MULTIPART_REQUEST报文从datapath请求状态信息。报文类型通过此报文包含的各种统计量statistics (FLOW/TABLE/PORT/QUEUE/METER等)。在 simple_switch_13.py 这个程序中,RYU 发送一个MULTIPART_REQUEST 报文去请求端口描述(port description)。如下图所示:

6.OF_Multipart_Request

交换机以 包含所有活动端口的 PORT_DESCRIPTION 作为应答。注意:在OpenFlow 1.0中,端口描述是作为FEATURE_REPLY **报文一部分,在OpenFlow 1.3中则作为MULTIPART_***独立出来。若下图所示:

7.OF_Multipart_Reply

3.5 Flow Mod

控制器可以主动的(proactively)(例如:像TableMissFlow之类的预安装流)或者被动的(reactively)(例如:相应packet_in报文)向交换机发送流(Flows)。流表修改报文有如下几种类型:OFPFC_ADD, OFPFC_DELETE, OFPFC_DELETE_STRICT,OFPFC_MODIFY, OFPFC_MODIFY_STRICT

下面的示例中,控制器安装一个新的流。从这个示例中可以看到,OpenFlow 1.0中的参数(如:priority,idle_timeout等),而matchinstruction 结构则反映了OpenFlow 1.3中指定的新参数。如下图所示:

8.OF_Flow_Mod

有一点需要特别注意:交换机不应答 FLOW_MOD 报文。但是,任何 FLOW_MOD 请求中的任何错误,交换机都要以 OFPET_FLOW_MOD_FAILED 响应。

It is important to note that the switch does not positively acknowledge for FLOW_MOD messages. However, any error in the FLOW_MOD request will be replied with OFPET_FLOW_MOD_FAILED.

3.6 Set Async Configuration Message

异步报文(asynchronous messages)从交换机被发送到控制器。OpenFlow协议支持的报文集包括Packet-Ins,Flow-Removed,Port-Status,or Error报文。当交换机连接控制器时,控制器能够设置它希望在OpenFlow通道上接收的报文类型。

9.OF_SetAsync

上图显示了一个有控制器发送异步配置报文。通过flags set类型的设置,控制器可以接收从交换机发来的各种异步报文。

4 贡献者

Sriram Natarajan, RYU Code Contributor

Any questions, email: natarajan(dot)sriram(at)gmail(dot)com

本文档由http://sdnhub.cn译自:
http://sdnhub.org/tutorials/openflow-1-3/
如果你想更方便的离线阅读,请下载PDF版本:OpenFlow 1.3 Tutorial教程中文版,另,PDF版已经自带书签 :)。

本文固定链接: http://sdnhub.cn/index.php/openflow_13_tutorial/ | 软件定义网络SDN

该日志由 sdnhub 于2015年03月24日发表在 OFP 1.3 分类下, 通告目前不可用,你可以至底部留下评论。
原创文章转载请注明: OpenFlow 1.3 指南 | 软件定义网络SDN

OpenFlow 1.3 指南:等您坐沙发呢!

发表评论

*

快捷键:Ctrl+Enter