为什么我的 OpenFlow 匹配与第一个数据包不匹配?

Why do my OpenFlow matches not match the first packet?

我正在使用 Ryu simple_switch_13.py(稍作修改)和 Mininet 来模拟软件定义网络。

例如,如果我 ping:

h1 ping h2

流匹配已创建,但第一个数据包未注册在流的数据包计数中。

这在 Openflow 中正常吗? switch/controller 是否必须首先接收不匹配的数据包,创建匹配项,然后再匹配任何其他数据包?

OpenFlow 的正常行为是接收流的第一个数据包,然后使用默认流条目将其发送到控制器,该条目主要如下所示(取决于控制器类型):

cookie=0x0, duration=10.97s, table=0, n_packets=0, n_bytes=0, priority=0, action=CONTROLLER:65535

当第一个数据包到来时,它会被交换机发送到控制器,然后控制器决定流条目并通过OpenFlow消息将其发送到交换机(flowAdd).第一个数据包不会与创建的流规则匹配。

这是一个简单的示例,希望对您有用。