Mininet学习指南

2023-12-12 01:38
文章标签 学习指南 mininet

本文主要是介绍Mininet学习指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


Mininet creates a realistic virtual network, running real kernel, switch and application code, on a single machine (VM, cloud or native), in seconds, with a single command:
mininet学习指南

Mininet & OpenVSwitch

Mininet在/mininet/node.py中定义了Node、OVSSwitch和Controller等重要的类。在OVSSwitch类中,通过使用命令OVS的命令创建交换机从而得到一个OVS实例。

创建交换机得到OVS实例

Mininet创建的host,switch等实例实际上是运行在不同namespace下的某个进程。默认情况下Host运行在自己的namespace中,交换节点运行在root namespace中。

OpenVSwitch

Open vSwitch is a production quality, multilayer virtual switch licensed under the open source Apache 2.0 license. It is designed to enable massive network automation through programmatic extension, while still supporting standard management interfaces and protocols (e.g. NetFlow, sFlow, IPFIX, RSPAN, CLI, LACP, 802.1ag).

OpenVSwitch

Installation

• Mininet VM Installation(easy, recommended)

http://mininet.org/download/#option-1-mininet-vm-installation-easy-recommended

• Native Installation form Source

http://mininet.org/download/#option-2-native-installation-from-source

http://www.muzixing.com/pages/2014/11/02/openvswitch230-and-mininet-install.html

• Installation form Packages

http://mininet.org/download/#option-3-installation-from-packages

Getting Started
Startup Options
● Help: sudo mn [-h] 通过-h可以查看到帮助信息。
● Connect to remote controller: sudo mn --controller=remote,ip=127.0.0.1,port=6633 端口可以省略,默认值是6633,可指定。
● Topology: sudo mn --topo=

  • tree,n,m 第一个参数为深度,第二个位扇出系数。可以写成--tree,depth=2,fanout=8
  • single, n:单个交换机,n个交换机
  • liner, n: 线性拓扑,n个交换机

● Test:--test [pingall/pingpair..]
● Link:--link=tc, bw=10M, delay=10ms,loss=5%
● Custom Topo:--custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo
● ID=MAC: sudo mn --mac
● Xterm: sudo mn -x 启动xterm到每一个host和switch
● Switch type: sudo mn --switch ovsk/user,
● Clear: sudo mn -c

Command-Line Interface

● Help: help 查看帮助信息
● Exit: exit 退出mininet
● Python: py “hello” / py dir(s1) py hello.py 运行python文件:
● Link: link s1 h1 down/up 参数分别为link两端网元。
● Xterm: xterm s1/h1 xterm到某一个主机或交换机
● Node: nodes 查看节点
● Dump:dump 查看所有节点信息
● 节点命令:

  • s1 ifconfig
  • s1 ps -a
  • h1 arp -s
  • h1 ping -c 10 h2

● Iperf: iperf h1 h2 启用iperf功能
● Ping: h1 ping h2 pingall/pingpair 发送ping消息
● HTTPSERVER : h1 python -m SimpleHTTPServer 80 &
● HTTPCLIENT: h2 wget -O -h1

Custom Topology

Custom Topology

自定义拓扑脚本

完成mininet 搭建脚本,并通过sudo mn --custom /yourtopo.py --topo=mytopo mytopo 是在脚本里定义的一个类型。

自定义拓扑脚本设计

import Topo 类用于派生Mytopo 类;

topo 类中包含构建网络的函数;

● addHost(“host name”): 添加主机
● addSwitch(“sw name”): 添加交换机
● addLink(node,node,port,port): 添加链

● ...

在topos 中添加„mytopo‟, 值为MyTopo() 类;

在启动mininet时将参数配置为本文件即可。

自定义拓扑程序

  1. 将mininet 相关文件import
  2. 利用mininet 的相关接口,创建拓扑
  3. 在python 文件中,创建net 类,并在使用net.start() 函数运行拓扑。
  4. 直接python mytopo.py 运行topo 文件即可运行对应 拓扑。
自定义拓扑程序

import mininet 对应的文件中相关类;
继承Topo 类创建Fattree 类;
● __init__ 函数初始化拓扑
● createTopo 函数创建拓扑
● createLink 函数用于添加链路
● 其他函数...

全局的createTopo 函数用于创建拓扑:

● 创建Fattree 类的对象
● 调用对应函数,创建拓扑
● 创建Mininet 类的对象net 并进行配置
● 调用net.start() 函数启动net 对象。
● 运行CLI(net), 解析命令行

主函数用于调用全局的createTopo 函数。

在topos 中添加„mytopo‟, 值为MyTopo() 类 。

在启动mininet 时将参数配置为本文件即可。

Connect to Internet

Connect to Internet

● NAT
Mininet 中有nat.py 示例,可参考链接。
● Mininet 与外部host 通信
通过将网卡添加到ovs 上,实现数据转发。如果虚拟机与外界为bridge, 则需要设置网卡为nat, 若
虚拟机本身为nat 连接,则可以不进行设置。Intf 的使用方法可参考examples/hwintf.py。
● Mininet host talking to Internet/the NCTUNS hosts
和Mininet 与外部host 通信方案相同,参考链接1、链接2。

Mininet‟s code

Mininet‟s code

bin/mn

Simple use class names as option help。该脚本定义了一个 MininetRunner 类,用来表示模拟网络的主程序。主要过程是创建一个 MininetRunner() 实例,依次解析传入参数,进行初始化后开启网络。整体过程如下图所示:

整体过程如下图所示

Ref:http://yeasy.gitbooks.io/mininet_book/content/runtime_and_example/mn.html

examples

These examples are intended to help you get started using Mininet's Python API.
hwintf.py:
This example shows how to add an interface (for example a real hardware interface) to a network after the network is created.

nat.py:
This example shows how to connect a Mininet network to the Internet using NAT. It also answers the eternal question
"why can't I ping google.com?

mininet/mininet

mininet目录mininet
  • cli.py: 用于定义命令解析
  • link.py:定义了class link
  • log.py:log相关
  • net.py:定义了class net,是mininet的核心类
  • node.py:定义了class node, 是host,sw等类的父类
  • topo.py:定义了class topo,用于创建topo
  • util.py:常用方法定义

mininet/cli

mininet目录cli

cli.py 文件完成了参数解析相关函数定义。当mininet 捕捉到输入的指令时,使用对应的解析函数则可以解析出正确参数并执行函数。

命令类型解析在mn 文件下定义。

mininet/topo

mininet目录topo
mininet目录topo1

class topo中定义的:
• addNode,
• addHost,
• addSwitch,
• addLink,
• addPort
等函数会在自定义拓扑时频繁使用。

topo模块定义简单拓扑:
• SingleSwitchTopo
• SingleSwitchReversedTopo
• LinearTopo

mininet/node

mininet目录node

Mininet‟s extension

Mininet‟s extension

1:在net.py的Mininet类中添加函数/方法,即拓展功能的执行实体。例:iperfMulti功能iperfmulti是随机选取多个S/C对进行打流。函数调用了新定义的iperf_single函数。

注:iperf_single函数细节未展示。

Mininet‟s extension code

2:在cli.py的CLI类中添加对应参数解析函数,用于解析输入参数,并调用mininet类中对应执行实体。

例:iperfMulti功能iperfmulti函数输入参数若为1个,则该参数为带宽,若2个,则第一个为带宽,第二个为打流周期。否则报错。

Mininet类  extension code

3:在bin/mn的TESTS列表和ALTSPELLING字典中添加对应的元素。用于识别CLI的类型。

例:iperfMulti功能在mininet中声明iperfmulti语句是一个命令。且执行的函数名字为do_iperfmulti函数。

extension用于识别CLI类型

注:在解析名字时,名字对应的就是CLI中do_functionname函数。

4:重新安装mininet:进入mininet/util目录,输入一下命令重新编译安装mininet code。

例:iperfmulti安装完成之后,启动mininet,可以使用新定义的命令,如:mininet> iperfmulti 10M,20命令含义为在所有的主机中随机选择C/S对进行打流,打流速率为10Mbits/s,打流时长为20s。

extension重新编译安装mininet code

简单示例:

print命令的添加在mininet中输入print命令,可打印对应信息。若print之后无参数,则打印默认信息”talk is cheap,show me your code”, 若携带参数,则直接打印参数,如”No, a coder need to learn speaking skill.”

extension简单示例 print命令的添加

Mininet & Sflow

Sflow是一个网络流量监控软件。

mininet&SFlow

具体使用可参考SDNLAB上的链接1、链接2。

参考links

http://mininet.org/

http://mininet.org/api/annotated.html

https://github.com/mininet/mininet/wiki/Introduction-to-Mininet

http://www.sdnlab.com/?searchType=playlist&s=mininet&x=0&y=0

http://www.muzixing.com/pages/2015/02/22/fattree-topo-and-iperfmulti-function-in-mininet.html

http://www.muzixing.com/search.html?q=mininet

http://man7.org/linux/man-pages/man7/namespaces.7.html

http://yeasy.gitbooks.io/mininet_book/content/runtime_and_example/mn.html

http://csie.nqu.edu.tw/smallko/sdn/sdn.htm

https://mailman.stanford.edu/mailman/listinfo/mininet-discuss

http://archive.openflow.org/wk/index.php/OpenFlow_Tutorial

http://sdnhub.cn/index.php/category/mininet/mininet-introduction/

http://www.ibm.com/developerworks/cn/cloud/library/1404_luojun_sdnmininet/index.html

http://www.sflow.org/

http://openvswitch.org/

另附其文章呈现的PPT可能更好理解,欢迎大家一起交流!

  • 本文来自 SDNLAB
  • 本文链接http://www.sdnlab.com/11495.html

其他相关链接:http://segmentfault.com/a/1190000000669218



这篇关于Mininet学习指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/482798

相关文章

AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理

AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应对这些挑战,动量法应运而生。本文将详细介绍动量法的原理,包括动量的概念、指数加权移动平均、参数更新等内容,最后通过实际示例展示动量如何帮助SGD在参数更新过程中平稳地前进。

【linux学习指南】Linux编译器 gcc和g++使用

文章目录 📝前言🌠 gcc如何完成🌉预处理(进行宏替换) 🌠编译(生成汇编)🌉汇编(生成机器可识别代码) 🌠链接(生成可执行文件或库文件)🌉函数库 🌠gcc选项🚩总结 📝前言 预处理(进行宏替换)编译(生成汇编)汇编(生成机器可识别代码)连接(生成可执行文件或库文件) 🌠 gcc如何完成 格式 :gcc [选项] 要编译的文件 [选项] [目标文

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随

Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装一、calico

七、Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装 一、calico Calico是一个开源的虚拟化网络方案,支持基础的Pod网络通信和网络策略功能。 官方文档:Quickstart for Calico on Kubernetes | Calico Documentation 1、calico安装 ### 在Master控制节点执行

阅读笔记-JavaScript学习指南

文章目录 读书笔记前言工作四原则推荐论坛目标读者推荐 第一个应用JQuery绘制图元H5常见图形库推荐常用H5 canvas:PaperJS试用绘制绿色圆多个圆情况用户输入文本文字 常用开发工具版本控制 字面量、数据类型、命名法命名法正则函数的引用调用函数重载默认参数函数作为对象属性this绑定问题调用、请求、绑定call绑定apply方法与call的比较 bind方法 函数、闭包和

React-学习指南

React 目录: 文章目录 前言推荐阅读整个部分 搭建本地环境1. 安装`Node.JS`2. 创建一个新的React项目React工具链的作用不使用工具链推荐的工具链Create React AppNext.jsGatsby更灵活的工具链 从头开始打造工具链 3. 删除新项目中的`src`所有文件4. 运行 `CDN`链接核心概念1. 入门2. `JSX`变量声明在`JSX`嵌入表达式

AI学习指南深度学习篇-SGD的变种算法

AI学习指南深度学习篇 - SGD的变种算法 深度学习是人工智能领域中最为重要的一个分支,而在深度学习的训练过程中,优化算法起着至关重要的作用。随机梯度下降(SGD,Stochastic Gradient Descent)是最基本的优化算法之一。然而,纯SGD在训练深度神经网络时可能会面临收敛速度慢和陷入局部最优的问题。因此,许多变种SGD算法应运而生,极大地提高了模型的训练效率和效果。 本文

Kubernetes学习指南:保姆级实操手册05——配置集群HA负载均衡

五、Kubernetes学习指南:保姆级实操手册05——配置集群HA负载均衡 简介: Keepalived 提供 VRRP 实现,并允许您配置 Linux 机器使负载均衡,预防单点故障。HAProxy 提供可靠、高性能的负载均衡,能与 Keepalived 完美配合 1、配置Keepalive 官方文档提供了两种运行方式(此案例使用选项1): 选项1:在操作系统上运行服务选项2:将服务作为

AI学习指南深度学习篇-随机梯度下降法(Stochastic Gradient Descent,SGD)简介

AI学习指南深度学习篇-随机梯度下降法(Stochastic Gradient Descent,SGD)简介 在深度学习领域,优化算法是至关重要的一部分。其中,随机梯度下降法(Stochastic Gradient Descent,SGD)是最为常用且有效的优化算法之一。本篇将介绍SGD的背景和在深度学习中的重要性,解释SGD相对于传统梯度下降法的优势和适用场景,并提供详细的示例说明。 1.

《ARM Cortex-R 学习指南》-【第十七章】-调试

快速链接: . 👉👉👉 ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 付费专栏-付费课程 【购买须知】 个人博客笔记导读目录(全部) 第十七章 调试 调试是软件开发中的关键部分,通常被认为是最耗时(因此也最昂贵)的一部分。错误可能难以检测、重现和修复,并且很难预测解决缺陷所需的时间。当产品交付给客户时,解决问题的成本显著增加。在许多情况下,当产品的