一、实验目的
1.能够运用 wireshark 对 OpenFlow 协议数据交互过程进行抓包;
2.能够借助包解析工具,分析与解释 OpenFlow协议的数据包交互过程与机制。
二、实验环境
1.下载虚拟机软件Oracle VisualBox;
2.在虚拟机中安装Ubuntu 20.04 Desktop amd64,并完整安装Mininet;
三、实验步骤
首先进入用户模式,搭建打开拓扑界面
然后搭建下图所示拓扑,完成相关 IP 配置,并实现主机与主机之间的 IP 通信。用抓包软件获取控制器与交换机之间的通信数据包。
配置IP
以此为例
主机 | IP地址 |
h1 | 192.168.0.101/24 |
h2 | 192.168.0.102/24 |
h3 | 192.168.0.103/24 |
h4 | 192.168.0.104/24 |
配置网段
接下来保存为one.py文件
Vim one.py打开文件再次比对IP配置
最后运行此文件:
可以看到全部连接成功,成功运行!
接下来在另一个终端进行数据抓包。
查看抓包结果,分析OpenFlow协议中交换机与控制器的消息交互过程,相关交互图。
交换机或控制器首先发送hello报文,确定openflow通信版本。
交换机或控制器收到hello报文之后,回复一个hello报文,协商版本。
控制器发送feature_request报文,查询交换机具体信息。
交换机收到feature_request报文之后,回复feature_reply,报告自己的详细信息给控制器。
工作过程中控制器会不断发送echo_request给交换机,交换机回复echo_reply消息给控制器,确认连接。
以下是数据抓包数据类型:
1.hello
2. FEATURES_REQUEST
3.SET_CONFIG
4. PORT_STATUS
5. FEATURES_REPLY
6. PACKET_IN
7. PACKET_OUT
8. FLOW_MOD
四、实验分析
Open flow协议格式里面的各个字段及其交换机和控制器的交互过程,每个数据包都有相互的作用。目前所支持的有三种报文类型:
1:Controller to Switch消息
由Controller发起、Switch接收并处理的消息。这些消息主要用于Controller对Switch进行状态查询和修改配置等管理操作,可能不需要交换机响应。就当前实验出现的类型进行分析:
- Features:用于控制器发送请求来了解交换机的性能,交换机必须回应该报文。
- Flow-Mod:Flow-Mod消息用来添加、删除、修改OpenFlow交换机的流表信息。Flow-Mod消息共有五种类型:ADD、DELETE、DELETE-STRICT、MODIFY、MODIFY-STRICT。
- Packet-out:用于通过交换机特定端口发送报文 ,这些报文是通过Packet-in消息接收到的。通常Packet-out消息包含整个之前接收到的Packet-in消息所携带的报文或者buffer ID(用于指示存储在交换机内的特定报文)。这个消息需要包含一个动作列表,当OpenFlow交换机收到该动作列表后会对Packet-out消息所携带的报文执行该动作列表。如果动作列表为空,Packet-out消息所携带的报文将被OpenFlow交换机丢弃。
2:异步(Asynchronous)消息
由Switch发送给Controller,用来通知Switch上发生的某些异步事件的消息,主要包括Packet-in、Flow-Removed、Port-Status和Error等。
1. Packet-in:转移报文的控制权到控制器。对于所有通过匹配流表项或者Table Miss后转发到Controller端口的报文均要通过Packet-in消息送到Controller。也有部分其他流程(如TTL检查等)也需要通过该消息和Controller交互。Packet-in既可以携带整个需要转移控制权的报文,也可以通过在交换机内部设置报文的Buffer来仅携带报文头以及其Buffer ID传输给Controller。Controller在接收到Packet-in消息后会对其接收到的报文或者报文头和Buffer ID进行处理,并发回Packet-out消息通知OpenFlow交换机如何处理该报文。
2.Port-Status:通知控制器端口状态或设置的改变。
3:同步(Symmetric)消息
顾名思义,同步(Symmetric)消息是双向对称的消息,主要用来建立连接、检测对方是否在线等,是控制器和OpenFlow交换机都会在无请求情况下发送的消息,包括Hello、Echo和Experimenter三种消息。:
Hello:当连接启动时交换机和控制器会发送Hello交互。
五、个人总结
- 本次实验目的在于能够运用 wireshark 对 OpenFlow 协议数据交互过程进行抓包;能够借助包解析工具,分析与解释 OpenFlow协议的数据包交互过程与机制。
- 其中注意抓包的时候,要在另一个在终端执行sudo python one.py 和 pingall,这样在抓包的时候才会显示完整的数据包。
- 个人感悟:本次实验是验证分析,实验步骤并不繁琐,但是涉及到抓包,数据类型较多。需要实际操作较少,理论部分较多,通过实验操作,结合理论知识。从而对于openflow有了深刻的认识。