SDN搭建
作者:互联网
虚拟机:VMWare Workstation Pro
环境:Ubuntu14.04
Python:2.7.6
jdk:1.8.0
一、安装Mininet
Mininet是一个开源的网络仿真器,是一个轻量级软件定义网络和测试平台,支持OpenFlow、OpenvSwitch等各种协议。使用Mininet可以很方便地创建一个支持SDN的网络,用户可以自定义网络拓扑,灵活地为网络添加新的功能并进行相关测试,从而缩短开发测试周期。在Mininet上运行的代码可以轻松移植到支持OpenFlow的硬件设备上。Mininet可以在自己的电脑,或服务器,或虚拟机,或者云(例如Amazon EC2)上运行。Mininet提供python API,简单易用。
1、安装git
1 # 切换到root目录下 2 su root 3 # 安装git 4 cd ~ 5 sudo apt-get update 6 sudo apt-get install git
2、下载Mininet
1 # http不行的话可以换成https或git 2 git clone http://github.com/mininet/mininet.git
3、自定义安装
1 # 进入安装目录下的util文件夹 2 cd ~/mininet/util 3 # 安装支持OpenFlow 1.3版本协议、同时安装Open vswitch 组件 4 ./install.sh -n3v
4、测试
1 # 建立测试拓扑,检测连通性 2 sudo mn --test pingall
5、下载并安装组件
1 wget https://bootstrap.pypa.io/get-pip.py 2 python get-pip.py
版本报错:https://blog.csdn.net/m0_46176760/article/details/118717366?utm_source=app&app_version=4.11.0
二、安装ryu控制器
1、下载ryu
1 cd ~ 2 git clone https://github.com/osrg/ryu.git
2、根据requires安装相关组件
1 cd ~/ryu 2 pip install -r tools/pip-requires
安装某个包时报错:查看pip-requires中相关组件所需版本,采用源码方式连接清华或豆瓣镜像源直接安装
3、开启ryu测试(终端1)
1 cd ~/ryu/ryu/app 2 # 任选simple_switch.py类型文件运行(以13为例) 3 ryu-manager simple_switch_13.py
4、创建mn进行测试(终端2)
1 # 另起一个终端2 2 su root 3 # 创建简单拓扑结构,控制器controller为remote类型 4 mn --controller=remote
PS:左图为创建好的网络拓扑,一个控制器c0,一个sdn交换机s1,两台主机h1、h2,输入quit或exit退出;右图为ryu控制器的监视结果。
三、Mininet创建网络拓扑
mininet创建网络拓扑一共有三种方法:编写python文件、调用miniedit可视化组件、命令行
方法1:调用miniedit可视化组件
1 cd ~/mininet/examples 2 ./miniedit.py
左侧(从上至下)第2个为主机、第3个为sdn交换机、第7个为控制器。点击左侧图标即可在右侧空白处绘制网络拓扑。
点击左上角“Edit”->“preferences”,对网络进行配置。
对绘制好的网络,右键点击图标,在弹窗中点击第二个选项properties进行配置。
1、配置控制器c0
2、配置sdn交换机s1、s2
s1配置 s2配置
DPID:可任意填写16位数字
Switch Type:选择交换机类型为ovsk
3、配置主机h1、h2
h1配置 h2配置
因为最开始Ip Base为10.0.0.0/8,所以主机ip设置在同一网段上。
4、运行测试
点击界面左下角Run即可运行(前提是ryu已打开),终端1(ryu控制器所在终端)出现监听内容。点击左下角Stop,即可停止运行。
点击miniedit界面左上角“File”->“Export Level 2 Script”,将拓扑结构存储为py形式,命名为2sw_2host.py。
方法2:编写python文件
1、以方法1保存的py文件为例,在此基础上进行修改
1 # 进入2sw_2host.py存放目录 2 cd ~/mininet/examples/1 3 vim 2sw_2host.py
文件上半部分 文件下半部分
根据需求通过修改图中ip地址、dpid、port等改变配置,通过修改net.addLink改变连接方式。
1 # 通过python运行修改保存后的py文件 2 python 2sw_2host.py
方法3:命令行创建网络拓扑
1、Mininet创建网络拓扑的常用参数
1 -c 释放之前创建拓扑时占用的未释放的资源 2 -h 查看帮助 3 --topo 在mininet启动时通过命令行定义拓扑 4 --custom 用于创建自定义拓扑 5 --switch 定义要使用的交换机,默认使用ovsk交换机 6 --controller 定义要使用的控制器,如果没有指定则使用mininet中默认的控制器 7 --mac 自动设置设备的mac地址,从而使mac地址更易读
2、Mininet部分命令
1 mininet>help 获取列表 2 mininet>nodes 查看网络拓扑终结点的状态 3 mininet>links 显示链路健壮性信息 4 mininet>net 显示网络拓扑 5 mininet>dump 显示每个节点的接口设置和标识每个节点的进程的PID 6 mininet>pingall 在网络中的所有主机之间执行ping测试 7 mininet>pingpair 只测试前两个主机的连通性 8 mininet>iperf 两个节点之间进行iperftcp带宽测试(iperftcp h1 h2) 9 mininet>iperfudp 两个节点之间进行iperfudp带宽测试(iperfudp bw h1 h2) 10 mininet>link 禁用或启动节点间链路(link s1 s2 up启用link s1 s2 down禁用s1和s2之间的链路) 11 mininet>h1 ping h2 h1和h2节点之间执行ping测试 12 mininet>h1 ifconfig 查看host1的ip等信息 13 mininet>xterm h1 打开host1的终端 14 mininet>exit 退出mininet登录
3、常用命令用法举例
(1)--controller
sudo mn --controller=remote,--ip=[controller IP],--port=[port]
其中ip指的是远程控制器的ip,port指的是监听端口。ip和port可忽略不写,不写默认使用本机ip和6633/6653端口
(2)--mac
自动设置设备的mac地址,从而使mac地址更易读。设置交换机的mac、主机mac及ip地址从小到大排列,在拓扑比较复杂的情况,容易识别机器ID。如果不设置,默认下主机随机分配mac地址,且每次执行mn,mac都会改变,有些调试比较困难。
4、三种拓扑结构
(1)单一(single)拓扑
定义:整个网络拓扑中有且只有一个交换机,交换机可下挂一个或多个主机
举例:创建了一台交换机,交换机下挂3台主机
sudo mn --topo=single,3
(2)线形(linear)拓扑
定义:交换机连接呈线形排列,且每个交换机所连接主机数目只有一个(交换机与主机数相同)
举例:
sudo mn --topo=linear,3
(3)树形(tree)拓扑
定义:交换机连接呈树形排列,且每个交换机下挂的主机一般有多个,类似于数据结构的二叉树。
举例:其中depth指的是交换机的深度,depth=2表示交换机有两层,fanout表示广度/扇出,fanout=3表示每台交换机均下挂3台设备。
sudo mn --topo=tree,depth=2,fanout=3
标签:mininet,--,py,mac,交换机,SDN,ryu,搭建 来源: https://www.cnblogs.com/guojiaxue/p/16503881.html