OpenFlow建立连接交互流程学习

任务目的

1、 了解OpenFlow交换机与OpenFlow控制器建立TCP连接的过程。
2、 掌握配置安全通道中的OpenFlow版本的方法。
3、 掌握OpenFlow交换机和OpenFlow控制器的消息交互流程。

任务环境
设备名称软件环境(镜像)硬件环境
控制器RYU4.7.0桌面版CPU:2核 内存:4G 磁盘:20G
主机Mininet2.2.0桌面版CPU:1核 内存:2G 磁盘:20G

注:
root用户的用户名/密码为root/root@openlab
openlab用户的用户名/密码为openlab/user@openlab

任务内容

1、 配置交换机与控制器,使其支持OpenFlow1.3。
2、 分析消息包,掌握交换机与控制器的消息交互流程。

实验原理

一、OpenFlow协议简介

2006年,斯坦福大学Clean Slate计划资助的Ethane项目开始部署,致力于企业网架构的创新,OpenFlow协议的雏形就诞生于这个项目。2008年,Nick McKeown教授的一篇重要论文“OpenFlow:Enabling Innovation in Campus Networks”使得OpenFlow正式进入人们的视野,继而成为了标准化组织ONF(Open Network Foundation,开放网络基金会)主推的南向接口协议。经过多年的发展,OpenFlow现已成为SDN的主流南向接口协议之一。目前,OpenFlow协议还在不断地演进中,本实验采用OpenFlow v1.3协议,并对控制器与OpenFlow交换机之间的交互过程进行深入分析。
OpenFlow主要有3种类型的消息,分别是Controller-to-Switch、Asynchronous和Symmetric,其中每个类型又包含多个子类型。Controller-to-Switch消息由控制器发起,用于管理、查看交换机的状态。Asynchronous消息由交换机发起,向控制器汇报交换机的事件和改变。Symmetric消息由控制器或交换机任一方发起,无需请求直接发起消息。详细信息如下表所示:

   
消息类型消息例子描述
Controller-to-SwitchPacket_out控制器使用这些消息可以添加、修改或删除流表项
 Barrier查询交换机的功能和统计
 Switch Configuration配置交换机
 SwitchFeatures配置交换机端口属性
 Multipart将数据包发送出指定交换机端口
Asynchronous(异步)Error由交换机发起,发送消息给控制器
 Packet_in Table Status这些消息可以是没有匹配交换机中任意流表项的数据包或数据包头,因此需要发送给控制器进行处理
 Controller Role Status Port Status在流状态、端口状态改变,或者产生错误消息时,进行通知
Symmetric(对称)HelloHello消息在控制器与交换机建立连接过程中使用
 EchoEcho消息用来确定Controller-to-Switch连接的延时,验证连接是否处于活跃状态
 ExperimenterExperimenter消息用于未来消息的扩展

二、OpenFlow连接建立交互流程

在OpenFlow1.3协议的情况下,控制器与OpenFlow交换机的消息完整交互流程如下:
1、 控制器与OpenFlow交换机通过TCP“三次握手”,建立有效的连接。其中,控制器一端的端口号为6633
2、 控制器与OpenFlow交换机之间相互发送Hello消息,用于协商双方的OpenFlow版本号。在双方支持的最高版本号不一致的情况下,协商的结果将以较低的OpenFlow版本为准。如果双方协商不一致,还会产生Error消息。
3、 控制器向OpenFlow交换机发送Features Request消息,请求OpenFlow交换机上传自己的详细参数。OpenFlow交换机收到请求后,向控制器发送Features Reply消息,详细汇报自身参数,包括支持的buffer数目、流表数以及Actions等。
4、 控制器通过Set Config消息下发配置参数,然后通过Get config Request消息请求OpenFlow交换机上传修改后的配置信息。OpenFlow交换机通过Get config Reply消息向控制器发送当前的配置信息。
5、 控制器与OpenFlow交换机之间发送Packet_outPacket_in消息,通过Packet_out中内置的LLDP包,进行网络拓扑的探测。
6、 控制器与OpenFlow交换机之间通过发送Multipart RequestMutipart Reply消息,控制器能获取OpenFlow交换机的状态信息,包括流的信息、端口信息等。
7、 控制器与OpenFlow交换机之间通过发送Echo RequestEcho Reply消息,保证二者之间存在有效连接,避免失联。
说明:以上为控制器与OpenFlow交换机之间的标准交互流程,在具体实验过程中某些阶段可能会缺失。

实验步骤

一、创建实验

步骤1 登录OpenLab实验平台,选择“实验课程 > SDN > OpenFlow建立连接交互流程学习”。

说明:当前有正在进行的实验课程时,请单击“结束”,结束课程。

步骤2 创建实验,目前支持两种创建实验的模式,具体如下:

  • 实验模式为“上课模式”时:单击实验名称出现一提示框,单击“进入详情”进入实验详情页面,后台自动创建实验,单击“进入实验“即可。
  • 实验模式为“浏览模式”时,单击实验名称进入实验详情页面,单击“开始实验”,创建实验。

步骤3 课程实验创建完成后,进入对应的操作界面。

步骤4 选择控制器1,打开命令行终端,登录RYU控制器。执行ifconfig命令,查看控制器IP,如下图所示。

步骤5 选择主机1,打开命令行终端,登录Mininet所在主机,执行ifconfig命令,查看Mininet所在主机的IP,如下图所示。

二、捕获数据包

步骤 1 登录控制器,切换到root用户。输入如下命令,启动RYU相关应用。

$ ryu-manager --verbose --observe-links ryu.topology.switches ryu.app.rest_topology ryu.app.ofctl_rest ryu.app.simple_switch_13

步骤 2 打开新的命令窗口,切换至root用户,执行命令wireshark启动抓包工具Wireshark。

步骤 3 双击eth0网卡,查看eth0网卡上数据包收发情况,如下图所示。

步骤 4 登录主机1,切换至root用户,启动Mininet。通过“—controller”参数设置Mininet连接远程控制器,并指定控制器的IP和端口号。

$ mn --controller=remote,ip=30.0.1.3,port=6633 --switch=ovsk,protocols=OpenFlow13

步骤 5 登录控制器1,停止Wireshark,观察数据包列表,可以看出控制器与交换机的基本交互流程。

三、OpenFlow1.3交互流程分析

步骤1 交换机连接控制器的6633端口,经过3次握手后双方建立TCP连接,如下图所示。


由上图红色标记可知,交换机与控制器之间完成了一次标准的“三次握手”,建立了TCP连接。标准的TCP连接“三次握手”过程可参考下图:

步骤2 当控制器与交换机建立TCP连接后,由其中某一方发起Hello消息,双方协调协OpenFlow议版本号,如下图所示。


控制器和交换机都会向对方发送一条Hello消息,消息中附上自己支持的OpenFlow的最高版本。接收到对方Hello消息后,判断自己能否支持对方发送的版本,能支持则版本协商成功,不能支持则回复一条OFPT_ERROR消息。查看Hello消息详情,本实验中由于交换机和控制器都能支持OpenFlow1.3版本,所以版本协商为1.3。

步骤3 OpenFlow版本协商完成后,控制器发送一条FEATURES_REQUEST消息获取交换机的特性信息,包括交换机的ID(DPID)、缓冲区数量、端口及端口属性等等。相应的,交换机回复FEATURES_REPLY消息,如下图所示。


查看数据包详情,OFPT_FEATURES_REQUEST消息只有包头,如下图所示。

OFPT_FEATURES_REPLY数据包详情如下,交换机的DPID是数据通道独一无二的标识符,低48位是一个MAC地址,高16位是自定义的。本实验中交换机缓冲区数量(n_buffers)为256,交换机支持的流表数量(n_tables)为254,交换机所支持的功能,如下图所示。

步骤4 OpenFlow1.0协议中FEATURES_REPLY消息还包含交换机端口信息,那么OpenFlow 1.3协议怎么获取交换机端口信息呢?OpenFlow 1.3协议将‘stats’框架更名为‘multipart’框架,并且将端口描述移植到multipart消息中。其中OPPT_PORT_DESC类型的multipart消息就是用于获取交换机端口信息的。


查看OPPT_PORT_DESC类型multipart_reply消息,消息中列出了交换机的端口以及每个端口的详细信息,包括端口名称和mac地址等,如下图所示。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值