- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是OpenFlow和SDN的新手。我需要在Ubuntu或Debian机器上设置Ryu OpenFlow控制器的帮助,并且了解基本的Ryu应用程序。
注意:这个问题已经有答案。
最佳答案
这可能是我在Stack Overflow上写的最长的文章之一。我一直在学习有关OpenFlow,SDN和Ryu的知识,并希望在这里为初学者记录我的知识。如果需要,请更正/编辑我的帖子。
本简短指南假定您已经了解计算机网络和主要的网络协议。本指南将帮助您从系统设置程序开始使用OpenFlow。
1.什么是OpenFlow和SDN?
请阅读SDN / OpenFlow | Flowgrammable。
进一步阅读:The Future of Networking, and the Past of Protocols by Scott Shenker and Software-defined Networking, IEEE INFOCOM 2009。
在你开始之前:
基础设施层包括网络核心内的路由器和交换机。
控制层包括运行OpenFlow控制器以及其本身的PC。
应用程序层包括在该控制器之上运行的应用程序。在Ryu中,这些应用程序是用Python编写的。
OpenFlow是一种协议,基础结构和控制层使用该协议进行交互。 OpenFlow本身不提供API。它是一种开放源代码协议,供开发支持OpenFlow的交换机的供应商以及编写控制器的开发人员(如Ryu)使用。 API由控制器提供。
2.在Debian 8上设置Ryu OpenFlow控制器
先决条件
您需要上网。如果您在虚拟机中运行Debian,请发出以下命令以通过NAT自动配置以太网接口:
su
dhclient eth0
su
apt-get install sudo # you might need to do apt-get update first!
nano /etc/sudoers
yourusername ALL=(ALL:ALL) ALL
exit
cd /media/cdrom
mkdir ~/VBOXGUEST
cp * ~/VBOXGUEST
cd ~/VBOXGUEST
chmod 755 *
sudo ./VBoxLinuxAdditions.run
sudo shutdown -r now
sudo apt-get install git
cd ~ # if you are in some other directory
git clone git://github.com/mininet/mininet
cd mininet
git tag # this will list available versions
git checkout -b 2.2.1 2.2.1 # replace 2.2.1 with the version you wish to install
cd ..
mininet/util/install.sh -a # default installation, includes all components, recommended
mininet/util/install.sh -h
sudo mn --test pingall
cd ~
git clone git://github.com/osrg/ryu.git
sudo apt-get install wireshark
cd ~/ryu
sudo apt-get install python-dev python-pip python-setuptools
sudo pip install .
sudo pip install webob
sudo pip install eventlet
sudo pip install paramiko
sudo pip install routes
sudo mn --topo single,3 --mac --switch ovsk --controller remote
cd ~/ryu
PYTHONPATH=. ./bin/ryu-manager ryu/app/simple_switch_13.py
cd ~
sudo mn --topo single,3 --mac --switch ovsk --controller remote
cd ~/ryu
PYTHONPATH=. ./bin/ryu-manager ryu/app/simple_switch_13.py
mininet> xterm h1 h2 h3
tcpdump -XX -n -i h2-eth0
tcpdump -XX -n -i h3-eth0
h1: 10.0.0.1
h2: 10.0.0.2
h3: 10.0.0.3
ping 10.0.0.2
ping 10.0.0.3
ping 10.0.0.7
ab:cd:ef:12:34:56
(以十六进制表示)。仅通过端口号识别端口。例如,具有4个端口的交换机具有端口1、2、3和4。
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER
from ryu.controller.handler import set_ev_cls
class L2Switch(app_manager.RyuApp):
def __init__(self, *args, **kwargs):
super(L2Switch, self).__init__(*args, **kwargs)
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def packet_in_handler(self, ev):
msg = ev.msg
dp = msg.datapath
ofp = dp.ofproto
ofp_parser = dp.ofproto_parser
actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
out = ofp_parser.OFPPacketOut(
datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
actions=actions)
dp.send_msg(out)
from ryu.base import app_manager
class L2Switch(app_manager.RyuApp):
def __init__(self, *args, **kwargs):
super(L2Switch, self).__init__(*args, **kwargs)
ryu.base.app_manager.RyuApp
import(在第一行中导入)。在Ryu API手册中,
app_manager
类是Ryu应用程序的中央管理。它加载Ryu应用程序,为其提供上下文并在Ryu应用程序之间路由消息。
packet_in_handler
添加到
L2Switch
类。当Ryu收到OpenFlow
packet_in
消息时调用此方法。当Ryu收到
packet_in
消息时,将引发
ofp_event.EventOFPPacketIn
事件。
set_ev_cls
装饰器告诉Ryu何时应调用相关函数
packet_in_handler
。
set_ev_cls
装饰器的第一个参数表示使函数调用的事件。如您所料,每次引发
ofp_event.EventOFPPacketIn
事件时,都会调用此函数。
packet_in
消息。使用
MAIN_DISPATCHER
作为第二个参数表示仅在协商完成后才调用此函数。
MAIN_DISPATCHER
表示开关的正常状态。在初始化阶段,开关处于
HANDSHAKE_DISPATCHER
状态!
msg = ev.msg
dp = msg.datapath
ofp = dp.ofproto
ofp_parser = dp.ofproto_parser
ev.msg
是包含接收到的数据包的数据结构。
msg.dp
是该数据结构内的一个对象,代表一个数据路径(开关)。
dp.ofproto
和
dp.ofproto_parser
是代表Ryu和交换机协商的OpenFlow协议的对象。
actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
out = ofp_parser.OFPPacketOut(
datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
actions=actions)
dp.send_msg(out)
OFPActionOutput
类与
packet_out
消息一起使用,以指定要从中发送数据包的交换机端口。由于在此简化的应用程序中没有转发数据库,因此我们将数据包泛洪到所有端口,因此使用常量
OFPP_FLOOD
。
OFPPacketOut
类用于构建
packet_out
消息。
datapath
类的
send_msg
方法,可以将OpenFlow消息对象发送到action变量中定义的端口。在这种情况下,我将重复进行操作,以使目标包括所有端口。
EventOFPPacketIn
消息时引发
packet_in
)。前面我们讨论了OpenFlow是一种协议,控制器(Ryu,PC)和基础结构(或交换机)使用该协议进行通信。像
packet_in
这样的消息正是使用OpenFlow协议实现两者之间的通信的样子!
关于ubuntu - 了解Ryu OpenFlow Controller,mininet,WireShark和tcpdump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998065/
我正在尝试深入研究这些新概念,SDN 和 OpenFlow。我不清楚的一件事是,传统路由(OSPF、BGP 等)在 SDN 中是如何完成的,还是完全消失并取而代之的是一些轻量级机制? 我将不胜感激任何
每当我添加 openflow 库并执行时,都会发生此错误 Undefined symbols: "_CATransform3DIdentity", referenced from: _
我正在尝试在我的项目中实现 openFlow,但我似乎无法让图像显示在我的 uiview 上。我不清楚的是,一旦我有了图像链接字典,我如何告诉 AFOpenView 我想使用该字典对象作为我的数据源?
我想模拟 OpenFlow 以检查其在特定框架中的性能和效率。如何在不使用实际启用开放流的交换机的情况下做到这一点? 最佳答案 您可以使用 Mininet,它是一个使用 openVSwitch 的开放
在 OpenFlow 协议(protocol)中,我们有一个流表(或多个流表)。交换机中的每个流表都包含一组流表项。每个流条目包含报头字段、计数器和一组要应用的指令或操作。指令就像“将这个 Actio
我拼命尝试更改 OpenFlow 实例上的图像,但没有成功。 我有点放弃,所以我现在正在尝试删除实例并创建一个新实例。但我无法避免应用程序崩溃。 创建它的代码是: AFOpenFlowView *of
长话短说,我有一个项目,要求我在 python 中从头开始创建一个 Controller ,并处理来自遵循开放流协议(protocol)的 mininet 拓扑创建的交换机的请求。 有用的开放流协议(
2006年,美国斯坦福大学启动了一个名叫Clean Slate的研究课题。 该课题由美国GENI项目资助,目的非常明确且宏大,就是——“重塑互联网”。 ▲ Global Environmen
当我在阅读 Beacon 的一些源代码时,我被 OPAction_OUTPUT 弄糊涂了。 . spec1.3 说 Required Action: Output. The Output action
Openflow/SDN 网络使远程 Controller 能够管理网络设备的行为,即配置。它们可以转发指令集以动态更改网络配置。但是在您的 SDN Controller 应用程序中总是存在一些错误和
我正在使用 mininet 作为 openflow 网络模拟器。在我的实验中,我想关闭代码中两个交换机之间的链接,稍后在 mininet 控制台中打开它。 这是我做的: net.addLink( s2
我是OpenFlow和SDN的新手。我需要在Ubuntu或Debian机器上设置Ryu OpenFlow控制器的帮助,并且了解基本的Ryu应用程序。 注意:这个问题已经有答案。 最佳答案 这可能是我在
如果我正在设置一个通过OpenFlow控制的交换设备,使用的条件是什么? ovs-dpctl 与 相比ovs-vsctl ? 的手册页ovs-dpctl 说使用 ovs-vsctl 如果 ovs-vs
我正在尝试在 VirtualBox VM 中的 Fedora 22 上构建 ns-3.24.1。我在运行: ./waf configure --enable-examples --enable-tes
我希望使用 Python-RYU Controller 为 OpenFlow 交换机创建匹配规则。该规则应匹配任何非 tcp 数据包(ip 协议(protocol) 6)。 据我所知,tcp连接的匹配
这个问题之前已经被问过,我已经尝试了答案中给出的所有内容,但仍然收到相同的警告。我在此 link 中使用代码(lab4.py 和 lab4_controller.py)。我正在 /mininet/ex
我是一名优秀的程序员,十分优秀!