实验3:OpenFlow协议分析实践
实验3:OpenFlow协议分析实践
实验步骤
一、搭建拓扑,测试通信
- 导出的拓扑文件及连通性测试如下
二、Wireshark 抓包分析
-
交换机、控制器互发 Hello 报文确定通信的 OpenFlow 协议版本
-
控制器发送 Features Request 查询交换机信息
-
控制器发送 Set Config 要求交换机设置的信息
-
交换机发送 Port_Status 通知控制器端口发生变化
-
交换机发送 Features Reply 告知控制器自己的信息
-
当交换机机查找流表,发现没有匹配条目或查到匹配条目的行为被指定为将包转发给控制器时,发送 Packet_in 给控制器
-
控制器发送 Packet_out 给交换机并要求交换机按指定的 Action 进行操作
-
控制器发送 Flow_mod 给交换机,通过6633端口向交换机指定端口、交换机指定端口下发流表项,指导数据的转发处理
-
通过以上过程可得出 OpenFlow 协议中交换机与控制器的消息交互过程,画出相关交互图如下
三、交换机、控制器通信使用的协议
- 根据 OpenFlow 的报文结构可知,使用的是 TCP 协议
个人总结
-
本次实验难度尚可,最大的难度在于分析 OpenFlow 数据包。期间遇到的问题是如何对 info 信息进行筛选,意外发现可以像平时网页查找关键词通过 Ctrl + F 打开搜索栏,只要将对应的搜索对象改为 String 即可对 info 进行筛选。另外一开始没找到 Flow_mod 包,查看 Flow_mod 包的作用以后,猜测 Flow_mod 包只有在出现数据转发或者流表下发时才能看到。于是执行 pingall,并通过搜索 info 找到 Flow_mod 包。
-
本次实验的收获是熟悉 Wireshark 抓包,了解了 OpenFlow 协议的报文结构。通过报文信息对使用 OpenFlow 协议通信的过程进行分析,发现这里的交换机与传统的交换机不同,它的转发规则由流表指定,而流表由控制器发送,这个让我明白了控制器为什么要叫控制器以及流表在 OpenFlow 协议中的重要性。