1 2 Fork me on GitHub 6

实验3:OpenFlow协议分析实践

(一)基本要求
1、搭建下图所示拓扑,完成相关 IP 配置,并实现主机与主机之间的 IP 通信。用抓包软件获取控制器与交换机之间的通信数据。



2、用wireshark的抓包结果
OFPT_HELLO
从控制器6633端口到交换机35362端口,使用OpenFlow1.0协议:

从控制器35362端口到交换机6633端口,使用OpenFlow1.5协议:

OFPT_HELLO后,双方协商使用openflow1.0协议
OFPT_FEATURES_REQUEST:
从控制器6633端口到交换机35362端口,请求特征信息

OFPT_SET_CONFIG:

OFPT_PORT_STATUS:
从交换机35362端口到控制器6633端口当交换机端口发生变化时,告知控制器相应的端口状态

OFPT_FEATURES_REPLY:
交换机35362端口到控制器6633端口,回复特征信息

OFPT_PACKET_IN:
交换机35376端口(有数据包进来,请指示)--->控制器6633端口

FLOW_MOD:
分析抓取的flow_mod数据包,控制器通过6633端口向交换机35362端口、交换机35376端口下发流表项,指导数据的转发处理


OFPT_PACKET_OUT:
控制器6633端口向交换机35362端口发送数据,并告知交换机输出到1端口

分析OpenFlow协议中交换机与控制器的消息交互过程,画出相关交互图或流程图

回答问题:交换机与控制器建立通信时是使用TCP协议还是UDP协议?

显然,是tcp协议。
(二)进阶要求
将抓包基础要求第2步的抓包结果对照OpenFlow源码,了解OpenFlow主要消息类型对应的数据结构定义。
1、OFPT_HELLO


2、OFPT_FEATURES_REQUEST


3、OFPT_SET_CONFIG


4、OFPT_PORT_STATUS


5、OFPT_FEATURES_REPLY


6、OFPT_PACKET_IN
两种情况:
(1)、交换机查找流表,发现没有匹配条目,但是这种包没有抓到过

(2)、有匹配条目,对应的action是OUTPUT=CONTROLLER,固定收到向控制器发送包


7、OFPT_FLOW_MOD


8、OFPT_PACKET_OUT


(三)个人总结
1、刚开始实验时,没有细心翻阅pdf文档,先建立拓扑后再用wireshark进行抓包,导致没有出现OFPT_HELLO和OFPT_PORT_STATUS的数据包,找到问题后重新进行操作,经过openflow_v1过滤后,就能够找到所有的数据包啦。
2、在使用openflow_v4对数据包进行过滤时,发现过滤出来一片空白,我尝试用openflow_v6进行过滤后,才发现所需要的包,在翻阅破地方文档后,发现是我的交换机35362端口最高能够支持OpenFlow1.5,在进行完hello通信后交换机和控制器协商统一使用openflow_v1。
3、通过这次实验,我不仅懂得了OpenFlow协议的数据包交互过程与机制,查找和理解了其中的函数,并且也能够更加熟练地使用wireshark进行抓包,对抓完的包进行过滤,能够让我们清晰地见到我们想要的包和数据。
4、本次实验总体来说难度不大,就是有一些小细节容易发送错误,只要一步一步地按照实验要求来做,这种验证型的实验还算是比较简单的。

posted @ 2022-09-26 21:55  ax妖妖成仙  阅读(141)  评论(0编辑  收藏  举报