ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SDN搭建

2022-07-25 11:03:37  阅读:218  来源: 互联网

标签:mininet -- py mac 交换机 SDN ryu 搭建


虚拟机: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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有