实验3:OpenFlow协议分析实践
一、实验目的
- 能够运用 wireshark 对 OpenFlow 协议数据交互过程进行抓包;
- 能够借助包解析工具,分析与解释 OpenFlow协议的数据包交互过程与机制。
二、实验环境
Ubuntu 20.04 Desktop amd64
三、实验要求
(一)基本要求
-
导出拓扑文件,存入
/home/ubuntu/212106624/lab3/
中 -
文件目录
-
目录下拓扑文件
- 查看抓包结果,分析OpenFlow协议中交换机与控制器的消息交互过程,画出相关交互图或流程图。
- 根据抓包结果,可以得出交换机与控制器在本实验中是如以下过程进行消息交互的
- OFPT_HELLO, 源端口6633 -> 目的端口51664,从控制器到交换机,协议支持OpenFlow 1.0
也有源端口51664 -> 目的端口6633的,即交换机到控制器的另一个包,此处协议为openflow1.5 - OFPT_FEATURES_REQUEST, 源端口6633 -> 目的端口51664,从控制器到交换机,请求特征信息
- OFPT_SET_CONFIG, 源端口6633(请按照我给你的flag和max bytes of packet进行配置) -> 目的端口51664,从控制器到交换机
- OFPT_PORT_STATUS, 源端口44812 -> 目的端口6633,从交换机到控制器,交换机端口发生变化,告知控制器相应的端口状态。
- OFPT_FEATURES_REPLY, 源端口44812 -> 目的端口6633,从交换机到控制器,(发送的特征信息,请查收)
- OFPT_PACKET_IN, 源端口44182 -> 目的端口6633,从交换机到控制器
- OFPT_PACKET_MOD, 源端口6633 -> 目的端口44178,分析抓取的flow_mod数据包,控制器通过6633端口向交换机44178端口下发流表项,指导数据的转发处理
- OFPT_PACKET_OUT, 源端口6633(请按照我给你的action进行处理) -> 目的端口36424
- 综上可知,本实验中交换机和控制器之间消息交互过程,大致如下图所示:
- 回答问题:交换机与控制器建立通信时是使用TCP协议还是UDP协议?
答:根据图上红框内容可知,交换机与控制器建立通信时是使用TCP(Transmission Control Protocol)协议
(二)进阶要求
将抓包结果对照OpenFlow源码,了解OpenFlow主要消息类型对应的数据结构定义。
1. HELLO
2. FEATURES_REQUEST
源码参数格式与HELLO相同,将抓包截图与之对比
3. SET_CONFIG
对比
4. PORT_STATUS
5. FEATUERS_REPLY
物理接口描述
6. PORT_IN
7. PORT_MOD
8. PORT_OUT
四、个人总结
实验过程遇到问题:打开wireshark后创建拓扑,过滤Openflow数据包,并没有发现Flow_Mod数据包
解决:阅读文档之后,发现Flow_Mod数据包是控制器想交换机下发流表项,指导数据的转发处理,所以在启动wireshark之后,再尝试执行pingall,最后发现了Flow_mod数据包。
本次实验学习到了运用 wireshark 对 OpenFlow 协议数据交互过程进行抓包;借助包解析工具,分析与解释 OpenFlow协议的数据包交互过程与机制,实验本身难度不难,主要时间消耗在截图和设置解释图片上,在实验过程中,要注意的是需要先开启抓包后再进行创建拓扑,避免出现遗漏。 本次实验,也使我对OpenFlow协议有了更深刻形象的认识,提升了自主学习能力。而且同时对wireshark包解析工具的使用更加熟练,也大致了解了switch与controller之间消息交互的方式。
- 综上可知,本实验中交换机和控制器之间消息交互过程,大致如下图所示: