SDN开发环境搭建之ryu+ovs+mininet

本文详细介绍了搭建软件定义网络(SDN)开发环境的过程,包括安装配置OVS、Mininet及RYU控制器等关键组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先简单解释本文的几个名词

第一个SDN,就是软件定义的网络,通过控制层与数据转发层分析,实现可编程的网络

ryu,这个是日本人写的一个sdn控制器,这个翻译是龙的意思,大概和网络流量flow管理有某种关系

ovs是一个软交换机,支持openflow协议

mininet是一个网络模拟器,屌丝玩SDN没有那么多机器,那么mininet是个很好的模拟器,功能很强大

ok

下面开始环境搭建

1.ovs安装

如果ubuntu直接apt-get install安装即可

centos如如果想安装最新版,源码安装是个好办法

	# 编译openvswitch源码
	yum install -y openssl-devel rpm-build
	wget http://openvswitch.org/releases/openvswitch-2.5.0.tar.gz
	mkdir -p ~/rpmbuild/SOURCES
	cp openvswitch-2.5.0.tar.gz ~/rpmbuild/SOURCES/
	tar xzf openvswitch-2.5.0.tar.gz
	rpmbuild -bb --without check openvswitch-2.5.0/rhel/openvswitch.spec
	# 安装生成的软件包
	yum localinstall -y rpmbuild/RPMS/x86_64/openvswitch-2.5.0-1.x86_64.rpm
	/etc/init.d/openvswitch start

2.mininet安装

sudo apt-get install mininet

3.安装ryu,

你可以通过pip install直接安装ryu  (pip install  ryu)

也可以通过源码安装,python setup.py install


当一切都安装好了之后调试环境

启动mn

sudo mn --controller remote,ip=192.168.56.102,port=6633
启动mn创建默认拓扑,并把sdn控制器指向自己ryu,这里我们测试OpenFlow13

设置openflow协议,默认是openflow11,我们用现在最流行的13

sudo ovs-vsctl set Bridge s1 protocols=OpenFlow13


最后启动我们的app,如下图所示:

 sudo ryu-manager --verbose simple_switch_13.py 



此时,交换机上面还没有任何流表

 sudo ovs-ofctl -O Openflow13 dump-flows s1

但当我们在网络中发包以后sdn控制器就开始下发流表了

如下图所示:

此时流表如下所示:


这个流表的内容很简单,就不赘述,再看一下app里面记录的日志


从日志可以看出,交换机第一次不知如何操作的时候就发送packet-in询问ryu控制器。至此sdn的开发环境搭建完成。




### 如何搭建SDN应用开发环境 为了搭建一个完整的SDN(软件定义网络)应用开发环境,可以从以下几个方面入手: #### 1. 使用Docker简化环境配置 通过使用容器技术Docker,可以快速创建一个标准化的开发环境。这种方式能够有效解决因操作系统差异、内核版本不同而导致的兼容性问题[^1]。具体操作如下: - 安装Docker引擎到本地机器上。 - 下载已有的Ryu控制器镜像或者自行构建一个新的镜像文件。 - 将该镜像部署至目标主机并通过运行命令启动服务。 ```bash docker pull osrg/ryu docker run -it --name my_ryu_container -p 6633:6633 osrg/ryu ryu-manager /usr/local/bin/ryu.app.ofctl_rest ``` 上述脚本展示了如何拉取官方提供的RYU项目最新稳定版镜像,并将其映射端口绑定后执行REST API接口监听进程。 #### 2. 配置Git仓库访问权限调整 如果遇到无法克隆远程存储库的情况,则可能是因为默认协议被禁用了所致。此时可以通过修改全局设置来替换原有的URL前缀从而支持HTTPS方式连接GitHub资源[^3]: ```bash git config --global url."https://".insteadOf git:// ``` 此更改允许开发者继续沿用旧式的`git:`形式地址而无需手动转换成新的安全传输模式下的表述方法。 #### 3. Open vSwitch中的队列管理机制 对于更复杂的场景需求而言,在虚拟交换机内部实施精细化流控策略显得尤为重要。Open vSwitch内置的支持QoS功能模块正好满足这一诉求——它借助于分层令牌桶算法(HTB)实现了对进出数据包速率的有效控制[^4]。下面给出一段简单的Python代码片段用于演示如何动态设定特定端口上的出口限速规则: ```python import ovs.vsctl as vsctl from ovs.db.idl import Idl, SchemaHelper def set_queue_limit(port_name, max_rate_kb): conn = "unix:/var/run/openvswitch/db.sock" helper = SchemaHelper("/usr/share/openvswitch/vswitch.ovsschema") idl = Idl(conn, helper) with idl.transaction() as txn: port_row = txn.find('Port', 'name == "{}"'.format(port_name)) queues = [{'max-rate': str(max_rate_kb * 1024)}] qid = len(port_row.qos.other_config.get('queues', [])) + 1 queue_str = '{}={}'.format(qid, ','.join(['{}@{}'.format(k,v) for k,v in enumerate(queues)])) qos_uuid = txn.insert('QoS') qos_uuid.type='linux-htb' qos_uuid.other_config['default']=str(qid) qos_uuid.other_config['queues']=[queue_str] port_row.qos=qos_uuid.uuid return True ``` 以上函数接受两个参数:一是待处理物理或逻辑网卡名称;二是期望达到的最大吞吐量数值单位千字节每秒(KiB/s)[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳清风09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值