OpenFlow控制器与交换机的交互通信图
版本号:OpenFlow协议的版本,1.0版本为0x01,1.1:0x02,1.20x03,1.3:0x04。
类型:报文类型。
长度:该头包含的八位字节数。
事务ID:分配给该数据包的事务ID。请求所对应的响应也使用相同的ID,便于配对。
OpenFlow协议所支持的三种消息类型
Controller-to-Switch消息: 由控制器发出,用来管理或获取交换机状态。
Asynchronous消息: 由交换机发出,用来将网络事件或者交换机状态变化更新到控制器。
Symmetric消息: 可由交换机发出也可由控制器发出,也不必通过请求建立。
PFPT_HELLO
HELLO:确定安全通道中使用的OpenFlow版本。发送Hello消息中携带各自支持的最大版本号,采用OpenFolw交换机和OpenFolw控制器所发送的版本号中较小的那一个版本。
PFPT_ERROR
错误信息: 通知出现了某种错误,OpenFolw交换机和OpenFolw控制器都可发送ERROR信息。
PFPT_ECHO_REQUEST、PFPT_ECHO_REPLY
Echo请求、响应: OpenFolw控制器和OpenFolw交换机可通过Echo请求信息来确认二者之间是否连接、检测通信延迟、测量通信带宽等。接收Echo请求消息的一方会向对方返回Echo响应。
PFPT_VENDOR
厂商信息: 用于交换设备厂商信息。
PFPT_FEATURES_REQUEST、PFPT_FEATURES_REPLY
握手信息: OpenFolw控制器向OpenFolw交换机发送询问功能的特征请求信息,OpenFolw交换机返回特征响应信息完成握手。
PFPT_GET_CONFIG_REQUEST、PFPT_GET_CONFIG_REPLY
配置信息获取: 用于OpenFolw控制器请求OpenFolw交换机的配置信息。
PFPT_SET_CONFIG
配置信息设置:OpenFolw控制器向OpenFolw交换机发送配置信息。
PFPT_PACKET_IN、PFPT_PACKET_OUT
包进入、包输出: 当不存在与流表项一致的项目时或匹配的流表项记载的行动为“发送至OpenFolw控制器时”,OpenFolw交换机会发送Packet-In消息。而后通过控制器处理,给出答复。
PFPT_FLOW_REMOVED
流删除: 当OpenFolw交换机设置流表项超时时,OpenFolw交换机要向OpenFolw控制器发送FLOW_REMOVED消息。为确保OpenFolw控制器收到该消息,仅在其发出请求时才发送。
PFPT_PORT_STATUS
端口状态: 在OpenFolw交换机中添加、删除或修改物理端口时,需要发送PORT_STATUS消息来通知OpenFolw控制器。
PFPT_FLOW_MOD
流表修改: 由OpenFolw控制器对OpenFolw交换机下发流表项的消息。对OpenFolw交换机流表项进行增删补。
PFPT_PORT_MOD
端口修改: 用于控制器修改交换机物理端口的行为
PFPT_STATS_REQUEST、PFPT_STATS_REPLY
统计信息: 获取统计信息,利用此报文实现负载均衡,流量监控等操作。
PFPT_BARRIER_REQUEST、PFPT_BARRIER_REPLY
保障信息: 接收barrier请求消息的一方在收到消息后,结束对此之前所收到的所有消息的处理,通过返回barrier请求消息携带的xid通知消息发送方消息处理的完成程度。
PFPT_QUEUE_GET_CONFIG_REQUEST、PFPT_QUEUE_GET_CONFIG_REPLY
配置队列: 获取配置队列信息,道理和start一样。
#####################################################################################################################################################################################
节点使用mininet,控制器使用floodlight1.2,跑在不同的主机中
mininet使用创建默认拓扑命令
$mn --controller=remote,ip=192.168.1.108,port=6653 --switch ovsk,protocols=OpenFlow10
动作:创建拓扑,使h1 ping h2,然后销毁拓扑断开控制器。全程抓包
在控制器端使用wiresahrk抓取南向接口流量
控制器 192.168.1.108:6653
交换机 192.168.1.103:13668
主机1 10.0.0.1
主机2 10.0.0.2
#####################################################################################################################################################################################
报文交互解析:
192.168.1.103 192.168.1.108
(13668) ------------------> (6653) | TCP: 13668 → 6653 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1 客户机主动打开,SYN=1,seq=x (三次握手建立连接)
(13668) <------------------ (6653) | TCP: 6653 → 13668 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=128 SYN=1,ACK=1,seq=y,ack=x+1
(13668) ------------------> (6653) | TCP: 13668 → 6653 [ACK] Seq=1 Ack=1 Win=65536 Len=0 ACK=1,seq=x+1,ack=y+1
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_HELLO -->HELLO报文协商OpenFlow版本号(使用OF 1.0)
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=1 Ack=9 Win=29312 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_HELLO -->控制器使用OF 1.5协商
(13668) <------------------ (6653) | OpenFlow: Type: OFPT_HELLO -->再次使用OF 1.5协商
(13668) <------------------ (6653) | TCP: 6653 → 13668 [FIN, ACK] Seq=17 Ack=2 Win=29312 Len=0 -->未收到回应,确定使用OF 1.0
(13668) ------------------> (6653) | TCP: 13668 → 6653 [ACK] Seq=2 Ack=18 Win=65536 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_FEATURES_REQUEST -->握手,特征请求:OF控制器向OF交换机发送询问功能的特征请求信息
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=9 Ack=25 Win=65536 Len=0 确认信息
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_FEATURES_REPLY -->握手,特征响应:OF交换机返回特征响应信息完成握手。
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=25 Ack=185 Win=30336 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_GET_CONFIG_REQUEST -->请求配置信息
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_BARRIER_REPLY -->barrier应答,确认相关信息已经被满足或者收到完成操作的通知
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=53 Ack=193 Win=30336 Len=0 确认信息
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_GET_CONFIG_REPLY -->响应配置信息
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=53 Ack=205 Win=30336 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_STATS_REQUEST -->统计请求,
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_STATS_REPLY -->统计应答,
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_VENDOR -->交换设备厂商信息
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_VENDOR -->交换设备厂商信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_FLOW_MOD -->对流表进行配置
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_BARRIER_REQUEST -->barrier请求
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=1293 Ack=173 Win=65280 Len=0 确认信息
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_BARRIER_REPLY -->barrier应答,完成操作
0e:16:87:c0:bb:23------>LLDP_Multicast | OpenFlow: Type: OFPT_PACKET_OUT -->LLDP组播 数据包处理动作请求
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_BARRIER_REPLY -->barrier应答,完成操作
72:4d:05:89:cb:38------>LLDP_Multicast | OpenFlow: Type: OFPT_PACKET_OUT -->LLDP组播 数据包处理动作请求
0e:16:87:c0:bb:23------>Broadcast | OpenFlow: Type: OFPT_PACKET_OUT -->广播 数据包处理动作请求
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=1309 Ack=478 Win=65024 Len=0 确认信息
72:4d:05:89:cb:38------>Broadcast | OpenFlow: Type: OFPT_PACKET_OUT -->广播 数据包处理动作请求
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=1309 Ack=585 Win=65024 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_ECHO_REQUEST -->Echo请求,确认二者之间是否连接、检测通信延迟、测量通信带宽等。
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_ECHO_REPLY -->Echo响应
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=593 Ack=1317 Win=32512 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_ECHO_REQUEST -->Echo请求
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_ECHO_REPLY -->Echo响应
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=601 Ack=1325 Win=32512 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_ECHO_REQUEST -->Echo请求
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_ECHO_REPLY -->Echo响应
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=609 Ack=1333 Win=32512 Len=0 确认信息
6e:83:d3:c5:28:60------>Broadcast | OpenFlow: Type: OFPT_PACKET_IN -->数据包处理动作应答
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_ECHO_REQUEST -->Echo请求
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=617 Ack=1393 Win=32512 Len=0 确认信息
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_ECHO_REPLY -->Echo响应
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=617 Ack=1401 Win=32512 Len=0 确认信息
6e:83:d3:c5:28:60------>Broadcast | OpenFlow: Type: OFPT_PACKET_OUT -->数据包处理动作请求
9e:9e:93:a7:58:3b--->6e:83:d3:c5:28:60 | OpenFlow: Type: OFPT_PACKET_IN -->数据包处理动作应答
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=683 Ack=1461 Win=32512 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_FLOW_MOD -->更新流表
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_PACKET_OUT -->数据包处理动作请求
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=1461 Ack=787 Win=64768 Len=0 确认信息
10.0.0.1 ------------------> 10.0.0.2 | OpenFlow: Type: OFPT_PACKET_IN -->数据包处理动作应答
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=787 Ack=1577 Win=32512 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_FLOW_MOD -->更新流表
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_PACKET_OUT -->数据包处理动作请求
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=1577 Ack=891 Win=64768 Len=0 确认信息
10.0.0.2 ------------------> 10.0.0.1 | OpenFlow: Type: OFPT_PACKET_IN -->数据包处理动作应答
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_FLOW_MOD -->更新流表
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_PACKET_OUT -->数据包处理动作请求
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=1693 Ack=995 Win=64512 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_ECHO_REQUEST -->Echo请求
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_ECHO_REPLY -->Echo响应
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=1003 Ack=1701 Win=32512 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_ECHO_REQUEST -->Echo请求
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_ECHO_REPLY -->Echo响应
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=1011 Ack=1709 Win=32512 Len=0 确认信息
0e:16:87:c0:bb:23------>LLDP_Multicast | OpenFlow: Type: OFPT_PACKET_OUT -->数据包处理动作请求
72:4d:05:89:cb:38------>LLDP_Multicast | OpenFlow: Type: OFPT_PACKET_OUT -->数据包处理动作请求
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=1709 Ack=1209 Win=64256 Len=0 确认信息
0e:16:87:c0:bb:23------>Broadcast | OpenFlow: Type: OFPT_PACKET_OUT -->数据包处理动作请求
72:4d:05:89:cb:38------>Broadcast | OpenFlow: Type: OFPT_PACKET_OUT -->数据包处理动作请求
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=1709 Ack=1423 Win=64256 Len=0 确认信息
6e:83:d3:c5:28:60--->9e:9e:93:a7:58:3b | OpenFlow: Type: OFPT_PACKET_IN -->数据包处理动作应答
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=1423 Ack=1769 Win=32512 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_FLOW_MOD -->更新流表
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_PACKET_OUT -->数据包处理动作请求
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=1769 Ack=1527 Win=65536 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_ECHO_REQUEST -->Echo请求
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_ECHO_REPLY -->Echo响应
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=1535 Ack=1777 Win=32512 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_ECHO_REQUEST -->Echo请求
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_ECHO_REPLY -->Echo响应
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=1543 Ack=1785 Win=32512 Len=0 确认信息
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_PORT_STATUS -->OF交换机中端口改动信息(硬件设备变动)
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=1543 Ack=1849 Win=32512 Len=0 确认信息
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_PORT_STATUS -->OF交换机中端口改动信息
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=1543 Ack=1977 Win=34560 Len=0 确认信息
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_FLOW_MOD -->更新流表
(13669) <------------------ (6653) | OpenFlow: Type: OFPT_FLOW_MOD -->更新流表
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=1977 Ack=2695 Win=64512 Len=0 确认信息
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_PORT_STATUS -->OF交换机中端口改动信息
(13669) ------------------> (6653) | OpenFlow: Type: OFPT_PORT_STATUS -->OF交换机中端口改动信息
(13669) <------------------ (6653) | TCP: 6653 → 13669 [ACK] Seq=2695 Ack=2106 Win=34560 Len=0 确认信息
(13669) <------------------ (6653) | TCP: 6653 → 13669 [FIN, ACK] Seq=2695 Ack=2106 Win=34560 Len=0 断开连接
(13669) ------------------> (6653) | TCP: 13669 → 6653 [ACK] Seq=2106 Ack=2696 Win=64512 Len=0