(一)基本要求
- 搭建下图所示拓扑,完成相关 IP 配置,并实现主机与主机之间的 IP 通信。用抓包软件获取控制器与交换机之间的通信数据。
- 查看抓包结果,分析OpenFlow协议中交换机与控制器的消息交互过程,画出相关交互图或流程图。
Hello:
控制器6633端口(我最高能支持OpenFlow 1.0) → 交换机50640端口
交换机50640端口(我最高能支持OpenFlow 1.5) → 控制器6633端口
于是双方建立连接,并使用OpenFlow 1.0
Features Request:
控制器6633端口(我需要你的特征信息) → 交换机50640端口
Set Conig:
控制器6633端口(请按照我给你的flag和max bytes of packet进行配置) →
交换机50640端口
Port_Status:
当交换机端口发生变化时,告知控制器相应的端口状态。交换机50640端口 → 控制器6633端口
Features Reply:
交换机50640端口(这是我的特征信息,请查收) → 控制器6633端口
Packet_in:
交换机50640端口(有数据包进来,请指示)→ 控制器6633端口
Packet_out:
控制器6633端口(请按照我给你的action进行处理) → 交换机50640端口
Flow_mod:控制器6633端口 → 交换机50640端口
3.回答问题:交换机与控制器建立通信时是使用TCP协议还是UDP协议?
TCP协议
(二)进阶要求
将抓包基础要求第2步的抓包结果对照OpenFlow源码,了解OpenFlow主要消息类型对应的数据结构定义。
Hello:
与ofp_header结构体中数据相同。
Version:OpenFlow版本
Type:OpenFlow消息类型
Length:消息总长度
Xid:事件ID,同一件事件的ID号一致
Features Request:
源码参数格式与HELLO相同,与上述ofp_header结构体中数据相同。
Set Conig:
flag:指示交换机如何处理 IP 分片数据包
max bytes of packet:当交换机无法处理到达的数据包时,向控制器发送如何处理的最大字节数,本实验中控制器发送的值是0x0080,即128字节
Port_Status:
Features Reply:
datapath_id:唯一标识符
n_buffers:交换机缓冲区可以缓存的最大数据包个数
n_tables:流表数量
pad:可以理解为填充值
capabilities:支持的特殊功能
actions:支持的动作
port data:物理端口描述列表
Packet_in:
buffer_id:数据通道分配的缓存id,标志数据包存在交换机中的位置,如果没有缓存在交换机中则buffer_id则为-1
total_len:整个数据帧的长度
in_port:接收数据帧的端口
reason:将数据包发送给控制器的原因,一般有俩原因,一是没有匹配到流表项,二是动作要求发给控制器
Packet_out:
Flow_mod:
Cookie:控制器设置的不透明数据
idle_timeout和hard_timeout控制流表项的生命周期。当idle_timeout为x(x不为0)并且hard_timeout为0时,流表项在x秒收不到数据包后就到期。当idle_timeout为0并且hard_timeout为x时,x秒后无论收不收得到数据包流表项都到期。当idle_timeout为x(x不为0)并且hard_timeout为y(y不为0)时,x秒收不到数据包或者y秒后,哪个期限先到就按哪个算。当idle_timeout和hard_timeout都为0时,表明这个流表项是永恒的,除非用OFPFC_DELETE删除,否则不会到期
priority:只和含通配字段的流表项有关。Priority值越大,表明流表优先级越高。交换机必须将优先级最高的通配流表项放在编号最低的通配流表中。无论流表是什么配置,交换机需要确保精确流表项排在通配流表项之前
buffer_id:标志由packet_in消息发送的数据包存储的地方
out_port:delete和delete_strict消息利用该字段确定作用域,而add、modify、modify_strict消息会自动忽略该字段。如果out_port为ofpp_none则表明禁用output端口过滤功能,否则就相当于添加了一个额外的匹配限制条件。连0也是有效端口id,表示约束条件是必须有关于该端口的output动作。而ofp_match和优先级等条件依旧生效,该字段只是添加了一个额外的约束
个人总结
本次实验,我学到了运用 wireshark 对 OpenFlow 协议数据交互过程进行抓包并对照OpenFlow源码了解了OpenFlow主要消息类型对应的数据结构定义。本次实验对我来说比较简单。在实验中,最开始抓包时一直没有hello的包,无论是重新构建拓扑还是重新抓包都没有用。经过上网查询后,得知需要在打开mininet之前先开始抓包,才能抓到hello的包,否则会丢失之前的包。在进阶要求中,要对照OpenFlow源码,阅读量较大,是本次实验中比较困难的部分。通过网络上的对OpenFlow的解析,才对OpenFlow源码有一定的了解。
标签:控制器,表项,OpenFlow,端口,实践,交换机,实验,数据包 From: https://www.cnblogs.com/zsy222/p/16732167.html