1

我正在研究 SDN 并使用不同的控制器(Floodlight 1.1、OpenDaylight Lithium-SR2)。我有 2 个可以通过专用网络进行通信的虚拟机。在第一个 VM 中有 SDN 控制器,而在第二个 VM 中,我可以通过 Python 脚本使用 Mininet 设置网络拓扑。

我的目标是找出控制器的行为:给定一个具有 5 个交换机(带环路)且只有 2 个主机的拓扑,在“ping”命令之后,控制器为主机之间的路径选择哪个交换机?

Mininet 中的“ping”命令意味着 ARP 流量(发现主机的 MAC 地址)和 ICMP 回显请求/回复。在 ARP_REPLY 之后,我们看到来自连接到应答主机的交换机的 PACKET_IN,并且控制器根据 OpenFlow 1.0 协议向它为路径选择的所有交换机发送 FLOW_MOD 消息。以这个序列图为例。

我使用“tcpdump”工具捕获流量并使用 Wireshark 进行研究。

使用 Floodlight,我可以看到 FLOW_MOD 消息,其中包括“src”和“dst”MAC 地址(用于创建路径),但不使用 OpenDaylight(有 FLOW_MOD 消息,但仅在 ARP 流量之前且仅使用广播“src”和“dst” " MAC 地址)。

我想了解为什么在 ARP 回复之后(而不是之前),我无法看到具有正确 MAC 地址“src”和“dst”的 FLOW_MOD 消息。我不知道它是否取决于控制器的代码或 OpenFlow 协议。

在此先感谢您的帮助。

4

1 回答 1

1

我发现了问题:ODL 默认在主动模式下工作,因此在 ARP 流量之后我无法看到带有附加 MAC 地址的 Flow_Mod 消息。我将 ODL 设置为Reactive模式,修改了位于[ODL-folder]/etc/opendaylight/karaf/Controller 文件夹目录中的一些配置文件:

  • 54-arphandler.xml:默认情况下,该属性<is-proactive-flood-mode> 设置为 true,因此 ODL 在 Proactive 模式下工作。如果您想要混合模式,请将该属性设置为 false 和<is-hybrid-mode>true。如果这两个属性都设置为 false ODL 在反应模式下工作。
  • 58-l2switchmain.xml:将属性设置<is-install-dropall-flow>为 false。以这种方式,交换机将不匹配(在交换机流表中)的数据包发送到控制器而不会丢弃。

现在我可以看到带有附加 MAC 地址的 Flow_Mod 消息,并检查 ODL 选择了哪个交换机来构建主机之间的路径。

于 2015-12-21T09:12:44.857 回答