我正在研究 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 协议。
在此先感谢您的帮助。