SDN-openflow1.0抓包分析

目录

Wireshark

Wireshark启动

wireshark配置

选择端口

 选择筛选器

对称消息

Hello消息

OFPT_HELLO

ERROR消息

OFPT_ERROR

ECHO消息

OFPT_ECHO_REQUEST

 OFPT_ECHO_REPLY

控制器/交换机配置消息

Features消息

OFPT_FEATURES_REQUEST

OFPT_FEATURES_REPLY

CONFIGS消息

OFPT_SET_CONFIG

统计消息

OFPT_STATS_REQUEST

OFPT_STATS_REPLY

障碍消息

OFPT_BARRIER_REQUEST

OFPT_BARRIER_REPLY

控制器命令消息

OFPT_PACKET_OUT

OFPT_FLOW_MOD

 异步消息

OFPT_PACKET_IN

 


上篇文章SDN-OpenFlow1.0协议分析对OpenFlow1.0协议进行了分析,本篇文章就抓一些包来看一看。

博主使用的是opendaylight氮版本,miniedit进行的网络构建,wireshark进行抓包,一些配置等请查看本专栏其他文章。

Wireshark

Wireshark启动

使用

sudo wireshark

启动wireshark,一段时间后打开界面

打开wireshark

wireshark配置

选择端口

选择抓包接口

博主的控制器和Mininet在一台虚拟机中,所以选择的lo,读者根据自己情况选择。

 选择筛选器

筛选openflow1.0协议的消息

选择openflow_v1筛选of1.0协议的消息,否则有ICMP、ARP等协议的消息,列表过长。

使用

tshark -g protocols | grep -i openflow

查看你的wireshark支持的openflow协议版本

wireshark版本

对称消息

Hello消息

OFPT_HELLO

OFPT_HELLO数据包

这是由交换机向控制器发送的HELLO消息,对称消息的一种,用于控制器或交换机在连接建立的期间发送一个Hello数据包,用来表示所支持的最高版本的Openflow协议,协商版本号,建立连接,连接可以从交换机或控制器启动。

ERROR消息

OFPT_ERROR

OFPT_ERROR数据包

这是由交换机向控制器发出的ERROR消息,对称消息的一种。控制器或交换机发送此消息用来指示正常运行期间的故障。错误由消息类型和代码以及对错误的描述来组成。返回码为1表示没有问题,建立连接成功,若为0则失败。

ECHO消息

OFPT_ECHO_REQUEST

OFPT_ECHO_REQUEST数据包

当没有其他的数据包进行交换时,交换机会定期循环给控制器发送OFPT_ECHO_REQUEST来确保与控制器的连接。

 OFPT_ECHO_REPLY

 OFPT_ECHO_REPLY数据包

控制器对交换机进行回应,确保连接没有问题。

控制器/交换机配置消息

Features消息

OFPT_FEATURES_REQUEST

OFPT_HELLO和OFPT_FEATURES_REQUEST数据包

这是控制器发给交换机的两个数据包,Hello是对称消息,交换机之前给控制器发了,控制器要回一下,可以看到控制器还支持openflow1.3版本。Request消息用于控制器向交换机请求信息,在交换Hello数据包并且建立双方支持的最高版本的Openflow之后,控制器向交换机发送功能请求以检索缓冲区的数量,数据路径ID或其他。

OFPT_FEATURES_REPLY

OFPT_FEATURES_REPLY数据包

交换机向控制器发出,告知控制器自身的信息,这个是交换s1进行的响应,同样还有s2和s3的。 。

Datapath unique id:交换机标识符。
        n_buffers:一次最多缓存的数据包数量。
        n_tables:表示交换机支持的流表数量。每个流表可以设置不同的通配符和不同数量的流表项。控制器和交换机第一次通信的时候,控制器会从OFPT_FEATURES_REPLY消息中找出交换机支持多少流表,如果控制器还想了解大小、类型和流表查询的顺序,就发送一个OFPT_STATS_REQUEST消息,交换机必须按照数据包遍历流表的顺序把这些流表回复给控制器,并且精确匹配流表排在通配流表前。

CONFIGS消息

OFPT_SET_CONFIG

OFPT_SET_CONFIG数据包

控制器发出的消息,用于对交换机进行配置。

统计消息

OFPT_STATS_REQUEST

OFPT_STATS_REQUEST数据包

控制器想了解更多交换机的信息时发出。

OFPT_STATS_REPLY

OFPT_STATS_REPLY数据包

障碍消息

OFPT_BARRIER_REQUEST

OFPT_BARRIER_REQUEST数据包

控制器向交换机发送该消息,询问之前的命令是否正确运行。

OFPT_BARRIER_REPLY

OFPT_BARRIER_REPLY数据包

交换机向控制器报告命令运行结果。

控制器命令消息

OFPT_PACKET_OUT

OFPT_PACKET_OUT数据包

控制器响应交换机,用于命令交换机将某一数据包进行转发。可以看到动作是Output,端口号是2,也就是命令交换机从端口2将数据包转发出去。

OFPT_FLOW_MOD

OFPT_FLOW_MOD

        Cookie为流表项标识符
        Command是flow-mod的类型
        Idle time-out是流表项的空闲超时时间
        hard time-out是流表项的最大生存时间
        Priority为流表项的优先级,交换机优先匹配高优先级的流表项;
        Buffer Id为交换机中的缓冲区ID,flow-mod消息可以指定一个缓冲区的ID,该缓冲区的数据包会按照此flow-mod消息的action列表处理。如果是手动下发的流,buffer_id应填-1,即0xffff,告诉交换机这个数据包并没有缓存在队列中。
        Out port为删除流表的flow_mod消息提供的额外的匹配参数。
        Flags为flow-mod命令的一些标志位,可以用来指示流表删除后是否发送flow-removed消息,添加流表时是否检查流表重复项,添加的流表项是否为应急流表项。
                当OFPFF_SEND_FLOW_REM 被设置的时候,表项超时删除会触发一条表项删除的信息。
                当OFPFF_CHECK_OVERLAP 被设置的时候,交换机必须检查同优先级的表项之间是否有匹配范围的冲        突。
                当OFPFF_EMERG_被设置的时候,交换机将表项当作紧急表项,只有当与控制器连接断的时候才启用。

 异步消息

OFPT_PACKET_IN

OFPT_PACKET_IN数据包

如果由动作集指示或者由于表遗漏或TTL错误,交换机可以向控制器发送在PACKET_IN信息中接收到的包。       

        Buffer Id是packet-in消息所携带的数据包在交换机中的缓存ID
        Total_length为data段的长度
        In port数据包进入交换机的入端口号
        Reason为packet-in事件的产生原因(OFPR_NO_MATCH和OFPR_ACTION)

部分消息在抓包时没有体现,可以查看文章

SDN-OpenFlow1.0协议分析

更多SDN相关内容,请查看:SDN-自学笔记

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章