1

我尝试在使用带内连接时测量控制流对 Open vSwitch 性能的影响。

所以在这个任务中,我需要计算从控制器发送到网络中使用带内控制的每个交换机的消息。

我试图了解控制器如何在使用带内连接时将流安装到 Open vSwitch。我使用 mininet 和这篇文章创建了一个示例拓扑:http: //tocai.dia.uniroma3.it/compunet-wiki/index.php/In-band_control_with_Open_vSwitch

拓扑包含 5 个交换机一个接一个连接(如文章的第一张图片所示)。

控制器在h3主机上启动。在我的例子中,使用了 POX 控制器。一切都可以ping通。

因此,当我尝试嗅探 s1 ... s5 接口上的流量时,我看到 OpenFlow 消息(PacketIn、PacketOut 等)仅出现在s3接口上。在其他接口上,我看不到任何 TCP 或 OpenFlow 数据包。

问题是控制器如何在 s1、s2、s4、s5 交换机上安装新流?以及如何将控制器消息传递到未直接连接到控制器的交换机?

谢谢。

4

1 回答 1

0

看看 OVS文档就知道了!OpenVSwitch 设计文档中有一节详细描述了这一点:

Open vSwitch 中的设计决策:

实施小节说:

Open vSwitch 将带内控制实现为“隐藏”流,即通过 OpenFlow 不可见的流,并且可以通过 OpenFlow 设置比通配流更高的优先级。这样做是为了使 OpenFlow 控制器无法干扰它们并可能中断与其交换机的连接。可以使用 ovs-appctl "bridge/dump-flows" 命令查看所有流,包括带内流。

(...)

以下规则(使用 OFPP_NORMAL 操作)在具有任何遥控器的任何网桥上设置:

(a) 从本地端口发送的 DHCP 请求。

(b) ARP 回复本地端口的 MAC 地址。

(c) 来自本地端口 MAC 地址的 ARP 请求。

带内还为远程 IP 的每个唯一下一跳 MAC 地址设置以下规则(“下一跳”是远程本身,如果它在本地子网上,或者是到达远程的网关) :

(d) ARP 回复下一跳的 MAC 地址。

(e) 来自下一跳 MAC 地址的 ARP 请求。

带内还为每个唯一的远程 IP 地址设置以下规则:

(f) 包含远程 IP 地址作为目标的 ARP 回复。

(g) 包含远程 IP 地址作为源的 ARP 请求。

带内还为每个唯一的远程(IP、端口)对设置以下规则:

(h) 到远程 IP 和端口的 TCP 流量。

(i) 来自远程 IP 和端口的 TCP 流量。

这些规则的目标是尽可能窄,以允许交换机加入网络并能够与远程通信。如前所述,这些规则的优先级高于控制器的规则,因此如果它们过于宽泛,可能会阻止控制器实施其策略。因此,带内主动监控流和数据包处理的某些方面,以便使规则更加精确。

带内控制监视器尝试将可能干扰其职责的流量添加到数据路径中。数据路径只允许精确匹配条目,因此带内控制能够非常精确地了解它所阻止的流。数据路径中未命中的流被发送到用户空间进行处理,因此防止这些流被缓存在“快速路径”中不会影响正确性。当前被阻止的唯一类型的流是阻止本地端口看到 DHCP 回复的流。例如,不允许将所有 DHCP 流量转发到控制器的规则,但转发到所有端口(包括本地端口)的规则会。

该文档还包含有关特殊情况和潜在问题的更多信息,但很长,因此我将在此处省略。

于 2015-05-19T08:41:05.280 回答