其他分享
首页 > 其他分享> > SDN搭建

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