当前位置:网站首页 > 技术博客 > 正文

mininet创建拓扑



此实验基于《软件定义网络实验1-5》,主要内容为:

  • MiniNet常用命令
  • 如何创建网络拓扑
  • OpenFlow流表操作

SDN 环境配置:Mininet + Ryu

1. 测试环境是否搭建成功

启动Ryu,进入 ,启动一个交换机案例app:

 
   

启动Mininet, 是创建最简单的默认拓扑, 默认是 Mininet 自带的控制器,这里指定为 远端控制器,即 Ryu。

 
   

可以看到 Ryu 检测到网络的运行了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gWnCFJYZ-1641200088189)(https://secure1.wostatic.cn/static/kVh7tZBkiaueFTfMt1hjTs/image.png)]

2. 启动 Mininet 可视化界面 MiniEdit

2.2.0以后版本的mininet支持可视化,在 目录下提供 脚本,切换到相应目录下,在终端中执行:

 
   

或者这样也能执行:

 
   

即打开了 MiniEdit 可视化界面,左边从上到下分别是主机、OpenvSwitch 交换机、传统交换机、传统路由器、链路、控制器。点击后在屏幕上点击可将设备放置到界面中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l9v88XmK-1641200088191)(https://secure1.wostatic.cn/static/tT9GJLzNmo2SNHVvxLysYE/image.png)]

1. Mininet 常用命令

MIninet 2.3

以上文档中更详细。

创建网络拓扑常用参数:

 
   

自动设置设备的MAC地址,MAC地址与IP地址的最后一个字节相同,从而使MAC地址更易读。设置交换机的MAC、主机MAC及IP地址从小到大排列,在拓扑比较复杂的情况,容易识别机器ID。如果不设置,默认下主机随机分配MAC地址,且每次执行mn,,MAC都会改变,有些调试比较困难。

Mininet 内部交互常用命令:

 
   

举例:ip 和 port 可不写,默认本机 ip 和 6633或6653

 
   

2. 命令实操演示

打开某个 Ryu:

 
   

在 Mininet 中执行一个创建好的Python脚本,或者启动Mininet时创建:

 
   

查看连通性:

 
   

查看网络拓扑:

 
   

禁用 s2 和 h1 之间的链路。

连接 s2 和 h1 之间的链路。

查看健壮性

 
   

查看节点接口设置和节点 PID

 
   

进行网络带宽测试,例如h1和h2:

 
   

查看帮助,显示所有可以执行的命令。

 
   

退出Mininet。

3. Mininet 创建网络拓扑的常见方式

通过命令行创建
  1. 单一(single)拓扑

    整个网络拓扑中有且只有一个交换机,交换机可下挂一个或多个主机

    举例:表示创建了一台交换机交换机下挂3台主机

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ECGfzFND-1641200088192)(https://secure1.wostatic.cn/static/rzvNiMdZGZ4V27MX3Y4MYN/image.png)]

  2. 线形(linear)拓扑

    交换机连接呈线形排列,且每个交换机所连接主机数目只有一个(交换机与主机数相同)

    举例:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IQfm8G5u-1641200088193)(https://secure1.wostatic.cn/static/dBbNe7W77P6KTx9GiHzD1D/image.png)]

  3. 树形(tree)拓扑

    交换机连接呈树形排列,且每个交换机下挂的主机一般有多个,类似于数据结构的二叉树。其中depth指的是交换机的深度,表示交换机有两层,fanout表示广度/扇出, 表示每台交换机均下挂3台设备。

    举例:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DmrcmSHA-1641200088193)(https://secure1.wostatic.cn/static/c9185V7zbdyzUcpyupaNxh/image.png)]

  4. 自定义拓扑

    即用 Python 命令创建,后面讲脚本时候再讲。

通过可视化界面 MiniEdit 创建

打开 MiniEdit 可视化界面,自行点击图标搭建网络拓扑,然后进行配置。

左上角 ,网段可根据需要自己设置(之后主机IP需要根据网段配置),钩上 Start CLI 开启命令行修改拓扑,OpenFLow 可勾选 1.0 和 1.3。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FsBpM7tb-1641200088194)(https://secure1.wostatic.cn/static/uupPLDM75sDHqAvZK6Ryqe/image.png)]

然后修改节点配置,控制器上 ,控制类型 改为远端控制器 Remote,IP为远程控制器的IP(这里就是本机IP)。交换机上设置一下16位 DPID(如0000000000000001),类型为 OpenvSwith 内核模式。主机设置网段和 IP Base 相同。回到命令行可以看到所有配置在命令行都有反馈。

运行网络拓扑之前先去开启Ryu控制器。

然后回到 MiniEdit,点左下角的 Run,即可在命令行看到启动情况。

回到 MiniEdit 停止运行,左上角 保存为 的Python文件到 example 目录,回到命令行在 example 目录下就能看到保存的文件了。后期修改网络拓扑也可以直接修改这个 Python 文件。

通过 Python 脚本创建

打开上一步保存的文件,可看到文件构成:

 
   

接下来增加一台主机h4,将h4和s2进行连接,即对应位置增加两行代码(上面注释掉了):

 
   

1. OpenFlow协议工作原理

h1想和h2通信,先给s1,s1流表中没有inport=2的流表项,就发送packin消息给控制器,控制器收到后下发packout消息给s1,s1根据收到的流表转发数据包给s2,s2流表中也没有匹配项,也需要发packin给控制器,控制器下发packout,s2进行转发给h2.

h2收到消息后想给h1发送数据包,先给s2,s2也没有inport=2的流表项,联系控制器packin-packout,s2再转发给s1,s1已经有了inport=2的流表项,直接转发给h1。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-de61kIsh-1641200088194)(https://secure1.wostatic.cn/static/4kaB3iWH1WGqY1MyrMfKdj/image.png)]

2. OpenFlow 流表常用配置命令

 
   

3. 命令实操

打开ryu控制器和mininet,以和之前自建的为例。

 
   

拓扑图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M2PiGk2d-1641200088195)(https://secure1.wostatic.cn/static/muyk9gEzTp5v3FPUQbbryT/image.png)]

输入查看流表项:

 
   

可见s1和s2中都还没有流表项。

执行一下后再查看流表项,就能看到s1和s2都生成了很多流表项,以s1部分流表项为例:

 
   

第一条流表中,表示从s1的1号端口进,表示从s1的2号端口出的转发动作,,分别为原MAC地址和目的MAC地址。

执行即可删除所有流表。


执行手动添加流表

再查询流表可以看到s1和s2都生成了1号端口进2号端口出的流表:

 
    

再添加一条从2号端口进1号端口出的流表:

执行,即可ping通,ctrl+c退出ping。

再执行,无法ping通,原因是没有s2的3号端口转发的流表。s2根据流表只能1号端口进转发给2号端口出,3号端口连接的h3无法收到数据包。


删除交换机s1中从2号端口进的所有流表,再查看流表可以看到被删除。

删除所有交换机中输入端口为1的流表项

删除所有交换机中输入端口为2的流表项

再查看流表可见s1和s2中都没有流表项。


添加丢弃从2号端口进的数据包的流表项:

再执行,发现只有h3和h4之间是互通的。原因是2号端口进的数据包都匹配到流表项需要丢弃,h3从3号端口进的和h4从4号端口进的没有流表项匹配,就向控制器申请下发流表。

 
      

再查询流表可以看到s2中新增了关于3号4号端口的流表项。

如果这里把2号3号端口进的都丢弃,那么虽然4号进的会下发流表发出数据包,但是2号3号端口不会回应,所以都不能通。


删除所有流表后,即让控制器下发所有端口的流表项。然后再手动添加丢弃2号和3号端口的流表项,再执行,会发现所有通信仍是正常的。

原因是此时手动添加的流表项和控制器下发的流表项共存,而控制器下发的流表项优先级更高,所以会执行控制器下发的流表项。

版权声明


相关文章:

  • oracle数据库impdp导入2025-09-28 18:01:02
  • gpu驱动程序怎么更新2025-09-28 18:01:02
  • 对比工具(文本差异对比)2025-09-28 18:01:02
  • 公式编辑器破解版网盘2025-09-28 18:01:02
  • getopt python2025-09-28 18:01:02
  • 乐高ev3编程软件教师版2025-09-28 18:01:02
  • 灰度发布和灰度测试2025-09-28 18:01:02
  • 无线网子网掩码怎么填2025-09-28 18:01:02
  • c语言中bzero啥意思2025-09-28 18:01:02
  • 计算机网络设备的组成2025-09-28 18:01:02