首页 > 其他分享 >实验3:OpenFlow协议分析实践

实验3:OpenFlow协议分析实践

时间:2022-09-28 11:59:34浏览次数:53  
标签:控制器 OpenFlow 端口 实践 交换机 实验 net 数据包

基础要求

一、拓扑文件

#!/usr/bin/env python

from mininet.net import Mininet
from mininet.node import Controller, RemoteController, OVSController
from mininet.node import CPULimitedHost, Host, Node
from mininet.node import OVSKernelSwitch, UserSwitch
from mininet.node import IVSSwitch
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Intf
from subprocess import call

def myNetwork():

    net = Mininet( topo=None,
                   build=False,
                   ipBase='192.168.0.0/24')

    info( '*** Adding controller\n' )
    c0=net.addController(name='c0',
                      controller=Controller,
                      protocol='tcp',
                      port=6633)

    info( '*** Add switches\n')
    s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
    s2 = net.addSwitch('s2', cls=OVSKernelSwitch)

    info( '*** Add hosts\n')
    h3 = net.addHost('h3', cls=Host, ip='192.168.0.103/24', defaultRoute=None)
    h2 = net.addHost('h2', cls=Host, ip='192.168.0.102/24', defaultRoute=None)
    h1 = net.addHost('h1', cls=Host, ip='192.168.0.101/24', defaultRoute=None)
    h4 = net.addHost('h4', cls=Host, ip='192.168.0.104/24', defaultRoute=None)

    info( '*** Add links\n')
    net.addLink(h1, s1)
    net.addLink(h3, s1)
    net.addLink(h2, s2)
    net.addLink(h4, s2)
    net.addLink(s1, s2)

    info( '*** Starting network\n')
    net.build()
    info( '*** Starting controllers\n')
    for controller in net.controllers:
        controller.start()

    info( '*** Starting switches\n')
    net.get('s1').start([c0])
    net.get('s2').start([c0])

    info( '*** Post configure switches and hosts\n')

    CLI(net)
    net.stop()

if __name__ == '__main__':
    setLogLevel( 'info' )
    myNetwork()

二、Wireshark抓包结果和对应的文字说明

1、Hello

控制器6633端口(我最高能支持OpenFlow 1.0) ---> 交换机35392端口

交换机35392端口(我最高能支持OpenFlow 1.5) ---> 控制器6633端口

2、Features Request

控制器6633端口(我需要你的特征信息) ——> 交换机35392端口

3、Set Config

控制器6633端口(请按照我给你的flag和max bytes of packet进行配置) ——> 交换机35392端口

4、Port_Status

当交换机端口发生变化时,告知控制器相应的端口状态

5、Features Reply

交换机端口35392(这是我的特征信息,请查收) ——> 控制器6633端口

6、Packet_In

交换机35392端口(有数据包进来,请指示) ——> 控制器6633端口

7、PACKET_OUT

控制器6633端口(请按照我给你的action进行处理) ---> 交换机35392端口

8、Flow_Mod

分析抓取的flow_mod数据包,控制器通过6633端口向交换机35392端口、交换机35392端口下发流表项,指导数据的转发处理

三、查看抓包结果,分析OpenFlow协议中交换机与控制器的消息交互过程,画出相关交互图或流程图

四、回答问题:交换机与控制器建立通信时是使用TCP协议还是UDP协议?

交换机与控制器建立通信时是使用TCP协议

进阶要求

将抓包基础要求第2步的抓包结果对照OpenFlow源码,了解OpenFlow主要消息类型对应的数据结构定义。

1、HELLO

建立OpenFlow连接
控制器与交换机互相发送Hello消息,双方选取Hello消息中最低版本的协议作为通信协议如果有一方不支持Openflow协议版本,应发送Error消息后断开连接,如果双方Openflow版本可以兼容,则Openflow连接建立成功。

2、Features Request

获取交换机特性信息
控制器向交换机发送Features Request消息查询交换机特性,Features Request消息只包含Openflow Header。
交换机在收到Features Request消息后返回Features Reply消息,Features Reply消息包括Openflow Header 和Features Reply Message。

3、Set Config


4、Port_Status


5、Features Reply


6、Packet_In

当交换机收到一个数据包后,会查找流表,找出与数据包包头相匹配的条目。
如果流表中有匹配条目,则交换机按照流表所指示的action列表处理数据包;有匹配条目但是对应的action是OUTPUT=CONTROLLER时,此时数据包不会被缓存在交换机中。
如果流表中没有匹配条目,则交换机会将数据包封装在Packet-in消息中发送给控制器处理。此时数据包会被缓存在交换机中等待处理。
本次实验中:交换机发现没有匹配的流表(Reason: No matching flow (table-miss flow entry) (0) )

7、Packet_Out

交换机转发数据包
控制器可以使用PacketOut消息,告诉交换机某一个数据包如何处理。

8、Flow_Mod

控制器配置流表


个人总结

在根据文件进行操作的时候发现抓包时没有“openflow_v4”的数据包,切换到“openflow_v6”才找到。在输入pingall命令前忘记打开wireshark抓包,导致最后很多数据没找到,最后才反应过来犯了和上次实验一样的错误。此次实验学习到openflow协议在代码上是如何体现的,更加深入得学习了OpenFlow协议TCP协议,并更熟练得掌握Wireshark的使用方法。通过网络上的对OpenFlow的解析,对OpenFlow源码有一定的了解。总的来说,此次实验并不复杂,但需要认真仔细。

标签:控制器,OpenFlow,端口,实践,交换机,实验,net,数据包
From: https://www.cnblogs.com/hjc13112580/p/16737472.html

相关文章

  • 实验3:OpenFlow协议分析实践
    实验3:OpenFlow协议分析实践实验目的能够运用wireshark对OpenFlow协议数据交互过程进行抓包;能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制。......
  • 实验3:OpenFlow协议分析实践
    一.实验目的1.能够运用wireshark对OpenFlow协议数据交互过程进行抓包;2.能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制。二.实验环境Ubuntu20......
  • 实验3:OpenFlow协议分析实践
    实验3:OpenFlow协议分析实践(一)基本要求1.搭建下图所示拓扑,完成相关IP配置,并实现主机与主机之间的IP通信。代码部分#!/usr/bin/envpythonfrommininet.......
  • 实验
    Inordertoaccuratelydescribethevariationofcracksectionwithcrackbreathing,whileconsideringthecomputationalcomplexityandmodelaccuracy,thecr......
  • 实验3:OpenFlow协议分析实践
    一、实验目的能够运用wireshark对OpenFlow协议数据交互过程进行抓包;能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制。二、实验环境Ubuntu20.0......
  • 16 、zedboard之纯PL按键实验
    实验基本目的:实验手册PL的流水灯,基本流程参考手册;逻辑代码解析:`timescale1ns/1ps////Company://Engineer:////CreateDate:03/11/202007:37:12PM//Design......
  • 15 、FPGA之纯PL流水灯实验
    实验基本目的:实验手册PL的流水灯,基本流程参考手册;逻辑代码解析:modulePL_Led(clk,rst_n,led);inputclk;inputrst_n;output......
  • JuiceFS 在 Elasticsearch/ClickHouse 温冷数据存储中的实践
    企业数据越存越多,存储容量与查询性能、以及存储成本之间的矛盾对于技术团队来说是个普遍难题。这个难题在Elasticsearch与ClickHouse这两个场景中尤为突出,为了应对不同......
  • IaC 存储最佳实践
    往往一些成功的软件公司在构建解决方案的时候十分注重其可重复性、可审计性、和简便性,而基础设施即代码(IaC)的出现让开发人员能够将这些时间应用于基础设施的分配。目前的存......
  • 实验3:OpenFlow协议分析实践
    (一)基本要求1.搭建拓扑,完成相关IP配置,并实现主机与主机之间的IP通信。用抓包软件获取控制器与交换机之间的通信数据。配置好IP的拓扑代码如下完成抓包2.查看抓包......