SDN入门第五篇——交换机与控制器之间的交互流程

    技术2023-08-06  97

    1、原理

    sdn交换机与控制器之间采用Openflow协议进行通信。 openflow 交换机和控制器之间的交互步骤

    SDN交换机和控制器在建立TCP连接的基础上,进行如下通信: 1、首先互相发送Hello消息互相协商Openflow协议版本。 2、发送Hello消息之后控制器向将换机发送Featrues Request消息,获取交换机的ID、缓冲区数量、端口信息等特性,因此交换机相应的回Features Reply。 3、set config是控制器用来配置交换机发送的数据包。 4、当流表中没有关于新到达流的数据包或者即使有关于新到达流的流规则但其行为是发往控制器的时候,交换机向控制器发送Packet In消息。 5、而Packet Out消息是控制器指定的某个数据包的处理方法。

    2、目的

    本文主要目的是通过wireshark监控sdn交换机与控制器之间的交互过程,以加深Openflow协议的理解。

    3、操作步骤

    查看控制器与交换机之间的TCP连接

    #打开wireshark wireshark #登录ryu控制器 cd ryu/ryu/app ryu-manager simple_switch_13 # 建立拓扑,指定远程控制器,连接端口以及openflow协议版本 sudo mn --controller=remote,port=6633 --switch=ovsk,protocols=OpenFlow13

    【查看TCP连接】 因为我是把控制器和交换机都部署在了同一台虚拟机上因此源、目的IP地址相同。 查看Hello数据包 Hello数据包中只包含openflow header,其中的type字段为OFPT_HELLO,version字段为发送方支持的最高版本的openflow协议版本。 如果控制器与交换机的协议版本相互匹配则连接,否则发送Error消息断开连接。

    查看features消息

    控制器为了查看交换机的特征信息,向交换机发送features request消息。features request消息也只包含openflow header,其type为OFPT_FEATURES_REQUEST。 交换机会回应相应的features reply消息,features request消息的transaction ID与features reply消息的transaction ID相同: features reply消息包含OpenFlow Header 和 Features Reply Message。header包含version、type、length、xid等信息。 下面的参数解释如下: datapath_id:交换机的标识符,低48位是一个MAC地址,高16位是自定义的。

    n_buffers:一次最多缓存的数据包数量。

    n_tables:表示交换机支持的流表数量。每个流表可以设置不同的通配符和不同数量的流表项。

    auxiliary_id:标识辅助连接。

    capabilities:所支持的功能。交换机的一些详细信息。

    reserved:保留字段。

    查看Packet in消息 产生packet in消息的原因: 1、不存在与流表项一致的项目时(Table-miss), OFPR_NO_MATCH 2、匹配的流表项中记载的行动为“发送至OpenFlow控制器”时,OFPR_ACTION

    发送Packet-In消息时OpenFlow交换机分为两种情况,一种是缓存数据包,一种是不缓存数据包。如果不通过OpenFlow交换机缓存数据包,那么Packet-In消息的buffer_id字段设置为-1,将整个数据包发送至OpenFlow控制器。

    字段内容buffer_id表示OpenFlow交换机中保存的数据包的缓存idTotal_len帧的长度in_port接受帧的端口reason发送Packet-in消息的原因pad用于调整对齐的填充data包含以太网帧的数据时使用的字段。

    查看Packet Out消息

    Packet out消息是由控制器发往交换机,是包含数据包发送命令的消息。若OpenFlow交换机的缓存中已存在数据包,而OpenFlow控制器发出“发送该数据包”的命令时,该消息指定了表示相应数据包的buffer_id。使用Packet-Out消息还可将OpenFlow控制器创建的数据包发送至OpenFlow交换机。此时,buffer_id置为-1,在Packet-Out消息的最后添加数据包数据。

    字段内容buffer_id表示OpenFlow交换机中保存的数据包的缓存idin_port数据包的输入端口actions_len行动信息的长度
    Processed: 0.011, SQL: 10