(一)基本要求
1.搭建拓扑,完成相关 IP 配置,并实现主机与主机之间的 IP 通信。用抓包软件获取控制器与交换机之间的通信数据。
配置好IP的拓扑代码如下
完成抓包
2.查看抓包结果,分析OpenFlow协议中交换机与控制器的消息交互过程,画出相关交互图或流程图。
HELLO 控制器6633端口(支持Open Flow1.0) ————> 交换机58350端口
HELLO 交换机58350端口(支持Open Flow1.5) ————> 控制器6633端口
HELLO后,双方建立连接,使用openflow1.0协议
FEATURES_REQUEST 从控制器6633端口到交换机58350端口,请求特征信息
SET_CONFIG 控制器6633端口到交换机58350端口,控制器对交换机进行配置
PORT_STATUS 从交换机58350端口到控制器6633端口当交换机端口发生变化时,告知控制器相应的端口状态
FEATURES_REPLY 交换机58350端口到控制器6633端口,回复特征信息
PACKET_IN 交换机58350端口到控制器6633端口,数据包进入,等待指示
PACKET_OUT 控制器6633端口到交换机58350端口,按照我给你的指示处理
FLOW_MOD 控制器通过6633端口向交换机58350端口、交换机58350端口下发流表项,指导数据的转发处理
交互图如下
3.回答问题:交换机与控制器建立通信时是使用TCP协议还是UDP协议?
答:使用的是TCP协议,如图
(二)进阶要求
将抓包基础要求第2步的抓包结果对照OpenFlow源码,了解OpenFlow主要消息类型对应的数据结构定义。
1.HELLO对应
2.FEATURES_REQUEST与HELLO中的ofp_header结构体定义变量名相同
3.SET_CONFIG对应
4.PORT_STATUS对应
5.FEATURES_REPLY对应
6.PACKET_IN对应
7.PACKET_OUT对应
8.FLOW_MOD对应
(三)个人总结
个人认为包括本次实验进阶要求在内难度均不高。
在完成基本要求的过程中,我遇到了这个问题:在开启wireshark抓包后pingall,抓到的openflow包中没有OFPT_HELLO,我通过参考实验指导PDF和网络上查找到的相关资料,询问了同学之后得到了解决方法:先运行wireshark开始抓包,然后再构建拓扑。重新试验之后,我得到了完整的openflow抓包信息。之后的实验过程都很顺利,实验结果也符合预期,要注意一点的是,使用wireshark过滤器时,openflow_v1和openflow_v6都有内容,openflow_v6中的内容是HELLO 交换机58350端口(支持Open Flow1.5) ————> 控制器6633端口。
进阶要求完成得很顺利,在路径openflow/include/openflow中找到openflow.h,打开查找,第2步中相对应的结构体仔细些都能找到。在查看Open Flow源码并与抓包结果进行比对的过程中,我了解了openflow主要消息类型对应的数据结构定义,更加了解了交换机和控制器建立连接的步骤以及详细过程。