首页 > 其他分享 > 1.6Mininet流表应用实战2——控制器下发流表协议分析

1.6Mininet流表应用实战2——控制器下发流表协议分析

时间:2023-06-08 09:00:11浏览次数:127  
标签:Mininet 1.6 流表 self 控制器 交换机 步骤 数据包

Mininet流表应用实战2——控制器下发流表协议分析

实验目的

1、理解OpenFlow交换机和控制器间的工作原理。
2、学会使用Wireshark抓包分析,熟悉了解OpenFlow协议。。

实验环境

Mininet流表应用实战2——控制器下发流表协议分析实验的拓扑如下图所示。
image-20230524140847812
实验环境信息如下表所示。

设备名称 软件环境 硬件环境
主机 Ubuntu 14.04桌面版 Mininet 2.2.0 CPU:1核 内存:2G 磁盘:20G
控制器 Ubuntu 14.04桌面版 OpenDaylight碳版本 CPU:4核 内存:8G 磁盘:20G

注:系统默认的账户为:
管理员权限用户名:root,密码:root@openlab;
普通用户用户名:openlab,密码:user@openlab。
可查看当前实验环境右侧“钥匙” 按钮获取对应的密码。

任务内容

1、通过Mininet自定义创建拓扑,并使用远程控制器进行通信测试。
2、解析控制器与交换机、主机与主机之间的OpenFlow协议通信过程。

实验原理

在SDN环境下,当交换机收到一个数据包并且交换机中没有与该数据包匹配的流表项时,交换机将此数据包发送给控制器,由控制器决策数据包如何处理。控制器下发决策后,交换机根据控制器下发的信息来进行数据包的处理,即转发或者丢弃该数据包。

操作步骤

一、创建拓扑并测试通信

步骤1

登录OpenDaylight虚拟机,执行如下命令查看OpenDaylight的启动情况,端口监听情况如下所示。

# netstate -anput|grep 6653
# netstate -anput|grep 8181

image-20230524140951274
说明:为方便用户实验,实验平台中ODL的功能组件已安装,且启动好了。

步骤2

执行命令ifconfig查看ODL控制器的IP地址。
image-20230524141014117
说明:本实验中ODL的IP地址为30.0.1.159,实验需根据具体情况操作。

步骤3

登录Mininet虚机,打开命令行执行终端,执行命令sudo wireshark进行Wireshark抓包,监听网卡any上的数据流量。
image-20230524141104249

步骤4

打开新的命令行执行窗口,执行命令cd /home/openlab/openlab/mininet/custom进入custom目录。

步骤5

执行命令sudo vim exper1.py创建python自定义拓扑脚本文件exper1.py,脚本代码如下:

#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
class MyTopo( Topo ):
    "Simple topology example."
    def __init__( self ):
        "Create custom topo."
        # Initialize topology
        Topo.__init__( self )
        # Add hosts and switches
        Host1 = self.addHost( 'h1' )
        Host2 = self.addHost( 'h2' )
        Host3 = self.addHost( 'h3' )
        Switch1 = self.addSwitch( 's1' )
        Switch2 = self.addSwitch( 's2' )
        # Add links
        self.addLink( Host1, Switch1 )
        self.addLink( Host2, Switch1 )
        self.addLink( Host3, Switch2 )
        self.addLink( Switch1, Switch2 )
topos = { 'mytopo': ( lambda: MyTopo() ) }

说明:为方便用户实验,脚本文件在/home/ftp/exper.py中已预置。

步骤6

执行如下命令通过mn命令执行自定义脚本,并远程指定控制器ODL的IP地址。

# sudo mn --custom exper1.py --topo mytopo --controller=remote,ip=30.0.1.159,port=6653

image-20230524141216242

步骤7

执行命令pingall验证Mininet中虚拟主机的连通性。
image-20230524141301238

步骤8

执行命令dpctl dump-flows查看交换机上的流表。
image-20230524141326457
可以看到交换机上有了流表,接着交换机会根据流表进行数据包的转发使其通信。

步骤9

停止Wireshark抓包并查看抓包结果,筛选出openflow_v1协议数据包。
image-20230524141428900

步骤10

登录ODL控制器,打开浏览器并输入URL地址:http://127.0.0.1:8181/index.html,使用用户名密码:admin/admin登录ODL控制器的Web页面,查看ODL控制器Web页面显示的拓扑。
image-20230524141501816
可以看到ODL控制器发现了交换机及主机的拓扑。

二、OpenFlow协议解析

步骤1

首先发送HELLO消息,建立初始化连接,协商使用的OpenFlow协议版本。由下图可知,ODL与Mininet之间应用的是OpenFlow1.0版本协议。
image-20230524142635450

步骤2

OpenFlow版本协商完成后,控制器发送一条features_request消息获取交换机的特性信息,包括交换机的ID(DPID)、缓冲区数量、端口及端口属性等等。相应的,交换机回复features_reply消息。
image-20230524142709230
ofpt_feature_reply数据包详情如下,交换机的DPID是数据通道独一无二的标识符。本实验中交换机缓冲区数量(n_buffers)为256,交换机支持的流表数量(n_tables)为254,交换机所支持的功能,如下所示。
image-20230524142759657

步骤3

stats reply消息用于回应stats request信息,主要是交换机回应给控制器的状态信息。
image-20230524143051242

步骤4

当交换机收到数据包后查找流表无匹配项时,将数据包封装在packet_in消息发给控制器,由控制器通过packet_out消息下发决策,使发送和接收数据包的两主机间进行通信。
image-20230524143137013
image-20230524143209447

步骤5

flow mod消息涉及流表项的下发匹配信息,下图显示的是flow mod匹配项的类型信息。
image-20230524143227119

标签:Mininet,1.6,流表,self,控制器,交换机,步骤,数据包
From: https://www.cnblogs.com/ChuenSan/p/17465154.html

相关文章

  • Mininet基本命令
    Mininet基本命令:1.检查Mininet版本mn--version2.清理现有的ovs网桥和命名空间注意:有时我们错误地关闭了mininetshell,或者mininet崩溃了。但拓扑组件将继续存在。要清理这些东西,请使用清理命令。mn-c3.我们的第一个拓扑(单一)具有单个交换机和4个节点的拓扑。......
  • 怎么安装mininet
    怎么安装mininet本次安装环境为ubuntu20.04mininet为github上的最新版git源代码打开Ubuntu中的Terminal(这一步由于网络环境可能会下载失败,这时候可以更换github域名为国内镜像源域名)gitclonegit://github.com/mininet/mininet例如kgithub.com这一镜像源就可以这样输入g......
  • JDK 1.6 与 1.8 中的 ConcurrentHashMap 学习
    ConcurrentHashMap使用segment(继承ReentrantLock)和volatile来保证线程安全性segment的数量为16,每个segment中桶(HashEntry[])的数量可以增加,桶中放的是由HashEntry组成的链表;count表示segment中元素的数量,modCount统计导致结构变化操作的次数(put、remove、replace......
  • 1.6. 数组
    数组是一种数据结构,用于存储相同类型的多个元素。在Java中,数组是一个对象,它具有一定数量的连续内存空间。数组中的每个元素都有一个索引,用于访问和操作元素。1.6.1.数组的声明与初始化在Java中,可以使用以下语法声明一个数组:元素类型[]数组名;要创建一个数组,需要使用 n......
  • OpenOffice4.1.6 linux安装/卸载教程
    以下是centos的安装方法1.先安装并配置好jdk2.拷贝把Apache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz拷贝到自己想要文件路径,例:/home/temp3.解压tarzxvfApache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz解压后会有一个zh-CN文件夹4.安......
  • 查 101.201.62.30 IP信誉方法
    查101.201.62.30IP信誉方法https://www.virustotal.com/#/ip-address/101.201.62.30https://talosintelligence.com/reputation_center/lookup?search=101.201.62.30https://x.threatbook.cn/ip/101.201.62.30......
  • N77007-BJ-DUYIFAN-Week1.6
    用自己的理解总结文件管理,用户管理,组用户,权限管理相关的命令。文件:【touch/rm/rmdir/cat/head/less/more】。用户及组:user/group【useradd/userdel/usermode;groupadd/groupdel/groupmod;chsh/...】。权限【chmod/chown/setfacl】"文件:touch:touch可以和{}合起来用,例......
  • rnacos v0.1.6版本发布
    rnacos是一个用rust重新实现的nacos。rnacos比java实现的nacos更轻量、快速、稳定;合适在开发、测试、受资限服务等环境平替nacos服务使用。rnacosv0.1.6变更内容完成历史配置历史变更记录页面开发。主要包含查询配置历史记录,与历史记录内容恢复两个功能。修复grpc处理日志......
  • Mininet拓扑构建与命令使用
    实验目的1、通过命令模拟创建SDN网络。2、深入了解Mininet的命令使用。3、学会使用网络构建启动参数、内部交互命令及外部运行参数。实验环境Mininet拓扑构建与命令使用实验拓扑如下图所示。设备名称软件环境硬件环境主机Mininet_2.2.0_desktop_cv1.1CPU:1核内......
  • 最简单的canal 1.1.6服务搭建方法
    前言:    因为在项目中集成了ElasticSearch,用于某些业务场景的搜素或筛选。这里关于ElasticSearch就不做介绍了,虽然解决了全文搜索的性能问题。但是当出现一些频繁更新的数据放置在ES就有点麻烦了。    这时候,一款能把MySQL数据即时同步到ElasticSearch的工具就显得......