这可能不是典型的stackoverflow问题.
我的一位同事一直在猜测基于流的路由将成为网络中的下一个重点. Openflow提供了在大型应用,IT数据中心等中使用低成本交换机的技术; 取代思科,惠普等交换机和路由器.理论上,您可以使用简单的配置创建这些openflow交换机的层次结构,例如.没有生成树.开放流将仅使用交换机层次结构(无路由器)的知识将每个流路由到适当的交换机/交换机端口.该解决方案旨在为企业节省资金并简化网络.
问:他猜测这可能会极大地改变企业网络.出于多种原因,我持怀疑态度.我想听听你的想法.
我正在尝试深入研究这些新概念,即SDN和OpenFlow.我不清楚的一件事是传统路由(OSPF,BGP等)如何在SDN中完成,或者它完全消失了,取而代之的是一些轻量级机制?
我会很感激任何提示,链接,以便更好地理解这一点.谢谢!
标记
我想获得有关可用的最佳开源SDN控制器的建议.我想实现并测试我在研究中的一些想法,所以我需要使用如下的模拟Mininet.事实上,我熟悉mininet并且能够处理它.但是,Mininet使用的POX控制器有点繁琐且用户不太友好,因此在管理网络拓扑和修改流程时,由于您需要从头开始硬编码所有内容(我是初学者),因此这将成为一项艰巨的任务.在Python中也是如此).是否有一个用户友好的SDN控制器,我可以使用而不是POX?我已经尝试了Floodlight,Opendaylight但是还没有真正准备好并涉及许多错误.
谢谢.
我是OpenFlow和SDN的新手.我需要帮助在Ubuntu或Debian机器上设置Ryu OpenFlow控制器并理解基本的Ryu应用程序.
注意:这个问题已经有了答案.
我有一个类似于下图所示的网络。
这是网络的 python 代码:
net.addLink(s1, s2)
net.addLink(s2, s3)
net.addLink(s3, s4)
net.addLink(s4, s1)
net.addLink(s1, h1)
net.addLink(s3, h2)
Run Code Online (Sandbox Code Playgroud)
我将如何查找流表并将其添加到网络中?
例如下面是流表条目之一。如何确定 in_port 为 1,output 确定为 3?
ovs-ofctl add-flow s1 in_port=1,actions=output:3
Run Code Online (Sandbox Code Playgroud)
我无法理解端口号是如何确定的。
我正在尝试使用POX控制器来控制流的路径。我知道Open vSwitch将选择优先级最高的转发规则。但是,如果我为具有相同优先级的现有流插入新的转发规则,将会发生什么。Open vSwitch是否会随机选择一个匹配的规则?
如果我要设置一个通过OpenFlow控制的开关设备,使用ovs-dpctl与ovs-vsctl的条件是什么?对于该名男子页OVS-dpctl说,使用OVS-vsctl如果OVS-vswitchd使用.
那么在什么情况下你会使用ovs-dpctl?你不能做什么呢?
一个后续问题是OF"数据路径"值的来源.这将是OF控制器用于识别OF开关的OF规范中的64位数字.是自动计算此值还是必须输入?
感谢您的帮助.
class l3_switch在l3_learning.py中, named中有一个方法_handle_PacketIn。现在我明白,此事件是当交换机收到与表中没有对应条目的数据包时联系控制器时的事件。
我不明白的是这里
packet = event.parsed
Run Code Online (Sandbox Code Playgroud)
现在 是什么packet.next意思isinstance(packet.next, ipv4)?
def _handle_PacketIn (self, event):
dpid = event.connection.dpid
inport = event.port
packet = event.parsed
if not packet.parsed:
log.warning("%i %i ignoring unparsed packet", dpid, inport)
return
if dpid not in self.arpTable:
# New switch -- create an empty table
self.arpTable[dpid] = {}
for fake in self.fakeways:
self.arpTable[dpid][IPAddr(fake)] = Entry(of.OFPP_NONE,
dpid_to_mac(dpid))
if packet.type == ethernet.LLDP_TYPE:
# Ignore LLDP packets
return
if isinstance(packet.next, ipv4):
log.debug("%i %i IP …Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 POX 控制器向交换机添加流条目,我的代码是:
fm = of.ofp_flow_mod()
fm.match.in_port = 1
fm.priority = 33001
fm.match.dl_type = 0x800
fm.match.nw_src = IPAddr("10.0.0.1")
fm.match.nw_dst = IPAddr("10.0.0.5")
fm.actions.append(of.ofp_action_output( port = 2 ) )
event.connection.send( fm )
Run Code Online (Sandbox Code Playgroud)
但是,当我从 10.0.0.1 ping 到 10.0.0.5 时,没有回复。可能是什么问题?(我还为 ICMP 回复添加了对称流)
谢谢
我有一个问题:使用新的libs(loom,ofs_handler,of_driver)我需要发送设置消息给switch.我必须创建这样的记录:
-record(ofp_field, {
class = openflow_basic :: ofp_field_class(),
name :: ofp_field_type(),
has_mask = false :: boolean(),
value :: bitstring(),
mask :: bitstring()
}).
Run Code Online (Sandbox Code Playgroud)
但'value'必须是一个位串,我不知道如何正确地将端口号(例如8080,6633)转换为位串,因为我可以<<Port>>, <<Port:32/integer>>得到不同的结果.有没有人知道如何使它正确?
或者我必须使用binary:encode_unsigned?
openflow ×10
mininet ×4
pox ×3
sdn ×3
networking ×2
openvswitch ×2
arp ×1
controller ×1
debian ×1
erlang ×1
icmp ×1
integer ×1
python ×1
ryu ×1
ubuntu ×1