打开vSwitch,带内控制:它是如何工作的?

时间:2015-05-01 11:07:54

标签: linux networking openflow openvswitch sdn

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

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

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

拓扑包含5个逐个连接的开关(如本文第一张图片所示)。

控制器在 h3 主机上启动。在我的情况下,使用POX控制器。所有人都可以打电话。

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

只看OVS documentation! OpenVSwitch设计文档有一节详细描述了这一点:

Open vSwitch中的设计决策:

实施小节说:

  

Open vSwitch将带内控制实现为"隐藏"流动,即   通过OpenFlow不可见的流,并且具有更高的优先级   可以通过OpenFlow设置通配流。这是这样做的   OpenFlow控制器不能干扰它们   打破与其交换机的连接。可以看到所有流量,   包括带内的,与ovs-appctl"桥/转储流"   命令。

     

(...)

     

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

     

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

     

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

     

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

     

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

     

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

     

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

     

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

     

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

     

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

     

带内还为每个唯一的遥控器设置以下规则   (IP,端口)对:

     

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

     

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

     

这些规则的目标是尽可能地缩小以允许a   切换到加入网络并能够与远程通信。   如前所述,这些规则的优先级高于   控制器的规则,所以如果它们太宽泛,它们可能会阻止   控制器实施其政策。因此,带内积极   监视流和数据包处理的某些方面,以便规则   可以更精确。

     

带内控制监视器尝试将流添加到数据路径中   可能会干扰其职责。数据路径只允许完全匹配   条目,因此带内控制能够非常准确地说明流量   它阻止了。数据路径中丢失的流将发送到用户空间   处理,以防止这些流程快速缓存在"   路径"不影响正确性。唯一的流动类型   目前阻止的是阻止DHCP回复的一个   在当地港口看到。例如,转发所有DHCP的规则   不允许流向控制器的流量,而是转发的流量   到所有端口(包括本地端口)都会。

该文件还包含有关特殊情况和潜在问题的更多信息,但是很长,所以我在这里省略它。